diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e450ff2..2fd818d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -4,7 +4,7 @@ on: push: branches: [main, dev] pull_request: - branches: [main] + branches: [main, dev] jobs: test: @@ -36,3 +36,8 @@ jobs: - name: Unit tests run: | python -m pytest tests/ -v --tb=short + + - name: Demo driver tests + run: | + # The translation demo's model driver; the kernel suite above stays task-neutral. + python -m pytest demos/translation/tests/test_model_enzh_50m_sft.py -v --tb=short diff --git a/.github/workflows/python-app.yml b/.github/workflows/python-app.yml index 6272e59..d2cc6cc 100644 --- a/.github/workflows/python-app.yml +++ b/.github/workflows/python-app.yml @@ -27,7 +27,7 @@ jobs: run: | python -m pip install --upgrade pip pip install torch==2.10.0 --index-url https://download.pytorch.org/whl/cpu - pip install -c .github/ci-constraints.txt flake8 pytest psutil -r requirements.txt + pip install -c .github/ci-constraints.txt flake8 pytest psutil fastapi uvicorn httpx -r requirements.txt - name: Lint with flake8 run: | # stop the build if there are Python syntax errors or undefined names diff --git a/CHANGELOG.md b/CHANGELOG.md index 44eed6f..2de8620 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,391 @@ # Changelog +## [0.3.3] — 2026-11-14 (stable) + +Stable release. No kernel code changes beyond 0.3.3a1; this release bumps the version string and ships the final documentation set. + +### Added +- Integrated kernel documentation. `docs/KERNEL_ARCHITECTURE.md` is the new top-level walk-through of the forward stack, block interior, cluster-locality objective, expert-residency mechanism, recurrence and self-speculative decoding. Four code-generated architecture figures under `docs/assets/arch/` carry the schematics, with a reproducible generator (`docs/assets/arch/make_arch.py`) and symbol table (`architecture_config.json`). +- Per-component chapters: `MOE_ROUTING.md`, `CLUSTER_LOCALITY.md`, `RESIDENCY.md`, `LAZY_EXPERTS.md`, `LOOKAHEAD.md`, `LOOP_DEPTH.md`, `LONG_CONTEXT.md`, `SPEC_DECODE.md`, with source-code line refs, mermaid mechanism diagrams and measured numbers traced to recorded JSONs under `experiments/figures/source_data/`. +- Data figures. 18 redesigned matplotlib panels replace the earlier exports under `docs/assets/`; each panel has a `_outlined.svg` with text converted to paths. Generator and snapshotted source data live under `experiments/figures/` with a `verify_values.py` numeric audit (87 checks, 880 numeric entries; exact except for a 1e-12 tolerance on the sigmoid inverse). +- Evidence ledger (`docs/REPRODUCIBILITY.md`) and symbol table (`docs/SYMBOLS.md`); a Chinese reading guide (`docs/READING_GUIDE_ZH.md`). + +### Changed +- `docs/README.md` rewritten with a reading-route diagram, a kernel-interior gallery, and an at-a-glance measured-evidence row. +- `docs/OVERVIEW.md` and `docs/THEORY.md` redirect legacy `RECURRENCE.md`/`ROADMAP.md` references into the new kernel and loop-depth chapters. +- `docs/KERNEL_ARCHITECTURE.md` corrects the block-order vs layer-order claim: the sign depends on the per-group step-size schedule (sigmoid `dt` → block-order wins by 0.03 nats; clamp `dt = 1` → layer-order wins by 0.29 nats on the 15 M depth-4 arms). + +### Fixed +- Documentation cross-reference graph. Every `.md` link resolves, every asset path exists, every source-code line reference points at a real file in the tree. + +### Not changed +- Kernel code, trainer, planner, auto-tune, Web UI, serving adapter. Existing configs and checkpoints behave as in 0.3.3a1. + +## [0.3.3a1] — 2026-11-12 (beta) + +This release closes three gaps in 0.3.3a0. Every loop knob now has a planner recommendation and an auto-tune switch. The auto-tune probe now scores what it was meant to score. The en-zh model folder has left the repository root. Kernel defaults are unchanged, so existing configs and checkpoints behave as in 0.3.3a0. + +### Added +- Planner: a looped plan (`recurrent_depth > 1`) now also sets six more loop knobs. Each comes with a `sources` entry that states the measurement behind it (15M parameters, one seed per arm). The Web UI shows these values as planner recommendations, and `ui/presets_v3.json` gains the four keys whose value differs from the base defaults. + - `recurrent_later_topk=0`: routing later iterations to 1 expert raised validation CE from 4.543 to 4.600 at the same speed (71.6k against 71.5k tokens/s). + - `recurrent_later_groups=0`: the full block has the lowest loss per step. Running 2 of 4 layers in later iterations gives about 1.3x more steps per second at depth 4. It costs up to 0.012 more training loss per step with dt fixed at 1.0 and 0.013-0.055 with the sigmoid step size. 1 is never recommended, because one layer looping alone is no longer a block loop. + - `lambda_iteration_cluster=0`: with cluster locality on, 99.5-100% of the clusters that later iterations use are already used at iteration 0. + - `lookahead_teacher_scope="first"`: the lookahead head already picks the right cluster for 0.97 of tokens at every iteration. + - `recurrent_dt_min=0.05` and `recurrent_dt_max=1.0`: the sigmoid arms used the ranges 0.05-1 (depth 4) and 0.1-1 (depth 8), and their learned dt stayed between 0.14 and 0.30, inside the range. +- Auto-tune can now search every loop knob. The list adds `recurrent_dt_param`, `recurrent_dt_min`, `recurrent_dt_max`, `recurrent_later_topk` (0 or 1), `recurrent_later_groups` (0 or 2), `lambda_iteration_cluster` (0, 0.1, 0.3 or 1.0) and `lookahead_teacher_scope`. They join `recurrent_order` and `recurrent_dt_init`. + - Searching any of them makes the probe a looped model with 4 block layers, one prelude layer and one coda layer. The 0.3.3a0 probe had 2 block layers, so `recurrent_later_groups=2` would have meant the full block. + - `recurrent_later_groups` is drawn only in block order, and 1 is not offered. + - If a drawn `recurrent_dt_init` falls outside the drawn `[dt_min, dt_max]`, the trial starts at the nearest bound. + - Each trial logs its median step time and stores it as the Optuna user attribute `step_time_s`. `recurrent_later_topk` and `recurrent_later_groups` save time, not loss, so a cross-entropy score alone favours "off". +- Help text for these knobs and for the auto-tune search list now gives the measured reason and the recommended value, in English, 简体中文, 繁體中文 and 日本語. + +### Fixed +- Auto-tune score. The probe trained on and scored `CE + lambda_balance * L_balance + lambda_temporal * L_temporal`, so a smaller weight lowered a trial's score by itself. The probe now trains on the trainers' objective (`chronos_loss_term`, every weighted term of the config) and scores cross-entropy only. +- Auto-tune `lambda_lookahead` had no effect. The probe never passed it to the model config or to the loss, and it never trained the lookahead head, so `lookahead_steps` changed the model without supervising it. With the 0.3.3a0 probe, `lambda_lookahead` 1e-3 and 1.0 gave identical per-step scores; with this release the scores differ after the first update. The lookahead, iteration-cluster and recurrent terms of the config now act in the probe as they do in training. +- Web UI schema payload. `Field.as_dict` dropped every value equal to `False`, and in Python `0 == False`. So `min=0` of 48 fields, and `recommended=0` of `max_steps` and `cluster_locality_clusters`, never reached the page. Those number inputs had no lower bound, and their tooltips showed the minimum as "−∞". The payload now drops only unset values. + +### Changed +- The en-zh model folder moved from `models/chronos-enzh-50m-sft` to `demos/translation/models/chronos-enzh-50m-sft`, and its driver test moved from `tests/` to `demos/translation/tests/`. CI runs that test in its own step after the kernel suite, and the repository root no longer holds a task-specific model. The driver finds its files relative to itself, so commands run inside the folder are unchanged, and the weights stay on the release `enzh-50m-sft-v1`. `MANIFEST.in` no longer prunes `models/`. +- The main READMEs now describe the speculative-decoding, native-kernel parity and MLX compile measurements as taken on the 50M demo checkpoint. They link to a new section of `demos/translation/README.md` and `README_zh.md` that states the exact conditions (FLORES+ dev en→zh prompts, en→zh shards); the numbers are unchanged. Each main README names the translation demo in one pointer paragraph only. `tests/test_ui_generic.py::test_task_models_and_tests_live_under_demos` checks this rule and the folder layout. +- The preset label "Chronos-v3 50M (16k vocab)" stays. It names the preset's explicit 16,384-token vocabulary and no task. + +### Verified +- End to end through the Web UI endpoint, with an in-process client and no open port: a 4-trial study of 10 probe steps each searched all nine loop knobs plus `lambda_lookahead`. It trained on 19,090 real dataset tokens with the bundled 32k tokenizer, completed every trial, logged each trial's cross-entropy and median step time, and returned a best-config patch with every searched knob. + +### Tests +- New `tests/test_loop_knobs_wiring.py` (10 items). It checks that every loop knob is searchable and reaches the probe model, and that `recurrent_later_groups` never offers 1 and is drawn only in block order. It checks that `lambda_lookahead` 1e-3 and 1.0 give the same score at step 0 and different scores after the first update. It also covers the best-config patch, the Web UI search list with help in four languages, planner recommendations with a source at depths 2, 4 and 8, a depth-1 plan with no loop knob, and a schema payload that keeps 0. +- New `tests/test_ui_generic.py::test_task_models_and_tests_live_under_demos`: `models/` and `tests/` hold no task-specific names, and each main README names the en-zh demo in one line, which points to `demos/translation`. +- `tests/test_autotune_loop.py`: `recurrent_later_groups` is now expected in the search list. +- `demos/translation/tests/test_model_enzh_50m_sft.py` (15 items, moved from `tests/`) passes from its new folder; CI runs it as the step "Demo driver tests". +- Full suite on macOS (Apple silicon, Python 3.11, MLX on CPU): 728 passed, 4 skipped. `ruff check .` passes on the whole tree. +- A local wheel and sdist build both carry the `general_32k` tokenizer and no file from `demos/`, no model folder and no weights. + +## [0.3.3a0] — 2026-11-12 (beta) + +### Added +- `recurrent_order` (`"layer"` default, `"block"`): the order in which the recurrent layers repeat. `layer` runs each recurrent layer `recurrent_depth` times in a row (A A B B); `block` runs the whole group of recurrent layers and then repeats it (A B A B), so iteration 0 is an ordinary depth-1 forward pass and later iterations refine it. In `block` order there is one state trajectory and one halting head per block iteration (the `halting_probs` and `depth_used` group axis has length 1); every physical layer keeps its own `dt`, loop and group embeddings and its own KV slot. The default path is bit-identical to 0.3.2a3 (Torch and MLX logits compared on four attention modes, max difference 0). Available in the Torch and MLX models, the web UI (four languages) and `MODEL_FIELDS`. A `block` checkpoint is not interchangeable with a `layer` checkpoint. +- `recurrent_later_topk` (int, default 0 = off): loop iterations after the first route each token to this many experts (capped at `num_experts_per_tok`); the shared expert still runs. With `router_scope="shared"` the kept experts are the best-scoring ones of the first dispatch, so no new expert page is touched. The count is an explicit argument of the MoE, block and recompute calls in Torch and MLX, so activation recomputation replays it. The default path is bit-identical (max difference 0 on both backends, four attention modes). +- `recurrent_later_groups` (int, default 0 = all): in `block` order, loop iterations after the first run only the first N layers of the block. Cost in this kernel scales with the number of layer calls, so this removes calls and the expert pages those layers would load. Iteration 0 still runs every layer and writes every KV slot. It needs `recurrent_attention_mode` `shared_first` or `first_only`, because a skipped layer has no per-iteration KV slot, and the config raises a `ValueError` otherwise. The default path is bit-identical. +- `lambda_iteration_cluster` (float, default 0) and `lookahead_teacher_scope` (`"first"` default, `"iterations"`): the first adds a total-variation penalty between a token's per-iteration cluster-mass distribution and its mean over iterations, so the loop layers keep a token in one expert cluster across depth without locking experts. The second makes the lookahead router's teacher the router probabilities averaged over the layer's iterations. Both exist in Torch and MLX; the MLX loss is checked against the Torch loss and against `mx.compile`. +- `tools/bench_residency.py --paging expert|cluster|auto` (default `expert`, the historical layout) and `tools/bench_speculative.py` `mlx_runner(..., paging=...)`: the lazy cache can be paged by training cluster, as production serving does for checkpoints trained with `lambda_cluster_locality > 0`. Each row now also records `cluster_experts_loaded`, `cluster_aware`, `num_clusters`, `warmup_cluster_loads` and `prefill_cluster_loads`, and the summary `decode_cluster_loads`. +- `recurrent_dt_param` (`"clamp"` default, `"sigmoid"`): how the learned loop step size is stored. `clamp` keeps `dt = clamp(w, dt_min, dt_max)`, whose gradient is zero once `w` leaves the interval. `sigmoid` uses `dt = dt_min + (dt_max - dt_min) * sigmoid(w)`, whose gradient is positive everywhere, so a step size that has become small can still grow. The stored logit is initialised so that step 0 gives exactly `recurrent_dt_init` (clamp and sigmoid logits agree to 1.1e-6 at init; Torch and MLX agree to 1.3e-6). The default path is unchanged. +- `chronos.model.recurrent.recommended_dt_init(depth, horizon=2.0, cap=0.5)` returns `min(cap, horizon / depth)`: 0.5 at depth 4, 0.333 at depth 6, 0.25 at depth 8. One loop iteration is an explicit Euler step `x <- x + dt * f(x)`, so `depth` iterations integrate over the horizon `T = depth * dt`; the rule holds `T` fixed and lets depth refine the integration. It is a starting value for `recurrent_dt_init`, not a fitted optimum (see Physical mechanism and Measured). An earlier draft used `0.5 * (4 / depth) ** 3`; the depth-8 run below refuted it and it was removed before release. +- `recurrent_dt_param`, `recurrent_dt_init`, `recurrent_dt_min` and `recurrent_dt_max` appear in the Web UI recurrent section with labels and help in four languages. The planner recommends block order, `sigmoid` and the horizon-based `recurrent_dt_init` whenever `recurrent_depth > 1` (config, `sources` report entries, and the schema's recommended value). +- Auto-tune: `tune_recurrent_order` and `tune_recurrent_dt_init` join the search space (Web UI "Search over" list, `ChronosSearchSpaceConfig`, best-config patch). When either is searched the probe model runs `probe_recurrent_depth` iterations (the Web UI passes the configured `recurrent_depth`, clamped to 2-8) with one prelude and one coda layer. `recurrent_later_groups` is deliberately not searched: it trades quality for cost, so a loss-only search would always choose the full block. The probe loss comes from a few steps and cannot resolve differences as small as dt 0.2-0.5 at depth 4; treat the two loop knobs as a coarse screen. +- Auto-tune probe data: `chronos/tuning/probe_data.py` encodes a bounded sample of the user's dataset (at most 400k tokens and 20k records) with the configured tokenizer and trains the probe on it. The probe used to train on random token ids, so no hyperparameter could change its loss in a way that carries over to real data. It falls back to random ids, with a log line, when no text can be read or the checkpoint's vocabulary is smaller than the tokenizer's. On Apple silicon the probe now picks a torch device itself when the training backend is `mlx`, which is not a torch device. +- `chronos/assets/tokenizers/general_32k` (32,768 tokens, 1.9 MB) ships in the wheel, with `chronos.deps.get_general_tokenizer_path()` and `GENERAL_TOKENIZER_VOCAB`. It is the vocabulary built for the pretraining mix, with its control tokens relabelled to the kernel's task-neutral layout (`<|endoftext|>`, `<|im_start|>`, `<|im_end|>`, `<|pad|>`, then reserved ids 4-63); ordinary tokens, merges and ids are unchanged (1,004 of 1,004 test texts encode to the same ids as with the original tokenizer, on the native and on the Hugging Face tokenizer). Because the fingerprint hashes the special tokens, relabelling changed it from `169668b1…` to `6d4b3b52…`; the old value is recorded under `derived_from`, so a checkpoint trained with the original relabel-free tokenizer reports a different fingerprint than this asset. It carries no task tokens. `NOTICE` lists the corpus licences: FineWeb-Edu and Cosmopedia v2 (ODC-By), Wikipedia (CC-BY-SA 3.0 and GFDL), and Fineweb-Edu-Chinese V2.1, whose commercial use needs the owner's permission. +- Planner default vocabulary: a new plan whose request and dataset profile name no vocabulary now uses 32,768 and writes `tokenizer_path` pointing at the bundled tokenizer, with `sources` entries (it was 16,384 with no path). An explicit `vocab_size` keeps the user's choice and adds no path. `get_tokenizer_path()` still returns the legacy 6,400 tokenizer, so checkpoints that never recorded a tokenizer are not changed. +- Web UI: `recurrent_later_topk` and `recurrent_later_groups` appear in the recurrent section, `lambda_iteration_cluster` and `lookahead_teacher_scope` in the objectives section, each with labels and help in English, 简体中文, 繁體中文 and 日本語. + +### Fixed +- MLX trainer: a recurrent step size (`recurrent_dt_*`) that sat exactly on `recurrent_dt_min` or `recurrent_dt_max` received no gradient, because `mx.clip` has gradient 0 on its bounds while the Torch trainer's `clamp` gives 1. A run with `recurrent_dt_init` equal to a bound therefore kept its step sizes frozen on MLX only (a 30-minute arm with init 1.0 = max ended with raw step sizes exactly 1.0). `RecurrentControllerMLX.contract` now returns the same value with the Torch gradient on the bounds. Values strictly inside the interval, and the forward pass, are unchanged, so default configs train as before; values strictly outside the interval still get no gradient on either backend. +- MLX trainer: with `recurrent_depth_jitter > 0` and gradient accumulation, each micro-batch drew its own loop depth, so one optimizer step mixed graphs of different depth and the router statistics accumulated across micro-batches failed with a shape error (`broadcast_shapes (14,24) and (10,24)`). The depth is now drawn once per optimizer step and shared by all its micro-batches, in eager and compiled steps. Runs without jitter are unchanged. + +### Changed +- `tools/bench_residency.py` `cluster_loads` no longer includes the page reads of the store reset's warm-up (they are reported separately as `warmup_cluster_loads`); earlier reports included them, because the store's counters are cleared before the warm-up. Every mode starts from the same cold warm-up, so absolute counts drop by that constant per (prompt, mode). +- The kernel is now task-neutral in code and text. `chronos/cli.py`, `chronos/mlx/training/longrun.py`, `chronos/mlx/training/compiled.py`, `chronos/tokenizer/extract.py`, `chronos/data/chat_records.py` and the examples in `ui/i18n.py` no longer name a translation task, and the tokenizer asset's provenance metadata no longer names task tokens. `tests/test_ui_generic.py::test_kernel_has_no_translation_task_code` walks `chronos/` and `ui/` and fails on any task-specific term. The en-zh translation work stays in `demos/translation` (`chronos-translate`), which imports the kernel; its status, released-model and bundle sections moved verbatim from `README.md` and `README_zh.md` into `demos/translation/README.md` and `demos/translation/README_zh.md`. The main READMEs keep one pointer sentence and still quote en-zh numbers where they are the measurement context (speculative decoding, the 0.3.2 native-kernel benchmarks, the 50M preset row); those are measurements on one checkpoint, not defaults. `models/chronos-enzh-50m-sft` stays in the repository as the demo's model. +- Planner and Web UI recommendations for a looped model changed (`recurrent_order="block"`, `recurrent_dt_param="sigmoid"`, `recurrent_dt_init = min(0.5, 2 / depth)`), and `ui/presets_v3.json` was regenerated: all five tiers gain those three keys and nothing else changed. The kernel defaults did not change (`recurrent_order="layer"`, `recurrent_dt_param="clamp"`, `recurrent_dt_init=0.25`), so a config that does not set them, and every existing checkpoint, behaves as in 0.3.2a3. + +### Physical mechanism +A shared block applied again and again to the residual stream acts as one operator, so each iteration adds a vector that points along nearly the same direction as the one before. The contributions add constructively instead of as independent, orthogonal increments. Measured on the trained checkpoints, the cosine between the outputs of consecutive block calls rises with iteration, for example from 0.92 to 0.985 (depth 8, dt 0.25) and from 0.98 to 0.996 (depth 8, dt 0.5); independent layers would give a cosine near 0. +- One iteration is `h <- h + dt * (block(h + e_loop) - h)`. Near the dominant direction the block update is about `lambda_eff * h`, so each iteration multiplies the residual norm by `g = 1 + dt * lambda_eff`. `lambda_eff` is learned, not set: the optimiser rescales the block's output when `dt` changes. Across step sizes of 0.146 (learned by a sigmoid arm), 0.25 and 0.5 (both fixed) at depth 8, `g` stayed between 1.067 and 1.075 while `lambda_eff = (g - 1) / dt` fell from 0.48 to 0.30 to 0.13. +- The `R - 1` iterations after iteration 0 each apply the gain, so depth `R` raises it to the power `R - 1`: total amplification `g^(R-1)`, total log-gain `(R - 1) * ln g`. In every arm whose step size could stay large that total was 0.36-0.51 (1.4-1.7x) at depth 4 and at depth 8 (depth 4: 0.36-0.44; depth 8: 0.38-0.51). Arms whose step size collapsed onto its floor or stayed tiny had a lower total (0.09-0.24); at equal step they were worse than the best arm of their depth, but not always worse than every arm with a larger total (see the limits below). +- `dt` alone is therefore not the physical quantity; `kappa = dt * lambda_eff` and the total log-gain are. This is why the loss is flat for `dt` between about 0.2 and 0.5 at depth 4, and why the horizon `T = depth * dt` (the length of the Euler integration of `dh/dtau = block(h) - h`) is a better handle than `dt`: more depth at fixed `T` refines the integration without raising the total gain. +- Limits of the claim: the total gain is not a loss predictor (the depth-8 arm with a collapsed step size, total 1.27x, beat the fixed-0.5 arm, 1.57x, at equal step by 0.02-0.05), the measurements are one seed per arm at 15M parameters, and `T = 2` is a safe starting point inside a flat region, not a fitted optimum: the sigmoid arm that started at `T = 2` settled at `T = 1.16`. + +### Measured +15M-parameter config, recurrent depth 4, 24 experts with top-2, one Mac, 30 minutes per arm (about 1,850-1,960 steps), one seed per arm unless stated, same data order in every arm. Paired differences are training loss in 10-step windows; a repeat of the same block-order arm differs from the first by +0.002 to +0.008, so differences below about 0.01 are not separable from run-to-run noise. +- Block against layer order at the default step size (init 0.25, clip [0.05, 1]): block order has the lower paired loss by 0.025-0.075 in every block of steps after step 100, at equal speed (about 71.5k tokens/s). Validation CE at 30 minutes: 4.543 (block, 1,960 steps) against 4.586 (layer, 1,855 steps). +- The default step sizes collapse: the learned values end at 0.045-0.09 against a floor of 0.05, and the gradient below the floor is exactly zero on both backends, so a collapsed step size never recovers. Fixing every step size at 1.0 raises the paired loss of block order by 0.050 in steps 10-100, then lowers it by 0.022, 0.025, 0.101, 0.072 and 0.026 in the blocks 100-300, 300-600, 600-1,000, 1,000-1,500 and 1,500-1,960 (largest at steps 600-1,000). Validation CE at 30 minutes is slightly higher, 4.559 at 1,850 steps against 4.543 at 1,960, because the fixed-step arm completed fewer steps. +- With step sizes fixed at 1.0, layer order has the lower loss after about step 600 (block minus layer +0.015 to +0.034) and block order only learns faster during the first 600 steps. The advantage of block order therefore holds at the default, collapsing step size only; the default is not changed in this release. +- Depth 8 does not follow the depth-4 result. With step sizes fixed at 1.0, block order at depth 8 (1,255 steps in 30 minutes, 1.43 s per step, final validation CE 4.821) has a higher paired loss than the default-step-size depth-8 arm in every one of 82 windows (+0.199, +0.075, +0.039 and +0.077 in steps 10-100, 100-300, 300-600 and 600-1,000), and its gradient norm is 1.4-1.8 times higher (mean 1.27 in the first 100 steps, so the 1.0 clip was active there). Against fixed-step depth 4 it has no equal-step gain (validation CE 5.328 against 5.295 at step 800, 4.794 against 4.773 at step 1,250) at 1.5 times the time per step. The default step-size rule is therefore left as it is. +- Truncating the fixed-step depth-8 model to 1 to 8 iterations gives validation CE 5.615, 5.201, 4.995, 4.884, 4.823, 4.794, 4.779 and 4.773, so iterations 5 to 8 add 0.11 nats. +- Cost of the loop: a depth-4 step takes 0.945-0.976 s against 0.569 s at depth 1 (1.7x), for roughly 5-13% fewer steps to reach the same validation CE, so the loop loses on wall time at this size. Cost follows the number of layer calls, not the number of experts or tokens. +- Where the gain sits (validation CE with the loop truncated to 1, 2, 3, 4 iterations): 4.977, 4.637, 4.527, 4.506. The top-1 token equals the full-depth top-1 for 52%, 71%, 86% and 100% of tokens. The fourth iteration is worth about 0.02 nats. +- `recurrent_later_groups=2` (block order, step sizes fixed at 1.0, 2 of the 4 block layers in iterations 2-4): 2,450 steps in 30 minutes against 1,850 for the full block (0.748 against 1.001 s per step, 89.2k against 68.4k tokens/s, peak memory 6.57 against 7.43 GB) and a final validation CE of 4.456 against 4.559. At equal step the paired loss differs from the full block by -0.005, +0.007, -0.019, +0.001, +0.005 and +0.012 across the six blocks of steps, so the saving costs at most about 0.01 per step (the noise floor is 0.005-0.008). One seed. A depth-1 model trained for the same 30 minutes still reaches 4.379 in 3,170 steps, so the loop does not yet pay for itself in wall time at this size. Truncated to 1, 2, 3 and 4 iterations this model gives validation CE 4.624, 4.494, 4.439 and 4.418, against 4.987, 4.659, 4.542 and 4.514 for the full block: its first iteration is much better and the loop adds 0.206 nats in total. +- `recurrent_later_groups=2` at depth 8 (step sizes fixed at 1.0): 1,825 steps in 30 minutes against 1,255 for the full block (1.004 against 1.458 s per step) and a final validation CE of 4.586 against 4.821. At equal step the paired loss is higher by 0.007, 0.029, 0.029 and 0.022 after step 100, and validation CE at step 1,250 is 4.809 against 4.794, so skipping half the layers in seven later iterations costs about 0.02-0.03 per step, more than at depth 4. Depth 4 with the same setting is better at every point (validation CE 4.775 against 4.809 at step 1,250, 4.456 against 4.586 at 30 minutes). +- `recurrent_later_topk=1` raised validation CE from 4.543 to 4.600 and was no faster (71.6k against 71.5k tokens/s): at this width fewer routed experts saves no time. +- Cluster level: with `lambda_cluster_locality=0.3` a token touches 1.003-1.024 of the 6 expert clusters in the first iteration, and 99.5-100% of the clusters touched in the later three iterations were already touched in the first. `lambda_iteration_cluster` therefore has almost nothing to act on; with step sizes fixed at 1.0 its arm had paired loss lower by 0.007, 0.000, 0.005, 0.024, 0.018 and 0.008 across the six blocks of steps (one seed; all but the 600-1,500 blocks are within the noise floor), and the top-2 overlap with the first iteration differed by at most 0.011. +- Lookahead head: its next-token prediction recovers the top-2 experts of loop iterations 1-4 with recall 0.68-0.78 (top-2 slots) and 0.97-0.98 (top-4 slots), and picks the right cluster for 0.97 of tokens at every iteration, the same as repeating the previous token's cluster. An iteration-aware head was not built. +- Step size at depth 4 (block order, fixed step size, one seed per arm): fixing `dt = 0.5` against `dt = 1.0` lowers the paired loss by 0.052, 0.016, 0.032, 0.066, 0.047 and 0.026 across the six blocks of steps (every window lower in every block), and validation CE is 4.505 at 1,975 steps against 4.559 at 1,850. A sigmoid arm started at 0.5 (range 0.05-1) moved to 0.182-0.203 in all four layers with no change in loss: its paired difference from the fixed-0.5 arm is +0.002, -0.003, -0.002, +0.007, +0.001 and -0.002, inside the noise floor. At depth 4 the loss is therefore flat for `dt` between about 0.2 and 0.5, and worse at 1.0 or at a `dt` stuck at 0.05. +- Block against layer order with a healthy step size (both arms sigmoid, init 0.5, range 0.05-1): block order has the lower paired loss in every window block, by 0.051, 0.093, 0.081, 0.053, 0.039 and 0.027 (layer minus block; 0 of 20, 0 of 30, 0 of 40, 0 of 50 and 0 of 27 windows lower for layer order after step 100). Validation CE at 30 minutes is 4.542 for block (1,830 steps) and 4.572 for layer (1,775 steps). This supersedes the reading above that block order is only better at a collapsing step size: with step sizes fixed at 1.0 layer order wins late, with a trainable step size block order wins in every block of steps measured (in steps 10-100, 7 of 9 windows). +- Depth 8 with a fixed integration horizon (block order, one seed per arm, 30 minutes, 1,185-1,265 steps, same data order): `dt = 0.25` (`T = depth * dt = 2`) has a lower paired loss than `dt = 0.5` (`T = 4`) by 0.046, 0.018, 0.031, 0.079 and 0.075 across the five blocks of steps from step 10 to the end of the run (every window lower in every block); validation CE is 4.776 at 1,215 steps against 4.794 at 1,265. Against the default clamp arm, whose step size collapsed onto the 0.05 floor, it is lower by 0.003, 0.013, 0.015 and 0.002 (about the noise floor). A sigmoid arm started at 0.25 (range 0.1-1) moved to 0.141-0.147 (`T` about 1.16), tied with the fixed arm until step 600 (+0.002 in three blocks) and then lower by 0.023 and 0.020 (58 of 61 windows), with validation CE 4.761 at 1,220 steps against 4.776 at 1,215. At equal step the depth-8 `dt = 0.25` arm is lower than the depth-4 `dt = 0.5` arm by 0.041 and 0.049 in steps 100-300 and 300-600 and level or slightly higher afterwards (+0.002 and +0.008, at the noise floor). +- The cubic depth rule `dt0 = 0.5 * (4 / depth)^3` was an earlier draft and is refuted at depth 8: a sigmoid arm started at its prediction 0.0625 and ended at 0.031-0.037, and its paired loss is higher than the fixed `dt = 0.5` arm by 0.066, 0.079, 0.122 and 0.256 after step 100, and higher than the fixed `dt = 0.25` arm by 0.085, 0.110, 0.201 and 0.333. Its total log-gain was 0.088, the lowest of any arm. The rule was replaced by `T / depth`. +- Progressive loop curriculum (`recurrent_depth` rising 1 to 4 over 1,600 steps, fixed `dt = 0.5`, depth jitter 0.01, block order): median time per step is 0.56, 0.725, 0.899 and 1.08 s at depth 1, 2, 3 and 4. At equal step it trails the fixed-depth-4 arm until the depth reaches 3-4: validation CE 5.596 against 5.215 at step 800 and 5.168 against 4.920 at step 1,000. Its early steps are cheaper, and it gives up equal-step quality until the full depth is reached; the loop's advantage is equal-token sample efficiency, not wall clock. +- `recurrent_later_groups=1` leaves three of the four block layers dormant in every later iteration, so the loop reduces to one layer applied repeatedly. With step sizes fixed at 1.0 its paired loss is higher than `recurrent_later_groups=2` by 0.062 and 0.050 in steps 100-300 and 300-600 and by 0.004, 0.004 and 0.012 afterwards, and the two arms end 0.049 apart in validation CE at 30 minutes (4.407 at 2,810 steps against 4.456 at 2,450) only because 1 layer is cheaper. Use `recurrent_later_groups` of at least 2. +- `recurrent_later_groups=2` with the default clamp step size (block order, init 0.25, clip [0.05, 1]) was much worse than with a step size that can move. Against the full-block arm with the same default step size (block order, a repeat run), it trailed by +0.007, +0.017, +0.030, +0.046, +0.200 and +0.097 across the six blocks of steps (about +0.235 in steps 1,200-1,400), at a median gradient norm of 0.54 against 0.51 after step 1,000 and the same learning rate; it had no rollbacks. The learned step sizes ended at 0.056, 0.050, 0.133 and 0.139, so the two layers that still run in later iterations scaled their updates by 0.056 and 0.050. With a sigmoid step size from 0.5 (range 0.05-1) and the same `recurrent_later_groups=2`, the paired loss is lower than the clamp arm by 0.037, 0.067, 0.150, 0.284 and 0.128 after step 100, validation CE at step 1,000 is 4.980 against 5.254, and the two later-iteration layers end at 0.185 and 0.170. The step-size collapse therefore accounts for most of the regression but not all of it. The prediction that the sigmoid arm would stay within about 0.01 of the full block was not met: it is above the full-block sigmoid arm by 0.013, 0.021, 0.022, 0.055, 0.034 and 0.019 (2 of 9, 0 of 20, 2 of 30, 0 of 40, 1 of 50 and 2 of 33 windows lower), more than the 0.01 that skipping layers cost with the step size fixed at 1.0. The two arms also differ in initial step size (0.5 against 0.25), so the effect of the parameterisation and of the initial value are not separated, and the loss gap that opens at steps 1,000-1,500 and then closes is not explained. At 30 minutes the sigmoid arm reaches validation CE 4.440 in 2,365 steps, against 4.491 in 2,460 for the clamp arm and 4.542 in 1,830 for the full-block sigmoid arm; at equal step the full block is ahead (4.928 against 4.980 at step 1,000). +- Step time of this release's kernel: the same depth-4 configuration takes a median 0.997 s per step with the clamp and 1.017 s with the sigmoid (steps 50-400, one 6-minute arm each), against 0.958 s on the development kernel that had block order and `recurrent_later_groups` but not the clip-gradient fix. The 4% and 6% are not attributed to a cause (the differences are the `where`-based clip gradient, the per-step depth draw and the sigmoid branch), and one run each cannot separate them from run-to-run noise. + +### Known limits +- Block order with lazy experts: `tests/test_recurrent_order.py::test_mlx_engine_block_order_runs_with_lazy_experts` checks that the MLX engine with a two-expert resident set generates 10 valid tokens speculatively, and the all-resident engine is checked for exact speculative decoding. Nothing compares lazy block-order output with all-resident block-order output token by token, and the residency planner, the cluster-paged store and the async prefetcher have not been benchmarked on a block-order checkpoint (`expert_store.py` and `cluster_layout.py` index pages by physical layer, which is the same page set in both orders; only the order in which layers are used differs). Treat lazy serving of a block-order checkpoint as unmeasured. +- All loop measurements are one seed per arm at 15M parameters (block-order depth 4 and 8, 24 experts, 30 minutes). They are not evidence for larger models, and the planner's block-order and `T = 2` recommendations are extrapolated to every size it plans. +- The Web UI probe for auto-tune sees a few steps of a 4-layer model; it cannot rank step sizes that differ by less than the measured noise. + +### Tests +- `tests/test_recurrent_order.py`, `tests/test_later_topk.py`, `tests/test_later_groups.py` and `tests/test_iteration_cluster.py` cover config validation, the `MODEL_FIELDS` round trip, Torch against MLX, cache decode against a full forward, exact self-speculative decoding, and gradient reach into every recurrent layer, router and the controller. `tests/test_mlx_checkpointing.py` adds block-order and graded-top-k cases to the recompute and compile matrices. +- `tests/test_dt_clip.py` compares the MLX and Torch step-size gradient at 0.4999, 0.5, 0.5001, 0.75, 0.9999, 1.0 and 1.0001; on the 0.3.2a3 kernel it fails at 0.5 and 1.0. +- `tests/test_bench_paging.py` checks that `mlx_runner(paging=...)` builds one page per expert for `expert` and the training clusters for `cluster` and `auto`. The prefill/decode split and warm-up exclusion in `tools/bench_residency.py` run inside its `main()` and need a tokenizer, so they are verified by running the tool on the benchmark checkpoints, not by a unit test. +- `tests/test_dt_sigmoid.py` covers config validation of `recurrent_dt_param`, the sigmoid logit initialisation (step 0 gives `recurrent_dt_init` at 0.05, 0.0625, 0.25, 0.5 and 1.0), the nonzero sigmoid gradient where the clamp gradient is zero, Torch against MLX at four logits, and `recommended_dt_init` (`depth * dt = 2`, the 0.5 cap at depths 1-3). `tests/test_depth_jitter.py` covers one depth draw per optimizer step under gradient accumulation, with and without `mx.compile`. +- `tests/test_general_tokenizer.py` (7 tests) checks the bundled tokenizer's files, its 32,768 vocabulary and control ids 0-63, native against Hugging Face encodings and the round trip, that the report names no local path and records `derived_from`, the planner's new default (32,768 and the bundled path, with `sources`), that an explicit vocabulary adds no path, and that the legacy default is still 6,400. +- `tests/test_autotune_loop.py` (8 tests) covers the probe's real tokens (bundled vocabulary, `None` for unreadable or tiny data, deterministic batches that advance with the step), the loop knobs being sampled only when searched, the best-config patch, a probe trial that builds a looped block-order model and draws its batches from real tokens, a probe without loop knobs staying a plain depth-1 model on random ids, and the Web UI search choices and four-language labels. `tests/test_planner_loop.py` (7 tests) covers the planner's block order, sigmoid and horizon init at depths 2, 4, 6 and 8, the plain defaults at depth 1, that the planned config builds a valid model, and that the schema's recommended values equal what the planner emits. +- Full suite on the development tree: 732 passed, 4 skipped (three browser tests need `playwright`, which is not installed here; one needs the v2 reference checkpoint, which is not in the repository). `ruff check .` is clean. + +## [0.3.2a3] — 2026-11-10 (beta) + +Fixes two kernel bugs found while benchmarking the 50M and 30M multilingual configs on the real corpus. Nothing new is switched on by default. + +### Fixed +- `cluster_locality_mode="segment"` could not be compiled. The loss found document ids with NumPy (`segment_ids`, `np.unique`) on a traced array, so `CHRONOS_MLX_COMPILE=on` raised "Attempting to eval an array during function transformations", and the default `auto` mode crashed on the next `mx.eval`. The loss now uses `segment_ids_mx(input_ids, chunk=window)`, which has a static shape (`row * S + id` addresses `B * S` segment slots and unused slots weigh 0), and runs inside the compiled step. It matches the NumPy ids on 300 random batches and the Torch loss within 1.7e-5 on 60. +- A compile trace that failed part way left tracers in the model weights, the RNG key and the router outputs, because `mx.compile` swaps them back only on success. The eager fallback then trained on them and the next `mx.eval` raised "Attempting to eval an array without a primitive". `CompiledStep` now snapshots those on a first trace and restores them on failure; the RNG is re-seeded from the saved key words, so the random stream continues exactly (checked on 2,000 random keys). + +- `run_mlx_stage` and LongRun now check every batch's token ids against the model's `vocab_size` and raise a `ValueError` that names the range. MLX does not bounds-check embedding gathers, so an id beyond the table read neighbouring memory and crashed the process at random. `tests/test_smoke.py::test_mlx_training_six_stage_loss_paths` hit this about one run in two on CPU: its GRPO stage tokenizes with the bundled 6,400-token tokenizer while the model had `vocab_size=64`. The test now uses 6400 (25 of 25 runs pass), and `tests/test_vocab_range_guard.py` covers the check. + +### Measured +- Segment mode, compiled, real corpus, 10 steps, document masking on, steady tokens/s: 50M 24,856 at ctx 2048 and 20,416 at 4096; 30M 22,454 and 16,416. The eager fallback cost 15-17%. + +### Tests +- `tests/test_segment_compile.py` (5 cases) fails on 0.3.2a2 (4 of 5) and passes here: ids equal the NumPy rule with chunking, loss equals the Torch reference eagerly and compiled, a one-segment batch gives 0, a compiled segment-mode step matches the eager gradients, and a failed trace leaves weights, RNG and side outputs usable. + +## [0.3.2a2] — 2026-11-09 (beta) + +Adds narrower recomputation, two lookahead options and web UI fields for every long-context switch, and fixes a crash found by training on the real corpus. Every new switch is off by default. `reports/long_context_20261109/real_corpus_ab.json` holds the measurements below. + +### Added +- `recompute_scope="mlp"`: with `activation_checkpointing`, recompute only the MoE/FFN of each block (`"block"` recomputes the whole block, as before). At 32k on the real corpus it saves 1.4 GB (5%) and loses 11% speed, against 6.9 GB (25%) and 19% for whole blocks, so it suits runs that need only a little more memory. +- `mla_upproj_recompute`: keep only the MLA latent and rebuild K and V per attention block. Exact, but it saved no memory (24.47 -> 24.29 GiB at 64k) and costs 6.7% speed, so it stays off. +- `lookahead_input_detach` (the lookahead router reads a gradient-free hidden state) and `temporal_grad_span` (cut the temporal-locality gradient chain every n positions). Both are exact in the forward pass. On the en-zh data they were neutral (validation CE within 1e-3), so they stay off. +- Web UI: every long-context field (`attention_block_size`, `ce_chunk_size`, `moe_chunk_tokens`, `recompute_scope`, `recompute_policy`, `mla_upproj_recompute`, `document_masking`, `reset_router_at_documents`, `reset_lookahead_at_documents`, `lookahead_input_detach`, `temporal_grad_span`) with labels and help in all four languages. + +### Fixed +- `reset_router_at_documents` and `document_masking` raised "Attempting to eval an array without a primitive" inside the compiled LongRun step, because the document ids were built with NumPy from a traced array. `chronos.expert_clusters.segment_ids_mx` builds them in MLX, and a regression test runs the option through `mx.compile`. +- `reset_lookahead_at_documents="false"` (the string the web UI sends) was read as true. Strings are now parsed; the empty string follows the router switch. + +### Measured on the real en-zh corpus (production 50M config, random init, M5 Max, bf16) +`long` = `attention_block_size=1024`, `ce_chunk_size=1024`, `moe_chunk_tokens=8192`. Validation CE differs by at most 3e-3 between arms. + +| Context | Default: tokens/s, peak | long: tokens/s, peak | +|---|---|---| +| 8k | 8.9k, 40.6 GiB | 19.5k, 7.5 GiB | +| 16k | 1.9k, 141.5 GiB (over this machine's 128 GB) | 15.2k, 13.8 GiB | +| 32k | not run | 8.8k, 27.0 GiB | +| 64k | not run | 3.7k, 54.6 GiB | + +Larger attention blocks speed up one MLA layer (0.62 s -> 0.53 s at 64k with blocks of 8192) but slow the whole model, because the sliding-window layers get slower (9.9 s -> 16.6 s per step); 1024 stays the recommendation. + +## [0.3.2a1] — 2026-11-09 (beta) + +This release lets the MLX trainer run long contexts on one Mac. Every new switch is off by default, so existing configs, checkpoints and recipes behave as before. + +### Added +- `attention_block_size`: blockwise causal attention (`chronos/mlx/blockwise_attention.py`). Each block of queries reads only the keys it can see, under `mx.checkpoint`, and a block that ends at its last visible key uses the kernel's `"causal"` mode with no mask array. Value difference 0, gradient difference ≤ 8.5e-7 against the full-mask path. +- `ce_chunk_size`: chunked cross-entropy from the final hidden state, so no `[B, S, V]` logits exist (`chronos/mlx/chunked_ce.py`). Loss difference 0, gradient relative difference ≤ 5e-6. +- `moe_chunk_tokens`: MoE sparse dispatch in token chunks, each recomputed in the backward pass, including the cache-miss simulation. +- `recompute_policy` (`all`, `mla`, `swa`, `alternate`) chooses which blocks `activation_checkpointing` recomputes, on both the MLX and the Torch side. +- `rope_train_scaling` (`yarn`, `linear`, `ntk`): training-time RoPE scaling; MLX and Torch tables agree to 2e-5. +- `document_masking` and `reset_router_at_documents`: attention and the temporal and locality losses stay inside each packed document. `reset_lookahead_at_documents` gives the lookahead terms their own switch (default: follow the router switch). +- `PhaseSpec.seq_len_curriculum` (`[[progress, seq_len], ...]`) steps the pretrain window length up during a phase, and `PhaseSpec.pack_sft` joins short SFT records into full rows separated by the document separator (`SFTRecords.packed_batch`). + +### Fixed +- The lookahead terms with several routing groups paired document ids of the wrong batch size when `reset_router_at_documents` was on. + +### Measured +Full MLX training step (hidden 512, 8 layers, 16 experts top-2, bf16, batch 1, M5 Max). "long" = `attention_block_size=1024`, `ce_chunk_size=1024`, `moe_chunk_tokens=8192`; "+recompute" adds `activation_checkpointing`. + +| Context | Default: tokens/s, extra peak | long: tokens/s, extra peak | long + recompute: tokens/s, extra peak | +|---|---|---|---| +| 2k | 20.5k, 2.96 GiB | 23.0k, 2.16 GiB | 19.4k, 1.50 GiB | +| 8k | 9.9k, 21.5 GiB | 23.3k, 5.55 GiB | 19.3k, 2.87 GiB | +| 16k | 4.3k, 76.2 GiB | 18.1k, 6.76 GiB | 15.6k, 4.76 GiB | +| 32k | not run (exceeds RAM) | 11.7k, 12.7 GiB | 9.7k, 8.3 GiB | +| 64k | not run (exceeds RAM) | 6.6k, 24.5 GiB | 5.9k, 15.4 GiB | + +A single MLA layer at 64k needs 148.6 GiB extra without blocks and 2.5 GiB with them. + +## [0.3.2a0] — 2026-11-08 (beta) + +This release replaces the minimind kernel with a native one, compiles the MLX training step, adds MLX activation recomputation, and keeps tool-call tags that a custom tokenizer registers as special tokens. README "Native kernel (0.3.2)" has the migration reasons and the measured comparison. + +### Changed +- `chronos/model/kernel.py` replaces the minimind kernel (config base, RoPE/YaRN, gated FFN, dense attention, trainer utilities). + - `import chronos` no longer clones anything or changes `sys.path`, and works offline. + - Config field names and defaults, RoPE tables and FFN parameter names are unchanged. Logits are bit-identical on `out/chronos_256_moe.pth` and the 50M en→zh checkpoint (full, padded and prefill+decode paths). + - All layers share one FP32 RoPE table per `(dim, base, scaling, device)`: 3.50 → 0.50 MiB at the 50M shape, 216 → 24 MiB at the 768H base shape. + - Resume state is written to `chronos__moe_resume.pth`; the release checkpoint keeps its dtype. +- `chronos.deps` is a shim. `get_tokenizer_path()` returns the bundled legacy 6400-token tokenizer (`CHRONOS_DEFAULT_TOKENIZER` overrides it); `ensure_minimind()` is a no-op with a deprecation warning. +- `tools/compare_minimind_chronos*.py` use minimind only as an external baseline, from `--minimind-dir` or `CHRONOS_MINIMIND_DIR`. Model bundles no longer ship `third_party/minimind`. +- `benchmark_compare.py` compares Chronos with a dense GQA baseline built from the same kernel (result key `baseline`, formerly `minimind`). +- The preset "MiniMind-MoE (default)" is now "Chronos-v2 legacy (768H, 6400 vocab)", and `MINIMIND_MOE_DEFAULTS` is now `BASE_MOE_DEFAULTS`. The old names remain as aliases. +- MLX training micro steps are compiled by default (`chronos longrun`, and `run_mlx_stage` pretrain and SFT). `CHRONOS_MLX_COMPILE=auto|on|off` or a recipe's `extra.mlx_compile` switches it. + +### Added +- `chronos.mlx.training.compiled`: one `mx.compile` graph per signature for loss and gradients. + - The recurrent depth is sampled once per step outside the trace. Depth, the ACT switch, shapes and plain config values select the graph. + - Weights and the RNG state are compile inputs and outputs, so dropout and the cache-miss simulation consume the RNG stream as in eager mode. + - Router probabilities, loss components and recurrent diagnostics are returned from the graph and written back to the modules. + - Multimodal batches, lazy experts and signatures that fail to trace run eagerly; the reason is logged once. + - Measured on real en→zh shards with the 50M config (M5 Max, bf16, shared GPU): 1.08× (SFT) and 1.18× (pretrain) per step, loss curves within 2e-3 of eager. +- `chronos.mlx.checkpointing`: MLX activation recomputation for `activation_checkpointing=true`. + - Each block call is one recomputed region. Dropout masks, the cache-miss draws and routing indices are recorded in the forward pass and replayed during recomputation. + - Region outputs are packed per dtype. mlx 0.32.4 keeps the gradient of only one copy when a checkpointed function returns the same graph node twice, and a full-length cache slice is such a copy. + - Measured peak memory: 5.62 → 3.50 GB (SFT) and 6.07 → 3.62 GB (pretrain), at 17% and 21% more time per step than the compiled step alone. It stays off by default at 50M; the planner's memory-constrained tiers enable it. +- `chronos.tokenizer.visible.decode_visible`: hides control tokens and keeps ``, ``, `` and `` as text, for HF tokenizers and `ChronosTokenizer`. Serving, the workbench and GRPO rewards use it. +- Tests: `tests/test_native_kernel.py`, `tests/test_tool_tags_special_tokens.py`, `tests/test_mlx_checkpointing.py`, and per-micro-step exactness of the compiled and recomputed steps inside the LongRun loop (`tests/test_longrun.py`). + +### Fixed +- Tool calls were lost when a custom HF tokenizer registered `` as a special token: decoding with `skip_special_tokens=True` removed the tags, so the parser saw bare JSON. +- Dense mode (`use_hybrid_attention=False`) crashed on Torch in every recurrent mode, and on MLX with an int32 overflow (a 2**63 window). It now runs dense causal GQA; prefill+decode matches the full forward within 1e-6. +- The Torch pretrain save rewrote the BF16 release checkpoint as FP16. +- Trainer log lines did not reach the Web UI. +- RoPE tables: with many torch threads, a cached table's prefix differed by one ulp from a shorter table (measured with 18 threads on torch 2.10). The tables are now built single-threaded. +- `tools/compare_minimind_chronos*.py` used `chronos.deps` without importing it. + +## [0.3.1a3] — 2026-11-08 (beta) + +This release fixes the router masks and the lazy-expert decode. It also adds a document-level cluster objective, MLX multimodal training in all six stages, tool-call SFT records and tool-call parsing in `chronos serve`, a kernel-level MLX cache limit and progress-based ETAs. + +### Added +- `cluster_locality_mode="segment"`: the cluster objective treats each document as one unit. + - Documents are found from the tokens: `<|endoftext|>` separators, and long documents are cut every `cluster_locality_window` tokens. No labels or domain tags are used. + - The loss is `1 − I(document; cluster) / log C`, pooled over real tokens and all virtual layers. + - The default stays `"window"`, the 0.3.1a2 objective. + - Torch and MLX give the same value and gradient. The option is on the Web UI config page (advanced) in four languages. +- MLX multimodal training. `chronos.mlx.multimodal` ports the image patch encoder, the audio conv encoder and the gated cross-attention fusion. + - Pre-encoded `*_embeds` inputs and the per-modality and per-token masks work as in Torch. + - Logits match Torch within 2e-4 in FP32 tests. + - MLX checkpoints save and load the fusion weights, and `freeze_modality_encoders` works on MLX. + - `run_mlx_stage` takes media in all six stages: pretrain, SFT, DPO, ORPO, GRPO and distill. + - DPO and ORPO: the chosen and rejected answers condition on the prompt's media. + - GRPO: every rollout conditions on the prompt's media. The rollout encodes the media once and reuses it at every decode step, with identical logits. The policy update re-encodes the media, so the encoders get gradients. + - Distill: the student gets the media. A text-only teacher is accepted, as on PyTorch. +- Multimodal preference and GRPO data. + - `MultimodalStreamingDPODataset` and `preference_collate` read `chosen`/`rejected` records that carry `image`, `audio` or `*_embeds` fields, the same fields SFT uses. + - `load_grpo_prompt_records` keeps each prompt's record so the media can be resolved per step. + - `record_media` is the shared resolver. + - The Web UI selects these automatically when the dataset contains media. + - The PyTorch DPO, ORPO and GRPO trainers are text-only. With media, `auto` picks MLX, and an explicit PyTorch backend raises an error instead of dropping the media. +- Tool calls in the chat template. + - `tools` render as one `` system block. + - The assistant's `tool_calls` render as `{json}` lines, and `tool` turns carry the results. + - Conversations without tools render exactly as before. +- `chronos.data.chat_records` provides `render_chat`, `encode_chat` and `write_sft_records`. + - Supervised tokens: the assistant text, its tool calls and `<|im_end|>`. + - Context tokens: system and user turns, tool definitions and tool results. + - Records are written as `.bin/.idx/.plen/.lmask`. +- `SFTRecords` reads `.lmask` (one uint8 per token). When present it replaces the `.plen` prompt rule. Older readers still use `.plen`. +- `chronos serve` supports tool calls end to end. + - It passes `tools` and the assistant's `tool_calls` from `/api/chat` and `/v1/chat/completions` into the template. + - When the request has `tools`, it parses `` blocks in the output into structured calls. `/api/chat` returns Ollama `message.tool_calls`. `/v1/chat/completions` returns OpenAI `tool_calls` with string arguments and `finish_reason: "tool_calls"`. + - Streaming parses the calls as they are generated, and no client sees part of a tag. + - An invalid block stays in the content. Requests without `tools` are unchanged. + - `chronos.serving.tool_calls` holds the parser. +- `chronos.mlx.memory`: every MLX model sets the MLX buffer-cache limit before it allocates weights. + - The limit is `min(RAM/8, 16 GiB)`. + - A recipe (`extra.mlx_cache_limit_gb`) or `CHRONOS_MLX_CACHE_LIMIT_GB` can lower it. Larger values are clamped to the limit. + - `LongRun` logs the limit and records it in `runtime.json`. + - Only reclaimable cache is bounded. Weights, activations and gradients are not. +- Monitor and Web UI ETAs follow measured progress. + - A phase ends at the first of three points: the wall deadline, the step total, or `target_passes`. + - The pass rate comes from row timestamps over the last 30 minutes, so evaluation and checkpoint time count. + - Each phase shows its estimated end and which of the three points sets it. + - Later phases also get the current phase's unused time. + - A stopped or failed run shows its remaining work and its state, but no end time. + +### Fixed +- Router auxiliary losses and routing telemetry counted right-padding in SFT batches. Balance, entropy, lookahead and cluster terms now use only real tokens. Packed pretraining is unchanged. +- Training telemetry now sums every micro-batch of a step. Before, it sampled only the last one. +- `SFTRecords` with `.lmask`: under NumPy 2, the -100 context labels of uint16 shards wrapped to 65436. Labels are now built in int32. +- MLX lazy-expert decode used the per-expert loop, which sums in a different order from the full-memory grouped kernel. In BF16 on the GPU this flipped near-tied greedy tokens: agreement was 31.25 % at every budget. The lazy path now runs the same grouped kernel over the live experts. Lazy and full greedy now agree at every budget (measured: 0.278, 0.5, 0.778 and 1.0 of experts, planned and window residency). + +## [0.3.1a2] — 2026-11-07 (beta) + +Kernel/extension split: the `chronos` kernel trains general models and holds no translation-specific code. The en↔zh demo moved to `demos/translation` (`chronos-translate`), which imports the kernel and is not part of the `Project_Chronos` wheel. The extension is not published on PyPI; install it from a checkout with `pip install -e demos/translation` (see `demos/translation/README.md`). + +### Moved (to `demos/translation/chronos_translate/`) +- `chronos.data.corpus.*` → `chronos_translate.corpus.*` (WMT19/OPUS-100/FLORES+ download, cleaning, dedup, en–zh shards, doc-mix sets). +- `chronos.bundle.*` → `chronos_translate.bundle.*`; `chronos bundle …` → `chronos-translate bundle …`. A bundle's `bin/chronos bundle …` still works: the launcher sends `bundle` to `chronos-translate`. `bin/setup.sh` installs both wheels from `wheels/`; `bundle build --wheel` can be repeated. +- `chronos.mlx.training.doc_run` → `chronos_translate.doc_run` (`chronos-translate doc-run`). +- `inspect_checkpoint.translation_probe` → `chronos_translate.probe` (`chronos-translate inspect`). +- `chronos.model.factory.ENZH_DEMO_BASE` → `chronos_translate.model_presets.ENZH_50M_BASE`. +- `chronos/mlx/training/recipes/enzh_50m_72h.json` → `demos/translation/recipes/`, with paths relative to the file. + +### Added +- Monitor (`chronos monitor`): a "Lazy experts / 懒加载" tab shows every metric the lazy-expert probe records after each validation. It has four tables (efficiency with the full-memory reference row; paging and loads; hit rates; fidelity), per-variant history charts (hit rate, fidelity, speed, loads, peak RSS) and the full probe log with skip and failure reasons. New endpoint: `GET /api/lazy_probes?run=…&limit=…`. +- Web UI monitor page: the probe card shows the same four grouped tables and four history charts in all four UI languages. Previously it showed a subset of the columns and no load, timing or reference metrics. +- The run snapshot's `lazy_probe` entries carry every measured probe field plus `reference_measured` (the full-memory reference per backend). +- Probes run from Web UI training jobs. For a CLI run (`chronos longrun`, `chronos-translate run`), start `chronos lazy-probe --watch ` next to it, or the tab stays empty. + +### Changed +- `LongRun` has task hooks: `task_eval(phase, n, final=)` (returns `{}` in the kernel), `eval_samples_for`, `generate`, `write_samples`, `pinned_modules`. The kernel `RunSpec` keeps `eval_samples` / `final_eval_samples` (default 0) and `export_prefix` (default `chronos`); `bleu_samples` and `probe_samples` moved to `TranslationRunSpec`. Run translation recipes with `chronos-translate run --spec …`; the kernel runner rejects unknown keys and names the task runner. +- `chronos longrun` and `load_spec` resolve relative recipe paths against the recipe's folder (they resolved against the working directory before). `--max-steps` and `--run-dir` give a short smoke run. +- Task-eval exceptions during SFT validation and the final evaluation are logged as `task_eval_error` instead of stopping the run (pretrain probes were already logged). The smoke path still raises. +- Tokenizer special tokens: the kernel default is `<|endoftext|>`, `<|im_start|>`, `<|im_end|>`, `<|pad|>` and reserved slots up to 64. Task tokens come from `special_tokens_with(extra)` or `chronos tokenizer --extra-special …`. `special_tokens_with(["<|en|>", "<|zh|>", "<|translate|>"])` reproduces the 0.3.1a1 order, so existing tokenizers and checkpoints are unchanged. +- The shard readers (`PackedTokenStream`, `SFTRecords`, `dtype_for`, `manifest_dtype`) live in `chronos.data.shards`. `median_record_tokens` and `cluster_locality_config` moved to `chronos.expert_clusters`. +- Preset "Chronos-v3 50M (en→zh recipe)" is now "Chronos-v3 50M (16k vocab)" (the old name is an alias) and uses the default 20 tokens/param schedule instead of the production-shard measurement. Same shape: 49,691,717 total / 12,090,437 active parameters (measured, meta device). + +### Fixed +- Web UI monitor page: a card with nothing to show no longer prints a stray "null". + +### Removed +- `chronos corpus`, `chronos bundle` and the `translate` extra (`sacrebleu`, `sacremoses` are dependencies of `chronos-translate`). +- Translation metric labels (`bleu_zh`, `flores_devtest_n`) from the Web UI i18n files; the monitor still shows any numeric metric a task writes. + +## [0.3.1a1] — 2026-11-07 (beta) + +Web UI half of 0.3.1: the rewritten Web UI, file picking and upload, LAN access, and the lazy-expert probe. + +### Changed +- `chronos-ui` and `python chronos_app.py` start the new Web UI (`chronos/webui/`: FastAPI and a hand-written single-page app, no build step, CSP `script-src 'self'`). The Gradio console stays available as `--legacy`. +- The UI is complete in zh-Hans, zh-Hant, en and ja. It follows the browser language and falls back to English. Buttons, chips, dropdown options and picker shortcuts are translated; device and format ids (cuda, float16, gguf) are shown as they are. +- Hover help appears after the pointer rests for 2 s; the "?" mark shows it after 0.4 s and Tab focus shows it at once. + +### Added +- Path fields have two ways to pick a path. + - "Browse…" lists folders on the server's machine. + - "Upload…" uses the system file manager. On the server's own machine (loopback) the server opens the native dialog (macOS `osascript`, Windows PowerShell, Linux `zenity`/`kdialog`) and the chosen path is used in place. From another machine the files are streamed to `/uploads///` and that path is used. + - Uploads refuse traversal, hidden names and executable or script types. They stop while less than max(8 GiB, 5 % of the disk) would stay free. `--max-upload-mb` caps a single file (default 20480). +- Dataset fields take several files or folders, one per line. Training stages and export calibration merge them into one JSONL file (`chronos/workbench/files.py:merge_datasets`, with a `.sources.json` manifest). An unchanged selection reuses the earlier merge. +- `--lan` opens the UI to the local network; it is off by default. Browsers on other machines sign in with `CHRONOS_UI_KEY`, or with a key printed at start when none is set. The server's own machine needs no sign-in. The key crosses plain HTTP in clear text unless `--ssl-certfile`/`--ssl-keyfile` or a TLS proxy is used. `--no-native-dialog` turns the native dialog off (for example over SSH). +- `chronos lazy-probe`: lazy-expert efficiency, hit rate and fidelity of a checkpoint, or of each validation of a run with `--watch`; the Train page can run it at every validation. + +## [0.3.1a0] — 2026-11-07 (beta) + +Core half of 0.3.1: cluster-locality training on by default, inference that +adapts its expert paging to how the checkpoint was trained, and lazy experts in +the bundle. The rewritten Web UI follows in 0.3.1a1. + +### Changed +- Cluster locality is on by default for new training: `train_chronos*.py --lambda_cluster_locality` defaults to 0.3, the planner and presets set λ = 0.3 for MoE models with more than 2k experts, and the window follows the data (`recommended_window`: power of two nearest the median SFT record, clamped to [16, seq_len]; 32 without record lengths). The `ChronosConfig` class default stays 0.0, so a stored recipe without the field keeps its original objective on resume, and checkpoints written before the field existed load as λ = 0. The λ = 0.3 default comes from the synthetic sweep below (from-scratch training); its effect on real data and on fine-tuning has not been measured. +- Lazy-expert inference picks its page layout from the checkpoint (`paging="auto"`): weights trained with λ > 0 are paged one training cluster per SSD read, other weights one expert per read. `paging="cluster"|"expert"` forces a layout. The layout is part of the expert-cache directory name (`…_mlx_c2`, `…_c2`), so a cache written for one layout is never reused for the other. Per-expert cache names are unchanged. + +### Added +- `chronos/lazy_experts.py`: one lazy-expert implementation for the Web UI, bundle and server — `LazyOptions` (paging, residency, decay, decode/verify waits, RAM ratio; validated), `page_layout`, `checkpoint_cache_dir`, the expert budget, and `build_mlx_lazy_engine` (trunk only in memory, cache built or reused). +- Torch offload writes cluster layouts as `cluster_.ctsr` files with a v2 manifest (`ClusterStorage.write_clusters_from_states`); `setup_from_state_dict/_reader(clusters=…)`. +- MLX `generate(decode_wait_s=0.012, verify_wait_s=0.02, repetition_penalty=1.0)`. The penalty uses the CTRL rule and is rejected together with `speculative=True`, which needs penalty 1.0 to stay exact. +- `chronos bundle translate|eval --lazy-experts` with `--paging`, `--residency`, `--decay`, `--ram-ratio`, `--decode-wait`, `--verify-wait`. The cache lives outside the bundle (`$CHRONOS_EXPERT_CACHE`, default `~/.cache/chronos/expert_cache`); `eval` also gains `--backend` and `--dtype`. +- `chronos bundle finetune --[no-]cluster-locality --lambda-cluster --cluster-window --clusters` (on by default; dense models and models with fewer than two clusters stay off). The spec records where each value came from (`extra.cluster_locality_source`); the window comes from the median SFT record length of `--data`. +- `chronos serve --paging auto|cluster|expert`; `/api/ps` metadata reports the resolved layout. +- Web UI Inference tab: paging, planner decay and the two prefetch waits, with four-language labels. + +- Next-use residency planning for lazy MLX experts (`chronos/residency_planner.py`, `generate(residency="planned")`). The planner records the page-access trace of every forward, keyed by (layer, loop iteration). The previous forward of the same kind, and in speculative decoding the queue of draft traces since the last verify, then predicts when each page is needed next. The store evicts the page needed latest (`MLXExpertStore.set_eviction_ranker`). The running dispatch's pending experts are never evicted. Pages needed early are prefetched only into spare slots. Greedy output is unchanged. The Web UI Inference tab has a switch for it, on by default (MLX lazy only); the stats table shows the eviction policy. +- Cluster-locality training constraint `lambda_cluster_locality`, with `cluster_locality_clusters` (0 = ⌈E/2k⌉) and `cluster_locality_window`. The loss is 1 − I(window; cluster)/log C over every MoE dispatch, recurrent iterations included. It keeps a stream inside few expert clusters and spreads different streams over different clusters. The partition (`chronos/expert_clusters.py`) is the one lazy inference pages by. Torch and MLX trainers and all stage scripts take it. +- `tools/bench_residency.py`: LRU window vs planned residency, plain and speculative, on a real checkpoint. +- `tools/bench_cluster_locality.py`: a tiny-model training A/B of the constraint, reporting held-out CE, cluster entropies, topic purity and lazy-decode cluster reads. + +### Measured (reports/residency_20261107/) +- 50M s13996 checkpoint, 16 FLORES+ dev prompts, greedy, CPU, 12 hot / 12 RAM pages. + - Plain decoding: planned residency needs 4438 synchronous SSD loads instead of 6876 (−35%). Throughput is 22.47 vs 23.17 tok/s. + - Speculative decoding: 6258 vs 9297 loads (−33%), and 18.96 vs 16.03 tok/s. + - All outputs are identical to plain greedy (16/16). + - The checkpoint was trained without the constraint and routes near-uniformly over all 36 experts within a stream. +- Tiny model on synthetic 4-topic streams, 300 steps, λ=0.3 vs 0. + - Window cluster entropy falls from 0.49 to 0.005; topic→cluster purity rises from 0.81 to 0.999. + - Marginal cluster entropy rises from 0.71 to 0.99, and expert-usage entropy is unchanged (0.87). + - Held-out CE is 1.712 vs 1.703. + - Cluster-paged lazy decoding needs 0.023 vs 1.48 cluster reads per token. + +### Fixed +- MLX lazy store: an expert evicted by the prefetch thread between an SSD read and promotion raised "could not be loaded on demand". Reads now return the page they loaded. + ## [0.3.0] — 2026-11-06 v3 kernel: recurrent-depth MoE. Quality results for the 50M en→zh demo are not diff --git a/MANIFEST.in b/MANIFEST.in index 25e091f..ad0f113 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,5 +1,7 @@ include README.md README_zh.md LICENSE THIRD_PARTY_NOTICES.md CHANGELOG.md requirements.txt recursive-include chronos/monitor/static *.html *.js *.css +recursive-include chronos/webui/static *.html *.js *.css *.svg +recursive-include chronos/webui/i18n *.json include ui/event_contract.js global-exclude __pycache__ *.py[cod] .DS_Store prune runs @@ -10,5 +12,5 @@ prune results prune reports prune .archive prune Translation?Training?Data +prune demos prune chronos/mlx/training/recipes -prune models diff --git a/README.md b/README.md index be47543..82fc1f0 100644 --- a/README.md +++ b/README.md @@ -89,7 +89,7 @@ flowchart LR **Self-speculative decoding (no extra parameters).** The same model drafts γ tokens at a shallow depth and verifies them with one full-depth batched forward pass. Greedy output is token-for-token identical to full-depth greedy. Sampling uses rejection sampling, which preserves the full-depth distribution. After a rejection, the cache is truncated: MLA slices `c_kv`, and the sliding-window cache keeps `window + γ_max` entries. Torch (`chronos/runtime/speculative.py`) and MLX (`chronos/mlx/speculative.py`, `ChronosMLXInferenceEngine.generate(speculative=True)`) share the algorithm. Tests cover greedy identity, the rejection distribution and rollback against a fresh prefill on both backends. The Web UI Inference tab has a switch for it, with draft depth and γ. -For the 50M demo it is exact but not faster on any runtime we measured (pretrain step-13,996 checkpoint, greedy, batch 1, FLORES+ dev en→zh, draft depth 1, γ 4; reports in `reports/speculative/`): +For the 50M demo checkpoint it is exact but not faster on any runtime we measured (pretrain step-13,996 checkpoint of the demo in `demos/translation`, greedy, batch 1, the demo's dev prompts, draft depth 1, γ 4; exact conditions in [`demos/translation/README.md`](demos/translation/README.md); reports in `reports/speculative/`): | Runtime | Plain tok/s | Speculative tok/s | Ratio | Acceptance | |---|---|---|---|---| @@ -107,18 +107,13 @@ At this size a full-depth step costs about as much as a batched verify pass. Wit | Command | What it does | |---|---| | `chronos tokenizer` | Self-built byte-fallback BPE with script-aware pre-tokenization and language-balanced merges; writes an HF-compatible `tokenizer.json` + chat template | -| `chronos corpus download / build / shards` | Pinned downloads, cleaning, global dedup, eval-set leak removal, uint16 shards | -| `chronos longrun --spec recipe.json` (alias `run`) | Time-budgeted MLX run: warmup + cosine per phase wall-clock budget, NaN rollback, bit-exact resume, validation and translation probes | +| `chronos longrun --spec recipe.json` (alias `run`) | Time-budgeted MLX run: warmup + cosine per phase wall-clock budget, NaN rollback, bit-exact resume, validation CE; tasks add their own metrics by subclassing `LongRun` (`task_eval`) | | `chronos serve` | Ollama/OpenAI protocol server on the native runtime (see below) | | `chronos monitor` | Read-only training monitor page + JSON API (see below) | `chronos.model.factory.fit_config` searches for a configuration that matches total and active parameter targets. -**Status of the 50M en→zh demo (in progress).** -- Model: 49.69M total / 12.09M active parameters, 36 experts, MLA latent 128, SWA window 128, 16k self-built vocabulary. -- Run: a 72-hour MLX bf16 run (pretrain, then SFT) started on 2026-11-05. -- Interim measurement: valid CE 2.477 at pretrain step 13,996 of about 24.7k planned (it was 3.012 at step 1,656). That checkpoint is packaged as `chronos-enzh-50m-pretrain-s13996` (see Model bundle). -- BLEU/chrF on FLORES+ and WMT22, and the ablations (attention mode, depth, lazy-expert budget, speculative γ), will be published after the run finishes. No quality numbers are claimed before then. +**Kernel and extensions.** The `chronos` package trains general models and carries no task-specific code. Task tooling lives in extensions that import the kernel. The en↔zh translation demo is one: `demos/translation` (`chronos-translate`: corpus pipeline, BLEU/chrF runs, model bundles; see its README). It is not part of the `Project_Chronos` wheel and is not published on PyPI; install it from a checkout with `pip install -e demos/translation`. The 50M en→zh status, the released model `chronos-enzh-50m-sft` (files in `demos/translation/models/`) with its measurements, and the model bundle are documented in [`demos/translation/README.md`](demos/translation/README.md). **Inference and memory options (all off by default).** Each option is a config field and a `chronos serve` / Inference-tab override. Tests compare each one with its reference path on Torch and MLX. @@ -135,6 +130,72 @@ Web UI: the Tokenizer tab (extract → train → evaluate) and the Serve tab (st --- +## Native kernel (0.3.2): minimind removed + +Up to 0.3.1a3, Chronos took its config base, RoPE tables, gated FFN, dense attention and trainer utilities from [minimind](https://github.com/jingyaogong/minimind). It loaded them at import time: `chronos.deps` git-cloned the `master` branch into `~/.cache/chronos/minimind-master/` and put that folder first on `sys.path`. 0.3.2 replaces those pieces with `chronos/model/kernel.py`. Nothing is downloaded, and `sys.path` is not changed. + +**Why it was migrated** + +- **Reproducibility.** The clone followed an unpinned `master`, so two installs could run different kernel code. +- **Offline installs.** On a machine without the cache, `import chronos` ran `git clone` and failed without network access. +- **Namespace collisions.** minimind's top-level `model`, `trainer` and `dataset` packages went first on `sys.path`. They shadowed any user module with the same name. +- **Dense mode was broken.** `use_hybrid_attention=False` used minimind's `Attention`, which crashed in every recurrent mode (`The size of tensor a (8) must match the size of tensor b (1024)`). It also could not use the shared KV cache. +- **BF16 checkpoints were overwritten as FP16.** The Torch pretrain save called minimind's `lm_checkpoint`. That function rewrote the release file `chronos__moe.pth` as FP16 right after Chronos had saved it in BF16. +- **Trainer logs were lost.** The Web UI captured trainer output by patching `trainer_utils.Logger`. The trainers import `Logger` by name at load time, so the patch never reached them. + +**What the native kernel does** + +- `ChronosBaseConfig` keeps the old field names and defaults. RoPE/YaRN tables and FFN parameter names are unchanged too, so existing checkpoints and sidecars load as before. +- One FP32 RoPE table per `(dim, base, scaling, device)` is shared by all layers and grows on demand. Before, every attention layer kept its own copy. +- `GlobalAttention` is the dense GQA path. It is the sliding-window kernel without a window, so all three recurrent modes, int8 KV, padding masks and speculative rollback work on it. +- Logging uses a sink registry (`add_log_sink`). Resume state goes to `chronos__moe_resume.pth`, and the release checkpoint keeps its dtype. +- The 6400-token tokenizer that old checkpoints use ships as data only (`chronos/assets/tokenizers/legacy_6400`, Apache-2.0, sha256 recorded in its `NOTICE`). + +**Old vs new, measured 2026-11-08** + +Setup: Apple M5 Max, PyTorch 2.10 on CPU, FP32, 4 threads, median of 5–7 runs, each kernel in its own process, runs alternated twice. A 50M training run was using the GPU at the same time, so absolute timings carry noise. Old = 0.3.1a3 + minimind `24896cd`. + +| Check | 0.3.1a3 + minimind | 0.3.2 native | +|---|---|---| +| Logits, `out/chronos_256_moe.pth` and the 50M demo checkpoint (full, padded and prefill+decode paths) | reference | bit-identical (max abs diff 0) | +| Random-init `state_dict` and config values (same seed) | reference | identical | +| `import chronos` with no cache and no network | fails (`git clone` error) | works | +| minimind on `sys.path`, top-level `model` module imported | yes | no | +| RoPE table memory, 50M shape (1024 positions) | 3.50 MiB | 0.50 MiB | +| RoPE table memory, 768H base shape (32768 positions) | 216 MiB | 24 MiB | +| Dense GQA mode (`use_hybrid_attention=False`) | crashes | works; prefill+decode vs full forward ≤ 1e-6 | +| Release checkpoint dtype after BF16 Torch pretrain | FP16 | BF16 | +| Trainer lines captured by the Web UI sink | 0 of 2 | 2 of 2 | +| Train step, 50M shape, batch 4×128 | 0.318–0.326 s | 0.317–0.321 s | +| Prefill 128 tokens, 50M shape | 40.0–40.7 ms | 41.4–42.8 ms | +| Decode tokens/s, 50M shape | 146–157 | 146–151 | + +A repeat with 40 prefill runs per process gave medians of 64–86 ms (old) and 74–86 ms (new) as the training load changed; neither kernel was consistently faster. Compute speed is unchanged within noise: the kernel keeps the same math. The gains are in memory, robustness and the bugs listed above. The parity check runs in CI as `tests/test_native_kernel.py`, which covers config defaults, RoPE bit-identity, dense mode, imports, logging, resume and the bundled tokenizer. + +`chronos.deps` remains as a shim: `get_tokenizer_path()` returns the bundled tokenizer (`CHRONOS_DEFAULT_TOKENIZER` overrides it), and `ensure_minimind()` is a no-op with a deprecation warning. The comparison tools in `tools/compare_minimind_chronos*.py` still use minimind as an external baseline, from a checkout you provide (`--minimind-dir` or `CHRONOS_MINIMIND_DIR`). `benchmark_compare.py` now compares Chronos with a dense GQA baseline built from the same kernel. + +### MLX training: compiled step and activation recomputation (0.3.2) + +Up to 0.3.1a3 the MLX trainers ran every micro step eagerly and kept every activation for the backward pass. 0.3.2 adds both missing pieces to `chronos longrun` and to the Stage 1–2 MLX trainer (pretrain, SFT): + +- **Compiled micro step** (`chronos/mlx/training/compiled.py`, on by default). Loss and gradients run as one `mx.compile` graph per signature. The executed recurrent depth, the ACT switch, input shapes and plain config values are part of the signature, so a step never reuses a stale graph. Weights and the RNG state are compile inputs and outputs, so dropout and the cache-miss simulation consume the RNG stream exactly as before. Multimodal batches, lazy (paged) experts and any signature that fails to trace run eagerly, and the reason is logged once. `CHRONOS_MLX_COMPILE=auto|on|off` or the recipe's `extra.mlx_compile` switches it. +- **Activation recomputation** (`chronos/mlx/checkpointing.py`, `activation_checkpointing=true`; the planner's memory-constrained tiers turn it on). Each block call becomes one recomputed region. A plain `mx.checkpoint` is wrong here in two ways, both measured on mlx 0.32.4. Dropout masks and the cache-miss draws would be drawn again during recomputation; they are recorded in the forward pass and replayed. A region that returns the same graph node twice keeps the gradient of only one copy. A block's KV cache and its shared view are such a pair whenever the SWA window covers the sequence (a full-length slice is a new Python object over the same node), and the gradients were 37–40% off. Region outputs are therefore packed into one array per dtype. + +**Measured 2026-11-08.** Setup: Apple M5 Max, mlx 0.32.4, bf16, the 50M demo recipe's model config (`demos/translation/recipes/`) from random init, the demo's real training shards, the recipe's step sizes (SFT 8 micro-batches per step, pretrain 16). Median of the second half of 16 (SFT) or 12 (pretrain) steps. The 72-hour run was training on the same GPU, so absolute timings carry noise. + +| Micro step | SFT s/step | SFT peak memory | Pretrain s/step | Pretrain peak memory | +|---|---|---|---|---| +| Eager (0.3.1a3) | 2.915 | 5.62 GB | 7.154 | 6.07 GB | +| Compiled (new default) | 2.700 (1.08×) | 5.86 GB | 6.057 (1.18×) | 6.28 GB | +| Recomputation + compiled | 3.148 | 3.50 GB | 7.357 | 3.62 GB | +| Recomputation, eager | 3.663 | 3.42 GB | — | — | + +The loss curves of all variants follow the eager one: within 2e-3 over 16 SFT steps and 2e-4 over 12 pretrain steps. The first compiled step also traces the graph. Recomputation cuts peak memory by 38–40%. With compilation on, a step then takes 17% (SFT) or 21% (pretrain) longer than the compiled step without recomputation, and 8% or 3% longer than the old eager step. At 50M parameters memory is not the limit, so recomputation stays off by default; it is meant for larger models or longer sequences on the same machine. + +Exactness is tested per micro step on the same weights, batch and RNG state inside the real LongRun loop (`tests/test_longrun.py`, `tests/test_mlx_checkpointing.py`). On CPU FP32 the recomputed step's gradients match the eager ones within 4e-7 relative, the compiled step's within 1.7e-5, and with both on within 1e-4. That is FP32 reassociation: scaling the weights by (1 + 1e-7·N(0,1)) moves the eager gradient by 1.8e-4. On the M5 GPU, FP32 matrix products round like TF32. There, the eager gradient itself differs from the CPU FP32 one by 1.5e-2, and the recomputed one differs from the eager one by 1.4e-4. + +--- + ## Three-tier storage (M1: cluster-aware safetensors) ```mermaid @@ -285,7 +346,15 @@ verify results. Stop is cooperative at batch boundaries and save intervals write a valid `.pth` plus sibling `.config.json`, so MLX stages can resume or feed the PyTorch/export pipeline. -The full six-stage comparison harness lives in `tools/compare_minimind_chronos_v3.py`. +Memory, media and tools on MLX: + +- Every MLX model caps the MLX buffer cache at `min(RAM/8, 16 GiB)` before it allocates weights (`chronos.mlx.memory`). A recipe's `extra.mlx_cache_limit_gb` or `CHRONOS_MLX_CACHE_LIMIT_GB` may lower the cap, never raise it. The cap bounds reclaimable cache only; weights, activations and gradients are not limited. +- Image and audio encoders and the gated cross-attention fusion run on MLX in all six stages, with the same weights and numerics as PyTorch (`chronos.mlx.multimodal`). In DPO and ORPO, both answers of a pair condition on the prompt's media. In GRPO, every rollout conditions on it. Preference and GRPO records carry media in the same `image`, `audio` and `*_embeds` fields as SFT. The PyTorch DPO, ORPO and GRPO trainers are text-only, so `auto` routes media data in those stages to MLX. +- Tool calls: + - Training: the chat template renders `tools`, assistant `tool_calls` and `tool` results. `chronos.data.chat_records.encode_chat` gives each token a loss flag (assistant text and calls are learned; everything else is context), and `write_sft_records` writes `.lmask` shards that `SFTRecords` reads. + - Serving: when a request carries `tools`, `chronos serve` parses the model's `` output into Ollama `message.tool_calls` or OpenAI `tool_calls`, in streaming and non-streaming responses. + +The full six-stage comparison harness lives in `tools/compare_minimind_chronos_v3.py` (needs a minimind checkout via `--minimind-dir`). --- @@ -426,22 +495,6 @@ All lambda terms are searchable with Optuna TPE, together with structural hyperp --- -## Released model: chronos-enzh-50m-sft - -[`models/chronos-enzh-50m-sft/`](models/chronos-enzh-50m-sft/) packages a 49.7M-parameter Chronos v3 model (12.1M active per token) trained for 69 hours on one Apple M5 Max: configuration, tokenizer, trained prompt, decoding settings, a driver (`translate.py`) and the evaluation behind every number. The weights (99.5 MB, bfloat16 safetensors) are attached to the release [`enzh-50m-sft-v1`](https://github.com/FonaTech/Project_Chronos/releases/tag/enzh-50m-sft-v1). - -- **Boundary:** English → Chinese only, one sentence (≤ 128 tokens) at a time. Chinese → English is disabled: English-only fine-tuning erased it (FLORES+ BLEU 0.00 after SFT). The driver refuses input outside the boundary. -- **Measured** (MLX bf16, greedy): FLORES+ devtest BLEU 33.48 / chrF 29.52; WMT22 BLEU 32.60 / chrF 28.83; WMT24++ BLEU 26.89 / chrF 24.43 (split into sentences). -- **Research use only.** The training corpora's licences are unknown; see the folder's `NOTICE`. - -```bash -cd models/chronos-enzh-50m-sft -pip install --pre "Project_Chronos[mlx]==0.3.2a0" # or "Project_Chronos==0.3.2a0" without MLX -python translate.py --download && python translate.py "The meeting was moved to Friday." -``` - ---- - ## Installation ```bash @@ -466,7 +519,7 @@ pip install "Project_Chronos[mlx]" ```bash pip install "Project_Chronos[serve]" # chronos serve / chronos monitor (fastapi, uvicorn) -pip install "Project_Chronos[translate]" # corpus detokenization + BLEU/chrF probes (sacremoses, sacrebleu) +pip install -e demos/translation # translation demo extension (chronos-translate), from a checkout only, not on PyPI ``` **vLLM serving (optional, Linux + CUDA only):** @@ -475,10 +528,7 @@ pip install "Project_Chronos[translate]" # corpus detokenization + BLEU/chrF pr pip install vllm ``` -> **minimind dependency**: Project Chronos uses [minimind](https://github.com/jingyaogong/minimind) as its MoE kernel. -> If it is not found locally, Chronos clones it automatically into `~/.cache/chronos/minimind-master/` on first import (this needs `git` and network access). -> Set `CHRONOS_MINIMIND_DIR=/path/to/minimind` to use a local copy instead; model bundles ship one under `third_party/minimind` and their launcher sets the variable. -> minimind is licensed under **Apache-2.0**. See [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md) for attribution details. +> **No external kernel**: since 0.3.2 the kernel is self-contained (`chronos/model/kernel.py`). Installing and importing Chronos needs no `git` and no network. See [Native kernel (0.3.2)](#native-kernel-032-minimind-removed) and [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md). **Requirements**: Python 3.10+, PyTorch 2.6+ @@ -486,30 +536,19 @@ pip install vllm ## Quick start -### Web UI (12 tabs, 4 languages) +### Web UI (11 pages, 4 languages) ```bash -chronos-ui -# or -python chronos_app.py +chronos-ui # or: python chronos_app.py +chronos-ui --lan # also open it to the local network (off by default) +chronos-ui --legacy # the previous Gradio console ``` -Tabs included: - -- `Config`: v3 presets, the auto planner (below) and a live parameter / memory estimator -- `Data` for dataset scanning and conversion -- `Tokenizer`: extract text from datasets, train the Chronos BPE, evaluate and save -- `Train` with its own `data_path`; applies the selected stage's overrides -- `Training Monitor` (read-only view of `runs/`; see below) -- `6-Stage Pipeline` with per-stage dataset paths -- `Inference` -- `Export` for FP16/Q8_0 safetensors and GGUF deployment artifacts -- `Serve`: start and stop `chronos serve` and view its log -- `Benchmark` with Markdown table + comparison plots -- `Auto-Tune` with persistent logs and one-click `Apply Best -> Config` -- `IO Monitor` +A FastAPI server with a single-page app (`chronos/webui/`). It listens on 127.0.0.1 without a login. Pages: Model (v3 presets, the auto planner below, a live parameter / memory estimate), Data (scan one or several datasets), Tokenizer (extract → train → evaluate the Chronos BPE), Train (stages in order, each with its own data; optional lazy-expert probe at every validation), Monitor (read-only view of any run folder, including runs started from the command line), Inference (lazy experts vs full memory on one prompt), Export, Serve (start and stop `chronos serve`), Benchmark, Auto-tune, IO metrics. -At a 1280 px wide window, Gradio moves the last tabs (Auto-Tune, IO Monitor) into its "…" overflow menu. +- **Languages.** zh-Hans, zh-Hant, en and ja; the page follows the browser language and falls back to English. Every setting has hover help with its meaning and recommended value (after a 2 s rest; the "?" mark after 0.4 s). +- **Paths.** "Browse…" lists folders on the server's machine. "Upload…" uses the system file manager: on the server's own machine the server opens the native dialog and the file is used where it is; from another machine the files are uploaded to `/uploads/` and that path is used. Dataset fields take several files or folders, one per line; training and export calibration merge them into one JSONL file. +- **LAN access** (`--lan`). Other machines sign in with `CHRONOS_UI_KEY`, or with a key printed at start when none is set; the server's own machine needs no sign-in. A signed-in browser can train and read or write files with the server user's rights, so use it on a trusted network only. The key crosses plain HTTP in clear text unless `--ssl-certfile` / `--ssl-keyfile` or a TLS proxy is used. `--max-upload-mb` caps a single upload (default 20480); `--no-native-dialog` turns the native dialog off, for example over SSH. `--allow-remote` with a key in the environment binds any other host. ### Presets and the auto planner @@ -518,7 +557,7 @@ The Config tab ships five v3 presets. Each one is generated by the planner and s | Preset | Total / active params (measured) | Shape | Memory level | Est. training peak | |---|---|---|---|---| | Chronos-v3 Tiny (smoke / CI) | 1.51M / 1.29M | E4 top-2, vocab 6400, seq 128, depth 2 | none | 2.13 GB | -| Chronos-v3 50M (en→zh recipe) | 49.69M / 12.09M | h384, L6, E36 top-2, vocab 16384, seq 512 | none | 16.4 GB (the live run measures 8.72 GB peak) | +| Chronos-v3 50M (16k vocab) | 49.69M / 12.09M | h384, L6, E36 top-2, vocab 16384, seq 512 | none | 16.4 GB (the live run measures 8.72 GB peak) | | Chronos-v3 200M (32 GB) — default | 200.72M / 28.20M | h576, E32 top-2 | balanced | 10.14 GB | | Chronos-v3 500M (32 GB) | 499.53M / 61.59M | E48 top-3 | aggressive | 9.26 GB | | Chronos-v3 1B (64 GB) | 1002.17M / 99.74M | E64 top-4, seq 2048 | aggressive | 18.92 GB | @@ -537,6 +576,7 @@ The old preset names (Recommended-CN, Tiny/Small/Medium/Large) still load; they 3. **Sets LR and batch size** from the DeepSeek LLM compute-optimal fits (η = 0.3118·C^−0.125, B = 0.2920·C^0.3271), capped for wide models. 4. **Fits memory.** It picks micro-batch, accumulation, int8 KV, router scope, activation checkpointing, optimizer paging and an expert RAM budget for the memory level. 5. **Writes per-stage values.** Pretrain, SFT, DPO, ORPO, GRPO and distill each get their own learning rate, batch, epochs, save interval and stage-specific terms (β, temperature, α). +6. **Sets the loop knobs (depth above 1).** `recurrent_order="block"`, `recurrent_dt_param="sigmoid"` and `recurrent_dt_init = min(0.5, 2 / depth)`, each with a `sources` entry in the report (the first two cite the 15M measurements; the step size is labelled estimated). One loop iteration is an Euler step of `dh/dτ = block(h) − h`, so `depth × dt` is the integration horizon; the planner holds it at 2 and lets depth refine the integration. Kernel defaults are unchanged (`layer`, `clamp`, 0.25). All of this was measured on one seed per arm at 15M parameters; see the CHANGELOG, "Physical mechanism" and "Known limits". The stage table is editable; the Train tab merges the selected stage's row over the shared values, and the pretrain row stays in sync with the shared widgets. "Save plan" writes the config, stage values and report to JSON. Every number in the report is labelled measured or estimated. @@ -585,38 +625,6 @@ OLLAMA_HOST=127.0.0.1:11435 ollama run "Hello" - Stock `ollama` / llama.cpp cannot execute Chronos GGUF files (MLA+SWA hybrid layers and the contractive recurrence have no stock equivalent); use this server instead. - Security: binds 127.0.0.1 without authentication by default. Other addresses require `--allow-remote` and `--api-key`; clients then send `Authorization: Bearer `. -### Model bundle (ready-to-run pretrained model) - -`chronos bundle build` packages one exported checkpoint of a `chronos longrun` run into a folder that works right after unpacking. Building only reads the run directory. - -```bash -chronos bundle build --run-dir runs/enzh_50m_v1 --which best --wheel dist/project_chronos-0.3.0-py3-none-any.whl --pack -``` - -| Bundle path | Content | -|---|---| -| `model/` | weights + `.config.json` sidecar, tokenizer (`model/tokenizer/`) | -| `eval/` | FLORES+ dev/devtest (CC BY-SA 4.0) for `bundle eval` / `probe` | -| `data/sft_valid/` | the run's SFT validation shards | -| `third_party/minimind/` | vendored minimind (Apache-2.0), so no git clone is needed | -| `wheels/`, `bin/setup.sh`, `bin/chronos` | offline install into `.venv`, launcher that sets `CHRONOS_BUNDLE` / `CHRONOS_MINIMIND_DIR` | -| `recipes/source_run_spec.json`, `recommended.json` | the recipe that produced the weights; fine-tune tiers `smoke` / `quick` / `standard` / `full` | -| `bundle.json` | provenance (step, tokens, valid CE), measured quality probe, SHA-256 of every file | - -On the recipient side: - -```bash -bin/setup.sh # venv + wheel + `bundle check` -bin/chronos bundle translate "The weather is very nice today." -bin/chronos bundle translate --backend mlx --speculative --file examples/translate_en.txt -bin/chronos bundle eval --split devtest -n 200 -bin/chronos bundle prepare-data my_pairs.jsonl --out work/data # FLORES+ is removed from your data -bin/chronos bundle finetune --data work/data --run-dir work/ft --tier quick --mode sft -bin/chronos bundle serve -- --port 11435 -``` - -`--speculative` needs `--repetition-penalty 1.0` (its default), because the penalty changes the target distribution at every position. `finetune` writes a `chronos longrun` spec with `init_checkpoint` set to the bundle weights and refuses a run directory that already holds a run. Bundles built from data with unknown licences (WMT19, OPUS-100) say in `NOTICE.md` that the weights are for research only. - ### Deployment export ```bash @@ -692,8 +700,10 @@ python benchmark_training_backends.py --backends cpu mps mlx --dtypes auto bfloa ### End-to-end comparison (minimind vs Chronos) +minimind is an external baseline here; pass your own checkout (Chronos does not download it). + ```bash -python tools/compare_minimind_chronos_v3.py \ +python tools/compare_minimind_chronos_v3.py --minimind-dir /path/to/minimind \ --pretrain_steps 150 --align_steps 30 --distill_steps 30 \ --simulated_ssd_ms 30 --device cpu \ --output results/compare_results_v3.json @@ -734,11 +744,15 @@ tuner.start( tune_num_experts=True, tune_num_shared_experts=True, tune_kv_latent_dim=True, + tune_recurrent_order=True, # probes a looped model (probe_recurrent_depth, default 4) + tune_recurrent_dt_init=True, ), n_trials=20, ) ``` +The probe trains on real tokens from `dataset_path` (up to 400k, encoded with the model's tokenizer, or the bundled 32k one) and falls back to random ids with a log line when the data cannot be read. The two loop knobs are a coarse screen: a few steps of a 4-layer model cannot rank step sizes that differ by less than the run-to-run noise. `recurrent_later_groups` is not searched, because it trades quality for cost and a loss-only search would always choose the full block. + --- ## Project layout @@ -746,9 +760,10 @@ tuner.start( ```text Project_Chronos/ ├── chronos/ -│ ├── deps.py # Auto-download minimind if missing +│ ├── deps.py # Shim: default tokenizer path (no downloads) │ ├── __init__.py # AutoConfig / AutoModelForCausalLM registration │ ├── model/ +│ │ ├── kernel.py # Native base: ChronosBaseConfig, shared RoPE/YaRN tables, FFN, GlobalAttention, logging, resume state │ │ ├── config.py # ChronosConfig (v3 fields, v2 migration) │ │ ├── recurrent.py # Loop/group embeddings, contractive step, tensor-only ACT │ │ ├── precision_ops.py # RMSNorm/SDPA/RoPE with one compute dtype @@ -773,7 +788,8 @@ Project_Chronos/ │ │ ├── attention.py / moe.py / model.py / expert_store.py / inference.py │ │ ├── moe_kernels.py # Sorted gather_mm dispatch (mlx >= 0.32.4) │ │ ├── speculative.py # MLX self-speculative decoding (Torch parity) -│ │ └── training/ # longrun.py, telemetry.py, recipes/ +│ │ ├── checkpointing.py # Activation recomputation with replayed draws +│ │ └── training/ # longrun.py, compiled.py (mx.compile step), telemetry.py, recipes/ │ ├── runtime/ │ │ ├── speculative.py # Recurrent-depth self-speculative decoding │ │ ├── cache_manager.py # prefetch_for_next_step / ensure_resident @@ -795,21 +811,22 @@ Project_Chronos/ │ │ └── benchmark.py # End-to-end benchmarking │ ├── data/ │ │ ├── flexible_dataset.py # Flexible JSONL dataset loader -│ │ └── corpus/ # download / clean / dedup / leak filter / shards +│ │ └── shards.py # memory-mapped pretrain / SFT shard readers │ ├── tokenizer/ # Chronos BPE builder (extract, normalize, train, evaluate) │ ├── monitor/ # Read-only run monitor: snapshot, API server, static page +│ ├── webui/ # Web UI: FastAPI server, field schema, i18n/*.json, static/ SPA +│ ├── workbench/ # Web UI jobs: train worker, data scan, file picking / merge, lazy probe │ ├── backend/ │ │ ├── __init__.py # BackendDispatcher (cpu/mps/cuda/mlx) │ │ ├── dispatcher.py # Capability probing + priority logic │ │ └── ext/opencl.py # Third-party OpenCL extension hook │ ├── _backend_legacy.py # Backward-compatible older APIs -│ ├── bundle/ # chronos bundle: build/check/translate/finetune │ ├── serving/ │ │ ├── ollama_server.py # chronos serve: Ollama/OpenAI protocol layer │ │ ├── runtime.py # Model discovery, lazy experts, speculative generation │ │ └── vllm_adapter.py # Optional vLLM registration │ └── cli.py # Unified CLI -├── ui/ # Gradio Web UI (zh-Hans / zh-Hant / en / ja) +├── ui/ # Legacy Gradio console (chronos-ui --legacy) │ ├── i18n.py │ ├── estimator.py # Live parameter / memory estimator │ └── tabs/ @@ -840,6 +857,8 @@ Project_Chronos/ │ └── fixtures/ ├── docs/ │ └── vllm_integration.md +├── demos/ +│ └── translation/ # demo extension (chronos-translate): corpus, runs, bundles, the 50M demo model; not in the wheel ├── pyproject.toml └── README.md / README_zh.md / THIRD_PARTY_NOTICES.md ``` @@ -889,7 +908,7 @@ timeline : int8 KV, MLA absorbed decode, shared router scope (opt-in) : Auto planner, v3 presets, tokenizer and serve tabs Next - : 50M en-zh results and ablations + : Multi-seed and larger-size runs of the 0.3.3 loop settings : Speculative decoding: a draft path that pays off on larger models and lazy experts : Train IntentClassifier on large activation corpora : Benchmark 7B+ checkpoints @@ -957,7 +976,7 @@ mindmap ## Third-party attribution -Project Chronos builds on **jingyaogong**'s [minimind](https://github.com/jingyaogong/minimind), licensed under **Apache-2.0**. Full attribution lives in [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md). +Project Chronos started from **jingyaogong**'s [minimind](https://github.com/jingyaogong/minimind) (Apache-2.0). Since 0.3.2 no minimind code is used or downloaded. The native kernel keeps minimind's config field names and RoPE layout for checkpoint compatibility, and the legacy 6400-token tokenizer ships as data files with their licence. Full attribution lives in [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md). --- diff --git a/README_zh.md b/README_zh.md index f415a22..dcb5f85 100644 --- a/README_zh.md +++ b/README_zh.md @@ -94,7 +94,7 @@ flowchart LR - Torch(`chronos/runtime/speculative.py`)与 MLX(`chronos/mlx/speculative.py`、`ChronosMLXInferenceEngine.generate(speculative=True)`)使用同一套算法。 - 两个后端的测试都覆盖 greedy 一致性、拒绝采样分布,以及回滚结果与从头 prefill 一致。 - Web UI 推理 Tab 提供自推测开关,可调起草深度和 γ。 -- 50M demo 在实测过的所有运行时上都结果一致,但都没有提速。实测条件:预训练 step 13,996 checkpoint,greedy,batch 1,FLORES+ dev 英→中,起草深度 1,γ 4。报告在 `reports/speculative/`。 +- 50M demo checkpoint 在实测过的所有运行时上都结果一致,但都没有提速。实测条件:`demos/translation` 中 demo 的预训练 step 13,996 checkpoint,greedy,batch 1,该 demo 的 dev 提示,起草深度 1,γ 4;完整条件见 [`demos/translation/README_zh.md`](demos/translation/README_zh.md)。报告在 `reports/speculative/`。 | 运行时 | 普通 tok/s | 自推测 tok/s | 比值 | 接受率 | |---|---|---|---|---| @@ -119,18 +119,13 @@ flowchart LR | 命令 | 作用 | |---|---| | `chronos tokenizer` | 自研字节回退 BPE:按文字脚本预切分,按语言平衡合并;输出 HF 兼容的 `tokenizer.json` 和 chat template | -| `chronos corpus download / build / shards` | 固定版本下载、清洗、全局去重、剔除评测集泄漏、生成 uint16 分片 | -| `chronos longrun --spec recipe.json`(别名 `run`) | 按墙钟预算训练的 MLX 任务:每个阶段 warmup + cosine,NaN 回滚,续跑逐位一致,带验证和翻译探针 | +| `chronos longrun --spec recipe.json`(别名 `run`) | 按墙钟预算训练的 MLX 任务:每个阶段 warmup + cosine,NaN 回滚,续跑逐位一致,验证 CE;任务通过继承 `LongRun`(`task_eval`)加入自己的指标 | | `chronos serve` | 原生运行时上的 Ollama/OpenAI 协议服务(见下文) | | `chronos monitor` | 只读训练监控页面 + JSON API(见下文) | `chronos.model.factory.fit_config` 按总参数量和激活参数量目标搜索模型配置。 -**50M 英译中 demo(进行中)** -- 模型:总参数 49.69M,激活 12.09M;36 个专家;MLA latent 128;SWA 窗口 128;自研 16k 词表。 -- 训练:72 小时 MLX bf16 任务(先预训练,后 SFT),2026-11-05 启动。 -- 中途实测:预训练第 13,996 步(计划约 24.7k 步)valid CE 为 2.477(第 1,656 步时为 3.012)。该 checkpoint 已打包为 `chronos-enzh-50m-pretrain-s13996`(见“模型包”)。 -- FLORES+ 和 WMT22 上的 BLEU/chrF,以及各项消融(注意力模式、深度、懒加载专家预算、推测 γ),等训练结束后公布。在此之前不给出任何质量数字。 +**内核与扩展。** `chronos` 包用于训练通用模型,不含任何任务特化代码。任务工具放在调用内核的扩展里。英↔中翻译 demo 就是这样一个扩展:`demos/translation`(`chronos-translate`:语料流水线、BLEU/chrF 训练、模型包,详见其 README)。它不在 `Project_Chronos` wheel 里,也不发布到 PyPI,需从仓库检出后用 `pip install -e demos/translation` 安装。50M 英译中的进展、已发布模型 `chronos-enzh-50m-sft`(文件在 `demos/translation/models/`)及其实测结果、模型包,均写在 [`demos/translation/README_zh.md`](demos/translation/README_zh.md)。 **推理与内存选项(全部默认关闭)。** 每个选项既是 config 字段,也可作为 `chronos serve` 和 Inference Tab 的覆盖项;测试在 Torch 和 MLX 上把每个选项与参考路径做对比。 @@ -147,6 +142,72 @@ Web UI 新增 Tokenizer Tab(抽取 → 训练 → 评估)和 Serve Tab(启 --- +## 原生内核(0.3.2):移除 minimind + +0.3.1a3 及之前,Chronos 的 config 基类、RoPE 表、门控 FFN、稠密注意力和训练工具函数都来自 [minimind](https://github.com/jingyaogong/minimind),并在导入时加载:`chronos.deps` 把 `master` 分支 git clone 到 `~/.cache/chronos/minimind-master/`,再把这个目录插到 `sys.path` 最前面。0.3.2 用 `chronos/model/kernel.py` 替换了这些部分,不再下载任何东西,也不再改动 `sys.path`。 + +**迁移原因** + +- **可复现性。** clone 跟随未固定版本的 `master`,两次安装可能运行不同的内核代码。 +- **离线安装。** 机器上没有缓存时,`import chronos` 会执行 `git clone`,没有网络就失败。 +- **命名空间冲突。** minimind 的顶层包 `model`、`trainer`、`dataset` 排在 `sys.path` 最前面,会遮蔽用户同名的模块。 +- **稠密模式不可用。** `use_hybrid_attention=False` 走 minimind 的 `Attention`,在三种循环模式下都会崩溃(`The size of tensor a (8) must match the size of tensor b (1024)`),也无法使用共享 KV cache。 +- **BF16 checkpoint 被改写成 FP16。** Torch 预训练保存时调用 minimind 的 `lm_checkpoint`,它在 Chronos 刚以 BF16 保存发布文件 `chronos__moe.pth` 之后,又把它改写成 FP16。 +- **训练日志丢失。** Web UI 通过替换 `trainer_utils.Logger` 截获训练输出,但各 trainer 在加载时按名字导入了 `Logger`,替换到不了它们。 + +**原生内核做了什么** + +- `ChronosBaseConfig` 保留原有字段名和默认值;RoPE/YaRN 表和 FFN 参数名也不变,已有 checkpoint 和 sidecar 照常加载。 +- 每个 `(dim, base, scaling, device)` 只有一张 FP32 RoPE 表,所有层共享,按需增长。以前每个注意力层各存一份。 +- `GlobalAttention` 是稠密 GQA 路径,即不带窗口的滑动窗口内核,因此三种循环模式、int8 KV、padding mask 和推测解码回滚都能用。 +- 日志改用 sink 注册表(`add_log_sink`)。续跑状态写入 `chronos__moe_resume.pth`,发布 checkpoint 保持原 dtype。 +- 旧 checkpoint 使用的 6400 词表分词器只作为数据随包发布(`chronos/assets/tokenizers/legacy_6400`,Apache-2.0,sha256 记录在其 `NOTICE` 中)。 + +**新旧对比(2026-11-08 实测)** + +条件:Apple M5 Max,PyTorch 2.10 CPU,FP32,4 线程,取 5–7 次的中位数;每个内核在独立进程中运行,交替运行两轮。测量时一个 50M 训练任务正在使用 GPU,绝对耗时有噪声。旧版 = 0.3.1a3 + minimind `24896cd`。 + +| 检查项 | 0.3.1a3 + minimind | 0.3.2 原生 | +|---|---|---| +| Logits:`out/chronos_256_moe.pth` 与 50M demo checkpoint(完整、padding、prefill+decode 三条路径) | 参考 | 逐位一致(最大绝对差 0) | +| 随机初始化的 `state_dict` 和 config 取值(同一种子) | 参考 | 一致 | +| 无缓存、无网络时 `import chronos` | 失败(`git clone` 报错) | 正常 | +| minimind 在 `sys.path` 上,导入了顶层 `model` 模块 | 是 | 否 | +| RoPE 表内存,50M 形状(1024 个位置) | 3.50 MiB | 0.50 MiB | +| RoPE 表内存,768H 基础形状(32768 个位置) | 216 MiB | 24 MiB | +| 稠密 GQA 模式(`use_hybrid_attention=False`) | 崩溃 | 可用;prefill+decode 与 full forward 差 ≤ 1e-6 | +| BF16 Torch 预训练后发布 checkpoint 的 dtype | FP16 | BF16 | +| Web UI sink 截获的训练日志行 | 2 行中 0 行 | 2 行中 2 行 | +| 训练一步,50M 形状,batch 4×128 | 0.318–0.326 s | 0.317–0.321 s | +| Prefill 128 token,50M 形状 | 40.0–40.7 ms | 41.4–42.8 ms | +| Decode tokens/s,50M 形状 | 146–157 | 146–151 | + +每个进程跑 40 次 prefill 的复测中,随训练负载变化,中位数为 64–86 ms(旧)和 74–86 ms(新),两者没有稳定的快慢之分。内核数学不变,计算速度在噪声范围内相同;收益在内存、健壮性和上面列出的 bug。CI 中的 `tests/test_native_kernel.py` 执行这套一致性检查,覆盖 config 默认值、RoPE 逐位一致、稠密模式、导入、日志、续跑和随包分词器。 + +`chronos.deps` 保留为兼容层:`get_tokenizer_path()` 返回随包分词器(可用 `CHRONOS_DEFAULT_TOKENIZER` 覆盖),`ensure_minimind()` 不做任何事并给出弃用警告。`tools/compare_minimind_chronos*.py` 仍把 minimind 当作外部基线,需自行提供 checkout(`--minimind-dir` 或 `CHRONOS_MINIMIND_DIR`)。`benchmark_compare.py` 改为对比 Chronos 与用同一内核搭建的稠密 GQA 基线。 + +### MLX 训练:编译的训练步与激活重计算(0.3.2) + +0.3.1a3 及之前,MLX 训练器的每个 micro step 都以 eager 方式执行,并为反向传播保留全部激活。0.3.2 为 `chronos longrun` 和 Stage 1–2 的 MLX 训练器(预训练、SFT)补上了这两项: + +- **编译的 micro step**(`chronos/mlx/training/compiled.py`,默认开启)。损失和梯度按签名各编译成一张 `mx.compile` 图。实际执行的循环深度、ACT 开关、输入形状和普通 config 取值都属于签名,所以训练步不会复用过期的图。权重和 RNG 状态同时是编译的输入和输出,dropout 与缓存未命中模拟消耗 RNG 流的方式与之前完全相同。多模态 batch、懒加载(分页)专家,以及任何 trace 失败的签名都以 eager 方式运行,并记录一次原因。用 `CHRONOS_MLX_COMPILE=auto|on|off` 或 recipe 的 `extra.mlx_compile` 切换。 +- **激活重计算**(`chronos/mlx/checkpointing.py`,`activation_checkpointing=true`;规划器的内存受限档位会自动开启)。每次 block 调用成为一个重计算区域。在这里直接用 `mx.checkpoint` 会出错,两处问题都在 mlx 0.32.4 上实测确认。第一,重计算时 dropout mask 和缓存未命中抽样会被重新抽取;现在前向时记录,重计算时回放。第二,区域两次返回同一个图节点时,只有一份能拿到梯度。只要 SWA 窗口覆盖整个序列,block 的 KV cache 和它的共享视图就是这样一对(全长切片是同一节点上的新 Python 对象),梯度偏差达 37–40%。因此区域输出按 dtype 打包成每种 dtype 一个数组。 + +**2026-11-08 实测。** 条件:Apple M5 Max,mlx 0.32.4,bf16,50M demo recipe(`demos/translation/recipes/`)的模型配置,随机初始化,该 demo 的真实训练分片,recipe 的步长(SFT 每步 8 个 micro-batch,预训练 16 个)。取 16 步(SFT)或 12 步(预训练)后半段的中位数。72 小时训练任务同时在同一块 GPU 上运行,绝对耗时有噪声。 + +| Micro step | SFT s/步 | SFT 峰值内存 | 预训练 s/步 | 预训练峰值内存 | +|---|---|---|---|---| +| Eager(0.3.1a3) | 2.915 | 5.62 GB | 7.154 | 6.07 GB | +| 编译(新默认) | 2.700(1.08×) | 5.86 GB | 6.057(1.18×) | 6.28 GB | +| 重计算 + 编译 | 3.148 | 3.50 GB | 7.357 | 3.62 GB | +| 重计算,eager | 3.663 | 3.42 GB | — | — | + +各变体的 loss 曲线都与 eager 一致:16 步 SFT 内相差不超过 2e-3,12 步预训练内不超过 2e-4。编译的第一步还要 trace 计算图。重计算把峰值内存降低 38–40%。开启编译时,每步比不做重计算的编译步慢 17%(SFT)或 21%(预训练),比原来的 eager 步慢 8% 或 3%。50M 参数时内存不是瓶颈,所以重计算默认关闭;它面向同一台机器上更大的模型或更长的序列。 + +正确性在真实 LongRun 循环里按 micro step 检验:同一组权重、batch 和 RNG 状态下对比(`tests/test_longrun.py`、`tests/test_mlx_checkpointing.py`)。CPU FP32 上,重计算步的梯度与 eager 的相对差不超过 4e-7,编译步不超过 1.7e-5,两者同时开启不超过 1e-4。这属于 FP32 求和顺序的差异:把权重乘以 (1 + 1e-7·N(0,1)),eager 梯度本身就变化 1.8e-4。M5 GPU 上 FP32 矩阵乘按 TF32 精度舍入:eager 梯度与 CPU FP32 的差为 1.5e-2,重计算与 eager 的差为 1.4e-4。 + +--- + ## 三级存储架构(M1:cluster-aware safetensors) ```mermaid @@ -295,6 +356,14 @@ checkpoint 保存事件、stop 事件、verify 结果都会同步到界面。Sto 边界协作式生效;定期保存会写出可继续训练的 `.pth` 与同名 `.config.json`, 因此 MLX 阶段可以继续接 PyTorch、Export、Diagnose 链路。 +MLX 上的内存、多模态与工具调用: + +- 每个 MLX 模型在分配权重前把 MLX 缓冲区缓存上限设为 `min(内存/8, 16 GiB)`(`chronos.mlx.memory`)。配方的 `extra.mlx_cache_limit_gb` 或 `CHRONOS_MLX_CACHE_LIMIT_GB` 只能调低,不能调高。上限只约束可回收缓存,不限制权重、激活和梯度。 +- 图像、音频编码器和门控交叉注意力融合在 MLX 上覆盖全部 6 个阶段,权重与数值和 PyTorch 一致(`chronos.mlx.multimodal`)。DPO/ORPO 的一对回答以 prompt 的媒体为共同条件,GRPO 的每条 rollout 也以该媒体为条件。偏好数据和 GRPO 数据的媒体字段与 SFT 相同:`image`、`audio`、`*_embeds`。PyTorch 的 DPO/ORPO/GRPO 只支持文本,所以这三个阶段遇到带媒体的数据时,`auto` 会选 MLX。 +- 工具调用: + - 训练:chat 模板支持 `tools`、assistant 的 `tool_calls` 和 `tool` 结果。`chronos.data.chat_records.encode_chat` 为每个 token 标出是否计 loss(assistant 文本和调用参与学习,其余为上下文),`write_sft_records` 写出 `SFTRecords` 可读的 `.lmask` 分片。 + - 推理:请求带 `tools` 时,`chronos serve` 把模型输出的 `` 解析成 Ollama 的 `message.tool_calls` 或 OpenAI 的 `tool_calls`,流式与非流式都支持。 + 完整 6 阶段端到端对比见 `tools/compare_minimind_chronos_v3.py`。 --- @@ -430,22 +499,6 @@ D_{\mathrm{KL}} --- -## 已发布模型:chronos-enzh-50m-sft - -[`models/chronos-enzh-50m-sft/`](models/chronos-enzh-50m-sft/) 打包了一个 4,969 万参数的 Chronos v3 模型(每个 token 激活 1,209 万),在一台 Apple M5 Max 上训练了 69 小时。目录中有模型配置、分词器、训练时的 prompt、解码参数、驱动脚本(`translate.py`),以及每个数字背后的评测。权重(99.5 MB,bfloat16 safetensors)作为附件放在 release [`enzh-50m-sft-v1`](https://github.com/FonaTech/Project_Chronos/releases/tag/enzh-50m-sft-v1) 中。 - -- **边界:** 只做英译中,每次一句(≤ 128 token)。中译英已屏蔽:只含英译中的微调抹掉了这一能力(SFT 后 FLORES+ BLEU 0.00)。驱动会拒绝边界以外的输入。 -- **实测**(MLX bf16,贪心解码):FLORES+ devtest BLEU 33.48 / chrF 29.52;WMT22 BLEU 32.60 / chrF 28.83;WMT24++ BLEU 26.89 / chrF 24.43(分句)。 -- **仅供研究使用。** 训练语料的许可未知,见目录中的 `NOTICE`。 - -```bash -cd models/chronos-enzh-50m-sft -pip install --pre "Project_Chronos[mlx]==0.3.2a0" # 不用 MLX 时装 "Project_Chronos==0.3.2a0" -python translate.py --download && python translate.py "The meeting was moved to Friday." -``` - ---- - ## 安装 ```bash @@ -468,7 +521,7 @@ pip install "Project_Chronos[mlx]" **可选依赖组**(版本已固定): ```bash pip install "Project_Chronos[serve]" # chronos serve / chronos monitor(fastapi、uvicorn) -pip install "Project_Chronos[translate]" # 语料反分词 + BLEU/chrF 探针(sacremoses、sacrebleu) +pip install -e demos/translation # 翻译 demo 扩展 chronos-translate,仅限仓库检出安装(不在 PyPI) ``` **vLLM 服务(可选,仅 Linux+CUDA):** @@ -476,10 +529,7 @@ pip install "Project_Chronos[translate]" # 语料反分词 + BLEU/chrF 探针 pip install vllm ``` -> **minimind 依赖**:Project Chronos 使用 [minimind](https://github.com/jingyaogong/minimind) 作为 MoE 内核。 -> 若本地未找到,首次 import 时自动克隆至 `~/.cache/chronos/minimind-master/`(需要 `git` 和网络)。 -> 设置 `CHRONOS_MINIMIND_DIR=/path/to/minimind` 可改用本地副本;模型包自带 `third_party/minimind`,启动脚本会设置这个变量。 -> minimind 采用 **Apache-2.0** 授权,完整归属见 [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md)。 +> **无外部内核**:自 0.3.2 起内核自包含(`chronos/model/kernel.py`),安装和导入 Chronos 不需要 `git`,也不需要网络。见[原生内核(0.3.2)](#原生内核032移除-minimind)和 [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md)。 **环境要求**:Python 3.10+,PyTorch 2.6+ @@ -487,15 +537,19 @@ pip install vllm ## 快速开始 -### Web UI(12 个 Tab,4 种语言) +### Web UI(11 个页面,4 种语言) ```bash -chronos-ui -# 或 -python chronos_app.py +chronos-ui # 或:python chronos_app.py +chronos-ui --lan # 同时开放局域网访问(默认关闭) +chronos-ui --legacy # 旧版 Gradio 控制台 ``` -包含:⚙️ Config(v3 预设、自动规划器和实时参数估算面板)/ 🗂️ Data(数据集扫描与转换)/ 🔤 Tokenizer(从数据集抽取文本、训练 Chronos BPE、评估并保存)/ 🏋️ Train(拥有 data_path,按所选阶段合并阶段参数)/ 📈 Training Monitor(只读监控 `runs/`,见下文)/ 🧪 6-Stage Pipeline(每阶段独立数据路径)/ 💬 Inference(含懒加载 vs 全量 DRAM 对比)/ 📦 Export(FP16/Q8_0 safetensors 与 GGUF)/ 🛰️ Serve(启停 `chronos serve` 并查看日志)/ 📊 Benchmark(Markdown 表 + 对比图)/ 🔬 Auto-Tune(持久化日志 + 一键 Apply Best → Config)/ 📡 IO Monitor。i18n 支持 zh-Hans / zh-Hant / en / ja。窗口宽 1280 px 时,Gradio 会把最后几个 Tab(Auto-Tune、IO Monitor)收进 “…” 溢出菜单。 +FastAPI 服务加单页前端(`chronos/webui/`),默认只监听 127.0.0.1,无需登录。页面包括:模型(v3 预设、下文的自动规划器、实时参数与内存估算)、数据(扫描一个或多个数据集)、分词器(抽取 → 训练 → 评估 Chronos BPE)、训练(按顺序执行各阶段,每阶段可单独指定数据;可在每次验证时探测懒加载)、监控(只读查看任意运行目录,包括命令行启动的训练)、推理(同一提示词对比懒加载专家与全内存)、导出、服务(启停 `chronos serve`)、基准测试、自动调参、IO 指标。 + +- **语言。** 支持 zh-Hans、zh-Hant、en、ja,自动跟随浏览器语言,不支持的语言回退到英文。每个设置项都有悬浮说明,给出含义和推荐值(光标停留 2 秒后显示;“?” 标记 0.4 秒后显示)。 +- **路径。** “浏览…”列出服务所在电脑上的文件夹。“上传…”使用系统文件管理器:在服务所在的电脑上由服务打开系统对话框,直接使用原路径;从其他设备访问时,文件上传到 `/uploads/` 后使用该路径。数据集字段可以填多个文件或文件夹(每行一个),训练和导出校准会把它们合并成一个 JSONL 文件。 +- **局域网访问**(`--lan`)。其他设备用 `CHRONOS_UI_KEY` 登录;未设置时启动时会生成并打印一个密钥。服务所在的电脑无需登录。登录后的浏览器能以服务用户的权限训练、读写文件,只应在可信网络中使用。不配 `--ssl-certfile` / `--ssl-keyfile` 或 TLS 反向代理时,密钥以明文经过 HTTP。`--max-upload-mb` 限制单个上传文件(默认 20480);`--no-native-dialog` 关闭系统对话框(例如通过 SSH 运行时)。绑定其他地址需要 `--allow-remote` 并在环境变量中提供密钥。 ### 预设与自动规划器 @@ -504,7 +558,7 @@ Config Tab 提供 5 档 v3 预设。它们都由规划器生成,存放在 `ui/ | 预设 | 总参数 / 激活参数(实测) | 形状 | 内存档位 | 训练峰值(估算) | |---|---|---|---|---| | Chronos-v3 Tiny (smoke / CI) | 1.51M / 1.29M | E4 top-2,词表 6400,seq 128,深度 2 | none | 2.13 GB | -| Chronos-v3 50M (en→zh recipe) | 49.69M / 12.09M | h384,L6,E36 top-2,词表 16384,seq 512 | none | 16.4 GB(正在跑的任务实测峰值 8.72 GB) | +| Chronos-v3 50M (16k vocab) | 49.69M / 12.09M | h384,L6,E36 top-2,词表 16384,seq 512 | none | 16.4 GB(正在跑的任务实测峰值 8.72 GB) | | Chronos-v3 200M (32 GB)(默认) | 200.72M / 28.20M | h576,E32 top-2 | balanced | 10.14 GB | | Chronos-v3 500M (32 GB) | 499.53M / 61.59M | E48 top-3 | aggressive | 9.26 GB | | Chronos-v3 1B (64 GB) | 1002.17M / 99.74M | E64 top-4,seq 2048 | aggressive | 18.92 GB | @@ -525,6 +579,7 @@ Config Tab 提供 5 档 v3 预设。它们都由规划器生成,存放在 `ui/ 3. **确定学习率和 batch。** 按 DeepSeek LLM 的计算最优拟合式(η = 0.3118·C^−0.125,B = 0.2920·C^0.3271)给出,宽模型的学习率另设上限。 4. **匹配内存。** 按内存档位选择 micro-batch、梯度累积、int8 KV、路由范围、激活检查点、优化器分页和专家 RAM 预算。 5. **生成各阶段参数。** pretrain、SFT、DPO、ORPO、GRPO、distill 各有独立的学习率、batch、epoch、保存间隔,以及各自的专用项(β、温度、α)。 +6. **设置循环参数(深度大于 1 时)。** `recurrent_order="block"`、`recurrent_dt_param="sigmoid"` 和 `recurrent_dt_init = min(0.5, 2 / depth)`,报告的 `sources` 中各有一条来源(前两项引用 15M 实测,步长标注为估算)。一次循环迭代是 `dh/dτ = block(h) − h` 的一个欧拉步,所以 `depth × dt` 是积分时程;规划器把时程固定为 2,让深度只负责把积分切得更细。内核默认值不变(`layer`、`clamp`、0.25)。以上结论都来自 15M 参数、每组一个种子的实测;见 CHANGELOG 的“Physical mechanism”和“Known limits”。 阶段表可以直接编辑。Train Tab 会把所选阶段那一行合并到共享参数之上;pretrain 行与共享控件保持同步。“保存方案”把 config、各阶段参数和报告写成 JSON。报告里每个数字都标注实测或估算。 @@ -574,38 +629,6 @@ OLLAMA_HOST=127.0.0.1:11435 ollama run <模型名> "你好" - stock `ollama` / llama.cpp 无法执行 Chronos 的 GGUF 文件,因为 MLA+SWA 混合层和收缩式循环没有对应的 stock 实现;请改用本服务。 - 安全:默认只监听 127.0.0.1,不带认证。绑定其他地址必须同时给出 `--allow-remote` 和 `--api-key`,客户端随后发送 `Authorization: Bearer `。 -### 模型包(开箱即用的预训练模型) - -`chronos bundle build` 把 `chronos longrun` 某次运行导出的一个 checkpoint 打包成解压即用的目录。打包过程只读取运行目录。 - -```bash -chronos bundle build --run-dir runs/enzh_50m_v1 --which best --wheel dist/project_chronos-0.3.0-py3-none-any.whl --pack -``` - -| 包内路径 | 内容 | -|---|---| -| `model/` | 权重 + `.config.json` 配置文件,分词器(`model/tokenizer/`) | -| `eval/` | FLORES+ dev/devtest(CC BY-SA 4.0),供 `bundle eval` / `probe` 使用 | -| `data/sft_valid/` | 该次运行的 SFT 验证分片 | -| `third_party/minimind/` | 内置 minimind(Apache-2.0),无需 git clone | -| `wheels/`、`bin/setup.sh`、`bin/chronos` | 离线安装到 `.venv`;启动脚本设置 `CHRONOS_BUNDLE` / `CHRONOS_MINIMIND_DIR` | -| `recipes/source_run_spec.json`、`recommended.json` | 产生这份权重的配方;微调档位 `smoke` / `quick` / `standard` / `full` | -| `bundle.json` | 来源信息(步数、token 数、valid CE)、实测质量探针、每个文件的 SHA-256 | - -接收方的用法: - -```bash -bin/setup.sh # 建 venv、装 wheel、运行 `bundle check` -bin/chronos bundle translate "The weather is very nice today." -bin/chronos bundle translate --backend mlx --speculative --file examples/translate_en.txt -bin/chronos bundle eval --split devtest -n 200 -bin/chronos bundle prepare-data my_pairs.jsonl --out work/data # 会从你的数据中剔除 FLORES+ -bin/chronos bundle finetune --data work/data --run-dir work/ft --tier quick --mode sft -bin/chronos bundle serve -- --port 11435 -``` - -`--speculative` 要求 `--repetition-penalty 1.0`(此时的默认值),因为惩罚会逐位置改变目标分布。`finetune` 写出一份 `init_checkpoint` 指向包内权重的 `chronos longrun` spec;运行目录里已有训练时会拒绝写入。用许可未知的数据(WMT19、OPUS-100)训练的模型包,`NOTICE.md` 中写明权重仅供研究使用。 - ### 部署导出 ```bash @@ -677,8 +700,10 @@ python benchmark_training_backends.py --backends cpu mps mlx --dtypes auto bfloa ### 端到端对比(minimind vs Chronos) +这里 minimind 是外部基线,需自行提供 checkout(Chronos 不会下载它)。 + ```bash -python tools/compare_minimind_chronos_v3.py \ +python tools/compare_minimind_chronos_v3.py --minimind-dir /path/to/minimind \ --pretrain_steps 150 --align_steps 30 --distill_steps 30 \ --simulated_ssd_ms 30 --device cpu \ --output results/compare_results_v3.json @@ -728,11 +753,15 @@ tuner.start( tune_lambda_lookahead=True, tune_lookahead_steps=True, tune_hidden_size=True, tune_num_experts=True, tune_num_shared_experts=True, tune_kv_latent_dim=True, + tune_recurrent_order=True, # 用循环模型做探测(probe_recurrent_depth,默认 4) + tune_recurrent_dt_init=True, ), n_trials=20, ) ``` +探测用的是 `dataset_path` 中的真实 token(最多 40 万个,用模型自己的分词器编码,没有则用内置 32k 分词器);读不出数据时退回随机 id,并写一行日志。两个循环参数只能做粗筛:对 4 层模型训练几步,分辨不出差别小于运行间噪声的步长。`recurrent_later_groups` 不参与搜索,因为它是用质量换成本,只看损失的搜索永远会选完整的块。 + --- ## 项目结构 @@ -740,9 +769,10 @@ tuner.start( ``` Project_Chronos/ ├── chronos/ -│ ├── deps.py # 自动下载 minimind(若本地未找到) +│ ├── deps.py # 兼容层:默认分词器路径(不下载任何东西) │ ├── __init__.py # 注册 AutoConfig / AutoModelForCausalLM │ ├── model/ +│ │ ├── kernel.py # 原生基础:ChronosBaseConfig、共享 RoPE/YaRN 表、FFN、GlobalAttention、日志、续跑状态 │ │ ├── config.py # ChronosConfig(lookahead/temporal/anchor/storage_format、v3 字段与 v2 迁移) │ │ ├── recurrent.py # 循环/组嵌入、收缩步长、纯张量 ACT │ │ ├── precision_ops.py # 单一计算精度的 RMSNorm/SDPA/RoPE @@ -767,7 +797,8 @@ Project_Chronos/ │ │ ├── attention.py / moe.py / model.py / expert_store.py / inference.py │ │ ├── moe_kernels.py # 排序 gather_mm 调度(mlx >= 0.32.4) │ │ ├── speculative.py # MLX 自推测解码(与 Torch 对齐) -│ │ └── training/ # longrun.py、telemetry.py、recipes/ +│ │ ├── checkpointing.py # 激活重计算(随机抽样回放) +│ │ └── training/ # longrun.py、compiled.py(mx.compile 训练步)、telemetry.py、recipes/ │ ├── runtime/ │ │ ├── speculative.py # 循环深度自推测解码 │ │ ├── cache_manager.py # prefetch_for_next_step / ensure_resident(M3) @@ -789,21 +820,22 @@ Project_Chronos/ │ │ └── benchmark.py # 端到端基准测试 │ ├── data/ │ │ ├── flexible_dataset.py # 自动识别任意 JSONL 字段格式 -│ │ └── corpus/ # 下载 / 清洗 / 去重 / 泄漏过滤 / 分片 +│ │ └── shards.py # 内存映射的预训练 / SFT 分片读取器 │ ├── tokenizer/ # Chronos BPE 构建器(抽取、规范化、训练、评估) │ ├── monitor/ # 只读运行监控:快照、API 服务、静态页面 +│ ├── webui/ # Web UI:FastAPI 服务、字段 schema、i18n/*.json、static/ 单页前端 +│ ├── workbench/ # Web UI 任务:训练 worker、数据扫描、文件选取与合并、懒加载探针 │ ├── backend/ │ │ ├── __init__.py # BackendDispatcher(cpu/mps/cuda/mlx) │ │ ├── dispatcher.py # 探针 + 优先级 + 训练能力声明 │ │ └── ext/opencl.py # 第三方 OpenCL 插件钩子(stub) │ ├── _backend_legacy.py # 向后兼容 build_model() 等旧 API -│ ├── bundle/ # chronos bundle:打包/校验/翻译/微调 │ ├── serving/ │ │ ├── ollama_server.py # chronos serve:Ollama/OpenAI 协议层 │ │ ├── runtime.py # 模型发现、懒加载专家、推测生成 │ │ └── vllm_adapter.py # 可选 vLLM 注册(无 vLLM 时优雅降级) │ └── cli.py # 统一 CLI -├── ui/ # Gradio Web UI(i18n: zh-Hans/zh-Hant/en/ja) +├── ui/ # 旧版 Gradio 控制台(chronos-ui --legacy) │ ├── i18n.py │ ├── estimator.py # 实时参数量/内存估算(与 Config 同步) │ └── tabs/ @@ -834,6 +866,8 @@ Project_Chronos/ │ └── fixtures/ # tiny_pretrain / tiny_sft / tiny_dpo / tiny_grpo ├── docs/ │ └── vllm_integration.md +├── demos/ +│ └── translation/ # demo 扩展(chronos-translate):语料、训练、模型包、50M demo 模型;不进 wheel ├── pyproject.toml └── README.md / README_zh.md / THIRD_PARTY_NOTICES.md ``` @@ -883,7 +917,7 @@ timeline : int8 KV、MLA 吸收式解码、共享路由(显式开启) : 自动规划器、v3 预设、分词器与 serve Tab Next - : 50M 英译中结果与消融 + : 0.3.3 循环设置的多种子与更大规模实验 : 自推测解码:在更大模型与懒加载专家下真正提速的起草路径 : 大规模激活语料训练 IntentClassifier : 7B+ checkpoint 基准测试 @@ -951,7 +985,7 @@ mindmap ## 第三方归属 -Project Chronos 基于 **jingyaogong** 的 [minimind](https://github.com/jingyaogong/minimind)(Apache-2.0)构建。完整归属见 [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md)。 +Project Chronos 起步于 **jingyaogong** 的 [minimind](https://github.com/jingyaogong/minimind)(Apache-2.0)。自 0.3.2 起不再使用或下载任何 minimind 代码。原生内核保留 minimind 的 config 字段名和 RoPE 布局,以兼容已有 checkpoint;旧版 6400 词表分词器作为数据文件随包发布,附带其许可证。完整归属见 [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md)。 --- diff --git a/THIRD_PARTY_NOTICES.md b/THIRD_PARTY_NOTICES.md index 918e351..355898b 100644 --- a/THIRD_PARTY_NOTICES.md +++ b/THIRD_PARTY_NOTICES.md @@ -13,36 +13,26 @@ below or linked. **License**: Apache License, Version 2.0 **Copyright**: Copyright jingyaogong and MiniMind Contributors -**Files derived from MiniMind**: +**Status since 0.3.2: no runtime dependency, no bundled code.** Releases up to +0.3.1a3 imported a minimind checkout at runtime (`chronos.deps` cloned +`master` into `~/.cache/chronos/minimind-master/` and put it on `sys.path`). +0.3.2 removes that dependency. The pieces Chronos used are re-implemented in +`chronos/model/kernel.py` (`ChronosBaseConfig`, RoPE/YaRN tables, gated FFN, +logging and resume utilities). Nothing is downloaded. -| Chronos file | Derived from MiniMind | -|---|---| -| `chronos/model/config.py` | `model/model_minimind.py` — `MiniMindConfig` | -| `chronos/model/model_chronos.py` | `model/model_minimind.py` — `MiniMindModel`, `MiniMindForCausalLM`, `MiniMindBlock` | -| `chronos/model/moe_chronos.py` | `model/model_minimind.py` — `MOEFeedForward`, `FeedForward` | -| `chronos/model/hybrid_attention.py` | `model/model_minimind.py` — `Attention`, `apply_rotary_pos_emb`, `repeat_kv`, `RMSNorm` | -| `chronos/model/lookahead_router.py` | Architecture inspired by MiniMind's routing design | -| `chronos/trainer/chronos_trainer.py` | `trainer/train_pretrain.py` — pretraining loop structure | -| `chronos/trainer/sft_trainer.py` | `trainer/train_full_sft.py` — SFT loop + chat-template loss masking | -| `chronos/trainer/dpo_trainer.py` | `trainer/train_dpo.py` — log-σ(β·logits) DPO formulation, `_logits_to_log_probs` helper | -| `chronos/trainer/grpo_trainer.py` | `trainer/train_grpo.py` — GRPO group-relative PG + KL formulation | -| `chronos/trainer/distill_trainer.py` | `trainer/train_distillation.py` — temperature-scaled KL distillation | -| `chronos/trainer/reward.py` | `trainer/trainer_utils.py` — `LMForRewardModel` ABI (`get_score`) wrapper | -| `chronos/eval/io_profiler.py` | `eval_llm.py` — evaluation patterns | - -**Nature of modifications**: +**What still derives from MiniMind**: -- `ChronosConfig` extends `MiniMindConfig` with new fields: `lookahead_steps`, hybrid attention dims, λ loss coefficients (balance / temporal / lookahead / router-anchor), VRAM budget, pinned RAM fraction, `storage_format`, `cluster_manifest_path`. -- `ChronosForCausalLM` replaces `MiniMindForCausalLM` with hybrid attention, LookaheadRouter injection, dual-layer routing hooks, an `available_expert_masks` forward kwarg, and `_tied_weights_keys` / `all_tied_weights_keys` shims for HF safetensors round-trips. -- `ChronosMOEFeedForward` extends `MOEFeedForward` with always-resident shared experts and compile-safe soft gating (`avail[i] * expert_out + (1−avail[i]) * shared_out`). -- `MLAAttention` and `SlidingWindowAttention` are new implementations sharing RMSNorm and RoPE utilities from MiniMind's `Attention`. -- The full Stage 1–6 trainer family (Pretrain / SFT / DPO / ORPO / GRPO / Distill) wraps the corresponding minimind loops where they exist (Pretrain / SFT / DPO / GRPO / Distill) and adds **ORPO from scratch** (Hong et al. 2024 — minimind has no ORPO trainer). Every wrapper injects `chronos_loss_term` (lookahead + temporal + balance) and an optional `router_kl_anchor` term. -- `ChronosGRPOTrainer` is **self-contained**: it ships its own rollout (vanilla `model.generate` style sampling) and accepts a pluggable `reward_fn`. It does not require minimind's sglang-based `rollout_engine`. +| Chronos file | What it keeps from MiniMind | +|---|---| +| `chronos/model/kernel.py` | Field names and defaults of `MiniMindConfig`, the rotate-half RoPE/YaRN layout and numerics, and the `gate_proj/up_proj/down_proj` FFN naming. They are kept so that checkpoints trained before 0.3.2 load bit-identically. The code is a new implementation. | +| `chronos/assets/tokenizers/legacy_6400/` | `tokenizer.json` and `tokenizer_config.json`, copied unchanged (data files only) from commit `24896cd2c4e9328a0911cf69ff61ace17a459b71`, with its `LICENSE` and a `NOTICE` that records the sha256 of each file. It is the default tokenizer only for old checkpoints that never recorded one. | +| `chronos/trainer/sft_trainer.py`, `dpo_trainer.py`, `grpo_trainer.py`, `distill_trainer.py` | The loop structure and loss formulations first followed minimind's `train_full_sft.py`, `train_dpo.py`, `train_grpo.py` and `train_distillation.py` (chat-template loss masking, log-σ(β·Δ) DPO, group-relative policy gradient with KL, temperature-scaled KD). These trainers are self-contained Chronos code. ORPO was written from scratch (Hong et al. 2024). | +| `chronos/trainer/reward.py` | The `get_score(tokenizer, messages)` reward-model ABI wrapper. | +| `tools/compare_minimind_chronos*.py` | Optional comparison harnesses that run minimind as an external baseline. They need a checkout the user provides through `--minimind-dir` or `CHRONOS_MINIMIND_DIR`. | -**Automatic download**: When `minimind-master` is not found locally, Project Chronos -automatically clones it from `https://github.com/jingyaogong/minimind` into -`~/.cache/chronos/minimind-master/`. This download is governed by the Apache-2.0 -license of the MiniMind project. +Chronos-specific parts (MLA/SWA hybrid attention, recurrent-depth controller, +LookaheadRouter, shared-expert MoE, lazy expert paging, speculative decoding, +MLX backend, tokenizer builder) are original work. **Apache-2.0 License Text**: @@ -60,7 +50,8 @@ See the License for the specific language governing permissions and limitations under the License. ``` -Full license: https://github.com/jingyaogong/minimind/blob/master/LICENSE +Full license: https://github.com/jingyaogong/minimind/blob/master/LICENSE (also shipped as +`chronos/assets/tokenizers/legacy_6400/LICENSE`) --- diff --git a/benchmark_compare.py b/benchmark_compare.py index 5335327..37bfb15 100644 --- a/benchmark_compare.py +++ b/benchmark_compare.py @@ -1,5 +1,5 @@ """ -benchmark_compare.py — Background benchmark: minimind (pure RAM) vs Chronos (SSD+DRAM) +benchmark_compare.py — Background benchmark: dense baseline (pure RAM) vs Chronos (SSD+DRAM) Runs in background, writes results to benchmark_results.json Usage: python benchmark_compare.py @@ -11,7 +11,6 @@ if _pkg_root not in sys.path: sys.path.insert(0, _pkg_root) -import chronos.deps # auto-bootstrap minimind on sys.path import torch import psutil @@ -68,18 +67,25 @@ def measure_tokens_per_sec(model, vocab_size, device, n_tokens=50, seq_len=32): elapsed = time.monotonic() - t0 return n_tokens / max(elapsed, 1e-6) -# ── Benchmark 1: minimind pure RAM ──────────────────────────────── +# ── Benchmark 1: dense baseline (pure RAM) ───────────────────────── +# A conventional transformer built from the same native kernel: full causal +# GQA (no MLA/SWA), one pass per layer (no recurrence), all experts resident. +# Before 0.3.2 this slot ran minimind; tools/compare_minimind_chronos*.py +# still compare against an external minimind checkout on request. -def bench_minimind(): - log('=== Benchmark 1: MiniMind (pure RAM) ===') - from model.model_minimind import MiniMindConfig, MiniMindForCausalLM +def bench_baseline(): + log('=== Benchmark 1: dense baseline (pure RAM) ===') + from chronos.model.config import ChronosConfig + from chronos.model.model_chronos import ChronosForCausalLM - cfg = MiniMindConfig( + cfg = ChronosConfig( hidden_size=512, num_hidden_layers=8, use_moe=True, - num_experts=4, num_experts_per_tok=1, + num_experts=4, num_experts_per_tok=1, num_shared_experts=0, + use_hybrid_attention=False, recurrent_enabled=False, + lambda_lookahead=0.0, lambda_temporal=0.0, ) ram_before = ram_used_gb() - model = MiniMindForCausalLM(cfg) + model = ChronosForCausalLM(cfg) model.eval() ram_after = ram_used_gb() ram_model_gb = ram_after - ram_before @@ -93,7 +99,7 @@ def bench_minimind(): train_losses = [] for step in range(5): x = torch.randint(0, cfg.vocab_size, (2, 64)) - out = model(x, labels=x) + out, _lookahead = model(x, labels=x) loss = out.loss + out.aux_loss loss.backward() optimizer.step() @@ -111,13 +117,14 @@ def bench_minimind(): log(f' TPS={tps:.1f} RAM_train={ram_train:.3f}GB RAM_infer={ram_infer:.3f}GB') result = { - 'name': 'MiniMind (pure RAM)', + 'name': 'Dense baseline (GQA, pure RAM)', 'params_m': round(params_m, 1), 'ram_model_gb': round(ram_model_gb, 3), 'ram_train_gb': round(ram_train, 3), 'ram_infer_gb': round(ram_infer, 3), 'tokens_per_sec': round(tps, 1), 'train_losses': [round(l, 4) for l in train_losses], + 'kv_cache_type': 'GQA (full K/V)', } del model gc.collect() @@ -241,9 +248,9 @@ def bench_chronos(): results = {} try: - results['minimind'] = bench_minimind() + results['baseline'] = bench_baseline() except Exception as e: - log(f'minimind bench failed: {e}') + log(f'baseline bench failed: {e}') import traceback; log(traceback.format_exc()) try: diff --git a/chronos/__init__.py b/chronos/__init__.py index 09bf525..acf70db 100644 --- a/chronos/__init__.py +++ b/chronos/__init__.py @@ -1,9 +1,5 @@ # Project Chronos: On-device low-latency lookahead dual-layer MoE inference -__version__ = "0.3.0" - -# Bootstrap minimind dependency before any submodule imports -from chronos.deps import ensure_minimind as _ensure_minimind -_ensure_minimind() +__version__ = "0.3.3" # Register with HuggingFace AutoXXX factories so # AutoModelForCausalLM.from_pretrained("path/to/chronos") works out of the box. diff --git a/chronos/app.py b/chronos/app.py index 0206203..db6d458 100644 --- a/chronos/app.py +++ b/chronos/app.py @@ -36,7 +36,6 @@ from ui.gradio_compat import gr from ui.event_contract import UIEventContract, event_contract_app_kwargs -import chronos.deps # auto-bootstrap minimind from ui.i18n import ( LANGUAGE_CHOICES, DEFAULT_LANGUAGE, t, set_current_lang, build_language_update, get_registered_components, @@ -78,7 +77,7 @@ def _hero_html() -> str: "Apache-2.0" "Python 3.10+" "PyTorch 2.1+" - "MoE kernel: minimind" + "Kernel: Chronos native" "" "" ) diff --git a/chronos/assets/__init__.py b/chronos/assets/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/chronos/assets/tokenizers/general_32k/LICENSE b/chronos/assets/tokenizers/general_32k/LICENSE new file mode 100644 index 0000000..df1a297 --- /dev/null +++ b/chronos/assets/tokenizers/general_32k/LICENSE @@ -0,0 +1,177 @@ +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, +and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by +the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all +other entities that control, are controlled by, or are under common +control with that entity. For the purposes of this definition, +"control" means (i) the power, direct or indirect, to cause the +direction or management of such entity, whether by contract or +otherwise, or (ii) ownership of fifty percent (50%) or more of the +outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity +exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, +including but not limited to software source code, documentation +source, and configuration files. + +"Object" form shall mean any form resulting from mechanical +transformation or translation of a Source form, including but +not limited to compiled object code, generated documentation, +and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or +Object form, made available under the License, as indicated by a +copyright notice that is included in or attached to the work +(an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object +form, that is based on (or derived from) the Work and for which the +editorial revisions, annotations, elaborations, or other modifications +represent, as a whole, an original work of authorship. For the purposes +of this License, Derivative Works shall not include works that remain +separable from, or merely link (or bind by name) to the interfaces of, +the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including +the original version of the Work and any modifications or additions +to that Work or Derivative Works thereof, that is intentionally +submitted to Licensor for inclusion in the Work by the copyright owner +or by an individual or Legal Entity authorized to submit on behalf of +the copyright owner. For the purposes of this definition, "submitted" +means any form of electronic, verbal, or written communication sent +to the Licensor or its representatives, including but not limited to +communication on electronic mailing lists, source code control systems, +and issue tracking systems that are managed by, or on behalf of, the +Licensor for the purpose of discussing and improving the Work, but +excluding communication that is conspicuously marked or otherwise +designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity +on behalf of whom a Contribution has been received by Licensor and +subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of +this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable +copyright license to reproduce, prepare Derivative Works of, +publicly display, publicly perform, sublicense, and distribute the +Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of +this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable +(except as stated in this section) patent license to make, have made, +use, offer to sell, sell, import, and otherwise transfer the Work, +where such license applies only to those patent claims licensable +by such Contributor that are necessarily infringed by their +Contribution(s) alone or by combination of their Contribution(s) +with the Work to which such Contribution(s) was submitted. If You +institute patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the Work +or a Contribution incorporated within the Work constitutes direct +or contributory patent infringement, then any patent licenses +granted to You under this License for that Work shall terminate +as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the +Work or Derivative Works thereof in any medium, with or without +modifications, and in Source or Object form, provided that You +meet the following conditions: + +(a) You must give any other recipients of the Work or +Derivative Works a copy of this License; and + +(b) You must cause any modified files to carry prominent notices +stating that You changed the files; and + +(c) You must retain, in the Source form of any Derivative Works +that You distribute, all copyright, patent, trademark, and +attribution notices from the Source form of the Work, +excluding those notices that do not pertain to any part of +the Derivative Works; and + +(d) If the Work includes a "NOTICE" text file as part of its +distribution, then any Derivative Works that You distribute must +include a readable copy of the attribution notices contained +within such NOTICE file, excluding those notices that do not +pertain to any part of the Derivative Works, in at least one +of the following places: within a NOTICE text file distributed +as part of the Derivative Works; within the Source form or +documentation, if provided along with the Derivative Works; or, +within a display generated by the Derivative Works, if and +wherever such third-party notices normally appear. The contents +of the NOTICE file are for informational purposes only and +do not modify the License. You may add Your own attribution +notices within Derivative Works that You distribute, alongside +or as an addendum to the NOTICE text from the Work, provided +that such additional attribution notices cannot be construed +as modifying the License. + +You may add Your own copyright statement to Your modifications and +may provide additional or different license terms and conditions +for use, reproduction, or distribution of Your modifications, or +for any such Derivative Works as a whole, provided Your use, +reproduction, and distribution of the Work otherwise complies with +the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, +any Contribution intentionally submitted for inclusion in the Work +by You to the Licensor shall be under the terms and conditions of +this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify +the terms of any separate license agreement you may have executed +with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade +names, trademarks, service marks, or product names of the Licensor, +except as required for reasonable and customary use in describing the +origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or +agreed to in writing, Licensor provides the Work (and each +Contributor provides its Contributions) on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +implied, including, without limitation, any warranties or conditions +of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A +PARTICULAR PURPOSE. You are solely responsible for determining the +appropriateness of using or redistributing the Work and assume any +risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, +whether in tort (including negligence), contract, or otherwise, +unless required by applicable law (such as deliberate and grossly +negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, +incidental, or consequential damages of any character arising as a +result of this License or out of the use or inability to use the +Work (including but not limited to damages for loss of goodwill, +work stoppage, computer failure or malfunction, or any and all +other commercial damages or losses), even if such Contributor +has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing +the Work or Derivative Works thereof, You may choose to offer, +and charge a fee for, acceptance of support, warranty, indemnity, +or other liability obligations and/or rights consistent with this +License. However, in accepting such obligations, You may act only +on Your own behalf and on Your sole responsibility, not on behalf +of any other Contributor, and only if You agree to indemnify, +defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason +of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + diff --git a/chronos/assets/tokenizers/general_32k/NOTICE b/chronos/assets/tokenizers/general_32k/NOTICE new file mode 100644 index 0000000..69873ba --- /dev/null +++ b/chronos/assets/tokenizers/general_32k/NOTICE @@ -0,0 +1,30 @@ +General 32k tokenizer (Chronos BPE, vocab 32768) + +Trained with chronos.tokenizer (algorithm chronos-bpe-v1) by the Project Chronos +authors. Files: chronos_tokenizer.json (native), tokenizer.json / +tokenizer_config.json / special_tokens_map.json (Hugging Face fast tokenizer), +tokenizer_report.json (trainer settings, sample statistics, held-out results). + +Training sample: 233,619 text chunks of at most 2,000 characters, drawn from +FineWeb-Edu, Fineweb-Edu-Chinese V2.1, Cosmopedia v2, Wikipedia (en) and +Wikipedia (zh), weighted by mix share x characters per token. The tokenizer +contains a vocabulary and merge list only; it does not contain the corpus text. + +Control tokens (ids 0-63) follow the kernel's task-neutral layout +(chronos.tokenizer.special_tokens_with()): + 0 <|endoftext|> 1 <|im_start|> 2 <|im_end|> 3 <|pad|> 4-63 <|reserved_0..59|> +No task token (language tag, translation marker) is a default. A task that +needs one claims a reserved slot in its own code. + +This copy differs from the training run's original output only in the labels of +control ids 3-63 (the original carried task tokens at ids 3-5). Ordinary tokens, +merges and ids are identical: 1,004 held-out texts encode to the same ids with +both the native and the Hugging Face encoder. Original fingerprint 169668b1be29..., +this copy 6d4b3b524922... (recorded in tokenizer_report.json "derived_from"). + +License: the tokenizer files are released under Apache-2.0, the same as the +repository. The sample corpora carry their own terms, as stated on their dataset +cards when checked on 2026-11-09: FineWeb-Edu ODC-By (plus Common Crawl terms of +use); Cosmopedia v2 (smollm-corpus) ODC-By; Wikipedia CC-BY-SA-3.0 and GFDL; +Fineweb-Edu-Chinese V2.1 asks for permission before commercial use. Check those +terms for your own use. diff --git a/chronos/assets/tokenizers/general_32k/chronos_tokenizer.json b/chronos/assets/tokenizers/general_32k/chronos_tokenizer.json new file mode 100644 index 0000000..7e71636 --- /dev/null +++ b/chronos/assets/tokenizers/general_32k/chronos_tokenizer.json @@ -0,0 +1 @@ +{"vocab": {"<0x00>": 64, "<0x01>": 65, "<0x02>": 66, "<0x03>": 67, "<0x04>": 68, "<0x05>": 69, "<0x06>": 70, "<0x07>": 71, "<0x08>": 72, "<0x09>": 73, "<0x0A>": 74, "<0x0B>": 75, "<0x0C>": 76, "<0x0D>": 77, "<0x0E>": 78, "<0x0F>": 79, "<0x10>": 80, "<0x11>": 81, "<0x12>": 82, "<0x13>": 83, "<0x14>": 84, "<0x15>": 85, "<0x16>": 86, "<0x17>": 87, "<0x18>": 88, "<0x19>": 89, "<0x1A>": 90, "<0x1B>": 91, "<0x1C>": 92, "<0x1D>": 93, "<0x1E>": 94, "<0x1F>": 95, "<0x20>": 96, "<0x21>": 97, "<0x22>": 98, "<0x23>": 99, "<0x24>": 100, "<0x25>": 101, "<0x26>": 102, "<0x27>": 103, "<0x28>": 104, "<0x29>": 105, "<0x2A>": 106, "<0x2B>": 107, "<0x2C>": 108, "<0x2D>": 109, "<0x2E>": 110, "<0x2F>": 111, "<0x30>": 112, "<0x31>": 113, "<0x32>": 114, "<0x33>": 115, "<0x34>": 116, "<0x35>": 117, "<0x36>": 118, "<0x37>": 119, "<0x38>": 120, "<0x39>": 121, "<0x3A>": 122, "<0x3B>": 123, "<0x3C>": 124, "<0x3D>": 125, "<0x3E>": 126, "<0x3F>": 127, "<0x40>": 128, "<0x41>": 129, "<0x42>": 130, "<0x43>": 131, "<0x44>": 132, "<0x45>": 133, "<0x46>": 134, "<0x47>": 135, "<0x48>": 136, "<0x49>": 137, "<0x4A>": 138, "<0x4B>": 139, "<0x4C>": 140, "<0x4D>": 141, "<0x4E>": 142, "<0x4F>": 143, "<0x50>": 144, "<0x51>": 145, "<0x52>": 146, "<0x53>": 147, "<0x54>": 148, "<0x55>": 149, "<0x56>": 150, "<0x57>": 151, "<0x58>": 152, "<0x59>": 153, "<0x5A>": 154, "<0x5B>": 155, "<0x5C>": 156, "<0x5D>": 157, "<0x5E>": 158, "<0x5F>": 159, "<0x60>": 160, "<0x61>": 161, "<0x62>": 162, "<0x63>": 163, "<0x64>": 164, "<0x65>": 165, "<0x66>": 166, "<0x67>": 167, "<0x68>": 168, "<0x69>": 169, "<0x6A>": 170, "<0x6B>": 171, "<0x6C>": 172, "<0x6D>": 173, "<0x6E>": 174, "<0x6F>": 175, "<0x70>": 176, "<0x71>": 177, "<0x72>": 178, "<0x73>": 179, "<0x74>": 180, "<0x75>": 181, "<0x76>": 182, "<0x77>": 183, "<0x78>": 184, "<0x79>": 185, "<0x7A>": 186, "<0x7B>": 187, "<0x7C>": 188, "<0x7D>": 189, "<0x7E>": 190, "<0x7F>": 191, "<0x80>": 192, "<0x81>": 193, "<0x82>": 194, "<0x83>": 195, "<0x84>": 196, "<0x85>": 197, "<0x86>": 198, "<0x87>": 199, "<0x88>": 200, "<0x89>": 201, "<0x8A>": 202, "<0x8B>": 203, "<0x8C>": 204, "<0x8D>": 205, "<0x8E>": 206, "<0x8F>": 207, "<0x90>": 208, "<0x91>": 209, "<0x92>": 210, "<0x93>": 211, "<0x94>": 212, "<0x95>": 213, "<0x96>": 214, "<0x97>": 215, "<0x98>": 216, "<0x99>": 217, "<0x9A>": 218, "<0x9B>": 219, "<0x9C>": 220, "<0x9D>": 221, "<0x9E>": 222, "<0x9F>": 223, "<0xA0>": 224, "<0xA1>": 225, "<0xA2>": 226, "<0xA3>": 227, "<0xA4>": 228, "<0xA5>": 229, "<0xA6>": 230, "<0xA7>": 231, "<0xA8>": 232, "<0xA9>": 233, "<0xAA>": 234, "<0xAB>": 235, "<0xAC>": 236, "<0xAD>": 237, "<0xAE>": 238, "<0xAF>": 239, "<0xB0>": 240, "<0xB1>": 241, "<0xB2>": 242, "<0xB3>": 243, "<0xB4>": 244, "<0xB5>": 245, "<0xB6>": 246, "<0xB7>": 247, "<0xB8>": 248, "<0xB9>": 249, "<0xBA>": 250, "<0xBB>": 251, "<0xBC>": 252, "<0xBD>": 253, "<0xBE>": 254, "<0xBF>": 255, "<0xC0>": 256, "<0xC1>": 257, "<0xC2>": 258, "<0xC3>": 259, "<0xC4>": 260, "<0xC5>": 261, "<0xC6>": 262, "<0xC7>": 263, "<0xC8>": 264, "<0xC9>": 265, "<0xCA>": 266, "<0xCB>": 267, "<0xCC>": 268, "<0xCD>": 269, "<0xCE>": 270, "<0xCF>": 271, "<0xD0>": 272, "<0xD1>": 273, "<0xD2>": 274, "<0xD3>": 275, "<0xD4>": 276, "<0xD5>": 277, "<0xD6>": 278, "<0xD7>": 279, "<0xD8>": 280, "<0xD9>": 281, "<0xDA>": 282, "<0xDB>": 283, "<0xDC>": 284, "<0xDD>": 285, "<0xDE>": 286, "<0xDF>": 287, "<0xE0>": 288, "<0xE1>": 289, "<0xE2>": 290, "<0xE3>": 291, "<0xE4>": 292, "<0xE5>": 293, "<0xE6>": 294, "<0xE7>": 295, "<0xE8>": 296, "<0xE9>": 297, "<0xEA>": 298, "<0xEB>": 299, "<0xEC>": 300, "<0xED>": 301, "<0xEE>": 302, "<0xEF>": 303, "<0xF0>": 304, "<0xF1>": 305, "<0xF2>": 306, "<0xF3>": 307, "<0xF4>": 308, "<0xF5>": 309, "<0xF6>": 310, "<0xF7>": 311, "<0xF8>": 312, "<0xF9>": 313, "<0xFA>": 314, "<0xFB>": 315, "<0xFC>": 316, "<0xFD>": 317, "<0xFE>": 318, "<0xFF>": 319, "\u0002": 320, "\u0003": 321, "\u0004": 322, "\u0005": 323, "\u0006": 324, "\u0007": 325, "\b": 326, "\t": 327, "\n": 328, "\r": 329, "\u0010": 330, "\u0011": 331, "!": 332, "\"": 333, "#": 334, "$": 335, "%": 336, "&": 337, "'": 338, "(": 339, ")": 340, "*": 341, "+": 342, ",": 343, "-": 344, ".": 345, "/": 346, "0": 347, "1": 348, "2": 349, "3": 350, "4": 351, "5": 352, "6": 353, "7": 354, "8": 355, "9": 356, ":": 357, ";": 358, "<": 359, "=": 360, ">": 361, "?": 362, "@": 363, "A": 364, "B": 365, "C": 366, "D": 367, "E": 368, "F": 369, "G": 370, "H": 371, "I": 372, "J": 373, "K": 374, "L": 375, "M": 376, "N": 377, "O": 378, "P": 379, "Q": 380, "R": 381, "S": 382, "T": 383, "U": 384, "V": 385, "W": 386, "X": 387, "Y": 388, "Z": 389, "[": 390, "\\": 391, "]": 392, "^": 393, "_": 394, "`": 395, "a": 396, "b": 397, "c": 398, "d": 399, "e": 400, "f": 401, "g": 402, "h": 403, "i": 404, "j": 405, "k": 406, "l": 407, "m": 408, "n": 409, "o": 410, "p": 411, "q": 412, "r": 413, "s": 414, "t": 415, "u": 416, "v": 417, "w": 418, "x": 419, "y": 420, "z": 421, "{": 422, "|": 423, "}": 424, "~": 425, "": 426, " ": 427, "¡": 428, "¢": 429, "£": 430, "¥": 431, "¦": 432, "§": 433, "¨": 434, "©": 435, "ª": 436, "«": 437, "¬": 438, "­": 439, "®": 440, "¯": 441, "°": 442, "±": 443, "²": 444, "³": 445, "´": 446, "µ": 447, "¶": 448, "·": 449, "¹": 450, "º": 451, "»": 452, "¼": 453, "½": 454, "¾": 455, "¿": 456, "À": 457, "Á": 458, "Â": 459, "Ã": 460, "Ä": 461, "Å": 462, "Æ": 463, "Ç": 464, "É": 465, "Ë": 466, "Í": 467, "Î": 468, "Ð": 469, "Ñ": 470, "Ó": 471, "Ö": 472, "×": 473, "Ø": 474, "Ú": 475, "Ü": 476, "Þ": 477, "ß": 478, "à": 479, "á": 480, "â": 481, "ã": 482, "ä": 483, "å": 484, "æ": 485, "ç": 486, "è": 487, "é": 488, "ê": 489, "ë": 490, "ì": 491, "í": 492, "î": 493, "ï": 494, "ð": 495, "ñ": 496, "ò": 497, "ó": 498, "ô": 499, "õ": 500, "ö": 501, "÷": 502, "ø": 503, "ù": 504, "ú": 505, "û": 506, "ü": 507, "ý": 508, "þ": 509, "ÿ": 510, "Ā": 511, "ā": 512, "ă": 513, "ą": 514, "Ć": 515, "ć": 516, "ĉ": 517, "Č": 518, "č": 519, "ď": 520, "Đ": 521, "đ": 522, "ē": 523, "ĕ": 524, "ė": 525, "ę": 526, "ě": 527, "ğ": 528, "ħ": 529, "ĩ": 530, "ī": 531, "ĭ": 532, "İ": 533, "ı": 534, "ķ": 535, "ĺ": 536, "ľ": 537, "Ł": 538, "ł": 539, "ń": 540, "ņ": 541, "ň": 542, "ŋ": 543, "Ō": 544, "ō": 545, "ŏ": 546, "ő": 547, "Œ": 548, "œ": 549, "ř": 550, "Ś": 551, "ś": 552, "Ş": 553, "ş": 554, "Š": 555, "š": 556, "ţ": 557, "ť": 558, "ū": 559, "ŭ": 560, "ů": 561, "Ÿ": 562, "ź": 563, "Ż": 564, "ż": 565, "Ž": 566, "ž": 567, "ƒ": 568, "ơ": 569, "ư": 570, "ǀ": 571, "ǁ": 572, "ǂ": 573, "ǃ": 574, "ǎ": 575, "ǐ": 576, "ǒ": 577, "ǔ": 578, "Ș": 579, "ș": 580, "ț": 581, "ɐ": 582, "ɑ": 583, "ɒ": 584, "ɔ": 585, "ɕ": 586, "ə": 587, "ɛ": 588, "ɜ": 589, "ɤ": 590, "ɨ": 591, "ɪ": 592, "ɹ": 593, "ʁ": 594, "ʂ": 595, "ʃ": 596, "ʊ": 597, "ʌ": 598, "ʒ": 599, "ʔ": 600, "ʰ": 601, "ʷ": 602, "ʻ": 603, "ʼ": 604, "ʾ": 605, "ʿ": 606, "ˆ": 607, "ˇ": 608, "ˈ": 609, "ˊ": 610, "ˋ": 611, "ˌ": 612, "ː": 613, "˘": 614, "˙": 615, "˚": 616, "˜": 617, "˝": 618, "́": 619, "̃": 620, "̄": 621, "̍": 622, "̓": 623, "̣": 624, "̯": 625, "͏": 626, "͡": 627, "Α": 628, "Β": 629, "Γ": 630, "Δ": 631, "Ε": 632, "Η": 633, "Θ": 634, "Ι": 635, "Κ": 636, "Λ": 637, "Μ": 638, "Ν": 639, "Ο": 640, "Π": 641, "Ρ": 642, "Σ": 643, "Τ": 644, "Υ": 645, "Φ": 646, "Χ": 647, "Ψ": 648, "Ω": 649, "ά": 650, "έ": 651, "ή": 652, "ί": 653, "α": 654, "β": 655, "γ": 656, "δ": 657, "ε": 658, "ζ": 659, "η": 660, "θ": 661, "ι": 662, "κ": 663, "λ": 664, "μ": 665, "ν": 666, "ξ": 667, "ο": 668, "π": 669, "ρ": 670, "ς": 671, "σ": 672, "τ": 673, "υ": 674, "φ": 675, "χ": 676, "ψ": 677, "ω": 678, "ό": 679, "ύ": 680, "ώ": 681, "ϕ": 682, "ϵ": 683, "І": 684, "А": 685, "Б": 686, "В": 687, "Г": 688, "Д": 689, "Е": 690, "Ж": 691, "З": 692, "И": 693, "К": 694, "Л": 695, "М": 696, "Н": 697, "О": 698, "П": 699, "Р": 700, "С": 701, "Т": 702, "У": 703, "Ф": 704, "Х": 705, "Ц": 706, "Ч": 707, "Ш": 708, "Ы": 709, "Ь": 710, "Э": 711, "Ю": 712, "Я": 713, "а": 714, "б": 715, "в": 716, "г": 717, "д": 718, "е": 719, "ж": 720, "з": 721, "и": 722, "й": 723, "к": 724, "л": 725, "м": 726, "н": 727, "о": 728, "п": 729, "р": 730, "с": 731, "т": 732, "у": 733, "ф": 734, "х": 735, "ц": 736, "ч": 737, "ш": 738, "щ": 739, "ъ": 740, "ы": 741, "ь": 742, "э": 743, "ю": 744, "я": 745, "ё": 746, "є": 747, "і": 748, "ї": 749, "ѣ": 750, "ӏ": 751, "ա": 752, "ե": 753, "ի": 754, "կ": 755, "մ": 756, "յ": 757, "ն": 758, "ո": 759, "ս": 760, "վ": 761, "տ": 762, "ր": 763, "ց": 764, "ւ": 765, "ְ": 766, "ֲ": 767, "ִ": 768, "ֵ": 769, "ֶ": 770, "ַ": 771, "ָ": 772, "ֹ": 773, "ּ": 774, "ׁ": 775, "א": 776, "ב": 777, "ג": 778, "ד": 779, "ה": 780, "ו": 781, "ז": 782, "ח": 783, "ט": 784, "י": 785, "ך": 786, "כ": 787, "ל": 788, "ם": 789, "מ": 790, "ן": 791, "נ": 792, "ס": 793, "ע": 794, "פ": 795, "צ": 796, "ק": 797, "ר": 798, "ש": 799, "ת": 800, "آ": 801, "أ": 802, "إ": 803, "ا": 804, "ب": 805, "ة": 806, "ت": 807, "ج": 808, "ح": 809, "خ": 810, "د": 811, "ذ": 812, "ر": 813, "ز": 814, "س": 815, "ش": 816, "ص": 817, "ض": 818, "ط": 819, "ظ": 820, "ع": 821, "غ": 822, "ـ": 823, "ف": 824, "ق": 825, "ك": 826, "ل": 827, "م": 828, "ن": 829, "ه": 830, "و": 831, "ى": 832, "ي": 833, "ً": 834, "ٌ": 835, "َ": 836, "ُ": 837, "ِ": 838, "ّ": 839, "ْ": 840, "پ": 841, "ک": 842, "گ": 843, "ہ": 844, "ی": 845, "ं": 846, "अ": 847, "आ": 848, "उ": 849, "ए": 850, "क": 851, "ख": 852, "ग": 853, "च": 854, "ज": 855, "ट": 856, "ड": 857, "ण": 858, "त": 859, "द": 860, "ध": 861, "न": 862, "प": 863, "ब": 864, "भ": 865, "म": 866, "य": 867, "र": 868, "ल": 869, "व": 870, "श": 871, "ष": 872, "स": 873, "ह": 874, "ा": 875, "ि": 876, "ी": 877, "ु": 878, "ृ": 879, "े": 880, "ै": 881, "ो": 882, "्": 883, "।": 884, "॥": 885, "ক": 886, "ট": 887, "ত": 888, "ন": 889, "র": 890, "ল": 891, "স": 892, "া": 893, "ি": 894, "ু": 895, "ে": 896, "্": 897, "ા": 898, "ା": 899, "க": 900, "ச": 901, "ட": 902, "த": 903, "ன": 904, "ப": 905, "ம": 906, "ர": 907, "ல": 908, "வ": 909, "ா": 910, "ி": 911, "ு": 912, "்": 913, "ക": 914, "ത": 915, "ന": 916, "ാ": 917, "ി": 918, "്": 919, "ก": 920, "ค": 921, "ง": 922, "จ": 923, "ช": 924, "ซ": 925, "ด": 926, "ต": 927, "ท": 928, "น": 929, "บ": 930, "ป": 931, "พ": 932, "ม": 933, "ย": 934, "ร": 935, "ล": 936, "ว": 937, "ส": 938, "ห": 939, "อ": 940, "ะ": 941, "ั": 942, "า": 943, "ิ": 944, "ี": 945, "ุ": 946, "ู": 947, "เ": 948, "โ": 949, "่": 950, "้": 951, "์": 952, "າ": 953, "་": 954, "ག": 955, "ང": 956, "ད": 957, "ས": 958, "ུ": 959, "ོ": 960, "က": 961, "ခ": 962, "ဂ": 963, "င": 964, "စ": 965, "ဆ": 966, "ည": 967, "တ": 968, "ထ": 969, "ဒ": 970, "န": 971, "ပ": 972, "ဖ": 973, "ဘ": 974, "မ": 975, "ယ": 976, "ရ": 977, "လ": 978, "ဝ": 979, "သ": 980, "အ": 981, "ါ": 982, "ာ": 983, "ိ": 984, "ီ": 985, "ု": 986, "ူ": 987, "ေ": 988, "ဲ": 989, "ံ": 990, "့": 991, "း": 992, "္": 993, "်": 994, "ျ": 995, "ြ": 996, "ွ": 997, "ှ": 998, "၊": 999, "၌": 1000, "၍": 1001, "၏": 1002, "ა": 1003, "ბ": 1004, "გ": 1005, "დ": 1006, "ე": 1007, "ვ": 1008, "თ": 1009, "ი": 1010, "კ": 1011, "ლ": 1012, "მ": 1013, "ნ": 1014, "ო": 1015, "რ": 1016, "ს": 1017, "ტ": 1018, "უ": 1019, "შ": 1020, "ᜀ": 1021, "ᜃ": 1022, "ᜅ": 1023, "ᜆ": 1024, "ᜈ": 1025, "ᜋ": 1026, "ᜐ": 1027, "ᜒ": 1028, "᜔": 1029, "ក": 1030, "ង": 1031, "ប": 1032, "រ": 1033, "ស": 1034, "ា": 1035, "ោ": 1036, "ះ": 1037, "្": 1038, "ᵏ": 1039, "ḍ": 1040, "Ḥ": 1041, "ḥ": 1042, "ṃ": 1043, "ṅ": 1044, "ṇ": 1045, "ṛ": 1046, "Ṣ": 1047, "ṣ": 1048, "ṭ": 1049, "ẓ": 1050, "ạ": 1051, "ả": 1052, "ấ": 1053, "ầ": 1054, "ậ": 1055, "ắ": 1056, "ế": 1057, "ề": 1058, "ễ": 1059, "ệ": 1060, "ị": 1061, "ọ": 1062, "ố": 1063, "ồ": 1064, "ổ": 1065, "ộ": 1066, "ớ": 1067, "ờ": 1068, "ợ": 1069, "ứ": 1070, "ữ": 1071, "ἀ": 1072, "ἐ": 1073, "ἡ": 1074, "ὁ": 1075, "ὐ": 1076, "ὶ": 1077, "ὸ": 1078, "ῆ": 1079, "ῖ": 1080, "ῦ": 1081, "ῶ": 1082, " ": 1083, " ": 1084, " ": 1085, " ": 1086, " ": 1087, "​": 1088, "‌": 1089, "‍": 1090, "‐": 1091, "‑": 1092, "‒": 1093, "–": 1094, "—": 1095, "―": 1096, "‖": 1097, "‘": 1098, "’": 1099, "‚": 1100, "‛": 1101, "“": 1102, "”": 1103, "„": 1104, "‟": 1105, "†": 1106, "‡": 1107, "•": 1108, "…": 1109, "‧": 1110, "‬": 1111, " ": 1112, "‰": 1113, "′": 1114, "″": 1115, "›": 1116, "※": 1117, "⁄": 1118, "⁻": 1119, "ⁿ": 1120, "₀": 1121, "₁": 1122, "₂": 1123, "₃": 1124, "₄": 1125, "€": 1126, "₹": 1127, "⃣": 1128, "℃": 1129, "№": 1130, "™": 1131, "⅓": 1132, "Ⅰ": 1133, "Ⅱ": 1134, "Ⅲ": 1135, "Ⅳ": 1136, "Ⅴ": 1137, "Ⅵ": 1138, "Ⅶ": 1139, "Ⅷ": 1140, "Ⅸ": 1141, "Ⅹ": 1142, "Ⅼ": 1143, "Ⅽ": 1144, "Ⅾ": 1145, "Ⅿ": 1146, "ⅱ": 1147, "ⅲ": 1148, "←": 1149, "↑": 1150, "→": 1151, "↓": 1152, "↔": 1153, "↗": 1154, "↘": 1155, "↙": 1156, "↩": 1157, "↺": 1158, "⇒": 1159, "∀": 1160, "∁": 1161, "∂": 1162, "∅": 1163, "∆": 1164, "∇": 1165, "∈": 1166, "∏": 1167, "∑": 1168, "−": 1169, "∕": 1170, "∗": 1171, "∙": 1172, "√": 1173, "∞": 1174, "∠": 1175, "∣": 1176, "∥": 1177, "∧": 1178, "∨": 1179, "∩": 1180, "∪": 1181, "∫": 1182, "∮": 1183, "∴": 1184, "∵": 1185, "∶": 1186, "∷": 1187, "∼": 1188, "≈": 1189, "≠": 1190, "≡": 1191, "≤": 1192, "≥": 1193, "≦": 1194, "≧": 1195, "⊂": 1196, "⊙": 1197, "⊥": 1198, "⊿": 1199, "⋅": 1200, "⋯": 1201, "①": 1202, "②": 1203, "③": 1204, "④": 1205, "⑤": 1206, "⑥": 1207, "⑦": 1208, "⑧": 1209, "⑨": 1210, "⑩": 1211, "⑴": 1212, "⑵": 1213, "⑶": 1214, "⑷": 1215, "⑸": 1216, "⑹": 1217, "⑺": 1218, "⑻": 1219, "⑼": 1220, "⑾": 1221, "⒄": 1222, "⒈": 1223, "⒉": 1224, "⒊": 1225, "⒋": 1226, "─": 1227, "│": 1228, "┊": 1229, "└": 1230, "├": 1231, "┣": 1232, "╱": 1233, "╲": 1234, "▁": 1235, "▋": 1236, "▌": 1237, "▍": 1238, "■": 1239, "□": 1240, "▪": 1241, "▲": 1242, "△": 1243, "▶": 1244, "▸": 1245, "►": 1246, "▼": 1247, "◆": 1248, "◇": 1249, "○": 1250, "◎": 1251, "●": 1252, "◦": 1253, "◾": 1254, "★": 1255, "☆": 1256, "♀": 1257, "♂": 1258, "♥": 1259, "♦": 1260, "♪": 1261, "♭": 1262, "♯": 1263, "✓": 1264, "✔": 1265, "✦": 1266, "✨": 1267, "➡": 1268, "➤": 1269, "⟷": 1270, "⭐": 1271, "⼀": 1272, "⼈": 1273, "⼤": 1274, "⽅": 1275, "⽣": 1276, "⽤": 1277, "⾏": 1278, " ": 1279, "、": 1280, "。": 1281, "々": 1282, "〇": 1283, "〈": 1284, "〉": 1285, "《": 1286, "》": 1287, "「": 1288, "」": 1289, "『": 1290, "』": 1291, "【": 1292, "】": 1293, "〔": 1294, "〕": 1295, "〖": 1296, "〗": 1297, "〜": 1298, "あ": 1299, "い": 1300, "う": 1301, "え": 1302, "お": 1303, "か": 1304, "が": 1305, "き": 1306, "ぎ": 1307, "く": 1308, "ぐ": 1309, "け": 1310, "げ": 1311, "こ": 1312, "ご": 1313, "さ": 1314, "ざ": 1315, "し": 1316, "じ": 1317, "す": 1318, "ず": 1319, "せ": 1320, "ぜ": 1321, "そ": 1322, "ぞ": 1323, "た": 1324, "だ": 1325, "ち": 1326, "っ": 1327, "つ": 1328, "づ": 1329, "て": 1330, "で": 1331, "と": 1332, "ど": 1333, "な": 1334, "に": 1335, "ぬ": 1336, "ね": 1337, "の": 1338, "は": 1339, "ば": 1340, "ぱ": 1341, "ひ": 1342, "び": 1343, "ぴ": 1344, "ふ": 1345, "ぶ": 1346, "へ": 1347, "べ": 1348, "ほ": 1349, "ぼ": 1350, "ぽ": 1351, "ま": 1352, "み": 1353, "む": 1354, "め": 1355, "も": 1356, "ゃ": 1357, "や": 1358, "ゅ": 1359, "ゆ": 1360, "ょ": 1361, "よ": 1362, "ら": 1363, "り": 1364, "る": 1365, "れ": 1366, "ろ": 1367, "わ": 1368, "を": 1369, "ん": 1370, "ァ": 1371, "ア": 1372, "ィ": 1373, "イ": 1374, "ウ": 1375, "ェ": 1376, "エ": 1377, "ォ": 1378, "オ": 1379, "カ": 1380, "ガ": 1381, "キ": 1382, "ギ": 1383, "ク": 1384, "グ": 1385, "ケ": 1386, "ゲ": 1387, "コ": 1388, "ゴ": 1389, "サ": 1390, "ザ": 1391, "シ": 1392, "ジ": 1393, "ス": 1394, "ズ": 1395, "セ": 1396, "ゼ": 1397, "ソ": 1398, "ゾ": 1399, "タ": 1400, "ダ": 1401, "チ": 1402, "ッ": 1403, "ツ": 1404, "テ": 1405, "デ": 1406, "ト": 1407, "ド": 1408, "ナ": 1409, "ニ": 1410, "ネ": 1411, "ノ": 1412, "ハ": 1413, "バ": 1414, "パ": 1415, "ヒ": 1416, "ビ": 1417, "ピ": 1418, "フ": 1419, "ブ": 1420, "プ": 1421, "ヘ": 1422, "ベ": 1423, "ペ": 1424, "ホ": 1425, "ボ": 1426, "ポ": 1427, "マ": 1428, "ミ": 1429, "ム": 1430, "メ": 1431, "モ": 1432, "ャ": 1433, "ヤ": 1434, "ュ": 1435, "ユ": 1436, "ョ": 1437, "ヨ": 1438, "ラ": 1439, "リ": 1440, "ル": 1441, "レ": 1442, "ロ": 1443, "ワ": 1444, "ン": 1445, "ヴ": 1446, "・": 1447, "ー": 1448, "ㄈ": 1449, "ㄒ": 1450, "ㄧ": 1451, "ㅋ": 1452, "㈠": 1453, "㈡": 1454, "㈢": 1455, "㎜": 1456, "㎡": 1457, "䓬": 1458, "䲁": 1459, "一": 1460, "丁": 1461, "七": 1462, "万": 1463, "丈": 1464, "三": 1465, "上": 1466, "下": 1467, "丌": 1468, "不": 1469, "与": 1470, "丐": 1471, "丑": 1472, "专": 1473, "且": 1474, "丕": 1475, "世": 1476, "丘": 1477, "丙": 1478, "业": 1479, "丛": 1480, "东": 1481, "丝": 1482, "丞": 1483, "丟": 1484, "両": 1485, "丢": 1486, "两": 1487, "严": 1488, "並": 1489, "丧": 1490, "丨": 1491, "个": 1492, "丫": 1493, "中": 1494, "丰": 1495, "串": 1496, "临": 1497, "丶": 1498, "丸": 1499, "丹": 1500, "为": 1501, "主": 1502, "丼": 1503, "丽": 1504, "举": 1505, "乂": 1506, "乃": 1507, "久": 1508, "么": 1509, "义": 1510, "之": 1511, "乌": 1512, "乍": 1513, "乎": 1514, "乏": 1515, "乐": 1516, "乒": 1517, "乓": 1518, "乔": 1519, "乖": 1520, "乗": 1521, "乘": 1522, "乙": 1523, "九": 1524, "乞": 1525, "也": 1526, "习": 1527, "乡": 1528, "书": 1529, "乩": 1530, "买": 1531, "乱": 1532, "乳": 1533, "乾": 1534, "亂": 1535, "了": 1536, "予": 1537, "争": 1538, "亊": 1539, "事": 1540, "二": 1541, "于": 1542, "亏": 1543, "云": 1544, "互": 1545, "五": 1546, "井": 1547, "亘": 1548, "亚": 1549, "些": 1550, "亜": 1551, "亞": 1552, "亟": 1553, "亡": 1554, "亢": 1555, "交": 1556, "亥": 1557, "亦": 1558, "产": 1559, "亨": 1560, "亩": 1561, "享": 1562, "京": 1563, "亭": 1564, "亮": 1565, "亲": 1566, "亳": 1567, "亵": 1568, "亶": 1569, "人": 1570, "亿": 1571, "什": 1572, "仁": 1573, "仃": 1574, "仄": 1575, "仅": 1576, "仆": 1577, "仇": 1578, "今": 1579, "介": 1580, "仍": 1581, "从": 1582, "仑": 1583, "仓": 1584, "仔": 1585, "仕": 1586, "他": 1587, "仗": 1588, "付": 1589, "仙": 1590, "仝": 1591, "仞": 1592, "代": 1593, "令": 1594, "以": 1595, "仨": 1596, "仪": 1597, "们": 1598, "仰": 1599, "仲": 1600, "件": 1601, "价": 1602, "仸": 1603, "任": 1604, "份": 1605, "仿": 1606, "企": 1607, "伉": 1608, "伊": 1609, "伍": 1610, "伎": 1611, "伏": 1612, "伐": 1613, "休": 1614, "伕": 1615, "众": 1616, "优": 1617, "伙": 1618, "会": 1619, "伝": 1620, "伞": 1621, "伟": 1622, "传": 1623, "伤": 1624, "伦": 1625, "伪": 1626, "伫": 1627, "伯": 1628, "估": 1629, "伴": 1630, "伶": 1631, "伸": 1632, "伺": 1633, "似": 1634, "伽": 1635, "佃": 1636, "但": 1637, "佈": 1638, "位": 1639, "低": 1640, "住": 1641, "佐": 1642, "佑": 1643, "体": 1644, "佔": 1645, "何": 1646, "佗": 1647, "佘": 1648, "余": 1649, "佚": 1650, "佛": 1651, "作": 1652, "佝": 1653, "佞": 1654, "佟": 1655, "你": 1656, "佢": 1657, "佣": 1658, "佤": 1659, "佥": 1660, "佩": 1661, "佬": 1662, "佯": 1663, "佰": 1664, "佳": 1665, "併": 1666, "佶": 1667, "佼": 1668, "佾": 1669, "使": 1670, "侃": 1671, "侄": 1672, "來": 1673, "侈": 1674, "例": 1675, "侍": 1676, "侏": 1677, "侑": 1678, "侖": 1679, "侗": 1680, "供": 1681, "依": 1682, "侠": 1683, "侣": 1684, "侥": 1685, "侦": 1686, "侧": 1687, "侨": 1688, "侩": 1689, "侪": 1690, "侬": 1691, "侮": 1692, "侯": 1693, "侵": 1694, "侶": 1695, "侷": 1696, "便": 1697, "係": 1698, "促": 1699, "俄": 1700, "俊": 1701, "俎": 1702, "俏": 1703, "俐": 1704, "俑": 1705, "俗": 1706, "俘": 1707, "俚": 1708, "保": 1709, "俞": 1710, "俟": 1711, "俠": 1712, "信": 1713, "俣": 1714, "俨": 1715, "俩": 1716, "俪": 1717, "俭": 1718, "修": 1719, "俯": 1720, "俱": 1721, "俳": 1722, "俸": 1723, "俺": 1724, "俾": 1725, "倆": 1726, "倉": 1727, "個": 1728, "倍": 1729, "們": 1730, "倒": 1731, "倔": 1732, "倖": 1733, "倘": 1734, "候": 1735, "倚": 1736, "倜": 1737, "借": 1738, "倡": 1739, "値": 1740, "倦": 1741, "倩": 1742, "倪": 1743, "倫": 1744, "倬": 1745, "倭": 1746, "倶": 1747, "债": 1748, "值": 1749, "倾": 1750, "偁": 1751, "偃": 1752, "假": 1753, "偈": 1754, "偉": 1755, "偌": 1756, "偏": 1757, "偕": 1758, "做": 1759, "停": 1760, "健": 1761, "側": 1762, "偵": 1763, "偶": 1764, "偷": 1765, "偻": 1766, "偽": 1767, "偿": 1768, "傀": 1769, "傅": 1770, "傈": 1771, "傍": 1772, "傑": 1773, "傘": 1774, "備": 1775, "傢": 1776, "傣": 1777, "储": 1778, "傩": 1779, "催": 1780, "傭": 1781, "傲": 1782, "傳": 1783, "債": 1784, "傷": 1785, "傻": 1786, "傾": 1787, "僅": 1788, "僉": 1789, "像": 1790, "僑": 1791, "僕": 1792, "僖": 1793, "僚": 1794, "僧": 1795, "僭": 1796, "僮": 1797, "僱": 1798, "僳": 1799, "僵": 1800, "價": 1801, "僻": 1802, "儀": 1803, "儁": 1804, "儂": 1805, "億": 1806, "儆": 1807, "儉": 1808, "儋": 1809, "儒": 1810, "儘": 1811, "償": 1812, "儡": 1813, "優": 1814, "儲": 1815, "儷": 1816, "儼": 1817, "儿": 1818, "兀": 1819, "允": 1820, "元": 1821, "兄": 1822, "充": 1823, "兆": 1824, "兇": 1825, "先": 1826, "光": 1827, "克": 1828, "兌": 1829, "免": 1830, "児": 1831, "兑": 1832, "兒": 1833, "兔": 1834, "兖": 1835, "兗": 1836, "党": 1837, "兜": 1838, "兢": 1839, "入": 1840, "內": 1841, "全": 1842, "兩": 1843, "八": 1844, "公": 1845, "六": 1846, "兮": 1847, "兰": 1848, "共": 1849, "关": 1850, "兴": 1851, "兵": 1852, "其": 1853, "具": 1854, "典": 1855, "兹": 1856, "养": 1857, "兼": 1858, "兽": 1859, "冀": 1860, "内": 1861, "円": 1862, "冈": 1863, "冉": 1864, "冊": 1865, "册": 1866, "再": 1867, "冏": 1868, "冒": 1869, "冕": 1870, "冗": 1871, "写": 1872, "军": 1873, "农": 1874, "冠": 1875, "冢": 1876, "冤": 1877, "冥": 1878, "冨": 1879, "冪": 1880, "冬": 1881, "冯": 1882, "冰": 1883, "冲": 1884, "决": 1885, "冴": 1886, "况": 1887, "冶": 1888, "冷": 1889, "冻": 1890, "冼": 1891, "冽": 1892, "净": 1893, "凄": 1894, "准": 1895, "凇": 1896, "凉": 1897, "凋": 1898, "凌": 1899, "凍": 1900, "减": 1901, "凑": 1902, "凛": 1903, "凜": 1904, "凝": 1905, "几": 1906, "凡": 1907, "凤": 1908, "処": 1909, "凭": 1910, "凯": 1911, "凰": 1912, "凱": 1913, "凳": 1914, "凶": 1915, "凸": 1916, "凹": 1917, "出": 1918, "击": 1919, "函": 1920, "凿": 1921, "刀": 1922, "刁": 1923, "刃": 1924, "分": 1925, "切": 1926, "刊": 1927, "刍": 1928, "刎": 1929, "刑": 1930, "划": 1931, "列": 1932, "刘": 1933, "则": 1934, "刚": 1935, "创": 1936, "初": 1937, "删": 1938, "判": 1939, "別": 1940, "刨": 1941, "利": 1942, "刪": 1943, "别": 1944, "刮": 1945, "到": 1946, "制": 1947, "刷": 1948, "券": 1949, "刹": 1950, "刺": 1951, "刻": 1952, "刽": 1953, "刿": 1954, "剁": 1955, "剂": 1956, "剃": 1957, "則": 1958, "削": 1959, "剋": 1960, "剌": 1961, "前": 1962, "剎": 1963, "剑": 1964, "剔": 1965, "剖": 1966, "剛": 1967, "剝": 1968, "剡": 1969, "剣": 1970, "剥": 1971, "剧": 1972, "剩": 1973, "剪": 1974, "副": 1975, "割": 1976, "創": 1977, "剽": 1978, "剿": 1979, "劃": 1980, "劇": 1981, "劈": 1982, "劉": 1983, "劍": 1984, "劑": 1985, "力": 1986, "劝": 1987, "办": 1988, "功": 1989, "加": 1990, "务": 1991, "劢": 1992, "劣": 1993, "动": 1994, "助": 1995, "努": 1996, "劫": 1997, "劭": 1998, "励": 1999, "劲": 2000, "劳": 2001, "劵": 2002, "劾": 2003, "势": 2004, "勁": 2005, "勃": 2006, "勅": 2007, "勇": 2008, "勉": 2009, "勋": 2010, "勐": 2011, "勑": 2012, "勒": 2013, "動": 2014, "勖": 2015, "勗": 2016, "勘": 2017, "務": 2018, "勛": 2019, "勝": 2020, "勞": 2021, "募": 2022, "勠": 2023, "勢": 2024, "勤": 2025, "勰": 2026, "勳": 2027, "勵": 2028, "勸": 2029, "勺": 2030, "勻": 2031, "勾": 2032, "勿": 2033, "匀": 2034, "包": 2035, "匆": 2036, "匈": 2037, "匍": 2038, "匏": 2039, "匐": 2040, "匕": 2041, "化": 2042, "北": 2043, "匙": 2044, "匝": 2045, "匠": 2046, "匡": 2047, "匣": 2048, "匪": 2049, "匮": 2050, "匯": 2051, "匹": 2052, "区": 2053, "医": 2054, "匾": 2055, "匿": 2056, "區": 2057, "十": 2058, "千": 2059, "卅": 2060, "升": 2061, "午": 2062, "卉": 2063, "半": 2064, "华": 2065, "协": 2066, "卑": 2067, "卒": 2068, "卓": 2069, "協": 2070, "单": 2071, "卖": 2072, "南": 2073, "博": 2074, "卜": 2075, "卞": 2076, "卟": 2077, "占": 2078, "卡": 2079, "卢": 2080, "卤": 2081, "卦": 2082, "卧": 2083, "卫": 2084, "卮": 2085, "卯": 2086, "印": 2087, "危": 2088, "即": 2089, "却": 2090, "卵": 2091, "卷": 2092, "卸": 2093, "卻": 2094, "卿": 2095, "厂": 2096, "厄": 2097, "厅": 2098, "历": 2099, "厉": 2100, "压": 2101, "厌": 2102, "厕": 2103, "厘": 2104, "厚": 2105, "厝": 2106, "原": 2107, "厢": 2108, "厥": 2109, "厦": 2110, "厨": 2111, "厩": 2112, "厭": 2113, "厮": 2114, "厯": 2115, "厲": 2116, "去": 2117, "县": 2118, "叁": 2119, "参": 2120, "參": 2121, "又": 2122, "叉": 2123, "及": 2124, "友": 2125, "双": 2126, "反": 2127, "収": 2128, "叐": 2129, "发": 2130, "叔": 2131, "取": 2132, "受": 2133, "变": 2134, "叙": 2135, "叛": 2136, "叟": 2137, "叠": 2138, "叡": 2139, "叢": 2140, "口": 2141, "古": 2142, "句": 2143, "另": 2144, "叨": 2145, "叩": 2146, "只": 2147, "叫": 2148, "召": 2149, "叭": 2150, "叮": 2151, "可": 2152, "台": 2153, "叱": 2154, "史": 2155, "右": 2156, "叵": 2157, "叶": 2158, "号": 2159, "司": 2160, "叹": 2161, "叻": 2162, "吁": 2163, "吃": 2164, "各": 2165, "合": 2166, "吉": 2167, "吊": 2168, "吋": 2169, "同": 2170, "名": 2171, "后": 2172, "吏": 2173, "吐": 2174, "向": 2175, "吒": 2176, "吓": 2177, "吕": 2178, "吖": 2179, "吗": 2180, "君": 2181, "吝": 2182, "吞": 2183, "吟": 2184, "吠": 2185, "吡": 2186, "否": 2187, "吧": 2188, "吨": 2189, "吩": 2190, "含": 2191, "听": 2192, "吭": 2193, "吮": 2194, "启": 2195, "吱": 2196, "吲": 2197, "吳": 2198, "吴": 2199, "吵": 2200, "吶": 2201, "吸": 2202, "吹": 2203, "吻": 2204, "吼": 2205, "吾": 2206, "呀": 2207, "呂": 2208, "呃": 2209, "呆": 2210, "呈": 2211, "告": 2212, "呋": 2213, "呎": 2214, "呐": 2215, "呕": 2216, "呗": 2217, "员": 2218, "呛": 2219, "呜": 2220, "呢": 2221, "呤": 2222, "呦": 2223, "周": 2224, "呱": 2225, "味": 2226, "呵": 2227, "呻": 2228, "呼": 2229, "命": 2230, "咀": 2231, "咁": 2232, "咄": 2233, "咆": 2234, "咋": 2235, "和": 2236, "咎": 2237, "咏": 2238, "咐": 2239, "咒": 2240, "咔": 2241, "咕": 2242, "咖": 2243, "咙": 2244, "咚": 2245, "咝": 2246, "咤": 2247, "咨": 2248, "咪": 2249, "咫": 2250, "咬": 2251, "咯": 2252, "咱": 2253, "咲": 2254, "咳": 2255, "咸": 2256, "咽": 2257, "哀": 2258, "品": 2259, "哄": 2260, "哆": 2261, "哇": 2262, "哈": 2263, "哉": 2264, "哌": 2265, "响": 2266, "哎": 2267, "哑": 2268, "哔": 2269, "哗": 2270, "哙": 2271, "哚": 2272, "哟": 2273, "員": 2274, "哥": 2275, "哦": 2276, "哨": 2277, "哩": 2278, "哪": 2279, "哭": 2280, "哮": 2281, "哲": 2282, "哺": 2283, "哼": 2284, "唁": 2285, "唄": 2286, "唅": 2287, "唆": 2288, "唇": 2289, "唉": 2290, "唐": 2291, "唑": 2292, "唔": 2293, "唤": 2294, "唬": 2295, "售": 2296, "唯": 2297, "唱": 2298, "唸": 2299, "唾": 2300, "唿": 2301, "啃": 2302, "啄": 2303, "商": 2304, "啉": 2305, "啊": 2306, "問": 2307, "啓": 2308, "啖": 2309, "啜": 2310, "啞": 2311, "啟": 2312, "啡": 2313, "啤": 2314, "啥": 2315, "啦": 2316, "啧": 2317, "啪": 2318, "啬": 2319, "啮": 2320, "啰": 2321, "啶": 2322, "啸": 2323, "啻": 2324, "啼": 2325, "啾": 2326, "喀": 2327, "喂": 2328, "喃": 2329, "善": 2330, "喆": 2331, "喇": 2332, "喉": 2333, "喊": 2334, "喋": 2335, "喔": 2336, "喘": 2337, "喙": 2338, "喚": 2339, "喜": 2340, "喝": 2341, "喧": 2342, "喪": 2343, "喬": 2344, "單": 2345, "喵": 2346, "営": 2347, "喷": 2348, "喹": 2349, "喻": 2350, "喾": 2351, "嗅": 2352, "嗎": 2353, "嗓": 2354, "嗔": 2355, "嗜": 2356, "嗝": 2357, "嗟": 2358, "嗡": 2359, "嗣": 2360, "嗦": 2361, "嗨": 2362, "嗪": 2363, "嗯": 2364, "嗳": 2365, "嗽": 2366, "嘅": 2367, "嘆": 2368, "嘈": 2369, "嘉": 2370, "嘌": 2371, "嘎": 2372, "嘏": 2373, "嘔": 2374, "嘗": 2375, "嘘": 2376, "嘛": 2377, "嘟": 2378, "嘢": 2379, "嘧": 2380, "嘩": 2381, "嘯": 2382, "嘱": 2383, "嘲": 2384, "嘴": 2385, "嘶": 2386, "嘹": 2387, "嘻": 2388, "噁": 2389, "噌": 2390, "噎": 2391, "噜": 2392, "器": 2393, "噩": 2394, "噪": 2395, "噬": 2396, "噱": 2397, "噴": 2398, "噶": 2399, "噸": 2400, "噹": 2401, "噻": 2402, "嚇": 2403, "嚎": 2404, "嚏": 2405, "嚣": 2406, "嚨": 2407, "嚮": 2408, "嚴": 2409, "嚷": 2410, "嚼": 2411, "囊": 2412, "囍": 2413, "囑": 2414, "囚": 2415, "四": 2416, "回": 2417, "囟": 2418, "因": 2419, "团": 2420, "団": 2421, "囤": 2422, "囧": 2423, "囫": 2424, "园": 2425, "囯": 2426, "困": 2427, "囱": 2428, "図": 2429, "围": 2430, "囵": 2431, "固": 2432, "国": 2433, "图": 2434, "囿": 2435, "圃": 2436, "圆": 2437, "圈": 2438, "國": 2439, "圍": 2440, "園": 2441, "圓": 2442, "圖": 2443, "團": 2444, "圜": 2445, "土": 2446, "圣": 2447, "在": 2448, "圩": 2449, "圪": 2450, "圭": 2451, "圮": 2452, "地": 2453, "圳": 2454, "场": 2455, "圻": 2456, "圾": 2457, "址": 2458, "坂": 2459, "均": 2460, "坊": 2461, "坍": 2462, "坎": 2463, "坏": 2464, "坐": 2465, "坑": 2466, "块": 2467, "坚": 2468, "坛": 2469, "坝": 2470, "坞": 2471, "坟": 2472, "坠": 2473, "坡": 2474, "坤": 2475, "坦": 2476, "坩": 2477, "坪": 2478, "坭": 2479, "坯": 2480, "坳": 2481, "坵": 2482, "坷": 2483, "坻": 2484, "垂": 2485, "垃": 2486, "垄": 2487, "型": 2488, "垒": 2489, "垓": 2490, "垛": 2491, "垠": 2492, "垢": 2493, "垣": 2494, "垦": 2495, "垩": 2496, "垫": 2497, "垭": 2498, "垮": 2499, "垵": 2500, "埂": 2501, "埃": 2502, "埈": 2503, "埋": 2504, "城": 2505, "埔": 2506, "埕": 2507, "埗": 2508, "埙": 2509, "埚": 2510, "域": 2511, "埠": 2512, "埡": 2513, "埤": 2514, "埭": 2515, "埴": 2516, "執": 2517, "埸": 2518, "培": 2519, "基": 2520, "埼": 2521, "堀": 2522, "堂": 2523, "堃": 2524, "堅": 2525, "堆": 2526, "堇": 2527, "堊": 2528, "堑": 2529, "堕": 2530, "堡": 2531, "堤": 2532, "堪": 2533, "堯": 2534, "堰": 2535, "報": 2536, "場": 2537, "堵": 2538, "堺": 2539, "堿": 2540, "塊": 2541, "塌": 2542, "塑": 2543, "塔": 2544, "塗": 2545, "塘": 2546, "塚": 2547, "塞": 2548, "塢": 2549, "塩": 2550, "填": 2551, "塬": 2552, "塵": 2553, "塹": 2554, "塾": 2555, "墀": 2556, "境": 2557, "墅": 2558, "墉": 2559, "墊": 2560, "墒": 2561, "墓": 2562, "増": 2563, "墘": 2564, "墙": 2565, "墜": 2566, "增": 2567, "墟": 2568, "墨": 2569, "墩": 2570, "墮": 2571, "墳": 2572, "墻": 2573, "墾": 2574, "壁": 2575, "壅": 2576, "壇": 2577, "壎": 2578, "壑": 2579, "壓": 2580, "壕": 2581, "壘": 2582, "壙": 2583, "壞": 2584, "壟": 2585, "壢": 2586, "壤": 2587, "壩": 2588, "士": 2589, "壬": 2590, "壮": 2591, "壯": 2592, "声": 2593, "売": 2594, "壳": 2595, "壶": 2596, "壹": 2597, "壺": 2598, "壽": 2599, "处": 2600, "备": 2601, "変": 2602, "复": 2603, "夏": 2604, "夔": 2605, "夕": 2606, "外": 2607, "夙": 2608, "多": 2609, "夜": 2610, "够": 2611, "夠": 2612, "夢": 2613, "夤": 2614, "夥": 2615, "大": 2616, "天": 2617, "太": 2618, "夫": 2619, "夭": 2620, "央": 2621, "夯": 2622, "失": 2623, "头": 2624, "夷": 2625, "夸": 2626, "夹": 2627, "夺": 2628, "夾": 2629, "奂": 2630, "奄": 2631, "奇": 2632, "奈": 2633, "奉": 2634, "奋": 2635, "奎": 2636, "奏": 2637, "奐": 2638, "契": 2639, "奔": 2640, "奕": 2641, "奖": 2642, "套": 2643, "奘": 2644, "奚": 2645, "奠": 2646, "奢": 2647, "奥": 2648, "奧": 2649, "奪": 2650, "奬": 2651, "奭": 2652, "奮": 2653, "女": 2654, "奴": 2655, "奶": 2656, "奸": 2657, "她": 2658, "好": 2659, "如": 2660, "妃": 2661, "妄": 2662, "妆": 2663, "妇": 2664, "妈": 2665, "妊": 2666, "妍": 2667, "妒": 2668, "妓": 2669, "妖": 2670, "妙": 2671, "妝": 2672, "妞": 2673, "妣": 2674, "妤": 2675, "妥": 2676, "妨": 2677, "妮": 2678, "妲": 2679, "妳": 2680, "妹": 2681, "妻": 2682, "妾": 2683, "姆": 2684, "姉": 2685, "姊": 2686, "始": 2687, "姐": 2688, "姑": 2689, "姒": 2690, "姓": 2691, "委": 2692, "姗": 2693, "姚": 2694, "姜": 2695, "姝": 2696, "姣": 2697, "姥": 2698, "姦": 2699, "姨": 2700, "姪": 2701, "姫": 2702, "姬": 2703, "姻": 2704, "姿": 2705, "威": 2706, "娃": 2707, "娄": 2708, "娅": 2709, "娇": 2710, "娑": 2711, "娓": 2712, "娘": 2713, "娛": 2714, "娜": 2715, "娟": 2716, "娠": 2717, "娣": 2718, "娥": 2719, "娩": 2720, "娱": 2721, "娲": 2722, "娴": 2723, "娶": 2724, "娼": 2725, "婁": 2726, "婆": 2727, "婉": 2728, "婕": 2729, "婚": 2730, "婢": 2731, "婦": 2732, "婧": 2733, "婪": 2734, "婭": 2735, "婴": 2736, "婵": 2737, "婷": 2738, "婺": 2739, "婿": 2740, "媒": 2741, "媚": 2742, "媛": 2743, "媲": 2744, "媳": 2745, "媽": 2746, "媾": 2747, "嫁": 2748, "嫂": 2749, "嫉": 2750, "嫌": 2751, "嫔": 2752, "嫖": 2753, "嫘": 2754, "嫡": 2755, "嫣": 2756, "嫦": 2757, "嫩": 2758, "嫻": 2759, "嬅": 2760, "嬉": 2761, "嬌": 2762, "嬖": 2763, "嬗": 2764, "嬤": 2765, "嬪": 2766, "嬰": 2767, "嬴": 2768, "嬸": 2769, "孀": 2770, "子": 2771, "孑": 2772, "孔": 2773, "孕": 2774, "字": 2775, "存": 2776, "孙": 2777, "孚": 2778, "孛": 2779, "孜": 2780, "孝": 2781, "孟": 2782, "孢": 2783, "季": 2784, "孤": 2785, "孥": 2786, "学": 2787, "孩": 2788, "孪": 2789, "孫": 2790, "孰": 2791, "孱": 2792, "孳": 2793, "孵": 2794, "學": 2795, "孺": 2796, "孽": 2797, "孿": 2798, "宁": 2799, "它": 2800, "宅": 2801, "宇": 2802, "守": 2803, "安": 2804, "宋": 2805, "完": 2806, "宏": 2807, "宓": 2808, "宕": 2809, "宗": 2810, "官": 2811, "宙": 2812, "定": 2813, "宛": 2814, "宜": 2815, "宝": 2816, "实": 2817, "実": 2818, "宠": 2819, "审": 2820, "客": 2821, "宣": 2822, "室": 2823, "宥": 2824, "宦": 2825, "宪": 2826, "宫": 2827, "宮": 2828, "宰": 2829, "害": 2830, "宴": 2831, "宵": 2832, "家": 2833, "宸": 2834, "容": 2835, "宽": 2836, "宾": 2837, "宿": 2838, "寀": 2839, "寂": 2840, "寄": 2841, "寅": 2842, "密": 2843, "寇": 2844, "富": 2845, "寐": 2846, "寒": 2847, "寓": 2848, "寔": 2849, "寛": 2850, "寝": 2851, "寞": 2852, "察": 2853, "寡": 2854, "寢": 2855, "寤": 2856, "寥": 2857, "實": 2858, "寧": 2859, "寨": 2860, "審": 2861, "寫": 2862, "寬": 2863, "寮": 2864, "寰": 2865, "寵": 2866, "寶": 2867, "寸": 2868, "对": 2869, "寺": 2870, "寻": 2871, "导": 2872, "対": 2873, "寿": 2874, "封": 2875, "専": 2876, "射": 2877, "将": 2878, "將": 2879, "專": 2880, "尉": 2881, "尊": 2882, "尋": 2883, "對": 2884, "導": 2885, "小": 2886, "少": 2887, "尔": 2888, "尕": 2889, "尖": 2890, "尘": 2891, "尚": 2892, "尝": 2893, "尤": 2894, "尧": 2895, "尬": 2896, "就": 2897, "尴": 2898, "尷": 2899, "尸": 2900, "尹": 2901, "尺": 2902, "尻": 2903, "尼": 2904, "尽": 2905, "尾": 2906, "尿": 2907, "局": 2908, "屁": 2909, "层": 2910, "居": 2911, "屆": 2912, "屈": 2913, "屉": 2914, "届": 2915, "屋": 2916, "屍": 2917, "屎": 2918, "屏": 2919, "屑": 2920, "展": 2921, "属": 2922, "屠": 2923, "屡": 2924, "屢": 2925, "層": 2926, "履": 2927, "屬": 2928, "屯": 2929, "山": 2930, "屹": 2931, "屿": 2932, "岀": 2933, "岁": 2934, "岂": 2935, "岌": 2936, "岐": 2937, "岑": 2938, "岔": 2939, "岖": 2940, "岗": 2941, "岘": 2942, "岙": 2943, "岚": 2944, "岛": 2945, "岡": 2946, "岢": 2947, "岩": 2948, "岫": 2949, "岬": 2950, "岭": 2951, "岱": 2952, "岳": 2953, "岷": 2954, "岸": 2955, "岿": 2956, "峁": 2957, "峄": 2958, "峇": 2959, "峒": 2960, "峙": 2961, "峡": 2962, "峤": 2963, "峥": 2964, "峦": 2965, "峨": 2966, "峪": 2967, "峭": 2968, "峯": 2969, "峰": 2970, "峴": 2971, "島": 2972, "峻": 2973, "峽": 2974, "崁": 2975, "崃": 2976, "崇": 2977, "崎": 2978, "崐": 2979, "崑": 2980, "崔": 2981, "崖": 2982, "崗": 2983, "崙": 2984, "崛": 2985, "崧": 2986, "崩": 2987, "崭": 2988, "崴": 2989, "嵇": 2990, "嵊": 2991, "嵋": 2992, "嵌": 2993, "嵐": 2994, "嵗": 2995, "嵘": 2996, "嵩": 2997, "嵬": 2998, "嵯": 2999, "嵴": 3000, "嶂": 3001, "嶄": 3002, "嶋": 3003, "嶟": 3004, "嶷": 3005, "嶺": 3006, "嶼": 3007, "嶽": 3008, "巂": 3009, "巅": 3010, "巍": 3011, "巒": 3012, "巔": 3013, "巖": 3014, "川": 3015, "州": 3016, "巡": 3017, "巢": 3018, "工": 3019, "左": 3020, "巧": 3021, "巨": 3022, "巩": 3023, "巫": 3024, "差": 3025, "巯": 3026, "己": 3027, "已": 3028, "巳": 3029, "巴": 3030, "巷": 3031, "巻": 3032, "巽": 3033, "巾": 3034, "币": 3035, "市": 3036, "布": 3037, "帅": 3038, "帆": 3039, "师": 3040, "希": 3041, "帐": 3042, "帑": 3043, "帕": 3044, "帖": 3045, "帘": 3046, "帙": 3047, "帚": 3048, "帛": 3049, "帜": 3050, "帝": 3051, "帥": 3052, "带": 3053, "帧": 3054, "師": 3055, "席": 3056, "帮": 3057, "帯": 3058, "帰": 3059, "帳": 3060, "帶": 3061, "帷": 3062, "常": 3063, "帼": 3064, "帽": 3065, "幀": 3066, "幂": 3067, "幄": 3068, "幅": 3069, "幌": 3070, "幔": 3071, "幕": 3072, "幞": 3073, "幟": 3074, "幡": 3075, "幢": 3076, "幣": 3077, "幫": 3078, "干": 3079, "平": 3080, "年": 3081, "幵": 3082, "并": 3083, "幸": 3084, "幹": 3085, "幺": 3086, "幻": 3087, "幼": 3088, "幽": 3089, "幾": 3090, "广": 3091, "庁": 3092, "広": 3093, "庄": 3094, "庆": 3095, "庇": 3096, "床": 3097, "庋": 3098, "序": 3099, "庐": 3100, "庑": 3101, "库": 3102, "应": 3103, "底": 3104, "庖": 3105, "店": 3106, "庙": 3107, "庚": 3108, "府": 3109, "庞": 3110, "废": 3111, "庠": 3112, "度": 3113, "座": 3114, "庫": 3115, "庭": 3116, "庵": 3117, "庶": 3118, "康": 3119, "庸": 3120, "庾": 3121, "廁": 3122, "廂": 3123, "廈": 3124, "廉": 3125, "廊": 3126, "廍": 3127, "廒": 3128, "廓": 3129, "廕": 3130, "廖": 3131, "廚": 3132, "廟": 3133, "廠": 3134, "廢": 3135, "廣": 3136, "廩": 3137, "廪": 3138, "廬": 3139, "廳": 3140, "延": 3141, "廷": 3142, "建": 3143, "廿": 3144, "开": 3145, "弁": 3146, "异": 3147, "弃": 3148, "弄": 3149, "弇": 3150, "弈": 3151, "弊": 3152, "弋": 3153, "式": 3154, "弑": 3155, "弒": 3156, "弓": 3157, "弔": 3158, "引": 3159, "弗": 3160, "弘": 3161, "弛": 3162, "弟": 3163, "张": 3164, "弢": 3165, "弥": 3166, "弦": 3167, "弧": 3168, "弩": 3169, "弭": 3170, "弯": 3171, "弱": 3172, "張": 3173, "強": 3174, "弹": 3175, "强": 3176, "弼": 3177, "弾": 3178, "彈": 3179, "彌": 3180, "彎": 3181, "归": 3182, "当": 3183, "录": 3184, "彖": 3185, "彗": 3186, "彙": 3187, "彝": 3188, "形": 3189, "彤": 3190, "彥": 3191, "彦": 3192, "彧": 3193, "彩": 3194, "彪": 3195, "彬": 3196, "彭": 3197, "彰": 3198, "影": 3199, "彷": 3200, "役": 3201, "彻": 3202, "彼": 3203, "往": 3204, "征": 3205, "径": 3206, "待": 3207, "徇": 3208, "很": 3209, "徉": 3210, "徊": 3211, "律": 3212, "後": 3213, "徐": 3214, "徑": 3215, "徒": 3216, "徕": 3217, "得": 3218, "徘": 3219, "徙": 3220, "徜": 3221, "從": 3222, "御": 3223, "徨": 3224, "復": 3225, "循": 3226, "徭": 3227, "微": 3228, "徳": 3229, "徴": 3230, "徵": 3231, "德": 3232, "徹": 3233, "徽": 3234, "心": 3235, "必": 3236, "忆": 3237, "忌": 3238, "忍": 3239, "忏": 3240, "忒": 3241, "志": 3242, "忘": 3243, "忙": 3244, "忠": 3245, "忡": 3246, "忤": 3247, "忧": 3248, "快": 3249, "忱": 3250, "念": 3251, "忻": 3252, "忽": 3253, "忾": 3254, "忿": 3255, "怀": 3256, "态": 3257, "怂": 3258, "怅": 3259, "怎": 3260, "怒": 3261, "怕": 3262, "怖": 3263, "怙": 3264, "怛": 3265, "怜": 3266, "思": 3267, "怠": 3268, "怡": 3269, "急": 3270, "怦": 3271, "性": 3272, "怨": 3273, "怪": 3274, "怯": 3275, "怵": 3276, "总": 3277, "恂": 3278, "恃": 3279, "恆": 3280, "恋": 3281, "恍": 3282, "恐": 3283, "恒": 3284, "恕": 3285, "恙": 3286, "恚": 3287, "恢": 3288, "恣": 3289, "恤": 3290, "恥": 3291, "恨": 3292, "恩": 3293, "恪": 3294, "恫": 3295, "恬": 3296, "恭": 3297, "息": 3298, "恰": 3299, "恳": 3300, "恵": 3301, "恶": 3302, "恸": 3303, "恺": 3304, "恻": 3305, "恼": 3306, "恽": 3307, "恿": 3308, "悄": 3309, "悅": 3310, "悉": 3311, "悌": 3312, "悍": 3313, "悔": 3314, "悖": 3315, "悚": 3316, "悝": 3317, "悟": 3318, "悠": 3319, "患": 3320, "悦": 3321, "您": 3322, "悪": 3323, "悬": 3324, "悭": 3325, "悯": 3326, "悱": 3327, "悲": 3328, "悴": 3329, "悶": 3330, "悸": 3331, "悼": 3332, "情": 3333, "惆": 3334, "惇": 3335, "惊": 3336, "惋": 3337, "惑": 3338, "惕": 3339, "惘": 3340, "惚": 3341, "惜": 3342, "惟": 3343, "惠": 3344, "惡": 3345, "惣": 3346, "惦": 3347, "惧": 3348, "惨": 3349, "惩": 3350, "惫": 3351, "惬": 3352, "惭": 3353, "惮": 3354, "惯": 3355, "惰": 3356, "惱": 3357, "想": 3358, "惶": 3359, "惹": 3360, "惺": 3361, "愁": 3362, "愈": 3363, "愉": 3364, "愍": 3365, "意": 3366, "愕": 3367, "愚": 3368, "愛": 3369, "感": 3370, "愤": 3371, "愧": 3372, "愫": 3373, "愷": 3374, "愿": 3375, "慈": 3376, "態": 3377, "慌": 3378, "慎": 3379, "慑": 3380, "慕": 3381, "慘": 3382, "慟": 3383, "慢": 3384, "慣": 3385, "慧": 3386, "慨": 3387, "慮": 3388, "慰": 3389, "慶": 3390, "慷": 3391, "慾": 3392, "憂": 3393, "憋": 3394, "憎": 3395, "憐": 3396, "憑": 3397, "憔": 3398, "憤": 3399, "憧": 3400, "憨": 3401, "憩": 3402, "憫": 3403, "憬": 3404, "憲": 3405, "憶": 3406, "憾": 3407, "懂": 3408, "懇": 3409, "懈": 3410, "應": 3411, "懋": 3412, "懑": 3413, "懒": 3414, "懦": 3415, "懲": 3416, "懵": 3417, "懶": 3418, "懷": 3419, "懸": 3420, "懺": 3421, "懼": 3422, "懿": 3423, "戀": 3424, "戈": 3425, "戊": 3426, "戌": 3427, "戍": 3428, "戎": 3429, "戏": 3430, "成": 3431, "我": 3432, "戒": 3433, "戕": 3434, "或": 3435, "戗": 3436, "战": 3437, "戚": 3438, "戛": 3439, "戟": 3440, "戡": 3441, "戢": 3442, "戦": 3443, "截": 3444, "戮": 3445, "戰": 3446, "戲": 3447, "戳": 3448, "戴": 3449, "戶": 3450, "户": 3451, "戸": 3452, "戾": 3453, "房": 3454, "所": 3455, "扁": 3456, "扇": 3457, "扈": 3458, "扉": 3459, "手": 3460, "才": 3461, "扎": 3462, "扑": 3463, "扒": 3464, "打": 3465, "扔": 3466, "托": 3467, "扛": 3468, "扣": 3469, "扦": 3470, "执": 3471, "扩": 3472, "扪": 3473, "扫": 3474, "扬": 3475, "扭": 3476, "扮": 3477, "扯": 3478, "扰": 3479, "扳": 3480, "扶": 3481, "批": 3482, "扼": 3483, "找": 3484, "承": 3485, "技": 3486, "抄": 3487, "抉": 3488, "把": 3489, "抑": 3490, "抒": 3491, "抓": 3492, "投": 3493, "抖": 3494, "抗": 3495, "折": 3496, "抚": 3497, "抛": 3498, "抟": 3499, "抠": 3500, "抢": 3501, "护": 3502, "报": 3503, "抨": 3504, "披": 3505, "抬": 3506, "抱": 3507, "抵": 3508, "抹": 3509, "押": 3510, "抽": 3511, "拂": 3512, "担": 3513, "拆": 3514, "拇": 3515, "拈": 3516, "拉": 3517, "拋": 3518, "拌": 3519, "拍": 3520, "拎": 3521, "拐": 3522, "拒": 3523, "拓": 3524, "拔": 3525, "拖": 3526, "拗": 3527, "拘": 3528, "拙": 3529, "拚": 3530, "招": 3531, "拜": 3532, "拟": 3533, "拢": 3534, "拣": 3535, "拥": 3536, "拦": 3537, "拧": 3538, "拨": 3539, "择": 3540, "括": 3541, "拭": 3542, "拮": 3543, "拯": 3544, "拱": 3545, "拳": 3546, "拴": 3547, "拷": 3548, "拼": 3549, "拽": 3550, "拾": 3551, "拿": 3552, "持": 3553, "挂": 3554, "指": 3555, "挈": 3556, "按": 3557, "挑": 3558, "挖": 3559, "挚": 3560, "挛": 3561, "挝": 3562, "挞": 3563, "挟": 3564, "挠": 3565, "挡": 3566, "挣": 3567, "挤": 3568, "挥": 3569, "挨": 3570, "挪": 3571, "挫": 3572, "振": 3573, "挹": 3574, "挺": 3575, "挽": 3576, "挾": 3577, "捂": 3578, "捅": 3579, "捆": 3580, "捉": 3581, "捌": 3582, "捍": 3583, "捎": 3584, "捏": 3585, "捐": 3586, "捕": 3587, "捞": 3588, "损": 3589, "捡": 3590, "换": 3591, "捣": 3592, "捧": 3593, "捨": 3594, "捩": 3595, "捭": 3596, "据": 3597, "捲": 3598, "捶": 3599, "捷": 3600, "捺": 3601, "捻": 3602, "掀": 3603, "掂": 3604, "掃": 3605, "授": 3606, "掉": 3607, "掌": 3608, "掏": 3609, "掐": 3610, "排": 3611, "掖": 3612, "掘": 3613, "掙": 3614, "掛": 3615, "掟": 3616, "掠": 3617, "採": 3618, "探": 3619, "掣": 3620, "接": 3621, "控": 3622, "推": 3623, "掩": 3624, "措": 3625, "掬": 3626, "掰": 3627, "掲": 3628, "掳": 3629, "掷": 3630, "掸": 3631, "掺": 3632, "掾": 3633, "揀": 3634, "揄": 3635, "揆": 3636, "揉": 3637, "描": 3638, "提": 3639, "插": 3640, "揖": 3641, "揚": 3642, "換": 3643, "握": 3644, "揣": 3645, "揪": 3646, "揭": 3647, "揮": 3648, "援": 3649, "揽": 3650, "搀": 3651, "搁": 3652, "搂": 3653, "搅": 3654, "損": 3655, "搏": 3656, "搐": 3657, "搓": 3658, "搔": 3659, "搖": 3660, "搗": 3661, "搜": 3662, "搞": 3663, "搪": 3664, "搬": 3665, "搭": 3666, "搶": 3667, "携": 3668, "摄": 3669, "摆": 3670, "摇": 3671, "摈": 3672, "摊": 3673, "摒": 3674, "摔": 3675, "摘": 3676, "摧": 3677, "摩": 3678, "摭": 3679, "摯": 3680, "摸": 3681, "摹": 3682, "摺": 3683, "摻": 3684, "撂": 3685, "撃": 3686, "撇": 3687, "撈": 3688, "撐": 3689, "撑": 3690, "撒": 3691, "撓": 3692, "撕": 3693, "撞": 3694, "撤": 3695, "撥": 3696, "撩": 3697, "撫": 3698, "撬": 3699, "播": 3700, "撮": 3701, "撰": 3702, "撲": 3703, "撷": 3704, "撸": 3705, "撻": 3706, "撼": 3707, "撾": 3708, "撿": 3709, "擁": 3710, "擂": 3711, "擄": 3712, "擅": 3713, "擇": 3714, "擊": 3715, "擋": 3716, "操": 3717, "擎": 3718, "擒": 3719, "擔": 3720, "擘": 3721, "據": 3722, "擠": 3723, "擢": 3724, "擦": 3725, "擬": 3726, "擱": 3727, "擲": 3728, "擴": 3729, "擷": 3730, "擺": 3731, "擾": 3732, "攀": 3733, "攏": 3734, "攒": 3735, "攔": 3736, "攘": 3737, "攜": 3738, "攝": 3739, "攤": 3740, "攪": 3741, "攫": 3742, "攬": 3743, "支": 3744, "收": 3745, "攸": 3746, "改": 3747, "攻": 3748, "放": 3749, "政": 3750, "敁": 3751, "故": 3752, "效": 3753, "敌": 3754, "敍": 3755, "敏": 3756, "救": 3757, "敕": 3758, "敖": 3759, "敗": 3760, "敘": 3761, "教": 3762, "敛": 3763, "敝": 3764, "敞": 3765, "敢": 3766, "散": 3767, "敦": 3768, "敬": 3769, "数": 3770, "敲": 3771, "整": 3772, "敵": 3773, "敷": 3774, "數": 3775, "斂": 3776, "斃": 3777, "文": 3778, "斋": 3779, "斌": 3780, "斎": 3781, "斐": 3782, "斑": 3783, "斓": 3784, "斗": 3785, "料": 3786, "斛": 3787, "斜": 3788, "斟": 3789, "斡": 3790, "斤": 3791, "斥": 3792, "斧": 3793, "斩": 3794, "斫": 3795, "斬": 3796, "断": 3797, "斯": 3798, "新": 3799, "斷": 3800, "方": 3801, "於": 3802, "施": 3803, "旁": 3804, "旃": 3805, "旅": 3806, "旋": 3807, "旌": 3808, "族": 3809, "旒": 3810, "旗": 3811, "无": 3812, "既": 3813, "日": 3814, "旦": 3815, "旧": 3816, "旨": 3817, "早": 3818, "旬": 3819, "旭": 3820, "旱": 3821, "时": 3822, "旷": 3823, "旸": 3824, "旺": 3825, "旻": 3826, "旼": 3827, "昀": 3828, "昂": 3829, "昃": 3830, "昆": 3831, "昇": 3832, "昉": 3833, "昊": 3834, "昌": 3835, "明": 3836, "昏": 3837, "易": 3838, "昔": 3839, "昕": 3840, "昙": 3841, "星": 3842, "映": 3843, "春": 3844, "昧": 3845, "昨": 3846, "昭": 3847, "是": 3848, "昱": 3849, "昴": 3850, "昵": 3851, "昶": 3852, "昺": 3853, "昼": 3854, "显": 3855, "晁": 3856, "時": 3857, "晃": 3858, "晉": 3859, "晋": 3860, "晏": 3861, "晒": 3862, "晓": 3863, "晔": 3864, "晕": 3865, "晖": 3866, "晗": 3867, "晚": 3868, "晝": 3869, "晞": 3870, "晟": 3871, "晤": 3872, "晦": 3873, "晨": 3874, "晩": 3875, "普": 3876, "景": 3877, "晰": 3878, "晴": 3879, "晶": 3880, "晷": 3881, "智": 3882, "晾": 3883, "暂": 3884, "暄": 3885, "暇": 3886, "暈": 3887, "暉": 3888, "暎": 3889, "暐": 3890, "暑": 3891, "暖": 3892, "暗": 3893, "暘": 3894, "暝": 3895, "暠": 3896, "暢": 3897, "暧": 3898, "暨": 3899, "暫": 3900, "暮": 3901, "暱": 3902, "暴": 3903, "暹": 3904, "曄": 3905, "曆": 3906, "曇": 3907, "曉": 3908, "曖": 3909, "曙": 3910, "曜": 3911, "曝": 3912, "曠": 3913, "曦": 3914, "曩": 3915, "曬": 3916, "曰": 3917, "曲": 3918, "曳": 3919, "更": 3920, "書": 3921, "曹": 3922, "曼": 3923, "曾": 3924, "替": 3925, "最": 3926, "會": 3927, "月": 3928, "有": 3929, "朊": 3930, "朋": 3931, "服": 3932, "朏": 3933, "朐": 3934, "朓": 3935, "朔": 3936, "朕": 3937, "朗": 3938, "望": 3939, "朝": 3940, "期": 3941, "朦": 3942, "朧": 3943, "木": 3944, "未": 3945, "末": 3946, "本": 3947, "札": 3948, "术": 3949, "朱": 3950, "朴": 3951, "朵": 3952, "机": 3953, "朽": 3954, "杀": 3955, "杂": 3956, "权": 3957, "杆": 3958, "杈": 3959, "杉": 3960, "李": 3961, "杏": 3962, "材": 3963, "村": 3964, "杓": 3965, "杖": 3966, "杜": 3967, "杞": 3968, "束": 3969, "杠": 3970, "条": 3971, "来": 3972, "杨": 3973, "杭": 3974, "杯": 3975, "杰": 3976, "東": 3977, "杲": 3978, "杳": 3979, "杵": 3980, "杷": 3981, "松": 3982, "板": 3983, "极": 3984, "构": 3985, "枇": 3986, "枉": 3987, "枋": 3988, "析": 3989, "枕": 3990, "林": 3991, "枚": 3992, "果": 3993, "枝": 3994, "枞": 3995, "枢": 3996, "枣": 3997, "枨": 3998, "枪": 3999, "枫": 4000, "枭": 4001, "枯": 4002, "枳": 4003, "架": 4004, "枷": 4005, "枸": 4006, "柄": 4007, "柏": 4008, "某": 4009, "柑": 4010, "柒": 4011, "染": 4012, "柔": 4013, "柘": 4014, "柚": 4015, "柜": 4016, "柞": 4017, "柠": 4018, "柢": 4019, "查": 4020, "柩": 4021, "柬": 4022, "柯": 4023, "柱": 4024, "柲": 4025, "柳": 4026, "柴": 4027, "柵": 4028, "査": 4029, "柿": 4030, "栀": 4031, "栃": 4032, "栄": 4033, "栅": 4034, "标": 4035, "栈": 4036, "栉": 4037, "栋": 4038, "栎": 4039, "栏": 4040, "树": 4041, "栓": 4042, "栖": 4043, "栗": 4044, "校": 4045, "栢": 4046, "栩": 4047, "株": 4048, "栱": 4049, "样": 4050, "核": 4051, "根": 4052, "栻": 4053, "格": 4054, "栽": 4055, "栾": 4056, "桀": 4057, "桁": 4058, "桂": 4059, "桃": 4060, "桅": 4061, "框": 4062, "案": 4063, "桉": 4064, "桌": 4065, "桎": 4066, "桐": 4067, "桑": 4068, "桓": 4069, "桔": 4070, "桜": 4071, "桡": 4072, "桢": 4073, "档": 4074, "桥": 4075, "桦": 4076, "桧": 4077, "桨": 4078, "桩": 4079, "桫": 4080, "桶": 4081, "桿": 4082, "梁": 4083, "梅": 4084, "梆": 4085, "梏": 4086, "梓": 4087, "梗": 4088, "條": 4089, "梟": 4090, "梢": 4091, "梦": 4092, "梧": 4093, "梨": 4094, "梭": 4095, "梯": 4096, "械": 4097, "梳": 4098, "梵": 4099, "梶": 4100, "检": 4101, "棂": 4102, "棄": 4103, "棉": 4104, "棋": 4105, "棍": 4106, "棒": 4107, "棕": 4108, "棗": 4109, "棘": 4110, "棚": 4111, "棟": 4112, "棠": 4113, "棣": 4114, "棧": 4115, "棨": 4116, "森": 4117, "棱": 4118, "棲": 4119, "棵": 4120, "棹": 4121, "棺": 4122, "棻": 4123, "椁": 4124, "椅": 4125, "植": 4126, "椎": 4127, "椒": 4128, "椤": 4129, "椭": 4130, "椰": 4131, "椹": 4132, "椽": 4133, "椿": 4134, "楂": 4135, "楊": 4136, "楓": 4137, "楔": 4138, "楚": 4139, "楝": 4140, "楞": 4141, "楠": 4142, "楣": 4143, "楦": 4144, "楨": 4145, "楫": 4146, "業": 4147, "極": 4148, "楷": 4149, "楸": 4150, "楹": 4151, "楼": 4152, "楽": 4153, "概": 4154, "榄": 4155, "榆": 4156, "榈": 4157, "榉": 4158, "榊": 4159, "榎": 4160, "榔": 4161, "榕": 4162, "榘": 4163, "榛": 4164, "榜": 4165, "榦": 4166, "榧": 4167, "榨": 4168, "榫": 4169, "榭": 4170, "榮": 4171, "榴": 4172, "榷": 4173, "榻": 4174, "槁": 4175, "槃": 4176, "構": 4177, "槌": 4178, "槍": 4179, "槎": 4180, "槐": 4181, "槓": 4182, "様": 4183, "槛": 4184, "槟": 4185, "槭": 4186, "槳": 4187, "槻": 4188, "槽": 4189, "槿": 4190, "樁": 4191, "樂": 4192, "樊": 4193, "樋": 4194, "樑": 4195, "樓": 4196, "樗": 4197, "標": 4198, "樞": 4199, "樟": 4200, "模": 4201, "樣": 4202, "権": 4203, "横": 4204, "樱": 4205, "樵": 4206, "樸": 4207, "樹": 4208, "樺": 4209, "樽": 4210, "樾": 4211, "橄": 4212, "橇": 4213, "橋": 4214, "橘": 4215, "橙": 4216, "機": 4217, "橡": 4218, "橢": 4219, "橥": 4220, "橦": 4221, "橫": 4222, "橱": 4223, "橼": 4224, "檀": 4225, "檄": 4226, "檎": 4227, "檐": 4228, "檔": 4229, "檗": 4230, "檜": 4231, "檢": 4232, "檩": 4233, "檬": 4234, "檯": 4235, "檳": 4236, "檸": 4237, "檻": 4238, "櫂": 4239, "櫃": 4240, "櫚": 4241, "櫛": 4242, "櫸": 4243, "櫻": 4244, "欄": 4245, "權": 4246, "欒": 4247, "欖": 4248, "欠": 4249, "次": 4250, "欢": 4251, "欣": 4252, "欤": 4253, "欧": 4254, "欲": 4255, "欺": 4256, "欽": 4257, "款": 4258, "歆": 4259, "歇": 4260, "歉": 4261, "歌": 4262, "歎": 4263, "歐": 4264, "歙": 4265, "歡": 4266, "止": 4267, "正": 4268, "此": 4269, "步": 4270, "武": 4271, "歧": 4272, "歩": 4273, "歪": 4274, "歲": 4275, "歳": 4276, "歴": 4277, "歷": 4278, "歸": 4279, "歹": 4280, "死": 4281, "歼": 4282, "歿": 4283, "殁": 4284, "殃": 4285, "殆": 4286, "殇": 4287, "殉": 4288, "殊": 4289, "残": 4290, "殓": 4291, "殖": 4292, "殘": 4293, "殚": 4294, "殡": 4295, "殤": 4296, "殭": 4297, "殯": 4298, "殲": 4299, "殴": 4300, "段": 4301, "殷": 4302, "殺": 4303, "殼": 4304, "殿": 4305, "毀": 4306, "毁": 4307, "毂": 4308, "毅": 4309, "毆": 4310, "毋": 4311, "毌": 4312, "母": 4313, "毎": 4314, "每": 4315, "毒": 4316, "毓": 4317, "比": 4318, "毕": 4319, "毖": 4320, "毗": 4321, "毘": 4322, "毙": 4323, "毛": 4324, "毡": 4325, "毫": 4326, "毯": 4327, "毽": 4328, "氏": 4329, "氐": 4330, "民": 4331, "氓": 4332, "气": 4333, "氖": 4334, "気": 4335, "氘": 4336, "氙": 4337, "氚": 4338, "氛": 4339, "氟": 4340, "氡": 4341, "氢": 4342, "氣": 4343, "氦": 4344, "氧": 4345, "氨": 4346, "氩": 4347, "氪": 4348, "氫": 4349, "氮": 4350, "氯": 4351, "氰": 4352, "水": 4353, "永": 4354, "氹": 4355, "氾": 4356, "汀": 4357, "汁": 4358, "求": 4359, "汇": 4360, "汉": 4361, "汊": 4362, "汎": 4363, "汐": 4364, "汕": 4365, "汗": 4366, "汙": 4367, "汛": 4368, "汜": 4369, "汝": 4370, "汞": 4371, "江": 4372, "池": 4373, "污": 4374, "汤": 4375, "汨": 4376, "汪": 4377, "汰": 4378, "汲": 4379, "汴": 4380, "汶": 4381, "汹": 4382, "決": 4383, "汽": 4384, "汾": 4385, "沁": 4386, "沂": 4387, "沃": 4388, "沅": 4389, "沆": 4390, "沈": 4391, "沉": 4392, "沌": 4393, "沐": 4394, "沒": 4395, "沓": 4396, "沔": 4397, "沖": 4398, "沙": 4399, "沛": 4400, "沟": 4401, "没": 4402, "沢": 4403, "沣": 4404, "沤": 4405, "沥": 4406, "沦": 4407, "沧": 4408, "沪": 4409, "沫": 4410, "沭": 4411, "沮": 4412, "沱": 4413, "河": 4414, "沸": 4415, "油": 4416, "治": 4417, "沼": 4418, "沽": 4419, "沾": 4420, "沿": 4421, "況": 4422, "泃": 4423, "泄": 4424, "泉": 4425, "泊": 4426, "泌": 4427, "泓": 4428, "法": 4429, "泗": 4430, "泛": 4431, "泞": 4432, "泠": 4433, "泡": 4434, "波": 4435, "泣": 4436, "泥": 4437, "注": 4438, "泪": 4439, "泮": 4440, "泯": 4441, "泰": 4442, "泱": 4443, "泳": 4444, "泵": 4445, "泸": 4446, "泺": 4447, "泻": 4448, "泼": 4449, "泽": 4450, "泾": 4451, "洁": 4452, "洄": 4453, "洋": 4454, "洎": 4455, "洒": 4456, "洗": 4457, "洙": 4458, "洛": 4459, "洞": 4460, "津": 4461, "洧": 4462, "洩": 4463, "洪": 4464, "洮": 4465, "洱": 4466, "洲": 4467, "洵": 4468, "洶": 4469, "洹": 4470, "洺": 4471, "活": 4472, "洼": 4473, "洽": 4474, "派": 4475, "流": 4476, "浅": 4477, "浆": 4478, "浇": 4479, "浊": 4480, "测": 4481, "济": 4482, "浏": 4483, "浑": 4484, "浒": 4485, "浓": 4486, "浔": 4487, "浙": 4488, "浚": 4489, "浜": 4490, "浣": 4491, "浦": 4492, "浩": 4493, "浪": 4494, "浮": 4495, "浴": 4496, "海": 4497, "浸": 4498, "涂": 4499, "涅": 4500, "涇": 4501, "消": 4502, "涉": 4503, "涌": 4504, "涎": 4505, "涑": 4506, "涓": 4507, "涔": 4508, "涕": 4509, "涛": 4510, "涝": 4511, "涟": 4512, "涡": 4513, "涣": 4514, "涤": 4515, "润": 4516, "涧": 4517, "涨": 4518, "涩": 4519, "涪": 4520, "涮": 4521, "涯": 4522, "液": 4523, "涵": 4524, "涸": 4525, "涼": 4526, "涿": 4527, "淀": 4528, "淄": 4529, "淅": 4530, "淆": 4531, "淇": 4532, "淋": 4533, "淌": 4534, "淑": 4535, "淖": 4536, "淘": 4537, "淙": 4538, "淚": 4539, "淝": 4540, "淞": 4541, "淡": 4542, "淤": 4543, "淦": 4544, "淨": 4545, "淩": 4546, "淪": 4547, "淫": 4548, "淬": 4549, "淮": 4550, "深": 4551, "淳": 4552, "淵": 4553, "混": 4554, "淸": 4555, "淹": 4556, "淺": 4557, "添": 4558, "淼": 4559, "清": 4560, "済": 4561, "渊": 4562, "渍": 4563, "渎": 4564, "渐": 4565, "渔": 4566, "渗": 4567, "渚": 4568, "減": 4569, "渝": 4570, "渠": 4571, "渡": 4572, "渣": 4573, "渤": 4574, "渥": 4575, "渦": 4576, "温": 4577, "測": 4578, "渭": 4579, "港": 4580, "渲": 4581, "渴": 4582, "游": 4583, "渺": 4584, "渾": 4585, "湃": 4586, "湄": 4587, "湊": 4588, "湍": 4589, "湎": 4590, "湖": 4591, "湘": 4592, "湛": 4593, "湟": 4594, "湧": 4595, "湮": 4596, "湯": 4597, "湳": 4598, "湾": 4599, "湿": 4600, "満": 4601, "溃": 4602, "溅": 4603, "溉": 4604, "溏": 4605, "源": 4606, "準": 4607, "溜": 4608, "溝": 4609, "溟": 4610, "溢": 4611, "溥": 4612, "溧": 4613, "溪": 4614, "溫": 4615, "溯": 4616, "溱": 4617, "溴": 4618, "溶": 4619, "溺": 4620, "滁": 4621, "滂": 4622, "滄": 4623, "滅": 4624, "滇": 4625, "滋": 4626, "滌": 4627, "滑": 4628, "滓": 4629, "滔": 4630, "滕": 4631, "滗": 4632, "滘": 4633, "滙": 4634, "滚": 4635, "滞": 4636, "满": 4637, "滤": 4638, "滥": 4639, "滦": 4640, "滨": 4641, "滩": 4642, "滬": 4643, "滯": 4644, "滲": 4645, "滴": 4646, "滸": 4647, "滾": 4648, "滿": 4649, "漁": 4650, "漂": 4651, "漆": 4652, "漏": 4653, "漓": 4654, "演": 4655, "漕": 4656, "漠": 4657, "漢": 4658, "漣": 4659, "漩": 4660, "漪": 4661, "漫": 4662, "漬": 4663, "漯": 4664, "漱": 4665, "漲": 4666, "漳": 4667, "漸": 4668, "漾": 4669, "漿": 4670, "潁": 4671, "潇": 4672, "潍": 4673, "潑": 4674, "潔": 4675, "潘": 4676, "潛": 4677, "潜": 4678, "潞": 4679, "潟": 4680, "潢": 4681, "潤": 4682, "潦": 4683, "潭": 4684, "潮": 4685, "潯": 4686, "潰": 4687, "潴": 4688, "潺": 4689, "潼": 4690, "澀": 4691, "澂": 4692, "澄": 4693, "澈": 4694, "澍": 4695, "澎": 4696, "澗": 4697, "澜": 4698, "澡": 4699, "澤": 4700, "澧": 4701, "澪": 4702, "澱": 4703, "澳": 4704, "澶": 4705, "澹": 4706, "激": 4707, "濁": 4708, "濂": 4709, "濃": 4710, "濉": 4711, "濑": 4712, "濒": 4713, "濕": 4714, "濛": 4715, "濞": 4716, "濟": 4717, "濠": 4718, "濡": 4719, "濤": 4720, "濫": 4721, "濬": 4722, "濮": 4723, "濯": 4724, "濱": 4725, "濾": 4726, "瀅": 4727, "瀉": 4728, "瀋": 4729, "瀏": 4730, "瀑": 4731, "瀕": 4732, "瀘": 4733, "瀚": 4734, "瀛": 4735, "瀝": 4736, "瀟": 4737, "瀧": 4738, "瀨": 4739, "瀬": 4740, "瀾": 4741, "灌": 4742, "灏": 4743, "灑": 4744, "灘": 4745, "灝": 4746, "灞": 4747, "灣": 4748, "火": 4749, "灭": 4750, "灯": 4751, "灰": 4752, "灵": 4753, "灶": 4754, "灸": 4755, "灼": 4756, "災": 4757, "灾": 4758, "灿": 4759, "炀": 4760, "炅": 4761, "炉": 4762, "炊": 4763, "炎": 4764, "炒": 4765, "炔": 4766, "炕": 4767, "炖": 4768, "炘": 4769, "炙": 4770, "炜": 4771, "炤": 4772, "炫": 4773, "炬": 4774, "炭": 4775, "炮": 4776, "炯": 4777, "炳": 4778, "炸": 4779, "点": 4780, "為": 4781, "炼": 4782, "炽": 4783, "烁": 4784, "烂": 4785, "烃": 4786, "烈": 4787, "烏": 4788, "烔": 4789, "烘": 4790, "烙": 4791, "烛": 4792, "烟": 4793, "烤": 4794, "烦": 4795, "烧": 4796, "烨": 4797, "烩": 4798, "烫": 4799, "烬": 4800, "热": 4801, "烯": 4802, "烷": 4803, "烹": 4804, "烽": 4805, "焉": 4806, "焊": 4807, "焓": 4808, "焕": 4809, "焖": 4810, "焘": 4811, "焙": 4812, "焚": 4813, "焜": 4814, "無": 4815, "焦": 4816, "焯": 4817, "焰": 4818, "焱": 4819, "然": 4820, "煅": 4821, "煇": 4822, "煉": 4823, "煊": 4824, "煌": 4825, "煎": 4826, "煒": 4827, "煙": 4828, "煜": 4829, "煞": 4830, "煤": 4831, "煥": 4832, "煦": 4833, "照": 4834, "煩": 4835, "煬": 4836, "煮": 4837, "煲": 4838, "煳": 4839, "煴": 4840, "煽": 4841, "熄": 4842, "熊": 4843, "熏": 4844, "熒": 4845, "熔": 4846, "熙": 4847, "熟": 4848, "熠": 4849, "熨": 4850, "熬": 4851, "熱": 4852, "熵": 4853, "熹": 4854, "熾": 4855, "燁": 4856, "燃": 4857, "燈": 4858, "燉": 4859, "燊": 4860, "燎": 4861, "燒": 4862, "燔": 4863, "燕": 4864, "燙": 4865, "營": 4866, "燥": 4867, "燦": 4868, "燧": 4869, "燭": 4870, "燮": 4871, "燹": 4872, "燾": 4873, "爆": 4874, "爐": 4875, "爛": 4876, "爨": 4877, "爪": 4878, "爬": 4879, "爭": 4880, "爰": 4881, "爱": 4882, "爲": 4883, "爵": 4884, "父": 4885, "爷": 4886, "爸": 4887, "爹": 4888, "爺": 4889, "爻": 4890, "爽": 4891, "爾": 4892, "牂": 4893, "牆": 4894, "片": 4895, "版": 4896, "牌": 4897, "牍": 4898, "牒": 4899, "牙": 4900, "牛": 4901, "牝": 4902, "牟": 4903, "牠": 4904, "牡": 4905, "牢": 4906, "牦": 4907, "牧": 4908, "物": 4909, "牲": 4910, "牵": 4911, "特": 4912, "牺": 4913, "牽": 4914, "牾": 4915, "犀": 4916, "犁": 4917, "犊": 4918, "犍": 4919, "犒": 4920, "犛": 4921, "犧": 4922, "犬": 4923, "犯": 4924, "状": 4925, "犷": 4926, "犹": 4927, "狀": 4928, "狂": 4929, "狄": 4930, "狈": 4931, "狐": 4932, "狗": 4933, "狙": 4934, "狞": 4935, "狠": 4936, "狡": 4937, "狨": 4938, "狩": 4939, "独": 4940, "狭": 4941, "狮": 4942, "狰": 4943, "狱": 4944, "狷": 4945, "狸": 4946, "狹": 4947, "狼": 4948, "猎": 4949, "猕": 4950, "猖": 4951, "猗": 4952, "猛": 4953, "猜": 4954, "猝": 4955, "猥": 4956, "猩": 4957, "猪": 4958, "猫": 4959, "猬": 4960, "献": 4961, "猴": 4962, "猶": 4963, "猷": 4964, "猾": 4965, "猿": 4966, "獄": 4967, "獅": 4968, "獎": 4969, "獐": 4970, "獗": 4971, "獠": 4972, "獣": 4973, "獨": 4974, "獭": 4975, "獲": 4976, "獴": 4977, "獵": 4978, "獸": 4979, "獺": 4980, "獻": 4981, "獾": 4982, "玄": 4983, "率": 4984, "玉": 4985, "王": 4986, "玎": 4987, "玑": 4988, "玕": 4989, "玖": 4990, "玘": 4991, "玛": 4992, "玟": 4993, "玠": 4994, "玥": 4995, "玦": 4996, "玩": 4997, "玫": 4998, "玮": 4999, "环": 5000, "现": 5001, "玲": 5002, "玷": 5003, "玺": 5004, "玻": 5005, "珀": 5006, "珂": 5007, "珅": 5008, "珈": 5009, "珉": 5010, "珊": 5011, "珍": 5012, "珏": 5013, "珑": 5014, "珙": 5015, "珞": 5016, "珠": 5017, "珣": 5018, "珥": 5019, "珩": 5020, "珪": 5021, "班": 5022, "珮": 5023, "珲": 5024, "珺": 5025, "現": 5026, "球": 5027, "琅": 5028, "理": 5029, "琇": 5030, "琉": 5031, "琊": 5032, "琏": 5033, "琐": 5034, "琚": 5035, "琛": 5036, "琢": 5037, "琥": 5038, "琦": 5039, "琨": 5040, "琪": 5041, "琫": 5042, "琬": 5043, "琮": 5044, "琰": 5045, "琳": 5046, "琴": 5047, "琵": 5048, "琶": 5049, "琼": 5050, "瑀": 5051, "瑄": 5052, "瑋": 5053, "瑕": 5054, "瑗": 5055, "瑙": 5056, "瑚": 5057, "瑛": 5058, "瑜": 5059, "瑞": 5060, "瑟": 5061, "瑠": 5062, "瑣": 5063, "瑤": 5064, "瑩": 5065, "瑪": 5066, "瑭": 5067, "瑯": 5068, "瑰": 5069, "瑶": 5070, "瑷": 5071, "瑾": 5072, "璀": 5073, "璁": 5074, "璃": 5075, "璇": 5076, "璉": 5077, "璋": 5078, "璎": 5079, "璐": 5080, "璘": 5081, "璜": 5082, "璝": 5083, "璞": 5084, "璟": 5085, "璠": 5086, "璧": 5087, "璨": 5088, "璩": 5089, "環": 5090, "璽": 5091, "璿": 5092, "瓊": 5093, "瓏": 5094, "瓒": 5095, "瓔": 5096, "瓘": 5097, "瓚": 5098, "瓜": 5099, "瓠": 5100, "瓢": 5101, "瓣": 5102, "瓦": 5103, "瓮": 5104, "瓯": 5105, "瓴": 5106, "瓶": 5107, "瓷": 5108, "甄": 5109, "甑": 5110, "甕": 5111, "甘": 5112, "甙": 5113, "甚": 5114, "甜": 5115, "生": 5116, "產": 5117, "産": 5118, "甥": 5119, "甦": 5120, "用": 5121, "甩": 5122, "甫": 5123, "甬": 5124, "甯": 5125, "田": 5126, "由": 5127, "甲": 5128, "申": 5129, "电": 5130, "男": 5131, "甸": 5132, "町": 5133, "画": 5134, "甾": 5135, "畅": 5136, "畈": 5137, "畋": 5138, "界": 5139, "畏": 5140, "畑": 5141, "畔": 5142, "留": 5143, "畜": 5144, "畝": 5145, "畠": 5146, "畢": 5147, "畤": 5148, "略": 5149, "畦": 5150, "番": 5151, "畫": 5152, "異": 5153, "畲": 5154, "畴": 5155, "當": 5156, "畸": 5157, "畹": 5158, "畿": 5159, "疆": 5160, "疇": 5161, "疊": 5162, "疏": 5163, "疑": 5164, "疗": 5165, "疙": 5166, "疚": 5167, "疝": 5168, "疟": 5169, "疡": 5170, "疣": 5171, "疤": 5172, "疥": 5173, "疫": 5174, "疬": 5175, "疮": 5176, "疯": 5177, "疱": 5178, "疲": 5179, "疳": 5180, "疴": 5181, "疵": 5182, "疸": 5183, "疹": 5184, "疼": 5185, "疽": 5186, "疾": 5187, "痂": 5188, "病": 5189, "症": 5190, "痈": 5191, "痉": 5192, "痊": 5193, "痍": 5194, "痒": 5195, "痔": 5196, "痕": 5197, "痘": 5198, "痛": 5199, "痞": 5200, "痢": 5201, "痣": 5202, "痤": 5203, "痪": 5204, "痫": 5205, "痰": 5206, "痴": 5207, "痹": 5208, "痼": 5209, "痿": 5210, "瘀": 5211, "瘁": 5212, "瘋": 5213, "瘓": 5214, "瘕": 5215, "瘘": 5216, "瘙": 5217, "瘜": 5218, "瘟": 5219, "瘠": 5220, "瘡": 5221, "瘢": 5222, "瘤": 5223, "瘦": 5224, "瘩": 5225, "瘪": 5226, "瘫": 5227, "瘰": 5228, "瘴": 5229, "瘾": 5230, "療": 5231, "癆": 5232, "癌": 5233, "癒": 5234, "癔": 5235, "癖": 5236, "癜": 5237, "癡": 5238, "癢": 5239, "癣": 5240, "癥": 5241, "癫": 5242, "癮": 5243, "癱": 5244, "癲": 5245, "癸": 5246, "発": 5247, "登": 5248, "發": 5249, "白": 5250, "百": 5251, "癿": 5252, "皂": 5253, "的": 5254, "皆": 5255, "皇": 5256, "皈": 5257, "皋": 5258, "皎": 5259, "皓": 5260, "皖": 5261, "皙": 5262, "皞": 5263, "皮": 5264, "皱": 5265, "皴": 5266, "皺": 5267, "皿": 5268, "盂": 5269, "盃": 5270, "盆": 5271, "盈": 5272, "益": 5273, "盎": 5274, "盏": 5275, "盐": 5276, "监": 5277, "盒": 5278, "盔": 5279, "盖": 5280, "盗": 5281, "盘": 5282, "盛": 5283, "盜": 5284, "盟": 5285, "盡": 5286, "監": 5287, "盤": 5288, "盥": 5289, "盧": 5290, "盪": 5291, "目": 5292, "盯": 5293, "盱": 5294, "盲": 5295, "直": 5296, "相": 5297, "盼": 5298, "盾": 5299, "省": 5300, "眈": 5301, "眉": 5302, "看": 5303, "県": 5304, "眞": 5305, "真": 5306, "眠": 5307, "眨": 5308, "眩": 5309, "眶": 5310, "眷": 5311, "眸": 5312, "眺": 5313, "眼": 5314, "眾": 5315, "着": 5316, "睁": 5317, "睐": 5318, "睑": 5319, "睛": 5320, "睜": 5321, "睞": 5322, "睡": 5323, "睢": 5324, "督": 5325, "睦": 5326, "睫": 5327, "睬": 5328, "睹": 5329, "睺": 5330, "睽": 5331, "睾": 5332, "睿": 5333, "瞄": 5334, "瞎": 5335, "瞒": 5336, "瞞": 5337, "瞥": 5338, "瞧": 5339, "瞩": 5340, "瞪": 5341, "瞬": 5342, "瞭": 5343, "瞰": 5344, "瞳": 5345, "瞻": 5346, "瞽": 5347, "瞿": 5348, "矗": 5349, "矚": 5350, "矛": 5351, "矜": 5352, "矢": 5353, "矣": 5354, "知": 5355, "矩": 5356, "矫": 5357, "短": 5358, "矮": 5359, "矯": 5360, "石": 5361, "矶": 5362, "矸": 5363, "矽": 5364, "矾": 5365, "矿": 5366, "码": 5367, "砂": 5368, "砌": 5369, "砍": 5370, "研": 5371, "砖": 5372, "砚": 5373, "砜": 5374, "砝": 5375, "砟": 5376, "砣": 5377, "砥": 5378, "砦": 5379, "砧": 5380, "砭": 5381, "砲": 5382, "破": 5383, "砵": 5384, "砷": 5385, "砸": 5386, "砺": 5387, "砻": 5388, "砼": 5389, "砾": 5390, "础": 5391, "硅": 5392, "硏": 5393, "硐": 5394, "硒": 5395, "硕": 5396, "硝": 5397, "硤": 5398, "硫": 5399, "硬": 5400, "确": 5401, "硷": 5402, "硼": 5403, "碁": 5404, "碇": 5405, "碉": 5406, "碌": 5407, "碍": 5408, "碎": 5409, "碑": 5410, "碓": 5411, "碗": 5412, "碘": 5413, "碚": 5414, "碛": 5415, "碟": 5416, "碣": 5417, "碧": 5418, "碩": 5419, "碰": 5420, "碱": 5421, "碲": 5422, "碳": 5423, "確": 5424, "碼": 5425, "碾": 5426, "磁": 5427, "磅": 5428, "磊": 5429, "磋": 5430, "磐": 5431, "磕": 5432, "磚": 5433, "磡": 5434, "磨": 5435, "磬": 5436, "磯": 5437, "磴": 5438, "磷": 5439, "磺": 5440, "礁": 5441, "礎": 5442, "礙": 5443, "礦": 5444, "礫": 5445, "礴": 5446, "示": 5447, "礼": 5448, "社": 5449, "祀": 5450, "祁": 5451, "祂": 5452, "祇": 5453, "祈": 5454, "祉": 5455, "祎": 5456, "祐": 5457, "祕": 5458, "祖": 5459, "祗": 5460, "祚": 5461, "祛": 5462, "祜": 5463, "祝": 5464, "神": 5465, "祟": 5466, "祠": 5467, "祢": 5468, "祥": 5469, "票": 5470, "祭": 5471, "祯": 5472, "祷": 5473, "祸": 5474, "祺": 5475, "祿": 5476, "禀": 5477, "禁": 5478, "禄": 5479, "禅": 5480, "禍": 5481, "禎": 5482, "福": 5483, "禕": 5484, "禦": 5485, "禧": 5486, "禪": 5487, "禮": 5488, "禱": 5489, "禳": 5490, "禹": 5491, "禺": 5492, "离": 5493, "禽": 5494, "禾": 5495, "禿": 5496, "秀": 5497, "私": 5498, "秃": 5499, "秆": 5500, "秉": 5501, "秋": 5502, "种": 5503, "科": 5504, "秒": 5505, "秘": 5506, "租": 5507, "秣": 5508, "秤": 5509, "秦": 5510, "秧": 5511, "秩": 5512, "秭": 5513, "积": 5514, "称": 5515, "秸": 5516, "移": 5517, "秽": 5518, "稀": 5519, "稅": 5520, "程": 5521, "稍": 5522, "税": 5523, "稔": 5524, "稗": 5525, "稚": 5526, "稜": 5527, "稞": 5528, "稟": 5529, "稠": 5530, "稣": 5531, "種": 5532, "稱": 5533, "稲": 5534, "稳": 5535, "稷": 5536, "稹": 5537, "稻": 5538, "稼": 5539, "稽": 5540, "稿": 5541, "穀": 5542, "穂": 5543, "穆": 5544, "穌": 5545, "積": 5546, "穎": 5547, "穑": 5548, "穗": 5549, "穩": 5550, "穫": 5551, "穰": 5552, "穴": 5553, "究": 5554, "穷": 5555, "穹": 5556, "空": 5557, "穿": 5558, "突": 5559, "窃": 5560, "窄": 5561, "窈": 5562, "窋": 5563, "窍": 5564, "窑": 5565, "窒": 5566, "窕": 5567, "窖": 5568, "窗": 5569, "窘": 5570, "窜": 5571, "窝": 5572, "窟": 5573, "窠": 5574, "窥": 5575, "窦": 5576, "窩": 5577, "窪": 5578, "窮": 5579, "窯": 5580, "窺": 5581, "窿": 5582, "竄": 5583, "竇": 5584, "竊": 5585, "立": 5586, "竑": 5587, "竖": 5588, "站": 5589, "竜": 5590, "竞": 5591, "竟": 5592, "章": 5593, "竣": 5594, "童": 5595, "竭": 5596, "端": 5597, "競": 5598, "竹": 5599, "竺": 5600, "竽": 5601, "竿": 5602, "笃": 5603, "笄": 5604, "笆": 5605, "笈": 5606, "笋": 5607, "笏": 5608, "笑": 5609, "笔": 5610, "笙": 5611, "笛": 5612, "笞": 5613, "笠": 5614, "笥": 5615, "符": 5616, "笨": 5617, "第": 5618, "笳": 5619, "笹": 5620, "笺": 5621, "笼": 5622, "筆": 5623, "等": 5624, "筋": 5625, "筌": 5626, "筍": 5627, "筏": 5628, "筐": 5629, "筑": 5630, "筒": 5631, "答": 5632, "策": 5633, "筚": 5634, "筛": 5635, "筝": 5636, "筠": 5637, "筦": 5638, "筮": 5639, "筱": 5640, "筵": 5641, "筷": 5642, "筹": 5643, "签": 5644, "简": 5645, "箍": 5646, "箐": 5647, "箔": 5648, "箕": 5649, "算": 5650, "箝": 5651, "管": 5652, "箫": 5653, "箭": 5654, "箱": 5655, "箴": 5656, "箸": 5657, "節": 5658, "篁": 5659, "範": 5660, "篆": 5661, "篇": 5662, "築": 5663, "篑": 5664, "篓": 5665, "篠": 5666, "篡": 5667, "篤": 5668, "篩": 5669, "篪": 5670, "篮": 5671, "篱": 5672, "篷": 5673, "簇": 5674, "簋": 5675, "簠": 5676, "簡": 5677, "簧": 5678, "簪": 5679, "簷": 5680, "簸": 5681, "簽": 5682, "簾": 5683, "簿": 5684, "籀": 5685, "籁": 5686, "籃": 5687, "籌": 5688, "籍": 5689, "籠": 5690, "籤": 5691, "籬": 5692, "籲": 5693, "米": 5694, "籴": 5695, "类": 5696, "籼": 5697, "籽": 5698, "粉": 5699, "粑": 5700, "粒": 5701, "粕": 5702, "粗": 5703, "粘": 5704, "粟": 5705, "粤": 5706, "粥": 5707, "粪": 5708, "粮": 5709, "粱": 5710, "粲": 5711, "粳": 5712, "粵": 5713, "粹": 5714, "粽": 5715, "精": 5716, "粿": 5717, "糅": 5718, "糊": 5719, "糕": 5720, "糖": 5721, "糙": 5722, "糜": 5723, "糞": 5724, "糟": 5725, "糠": 5726, "糧": 5727, "糯": 5728, "糰": 5729, "糸": 5730, "系": 5731, "糾": 5732, "紀": 5733, "約": 5734, "紅": 5735, "紊": 5736, "紋": 5737, "納": 5738, "紐": 5739, "紓": 5740, "純": 5741, "紗": 5742, "紘": 5743, "紙": 5744, "級": 5745, "紛": 5746, "素": 5747, "紡": 5748, "索": 5749, "紧": 5750, "紫": 5751, "紮": 5752, "累": 5753, "細": 5754, "紳": 5755, "紹": 5756, "終": 5757, "組": 5758, "経": 5759, "結": 5760, "絕": 5761, "絞": 5762, "絡": 5763, "絢": 5764, "給": 5765, "絨": 5766, "絮": 5767, "統": 5768, "絲": 5769, "絳": 5770, "絵": 5771, "絶": 5772, "絹": 5773, "綁": 5774, "綆": 5775, "綉": 5776, "綏": 5777, "經": 5778, "続": 5779, "綜": 5780, "綝": 5781, "綠": 5782, "綢": 5783, "綦": 5784, "綫": 5785, "綬": 5786, "維": 5787, "綮": 5788, "綱": 5789, "網": 5790, "綴": 5791, "綵": 5792, "綸": 5793, "綺": 5794, "綽": 5795, "綾": 5796, "綿": 5797, "緊": 5798, "緋": 5799, "総": 5800, "緑": 5801, "緒": 5802, "線": 5803, "緝": 5804, "緞": 5805, "締": 5806, "緣": 5807, "編": 5808, "緩": 5809, "緬": 5810, "緯": 5811, "練": 5812, "緹": 5813, "緻": 5814, "縄": 5815, "縉": 5816, "縛": 5817, "縣": 5818, "縫": 5819, "縮": 5820, "縱": 5821, "縻": 5822, "總": 5823, "績": 5824, "繁": 5825, "繆": 5826, "繇": 5827, "織": 5828, "繕": 5829, "繞": 5830, "繡": 5831, "繩": 5832, "繪": 5833, "繫": 5834, "繭": 5835, "繳": 5836, "繹": 5837, "繼": 5838, "纂": 5839, "續": 5840, "纏": 5841, "纓": 5842, "纖": 5843, "纜": 5844, "纠": 5845, "纡": 5846, "红": 5847, "纣": 5848, "纤": 5849, "纥": 5850, "约": 5851, "级": 5852, "纨": 5853, "纪": 5854, "纫": 5855, "纬": 5856, "纭": 5857, "纯": 5858, "纰": 5859, "纱": 5860, "纲": 5861, "纳": 5862, "纵": 5863, "纶": 5864, "纷": 5865, "纸": 5866, "纹": 5867, "纺": 5868, "纽": 5869, "纾": 5870, "线": 5871, "绀": 5872, "绂": 5873, "练": 5874, "组": 5875, "绅": 5876, "细": 5877, "织": 5878, "终": 5879, "绊": 5880, "绌": 5881, "绍": 5882, "绎": 5883, "经": 5884, "绑": 5885, "绒": 5886, "结": 5887, "绕": 5888, "绘": 5889, "给": 5890, "绚": 5891, "绛": 5892, "络": 5893, "绝": 5894, "绞": 5895, "统": 5896, "绢": 5897, "绣": 5898, "绥": 5899, "绦": 5900, "继": 5901, "绩": 5902, "绪": 5903, "绫": 5904, "续": 5905, "绮": 5906, "绯": 5907, "绰": 5908, "绳": 5909, "维": 5910, "绵": 5911, "绶": 5912, "绷": 5913, "绸": 5914, "综": 5915, "绽": 5916, "绾": 5917, "绿": 5918, "缀": 5919, "缁": 5920, "缄": 5921, "缅": 5922, "缆": 5923, "缈": 5924, "缉": 5925, "缎": 5926, "缐": 5927, "缓": 5928, "缔": 5929, "缕": 5930, "编": 5931, "缗": 5932, "缘": 5933, "缙": 5934, "缚": 5935, "缛": 5936, "缜": 5937, "缝": 5938, "缟": 5939, "缠": 5940, "缢": 5941, "缣": 5942, "缤": 5943, "缥": 5944, "缨": 5945, "缩": 5946, "缪": 5947, "缫": 5948, "缬": 5949, "缭": 5950, "缮": 5951, "缰": 5952, "缴": 5953, "缵": 5954, "缶": 5955, "缸": 5956, "缺": 5957, "缽": 5958, "罂": 5959, "罃": 5960, "罄": 5961, "罅": 5962, "罐": 5963, "网": 5964, "罔": 5965, "罕": 5966, "罗": 5967, "罘": 5968, "罚": 5969, "罡": 5970, "罢": 5971, "罩": 5972, "罪": 5973, "置": 5974, "罰": 5975, "署": 5976, "罵": 5977, "罷": 5978, "罹": 5979, "羁": 5980, "羅": 5981, "羈": 5982, "羊": 5983, "羌": 5984, "美": 5985, "羔": 5986, "羚": 5987, "羞": 5988, "羟": 5989, "羡": 5990, "羣": 5991, "群": 5992, "羥": 5993, "羧": 5994, "羨": 5995, "義": 5996, "羯": 5997, "羰": 5998, "羲": 5999, "羸": 6000, "羹": 6001, "羽": 6002, "羿": 6003, "翀": 6004, "翁": 6005, "翅": 6006, "翊": 6007, "翌": 6008, "翎": 6009, "習": 6010, "翔": 6011, "翕": 6012, "翘": 6013, "翟": 6014, "翠": 6015, "翡": 6016, "翥": 6017, "翦": 6018, "翩": 6019, "翰": 6020, "翱": 6021, "翳": 6022, "翹": 6023, "翻": 6024, "翼": 6025, "耀": 6026, "老": 6027, "考": 6028, "耄": 6029, "者": 6030, "耆": 6031, "耋": 6032, "而": 6033, "耍": 6034, "耐": 6035, "耒": 6036, "耕": 6037, "耗": 6038, "耘": 6039, "耙": 6040, "耜": 6041, "耦": 6042, "耳": 6043, "耶": 6044, "耸": 6045, "耻": 6046, "耽": 6047, "耿": 6048, "聂": 6049, "聃": 6050, "聆": 6051, "聊": 6052, "聋": 6053, "职": 6054, "联": 6055, "聖": 6056, "聘": 6057, "聚": 6058, "聞": 6059, "聡": 6060, "聩": 6061, "聪": 6062, "聯": 6063, "聰": 6064, "聲": 6065, "聶": 6066, "職": 6067, "聽": 6068, "聾": 6069, "聿": 6070, "肃": 6071, "肄": 6072, "肅": 6073, "肆": 6074, "肇": 6075, "肉": 6076, "肋": 6077, "肌": 6078, "肓": 6079, "肖": 6080, "肘": 6081, "肚": 6082, "肛": 6083, "肝": 6084, "肟": 6085, "肠": 6086, "股": 6087, "肢": 6088, "肤": 6089, "肥": 6090, "肩": 6091, "肪": 6092, "肮": 6093, "肯": 6094, "肱": 6095, "育": 6096, "肴": 6097, "肺": 6098, "肼": 6099, "肽": 6100, "肾": 6101, "肿": 6102, "胀": 6103, "胁": 6104, "胃": 6105, "胄": 6106, "胆": 6107, "背": 6108, "胍": 6109, "胎": 6110, "胖": 6111, "胙": 6112, "胚": 6113, "胛": 6114, "胜": 6115, "胝": 6116, "胞": 6117, "胡": 6118, "胤": 6119, "胥": 6120, "胧": 6121, "胪": 6122, "胫": 6123, "胬": 6124, "胭": 6125, "胯": 6126, "胰": 6127, "胱": 6128, "胳": 6129, "胶": 6130, "胸": 6131, "胺": 6132, "胼": 6133, "能": 6134, "脂": 6135, "脅": 6136, "脆": 6137, "脇": 6138, "脈": 6139, "脉": 6140, "脊": 6141, "脍": 6142, "脏": 6143, "脐": 6144, "脑": 6145, "脓": 6146, "脖": 6147, "脘": 6148, "脚": 6149, "脛": 6150, "脩": 6151, "脫": 6152, "脯": 6153, "脱": 6154, "脲": 6155, "脷": 6156, "脸": 6157, "脹": 6158, "脾": 6159, "腈": 6160, "腊": 6161, "腋": 6162, "腌": 6163, "腎": 6164, "腐": 6165, "腑": 6166, "腓": 6167, "腔": 6168, "腕": 6169, "腘": 6170, "腙": 6171, "腥": 6172, "腦": 6173, "腧": 6174, "腫": 6175, "腭": 6176, "腮": 6177, "腰": 6178, "腱": 6179, "腳": 6180, "腸": 6181, "腹": 6182, "腺": 6183, "腻": 6184, "腾": 6185, "腿": 6186, "膀": 6187, "膈": 6188, "膊": 6189, "膏": 6190, "膑": 6191, "膘": 6192, "膚": 6193, "膛": 6194, "膜": 6195, "膝": 6196, "膠": 6197, "膦": 6198, "膨": 6199, "膩": 6200, "膳": 6201, "膺": 6202, "膽": 6203, "臀": 6204, "臂": 6205, "臃": 6206, "臆": 6207, "臉": 6208, "臘": 6209, "臚": 6210, "臟": 6211, "臣": 6212, "臥": 6213, "臧": 6214, "臨": 6215, "自": 6216, "臬": 6217, "臭": 6218, "至": 6219, "致": 6220, "臵": 6221, "臺": 6222, "臻": 6223, "臼": 6224, "臾": 6225, "舀": 6226, "舂": 6227, "舅": 6228, "舆": 6229, "與": 6230, "興": 6231, "舉": 6232, "舊": 6233, "舌": 6234, "舍": 6235, "舎": 6236, "舒": 6237, "舔": 6238, "舖": 6239, "舘": 6240, "舛": 6241, "舜": 6242, "舞": 6243, "舟": 6244, "航": 6245, "舫": 6246, "般": 6247, "舰": 6248, "舱": 6249, "舵": 6250, "舶": 6251, "舷": 6252, "舸": 6253, "船": 6254, "舺": 6255, "艇": 6256, "艉": 6257, "艋": 6258, "艏": 6259, "艘": 6260, "艙": 6261, "艦": 6262, "艮": 6263, "良": 6264, "艰": 6265, "艱": 6266, "色": 6267, "艳": 6268, "艷": 6269, "艺": 6270, "艾": 6271, "艿": 6272, "节": 6273, "芃": 6274, "芊": 6275, "芋": 6276, "芍": 6277, "芎": 6278, "芒": 6279, "芙": 6280, "芜": 6281, "芝": 6282, "芡": 6283, "芥": 6284, "芦": 6285, "芩": 6286, "芪": 6287, "芬": 6288, "芭": 6289, "芮": 6290, "芯": 6291, "花": 6292, "芳": 6293, "芷": 6294, "芸": 6295, "芹": 6296, "芽": 6297, "芾": 6298, "苄": 6299, "苇": 6300, "苋": 6301, "苌": 6302, "苍": 6303, "苏": 6304, "苑": 6305, "苓": 6306, "苔": 6307, "苕": 6308, "苗": 6309, "苛": 6310, "苜": 6311, "苞": 6312, "苟": 6313, "苡": 6314, "苣": 6315, "若": 6316, "苦": 6317, "苧": 6318, "苫": 6319, "苯": 6320, "英": 6321, "苴": 6322, "苷": 6323, "苹": 6324, "苻": 6325, "茁": 6326, "茂": 6327, "范": 6328, "茄": 6329, "茅": 6330, "茉": 6331, "茌": 6332, "茎": 6333, "茏": 6334, "茗": 6335, "茜": 6336, "茧": 6337, "茨": 6338, "茫": 6339, "茬": 6340, "茭": 6341, "茯": 6342, "茱": 6343, "茲": 6344, "茴": 6345, "茵": 6346, "茶": 6347, "茸": 6348, "茹": 6349, "荀": 6350, "荃": 6351, "荆": 6352, "草": 6353, "荊": 6354, "荐": 6355, "荒": 6356, "荔": 6357, "荚": 6358, "荞": 6359, "荟": 6360, "荠": 6361, "荡": 6362, "荣": 6363, "荤": 6364, "荥": 6365, "荧": 6366, "荨": 6367, "荩": 6368, "荪": 6369, "荫": 6370, "药": 6371, "荳": 6372, "荷": 6373, "荻": 6374, "荼": 6375, "莅": 6376, "莆": 6377, "莉": 6378, "莊": 6379, "莎": 6380, "莒": 6381, "莓": 6382, "莖": 6383, "莘": 6384, "莞": 6385, "莠": 6386, "莢": 6387, "莨": 6388, "莪": 6389, "莫": 6390, "莱": 6391, "莲": 6392, "莴": 6393, "获": 6394, "莹": 6395, "莺": 6396, "莽": 6397, "菀": 6398, "菁": 6399, "菅": 6400, "菇": 6401, "菊": 6402, "菌": 6403, "菏": 6404, "菓": 6405, "菖": 6406, "菜": 6407, "菟": 6408, "菠": 6409, "菩": 6410, "菫": 6411, "華": 6412, "菰": 6413, "菱": 6414, "菲": 6415, "菴": 6416, "菸": 6417, "菽": 6418, "萃": 6419, "萄": 6420, "萇": 6421, "萊": 6422, "萌": 6423, "萍": 6424, "萎": 6425, "萘": 6426, "萜": 6427, "萝": 6428, "萤": 6429, "营": 6430, "萦": 6431, "萧": 6432, "萨": 6433, "萩": 6434, "萬": 6435, "萱": 6436, "萸": 6437, "萼": 6438, "落": 6439, "葆": 6440, "葉": 6441, "著": 6442, "葛": 6443, "葡": 6444, "董": 6445, "葦": 6446, "葩": 6447, "葫": 6448, "葬": 6449, "葱": 6450, "葵": 6451, "葺": 6452, "蒂": 6453, "蒋": 6454, "蒌": 6455, "蒐": 6456, "蒙": 6457, "蒜": 6458, "蒡": 6459, "蒨": 6460, "蒯": 6461, "蒲": 6462, "蒴": 6463, "蒸": 6464, "蒺": 6465, "蒼": 6466, "蒽": 6467, "蒿": 6468, "蓁": 6469, "蓄": 6470, "蓉": 6471, "蓋": 6472, "蓓": 6473, "蓖": 6474, "蓝": 6475, "蓟": 6476, "蓦": 6477, "蓬": 6478, "蓮": 6479, "蓼": 6480, "蓿": 6481, "蔑": 6482, "蔓": 6483, "蔔": 6484, "蔗": 6485, "蔚": 6486, "蔡": 6487, "蔣": 6488, "蔥": 6489, "蔫": 6490, "蔬": 6491, "蔭": 6492, "蔵": 6493, "蔷": 6494, "蔺": 6495, "蔻": 6496, "蔼": 6497, "蔽": 6498, "蕃": 6499, "蕈": 6500, "蕉": 6501, "蕊": 6502, "蕙": 6503, "蕨": 6504, "蕩": 6505, "蕪": 6506, "蕭": 6507, "蕲": 6508, "蕴": 6509, "蕾": 6510, "薄": 6511, "薅": 6512, "薇": 6513, "薈": 6514, "薊": 6515, "薏": 6516, "薑": 6517, "薔": 6518, "薙": 6519, "薛": 6520, "薦": 6521, "薨": 6522, "薩": 6523, "薪": 6524, "薫": 6525, "薮": 6526, "薯": 6527, "薰": 6528, "藁": 6529, "藉": 6530, "藍": 6531, "藏": 6532, "藐": 6533, "藓": 6534, "藔": 6535, "藕": 6536, "藜": 6537, "藝": 6538, "藤": 6539, "藥": 6540, "藩": 6541, "藪": 6542, "藻": 6543, "藿": 6544, "蘄": 6545, "蘅": 6546, "蘆": 6547, "蘇": 6548, "蘊": 6549, "蘋": 6550, "蘑": 6551, "蘖": 6552, "蘧": 6553, "蘭": 6554, "蘸": 6555, "蘿": 6556, "虎": 6557, "虏": 6558, "虐": 6559, "虑": 6560, "虔": 6561, "處": 6562, "虚": 6563, "虛": 6564, "虜": 6565, "虞": 6566, "號": 6567, "虢": 6568, "虧": 6569, "虫": 6570, "虬": 6571, "虱": 6572, "虹": 6573, "虻": 6574, "虽": 6575, "虾": 6576, "蚀": 6577, "蚁": 6578, "蚂": 6579, "蚊": 6580, "蚋": 6581, "蚌": 6582, "蚓": 6583, "蚕": 6584, "蚜": 6585, "蚣": 6586, "蚤": 6587, "蚩": 6588, "蚪": 6589, "蚯": 6590, "蚱": 6591, "蚴": 6592, "蚵": 6593, "蚶": 6594, "蛀": 6595, "蛇": 6596, "蛉": 6597, "蛊": 6598, "蛋": 6599, "蛎": 6600, "蛔": 6601, "蛙": 6602, "蛛": 6603, "蛟": 6604, "蛤": 6605, "蛭": 6606, "蛮": 6607, "蛰": 6608, "蛳": 6609, "蛴": 6610, "蛹": 6611, "蛺": 6612, "蛻": 6613, "蛾": 6614, "蜀": 6615, "蜂": 6616, "蜃": 6617, "蜇": 6618, "蜈": 6619, "蜊": 6620, "蜍": 6621, "蜒": 6622, "蜓": 6623, "蜕": 6624, "蜗": 6625, "蜘": 6626, "蜚": 6627, "蜜": 6628, "蜡": 6629, "蜢": 6630, "蜥": 6631, "蜱": 6632, "蜴": 6633, "蜻": 6634, "蜿": 6635, "蝇": 6636, "蝉": 6637, "蝌": 6638, "蝎": 6639, "蝕": 6640, "蝗": 6641, "蝙": 6642, "蝠": 6643, "蝦": 6644, "蝮": 6645, "蝰": 6646, "蝴": 6647, "蝶": 6648, "蝸": 6649, "蝼": 6650, "蝽": 6651, "螂": 6652, "螃": 6653, "螅": 6654, "螈": 6655, "融": 6656, "螟": 6657, "螢": 6658, "螨": 6659, "螫": 6660, "螬": 6661, "螭": 6662, "螯": 6663, "螳": 6664, "螺": 6665, "螽": 6666, "蟀": 6667, "蟋": 6668, "蟑": 6669, "蟒": 6670, "蟓": 6671, "蟠": 6672, "蟬": 6673, "蟲": 6674, "蟹": 6675, "蟻": 6676, "蟾": 6677, "蠅": 6678, "蠊": 6679, "蠍": 6680, "蠕": 6681, "蠟": 6682, "蠡": 6683, "蠢": 6684, "蠣": 6685, "蠱": 6686, "蠶": 6687, "蠹": 6688, "蠻": 6689, "血": 6690, "衄": 6691, "衅": 6692, "衆": 6693, "行": 6694, "衍": 6695, "術": 6696, "衔": 6697, "街": 6698, "衙": 6699, "衛": 6700, "衝": 6701, "衞": 6702, "衡": 6703, "衢": 6704, "衣": 6705, "补": 6706, "表": 6707, "衫": 6708, "衬": 6709, "衮": 6710, "衰": 6711, "衷": 6712, "衽": 6713, "袁": 6714, "袂": 6715, "袄": 6716, "袈": 6717, "袋": 6718, "袍": 6719, "袒": 6720, "袖": 6721, "袜": 6722, "袞": 6723, "袢": 6724, "袤": 6725, "被": 6726, "袭": 6727, "袱": 6728, "裁": 6729, "裂": 6730, "装": 6731, "裏": 6732, "裒": 6733, "裔": 6734, "裕": 6735, "裘": 6736, "裙": 6737, "補": 6738, "裝": 6739, "裟": 6740, "裡": 6741, "裤": 6742, "裨": 6743, "裱": 6744, "裳": 6745, "裴": 6746, "裸": 6747, "裹": 6748, "製": 6749, "褂": 6750, "複": 6751, "褐": 6752, "褒": 6753, "褚": 6754, "褥": 6755, "褪": 6756, "褫": 6757, "褲": 6758, "褶": 6759, "襄": 6760, "襞": 6761, "襟": 6762, "襦": 6763, "襪": 6764, "襯": 6765, "襲": 6766, "襻": 6767, "西": 6768, "要": 6769, "覃": 6770, "覆": 6771, "覇": 6772, "見": 6773, "規": 6774, "覓": 6775, "視": 6776, "覧": 6777, "親": 6778, "覲": 6779, "観": 6780, "覺": 6781, "覽": 6782, "觀": 6783, "见": 6784, "观": 6785, "觃": 6786, "规": 6787, "觅": 6788, "视": 6789, "览": 6790, "觉": 6791, "觊": 6792, "觎": 6793, "觐": 6794, "觑": 6795, "角": 6796, "觚": 6797, "觞": 6798, "解": 6799, "触": 6800, "觸": 6801, "言": 6802, "訂": 6803, "計": 6804, "訊": 6805, "討": 6806, "訓": 6807, "訕": 6808, "訖": 6809, "託": 6810, "記": 6811, "訝": 6812, "訟": 6813, "訢": 6814, "訣": 6815, "訥": 6816, "訪": 6817, "設": 6818, "許": 6819, "訳": 6820, "訴": 6821, "訶": 6822, "診": 6823, "註": 6824, "証": 6825, "詐": 6826, "詔": 6827, "評": 6828, "詛": 6829, "詞": 6830, "詠": 6831, "詢": 6832, "詣": 6833, "試": 6834, "詩": 6835, "詭": 6836, "詮": 6837, "話": 6838, "該": 6839, "詳": 6840, "詹": 6841, "誅": 6842, "誇": 6843, "誉": 6844, "誊": 6845, "誌": 6846, "認": 6847, "誓": 6848, "誕": 6849, "誘": 6850, "語": 6851, "誠": 6852, "誡": 6853, "誣": 6854, "誤": 6855, "誥": 6856, "誦": 6857, "說": 6858, "説": 6859, "読": 6860, "誰": 6861, "課": 6862, "誼": 6863, "調": 6864, "談": 6865, "請": 6866, "諏": 6867, "諒": 6868, "論": 6869, "諜": 6870, "諡": 6871, "諦": 6872, "諧": 6873, "諫": 6874, "諭": 6875, "諮": 6876, "諱": 6877, "諷": 6878, "諸": 6879, "諺": 6880, "諾": 6881, "謀": 6882, "謁": 6883, "謂": 6884, "謄": 6885, "謇": 6886, "謊": 6887, "謎": 6888, "謙": 6889, "謚": 6890, "講": 6891, "謝": 6892, "謠": 6893, "謨": 6894, "謫": 6895, "謬": 6896, "謹": 6897, "證": 6898, "譏": 6899, "識": 6900, "譚": 6901, "譜": 6902, "警": 6903, "譬": 6904, "譯": 6905, "議": 6906, "譴": 6907, "護": 6908, "譽": 6909, "讀": 6910, "變": 6911, "讓": 6912, "讚": 6913, "计": 6914, "订": 6915, "讣": 6916, "认": 6917, "讥": 6918, "讦": 6919, "讧": 6920, "讨": 6921, "让": 6922, "讫": 6923, "训": 6924, "议": 6925, "讯": 6926, "记": 6927, "讲": 6928, "讳": 6929, "讴": 6930, "讶": 6931, "讷": 6932, "许": 6933, "讹": 6934, "论": 6935, "讼": 6936, "讽": 6937, "设": 6938, "访": 6939, "诀": 6940, "证": 6941, "诂": 6942, "诃": 6943, "评": 6944, "诅": 6945, "识": 6946, "诈": 6947, "诉": 6948, "诊": 6949, "诋": 6950, "词": 6951, "诏": 6952, "译": 6953, "诒": 6954, "试": 6955, "诗": 6956, "诘": 6957, "诙": 6958, "诚": 6959, "诛": 6960, "话": 6961, "诞": 6962, "诟": 6963, "诠": 6964, "诡": 6965, "询": 6966, "诣": 6967, "诤": 6968, "该": 6969, "详": 6970, "诩": 6971, "诫": 6972, "诬": 6973, "语": 6974, "误": 6975, "诰": 6976, "诱": 6977, "诲": 6978, "说": 6979, "诵": 6980, "请": 6981, "诸": 6982, "诺": 6983, "读": 6984, "诽": 6985, "课": 6986, "诿": 6987, "谀": 6988, "谁": 6989, "调": 6990, "谄": 6991, "谅": 6992, "谆": 6993, "谈": 6994, "谊": 6995, "谋": 6996, "谌": 6997, "谍": 6998, "谎": 6999, "谏": 7000, "谐": 7001, "谑": 7002, "谒": 7003, "谓": 7004, "谔": 7005, "谕": 7006, "谗": 7007, "谘": 7008, "谙": 7009, "谚": 7010, "谛": 7011, "谜": 7012, "谟": 7013, "谢": 7014, "谣": 7015, "谤": 7016, "谥": 7017, "谦": 7018, "谧": 7019, "谨": 7020, "谩": 7021, "谪": 7022, "谬": 7023, "谭": 7024, "谯": 7025, "谱": 7026, "谲": 7027, "谴": 7028, "谵": 7029, "谶": 7030, "谷": 7031, "谿": 7032, "豁": 7033, "豆": 7034, "豇": 7035, "豈": 7036, "豊": 7037, "豌": 7038, "豎": 7039, "豐": 7040, "豔": 7041, "豕": 7042, "豚": 7043, "象": 7044, "豢": 7045, "豪": 7046, "豫": 7047, "豬": 7048, "豳": 7049, "豹": 7050, "貂": 7051, "貉": 7052, "貊": 7053, "貌": 7054, "貓": 7055, "貝": 7056, "貞": 7057, "負": 7058, "財": 7059, "貢": 7060, "貧": 7061, "貨": 7062, "販": 7063, "貪": 7064, "貫": 7065, "責": 7066, "貯": 7067, "貳": 7068, "貴": 7069, "貶": 7070, "買": 7071, "貸": 7072, "費": 7073, "貼": 7074, "貽": 7075, "貿": 7076, "賀": 7077, "賁": 7078, "賂": 7079, "賃": 7080, "賄": 7081, "資": 7082, "賈": 7083, "賊": 7084, "賑": 7085, "賓": 7086, "賜": 7087, "賞": 7088, "賠": 7089, "賡": 7090, "賢": 7091, "賣": 7092, "賤": 7093, "賦": 7094, "質": 7095, "賬": 7096, "賭": 7097, "賴": 7098, "賸": 7099, "賺": 7100, "購": 7101, "賽": 7102, "贈": 7103, "贊": 7104, "贏": 7105, "贓": 7106, "贖": 7107, "贛": 7108, "贝": 7109, "贞": 7110, "负": 7111, "贡": 7112, "财": 7113, "责": 7114, "贤": 7115, "败": 7116, "账": 7117, "货": 7118, "质": 7119, "贩": 7120, "贪": 7121, "贫": 7122, "贬": 7123, "购": 7124, "贮": 7125, "贯": 7126, "贰": 7127, "贱": 7128, "贲": 7129, "贴": 7130, "贵": 7131, "贷": 7132, "贸": 7133, "费": 7134, "贺": 7135, "贻": 7136, "贼": 7137, "贽": 7138, "贾": 7139, "贿": 7140, "赀": 7141, "赁": 7142, "赂": 7143, "赃": 7144, "资": 7145, "赅": 7146, "赈": 7147, "赉": 7148, "赊": 7149, "赋": 7150, "赌": 7151, "赎": 7152, "赏": 7153, "赐": 7154, "赓": 7155, "赔": 7156, "赖": 7157, "赘": 7158, "赙": 7159, "赚": 7160, "赛": 7161, "赜": 7162, "赝": 7163, "赞": 7164, "赟": 7165, "赠": 7166, "赡": 7167, "赢": 7168, "赣": 7169, "赤": 7170, "赦": 7171, "赫": 7172, "赭": 7173, "走": 7174, "赳": 7175, "赴": 7176, "赵": 7177, "赶": 7178, "起": 7179, "趁": 7180, "超": 7181, "越": 7182, "趋": 7183, "趕": 7184, "趙": 7185, "趟": 7186, "趣": 7187, "趨": 7188, "足": 7189, "趴": 7190, "趸": 7191, "趺": 7192, "趾": 7193, "跃": 7194, "跆": 7195, "跋": 7196, "跌": 7197, "跑": 7198, "跖": 7199, "跗": 7200, "跚": 7201, "跛": 7202, "距": 7203, "跟": 7204, "跡": 7205, "跤": 7206, "跨": 7207, "跪": 7208, "路": 7209, "跳": 7210, "践": 7211, "跷": 7212, "跸": 7213, "跻": 7214, "踊": 7215, "踌": 7216, "踏": 7217, "踐": 7218, "踔": 7219, "踝": 7220, "踞": 7221, "踢": 7222, "踩": 7223, "踪": 7224, "踵": 7225, "蹂": 7226, "蹄": 7227, "蹇": 7228, "蹈": 7229, "蹊": 7230, "蹒": 7231, "蹟": 7232, "蹤": 7233, "蹦": 7234, "蹬": 7235, "蹭": 7236, "蹲": 7237, "蹴": 7238, "蹶": 7239, "躁": 7240, "躇": 7241, "躍": 7242, "躏": 7243, "身": 7244, "躬": 7245, "躯": 7246, "躲": 7247, "躺": 7248, "軀": 7249, "車": 7250, "軋": 7251, "軌": 7252, "軍": 7253, "軒": 7254, "軟": 7255, "軫": 7256, "軸": 7257, "軼": 7258, "軾": 7259, "較": 7260, "輅": 7261, "載": 7262, "輒": 7263, "輓": 7264, "輔": 7265, "輕": 7266, "輛": 7267, "輝": 7268, "輟": 7269, "輩": 7270, "輪": 7271, "輯": 7272, "輸": 7273, "輻": 7274, "輾": 7275, "輿": 7276, "轄": 7277, "轉": 7278, "轍": 7279, "轎": 7280, "轟": 7281, "车": 7282, "轧": 7283, "轨": 7284, "轩": 7285, "轫": 7286, "转": 7287, "轭": 7288, "轮": 7289, "软": 7290, "轰": 7291, "轲": 7292, "轴": 7293, "轶": 7294, "轻": 7295, "轼": 7296, "载": 7297, "轿": 7298, "较": 7299, "辄": 7300, "辅": 7301, "辆": 7302, "辇": 7303, "辈": 7304, "辉": 7305, "辊": 7306, "辋": 7307, "辍": 7308, "辎": 7309, "辏": 7310, "辐": 7311, "辑": 7312, "输": 7313, "辕": 7314, "辖": 7315, "辗": 7316, "辙": 7317, "辛": 7318, "辜": 7319, "辞": 7320, "辟": 7321, "辣": 7322, "辦": 7323, "辨": 7324, "辩": 7325, "辫": 7326, "辭": 7327, "辯": 7328, "辰": 7329, "辱": 7330, "農": 7331, "边": 7332, "辺": 7333, "辻": 7334, "込": 7335, "辽": 7336, "达": 7337, "迁": 7338, "迂": 7339, "迄": 7340, "迅": 7341, "过": 7342, "迈": 7343, "迎": 7344, "运": 7345, "近": 7346, "迓": 7347, "返": 7348, "迕": 7349, "还": 7350, "这": 7351, "进": 7352, "远": 7353, "违": 7354, "连": 7355, "迟": 7356, "迢": 7357, "迤": 7358, "迥": 7359, "迦": 7360, "迨": 7361, "迩": 7362, "迪": 7363, "迫": 7364, "迭": 7365, "述": 7366, "迳": 7367, "迴": 7368, "迷": 7369, "迸": 7370, "迹": 7371, "迺": 7372, "追": 7373, "退": 7374, "送": 7375, "适": 7376, "逃": 7377, "逅": 7378, "逆": 7379, "选": 7380, "逊": 7381, "逋": 7382, "逍": 7383, "透": 7384, "逐": 7385, "逑": 7386, "递": 7387, "途": 7388, "逕": 7389, "逖": 7390, "逗": 7391, "這": 7392, "通": 7393, "逛": 7394, "逝": 7395, "逞": 7396, "速": 7397, "造": 7398, "逢": 7399, "連": 7400, "逮": 7401, "週": 7402, "進": 7403, "逵": 7404, "逸": 7405, "逻": 7406, "逼": 7407, "逾": 7408, "遁": 7409, "遂": 7410, "遇": 7411, "遊": 7412, "運": 7413, "遍": 7414, "過": 7415, "遏": 7416, "遐": 7417, "遑": 7418, "遒": 7419, "道": 7420, "達": 7421, "違": 7422, "遗": 7423, "遘": 7424, "遙": 7425, "遜": 7426, "遞": 7427, "遠": 7428, "遣": 7429, "遥": 7430, "遨": 7431, "適": 7432, "遭": 7433, "遮": 7434, "遲": 7435, "遴": 7436, "遵": 7437, "遷": 7438, "選": 7439, "遺": 7440, "遼": 7441, "遽": 7442, "避": 7443, "邀": 7444, "邁": 7445, "邂": 7446, "邃": 7447, "還": 7448, "邇": 7449, "邈": 7450, "邊": 7451, "邏": 7452, "邑": 7453, "邓": 7454, "邕": 7455, "邙": 7456, "邛": 7457, "邝": 7458, "邠": 7459, "邡": 7460, "邢": 7461, "那": 7462, "邦": 7463, "邨": 7464, "邪": 7465, "邬": 7466, "邮": 7467, "邯": 7468, "邰": 7469, "邱": 7470, "邳": 7471, "邵": 7472, "邸": 7473, "邹": 7474, "邺": 7475, "邻": 7476, "郁": 7477, "郊": 7478, "郎": 7479, "郐": 7480, "郑": 7481, "郓": 7482, "郗": 7483, "郝": 7484, "郡": 7485, "郢": 7486, "郤": 7487, "郦": 7488, "郧": 7489, "部": 7490, "郫": 7491, "郭": 7492, "郯": 7493, "郴": 7494, "郵": 7495, "郷": 7496, "郸": 7497, "都": 7498, "郾": 7499, "鄂": 7500, "鄉": 7501, "鄒": 7502, "鄔": 7503, "鄙": 7504, "鄜": 7505, "鄞": 7506, "鄠": 7507, "鄢": 7508, "鄧": 7509, "鄭": 7510, "鄰": 7511, "鄱": 7512, "鄲": 7513, "鄴": 7514, "鄺": 7515, "酆": 7516, "酈": 7517, "酉": 7518, "酋": 7519, "酌": 7520, "配": 7521, "酐": 7522, "酒": 7523, "酗": 7524, "酚": 7525, "酝": 7526, "酞": 7527, "酢": 7528, "酣": 7529, "酥": 7530, "酪": 7531, "酬": 7532, "酮": 7533, "酯": 7534, "酰": 7535, "酱": 7536, "酵": 7537, "酶": 7538, "酷": 7539, "酸": 7540, "酿": 7541, "醃": 7542, "醇": 7543, "醉": 7544, "醋": 7545, "醌": 7546, "醍": 7547, "醐": 7548, "醒": 7549, "醚": 7550, "醛": 7551, "醜": 7552, "醣": 7553, "醪": 7554, "醫": 7555, "醬": 7556, "醮": 7557, "醯": 7558, "醴": 7559, "釀": 7560, "釁": 7561, "釆": 7562, "采": 7563, "釉": 7564, "释": 7565, "釋": 7566, "里": 7567, "重": 7568, "野": 7569, "量": 7570, "釐": 7571, "金": 7572, "釗": 7573, "釘": 7574, "釜": 7575, "針": 7576, "釣": 7577, "釧": 7578, "鈉": 7579, "鈍": 7580, "鈎": 7581, "鈔": 7582, "鈕": 7583, "鈞": 7584, "鈣": 7585, "鈦": 7586, "鈴": 7587, "鈺": 7588, "鈾": 7589, "鉀": 7590, "鉄": 7591, "鉅": 7592, "鉉": 7593, "鉗": 7594, "鉛": 7595, "鉢": 7596, "鉤": 7597, "鉬": 7598, "鉴": 7599, "鉻": 7600, "銀": 7601, "銃": 7602, "銅": 7603, "銓": 7604, "銖": 7605, "銘": 7606, "銜": 7607, "銩": 7608, "銮": 7609, "銳": 7610, "銷": 7611, "鋁": 7612, "鋅": 7613, "鋇": 7614, "鋒": 7615, "鋤": 7616, "鋪": 7617, "鋯": 7618, "鋰": 7619, "鋸": 7620, "鋼": 7621, "錄": 7622, "錇": 7623, "錐": 7624, "錘": 7625, "錚": 7626, "錢": 7627, "錦": 7628, "錨": 7629, "錫": 7630, "錯": 7631, "録": 7632, "錶": 7633, "鍊": 7634, "鍋": 7635, "鍍": 7636, "鍛": 7637, "鍵": 7638, "鍾": 7639, "鎂": 7640, "鎊": 7641, "鎌": 7642, "鎏": 7643, "鎔": 7644, "鎖": 7645, "鎗": 7646, "鎚": 7647, "鎧": 7648, "鎬": 7649, "鎮": 7650, "鎳": 7651, "鏈": 7652, "鏖": 7653, "鏗": 7654, "鏘": 7655, "鏞": 7656, "鏡": 7657, "鏢": 7658, "鏤": 7659, "鏽": 7660, "鐘": 7661, "鐮": 7662, "鐳": 7663, "鐵": 7664, "鐸": 7665, "鑄": 7666, "鑑": 7667, "鑒": 7668, "鑛": 7669, "鑣": 7670, "鑫": 7671, "鑰": 7672, "鑲": 7673, "鑼": 7674, "鑽": 7675, "鑾": 7676, "鑿": 7677, "钆": 7678, "钇": 7679, "针": 7680, "钉": 7681, "钊": 7682, "钌": 7683, "钍": 7684, "钎": 7685, "钐": 7686, "钒": 7687, "钓": 7688, "钕": 7689, "钗": 7690, "钘": 7691, "钙": 7692, "钚": 7693, "钛": 7694, "钜": 7695, "钝": 7696, "钞": 7697, "钟": 7698, "钠": 7699, "钡": 7700, "钢": 7701, "钣": 7702, "钤": 7703, "钥": 7704, "钦": 7705, "钧": 7706, "钨": 7707, "钩": 7708, "钪": 7709, "钮": 7710, "钯": 7711, "钰": 7712, "钱": 7713, "钳": 7714, "钴": 7715, "钵": 7716, "钺": 7717, "钻": 7718, "钼": 7719, "钽": 7720, "钾": 7721, "钿": 7722, "铀": 7723, "铁": 7724, "铂": 7725, "铃": 7726, "铅": 7727, "铆": 7728, "铈": 7729, "铉": 7730, "铊": 7731, "铋": 7732, "铌": 7733, "铍": 7734, "铎": 7735, "铐": 7736, "铑": 7737, "铒": 7738, "铛": 7739, "铜": 7740, "铝": 7741, "铟": 7742, "铠": 7743, "铡": 7744, "铢": 7745, "铣": 7746, "铤": 7747, "铨": 7748, "铪": 7749, "铬": 7750, "铭": 7751, "铮": 7752, "铯": 7753, "铰": 7754, "铱": 7755, "铲": 7756, "铳": 7757, "铵": 7758, "银": 7759, "铷": 7760, "铸": 7761, "铺": 7762, "铼": 7763, "链": 7764, "铿": 7765, "销": 7766, "锁": 7767, "锂": 7768, "锄": 7769, "锅": 7770, "锆": 7771, "锈": 7772, "锉": 7773, "锋": 7774, "锌": 7775, "锏": 7776, "锐": 7777, "锑": 7778, "锕": 7779, "锗": 7780, "错": 7781, "锚": 7782, "锛": 7783, "锝": 7784, "锟": 7785, "锡": 7786, "锢": 7787, "锣": 7788, "锤": 7789, "锥": 7790, "锦": 7791, "锭": 7792, "键": 7793, "锯": 7794, "锰": 7795, "锲": 7796, "锴": 7797, "锵": 7798, "锶": 7799, "锷": 7800, "锺": 7801, "锻": 7802, "镀": 7803, "镁": 7804, "镂": 7805, "镇": 7806, "镉": 7807, "镊": 7808, "镌": 7809, "镍": 7810, "镐": 7811, "镑": 7812, "镒": 7813, "镓": 7814, "镕": 7815, "镖": 7816, "镗": 7817, "镛": 7818, "镜": 7819, "镝": 7820, "镞": 7821, "镣": 7822, "镦": 7823, "镧": 7824, "镭": 7825, "镯": 7826, "镰": 7827, "镳": 7828, "镶": 7829, "長": 7830, "长": 7831, "門": 7832, "閃": 7833, "閉": 7834, "開": 7835, "閏": 7836, "閑": 7837, "閒": 7838, "間": 7839, "閔": 7840, "閘": 7841, "関": 7842, "閣": 7843, "閤": 7844, "閥": 7845, "閨": 7846, "閩": 7847, "閱": 7848, "閲": 7849, "閻": 7850, "闆": 7851, "闇": 7852, "闈": 7853, "闊": 7854, "闋": 7855, "闐": 7856, "闕": 7857, "闖": 7858, "闘": 7859, "關": 7860, "闡": 7861, "闢": 7862, "门": 7863, "闩": 7864, "闪": 7865, "闫": 7866, "闭": 7867, "问": 7868, "闯": 7869, "闰": 7870, "闱": 7871, "闲": 7872, "闳": 7873, "间": 7874, "闵": 7875, "闷": 7876, "闸": 7877, "闹": 7878, "闺": 7879, "闻": 7880, "闼": 7881, "闽": 7882, "闾": 7883, "阀": 7884, "阁": 7885, "阂": 7886, "阅": 7887, "阆": 7888, "阇": 7889, "阈": 7890, "阉": 7891, "阎": 7892, "阐": 7893, "阑": 7894, "阔": 7895, "阕": 7896, "阖": 7897, "阗": 7898, "阙": 7899, "阚": 7900, "阜": 7901, "队": 7902, "阡": 7903, "阪": 7904, "阮": 7905, "阯": 7906, "阱": 7907, "防": 7908, "阳": 7909, "阴": 7910, "阵": 7911, "阶": 7912, "阻": 7913, "阿": 7914, "陀": 7915, "陂": 7916, "附": 7917, "际": 7918, "陆": 7919, "陇": 7920, "陈": 7921, "陉": 7922, "陋": 7923, "陌": 7924, "降": 7925, "限": 7926, "陕": 7927, "陛": 7928, "陜": 7929, "陝": 7930, "陞": 7931, "陟": 7932, "陡": 7933, "院": 7934, "陣": 7935, "除": 7936, "陨": 7937, "险": 7938, "陪": 7939, "陰": 7940, "陲": 7941, "陳": 7942, "陵": 7943, "陶": 7944, "陷": 7945, "陸": 7946, "険": 7947, "陽": 7948, "隅": 7949, "隆": 7950, "隈": 7951, "隊": 7952, "隋": 7953, "隍": 7954, "階": 7955, "随": 7956, "隐": 7957, "隔": 7958, "隕": 7959, "隗": 7960, "隘": 7961, "隙": 7962, "際": 7963, "障": 7964, "隧": 7965, "隨": 7966, "險": 7967, "隰": 7968, "隱": 7969, "隴": 7970, "隶": 7971, "隷": 7972, "隸": 7973, "隹": 7974, "隻": 7975, "隼": 7976, "隽": 7977, "难": 7978, "雀": 7979, "雁": 7980, "雄": 7981, "雅": 7982, "集": 7983, "雇": 7984, "雉": 7985, "雋": 7986, "雌": 7987, "雍": 7988, "雎": 7989, "雏": 7990, "雑": 7991, "雒": 7992, "雕": 7993, "雖": 7994, "雙": 7995, "雛": 7996, "雜": 7997, "雞": 7998, "雠": 7999, "離": 8000, "難": 8001, "雨": 8002, "雪": 8003, "雯": 8004, "雲": 8005, "雳": 8006, "零": 8007, "雷": 8008, "雹": 8009, "電": 8010, "雾": 8011, "需": 8012, "霁": 8013, "霄": 8014, "霆": 8015, "震": 8016, "霈": 8017, "霉": 8018, "霍": 8019, "霎": 8020, "霏": 8021, "霑": 8022, "霓": 8023, "霖": 8024, "霜": 8025, "霞": 8026, "霧": 8027, "霨": 8028, "霰": 8029, "露": 8030, "霸": 8031, "霹": 8032, "霾": 8033, "靂": 8034, "靈": 8035, "青": 8036, "靓": 8037, "靖": 8038, "静": 8039, "靚": 8040, "靛": 8041, "靜": 8042, "非": 8043, "靠": 8044, "靡": 8045, "面": 8046, "革": 8047, "靳": 8048, "靴": 8049, "靶": 8050, "靺": 8051, "靼": 8052, "鞅": 8053, "鞋": 8054, "鞍": 8055, "鞏": 8056, "鞑": 8057, "鞘": 8058, "鞠": 8059, "鞨": 8060, "鞫": 8061, "鞭": 8062, "韃": 8063, "韋": 8064, "韌": 8065, "韓": 8066, "韜": 8067, "韞": 8068, "韦": 8069, "韧": 8070, "韩": 8071, "韫": 8072, "韬": 8073, "韭": 8074, "音": 8075, "韵": 8076, "韶": 8077, "韻": 8078, "響": 8079, "頁": 8080, "頂": 8081, "頃": 8082, "項": 8083, "順": 8084, "須": 8085, "頌": 8086, "預": 8087, "頑": 8088, "頒": 8089, "頓": 8090, "頗": 8091, "領": 8092, "頜": 8093, "頡": 8094, "頤": 8095, "頫": 8096, "頭": 8097, "頰": 8098, "頷": 8099, "頸": 8100, "頹": 8101, "頻": 8102, "頼": 8103, "顆": 8104, "題": 8105, "額": 8106, "顎": 8107, "顏": 8108, "顒": 8109, "顔": 8110, "願": 8111, "顛": 8112, "類": 8113, "顥": 8114, "顧": 8115, "顫": 8116, "顯": 8117, "顱": 8118, "页": 8119, "顶": 8120, "顷": 8121, "项": 8122, "顺": 8123, "须": 8124, "顼": 8125, "顽": 8126, "顾": 8127, "顿": 8128, "颁": 8129, "颂": 8130, "预": 8131, "颅": 8132, "领": 8133, "颇": 8134, "颈": 8135, "颉": 8136, "颊": 8137, "颌": 8138, "颍": 8139, "颐": 8140, "频": 8141, "颓": 8142, "颔": 8143, "颖": 8144, "颗": 8145, "题": 8146, "颙": 8147, "颚": 8148, "颛": 8149, "颜": 8150, "额": 8151, "颞": 8152, "颠": 8153, "颢": 8154, "颤": 8155, "颧": 8156, "風": 8157, "颱": 8158, "颶": 8159, "飄": 8160, "飆": 8161, "风": 8162, "飒": 8163, "飓": 8164, "飘": 8165, "飙": 8166, "飚": 8167, "飛": 8168, "飞": 8169, "食": 8170, "飡": 8171, "飢": 8172, "飨": 8173, "飪": 8174, "飭": 8175, "飯": 8176, "飲": 8177, "飼": 8178, "飽": 8179, "飾": 8180, "餅": 8181, "餉": 8182, "養": 8183, "餌": 8184, "餐": 8185, "餓": 8186, "餘": 8187, "餚": 8188, "館": 8189, "餮": 8190, "餵": 8191, "饋": 8192, "饑": 8193, "饒": 8194, "饕": 8195, "饗": 8196, "饥": 8197, "饪": 8198, "饬": 8199, "饭": 8200, "饮": 8201, "饯": 8202, "饰": 8203, "饱": 8204, "饲": 8205, "饴": 8206, "饵": 8207, "饶": 8208, "饷": 8209, "饺": 8210, "饼": 8211, "饽": 8212, "饿": 8213, "馀": 8214, "馁": 8215, "馅": 8216, "馆": 8217, "馈": 8218, "馍": 8219, "馏": 8220, "馐": 8221, "馒": 8222, "馕": 8223, "首": 8224, "馗": 8225, "香": 8226, "馥": 8227, "馨": 8228, "馬": 8229, "馭": 8230, "馮": 8231, "馳": 8232, "馴": 8233, "駁": 8234, "駄": 8235, "駅": 8236, "駐": 8237, "駒": 8238, "駕": 8239, "駙": 8240, "駛": 8241, "駝": 8242, "駟": 8243, "駭": 8244, "駱": 8245, "駿": 8246, "騎": 8247, "騙": 8248, "騰": 8249, "騷": 8250, "驃": 8251, "驄": 8252, "驅": 8253, "驊": 8254, "驕": 8255, "驗": 8256, "驚": 8257, "驛": 8258, "驟": 8259, "驢": 8260, "驤": 8261, "驥": 8262, "驪": 8263, "马": 8264, "驭": 8265, "驮": 8266, "驯": 8267, "驰": 8268, "驱": 8269, "驳": 8270, "驴": 8271, "驶": 8272, "驷": 8273, "驸": 8274, "驹": 8275, "驻": 8276, "驼": 8277, "驾": 8278, "驿": 8279, "骁": 8280, "骂": 8281, "骄": 8282, "骅": 8283, "骆": 8284, "骇": 8285, "骈": 8286, "骊": 8287, "骋": 8288, "验": 8289, "骏": 8290, "骑": 8291, "骗": 8292, "骚": 8293, "骛": 8294, "骞": 8295, "骠": 8296, "骡": 8297, "骤": 8298, "骥": 8299, "骧": 8300, "骨": 8301, "骰": 8302, "骶": 8303, "骷": 8304, "骸": 8305, "骺": 8306, "骼": 8307, "髀": 8308, "髁": 8309, "髂": 8310, "髋": 8311, "髌": 8312, "髒": 8313, "髓": 8314, "體": 8315, "高": 8316, "髙": 8317, "髡": 8318, "髦": 8319, "髮": 8320, "髯": 8321, "髹": 8322, "髻": 8323, "鬃": 8324, "鬆": 8325, "鬓": 8326, "鬚": 8327, "鬟": 8328, "鬣": 8329, "鬥": 8330, "鬧": 8331, "鬱": 8332, "鬲": 8333, "鬻": 8334, "鬼": 8335, "魁": 8336, "魂": 8337, "魄": 8338, "魅": 8339, "魇": 8340, "魏": 8341, "魔": 8342, "魚": 8343, "魯": 8344, "魷": 8345, "鮎": 8346, "鮑": 8347, "鮫": 8348, "鮭": 8349, "鮮": 8350, "鯉": 8351, "鯊": 8352, "鯓": 8353, "鯖": 8354, "鯙": 8355, "鯛": 8356, "鯤": 8357, "鯨": 8358, "鯰": 8359, "鰂": 8360, "鰓": 8361, "鰭": 8362, "鰲": 8363, "鰻": 8364, "鱉": 8365, "鱊": 8366, "鱗": 8367, "鱲": 8368, "鱷": 8369, "鱸": 8370, "鱼": 8371, "鱿": 8372, "鲁": 8373, "鲈": 8374, "鲍": 8375, "鲑": 8376, "鲜": 8377, "鲟": 8378, "鲤": 8379, "鲧": 8380, "鲨": 8381, "鲫": 8382, "鲲": 8383, "鲵": 8384, "鲶": 8385, "鲸": 8386, "鲻": 8387, "鳃": 8388, "鳄": 8389, "鳅": 8390, "鳌": 8391, "鳍": 8392, "鳎": 8393, "鳏": 8394, "鳖": 8395, "鳗": 8396, "鳚": 8397, "鳝": 8398, "鳞": 8399, "鳥": 8400, "鳩": 8401, "鳳": 8402, "鳴": 8403, "鳶": 8404, "鴉": 8405, "鴞": 8406, "鴨": 8407, "鴻": 8408, "鴿": 8409, "鵑": 8410, "鵜": 8411, "鵝": 8412, "鵡": 8413, "鵬": 8414, "鵰": 8415, "鵲": 8416, "鵺": 8417, "鵾": 8418, "鶯": 8419, "鶴": 8420, "鶿": 8421, "鷄": 8422, "鷗": 8423, "鷲": 8424, "鷹": 8425, "鷺": 8426, "鸊": 8427, "鸕": 8428, "鸚": 8429, "鸛": 8430, "鸞": 8431, "鸟": 8432, "鸠": 8433, "鸡": 8434, "鸢": 8435, "鸣": 8436, "鸥": 8437, "鸦": 8438, "鸭": 8439, "鸮": 8440, "鸯": 8441, "鸱": 8442, "鸳": 8443, "鸷": 8444, "鸽": 8445, "鸾": 8446, "鸿": 8447, "鹃": 8448, "鹄": 8449, "鹅": 8450, "鹉": 8451, "鹊": 8452, "鹌": 8453, "鹏": 8454, "鹑": 8455, "鹗": 8456, "鹘": 8457, "鹜": 8458, "鹤": 8459, "鹦": 8460, "鹫": 8461, "鹭": 8462, "鹰": 8463, "鹳": 8464, "鹹": 8465, "鹼": 8466, "鹽": 8467, "鹿": 8468, "麂": 8469, "麒": 8470, "麓": 8471, "麗": 8472, "麝": 8473, "麟": 8474, "麥": 8475, "麦": 8476, "麴": 8477, "麵": 8478, "麸": 8479, "麻": 8480, "麼": 8481, "麽": 8482, "麾": 8483, "麿": 8484, "黃": 8485, "黄": 8486, "黍": 8487, "黎": 8488, "黏": 8489, "黑": 8490, "黒": 8491, "黔": 8492, "默": 8493, "黛": 8494, "黜": 8495, "黝": 8496, "點": 8497, "黟": 8498, "黨": 8499, "黩": 8500, "黯": 8501, "黴": 8502, "黻": 8503, "黼": 8504, "鼎": 8505, "鼐": 8506, "鼓": 8507, "鼠": 8508, "鼬": 8509, "鼯": 8510, "鼴": 8511, "鼷": 8512, "鼻": 8513, "鼾": 8514, "齊": 8515, "齋": 8516, "齐": 8517, "齒": 8518, "齡": 8519, "齣": 8520, "齦": 8521, "齿": 8522, "龄": 8523, "龈": 8524, "龋": 8525, "龍": 8526, "龐": 8527, "龔": 8528, "龕": 8529, "龙": 8530, "龚": 8531, "龛": 8532, "龜": 8533, "龟": 8534, "龢": 8535, "ꜣ": 8536, "가": 8537, "고": 8538, "공": 8539, "관": 8540, "구": 8541, "국": 8542, "기": 8543, "나": 8544, "내": 8545, "너": 8546, "년": 8547, "는": 8548, "니": 8549, "다": 8550, "대": 8551, "도": 8552, "동": 8553, "드": 8554, "라": 8555, "레": 8556, "로": 8557, "를": 8558, "리": 8559, "마": 8560, "만": 8561, "면": 8562, "명": 8563, "문": 8564, "미": 8565, "민": 8566, "법": 8567, "보": 8568, "부": 8569, "비": 8570, "사": 8571, "서": 8572, "선": 8573, "성": 8574, "세": 8575, "소": 8576, "속": 8577, "수": 8578, "스": 8579, "시": 8580, "신": 8581, "아": 8582, "안": 8583, "야": 8584, "양": 8585, "어": 8586, "에": 8587, "여": 8588, "영": 8589, "오": 8590, "요": 8591, "우": 8592, "운": 8593, "원": 8594, "월": 8595, "유": 8596, "은": 8597, "을": 8598, "의": 8599, "이": 8600, "인": 8601, "일": 8602, "자": 8603, "장": 8604, "전": 8605, "정": 8606, "제": 8607, "조": 8608, "주": 8609, "중": 8610, "지": 8611, "진": 8612, "치": 8613, "타": 8614, "통": 8615, "하": 8616, "한": 8617, "해": 8618, "행": 8619, "호": 8620, "": 8621, "": 8622, "": 8623, "": 8624, "": 8625, "": 8626, "": 8627, "論": 8628, "不": 8629, "略": 8630, "力": 8631, "理": 8632, "fi": 8633, "fl": 8634, "️": 8635, "︐": 8636, "︰": 8637, "︱": 8638, "﹐": 8639, "﹑": 8640, "﹒": 8641, "﹔": 8642, "﹕": 8643, "﹙": 8644, "﹚": 8645, "﹝": 8646, "﹞": 8647, "﹢": 8648, "﹣": 8649, "﹥": 8650, "": 8651, "!": 8652, """: 8653, "#": 8654, "%": 8655, "&": 8656, "'": 8657, "(": 8658, ")": 8659, "*": 8660, "+": 8661, ",": 8662, "-": 8663, ".": 8664, "/": 8665, "0": 8666, "1": 8667, "2": 8668, "3": 8669, "4": 8670, "5": 8671, "6": 8672, "7": 8673, "8": 8674, "9": 8675, ":": 8676, ";": 8677, "<": 8678, "=": 8679, ">": 8680, "?": 8681, "A": 8682, "B": 8683, "C": 8684, "D": 8685, "E": 8686, "F": 8687, "G": 8688, "H": 8689, "I": 8690, "J": 8691, "K": 8692, "L": 8693, "M": 8694, "N": 8695, "O": 8696, "P": 8697, "Q": 8698, "R": 8699, "S": 8700, "T": 8701, "U": 8702, "V": 8703, "W": 8704, "X": 8705, "Y": 8706, "[": 8707, "\": 8708, "]": 8709, "a": 8710, "b": 8711, "c": 8712, "d": 8713, "e": 8714, "f": 8715, "g": 8716, "h": 8717, "i": 8718, "j": 8719, "l": 8720, "m": 8721, "n": 8722, "o": 8723, "p": 8724, "q": 8725, "r": 8726, "s": 8727, "t": 8728, "u": 8729, "v": 8730, "w": 8731, "x": 8732, "y": 8733, "|": 8734, "~": 8735, "。": 8736, "」": 8737, "、": 8738, "・": 8739, "¥": 8740, "�": 8741, "𐌠": 8742, "𐨯": 8743, "𒀀": 8744, "𒀭": 8745, "𒀸": 8746, "𒁀": 8747, "𒁕": 8748, "𒂍": 8749, "𒂗": 8750, "𒅆": 8751, "𒆠": 8752, "𒆤": 8753, "𒈗": 8754, "𒈠": 8755, "𒈬": 8756, "𒋀": 8757, "𒌨": 8758, "𒍑": 8759, "𝗮": 8760, "𝗲": 8761, "𝗿": 8762, "𝛽": 8763, "🌍": 8764, "🌟": 8765, "🎉": 8766, "👉": 8767, "💪": 8768, "📍": 8769, "😉": 8770, "😊": 8771, "😎": 8772, "🙂": 8773, "🚀": 8774, "𤒹": 8775, "𫖮": 8776, "𫖯": 8777, "▁t": 8778, "in": 8779, "he": 8780, "▁a": 8781, "re": 8782, "on": 8783, "er": 8784, "at": 8785, ",▁": 8786, "▁the": 8787, "or": 8788, "▁s": 8789, "an": 8790, "en": 8791, "es": 8792, "▁c": 8793, "▁o": 8794, "al": 8795, "it": 8796, "is": 8797, "ing": 8798, "ed": 8799, "▁w": 8800, "▁p": 8801, ".▁": 8802, "ar": 8803, "▁f": 8804, "ou": 8805, "▁of": 8806, "▁b": 8807, "▁in": 8808, "nd": 8809, "ic": 8810, "ion": 8811, "▁m": 8812, "▁to": 8813, "▁d": 8814, "le": 8815, "as": 8816, "ro": 8817, "▁and": 8818, "ent": 8819, "ct": 8820, "▁h": 8821, "il": 8822, "om": 8823, "▁e": 8824, "st": 8825, "▁th": 8826, "▁re": 8827, "el": 8828, "▁l": 8829, "et": 8830, "ol": 8831, "\n\n": 8832, "▁n": 8833, "ation": 8834, "iv": 8835, "and": 8836, "im": 8837, "id": 8838, "us": 8839, "ra": 8840, "ly": 8841, "ch": 8842, "ur": 8843, "ig": 8844, "ow": 8845, "▁g": 8846, "ce": 8847, "ot": 8848, "ut": 8849, "▁is": 8850, "am": 8851, "ir": 8852, "▁▁": 8853, "▁st": 8854, "▁be": 8855, "The": 8856, "ers": 8857, "▁for": 8858, "ul": 8859, "ate": 8860, "▁S": 8861, "the": 8862, "ay": 8863, "▁C": 8864, "▁on": 8865, "ad": 8866, "ith": 8867, "▁(": 8868, "se": 8869, "th": 8870, "▁y": 8871, "un": 8872, "▁that": 8873, "ve": 8874, "▁A": 8875, "if": 8876, "ver": 8877, "ter": 8878, "▁con": 8879, "▁as": 8880, "▁pro": 8881, "▁with": 8882, "ag": 8883, "ist": 8884, "od": 8885, "um": 8886, "em": 8887, "▁an": 8888, "ies": 8889, "op": 8890, "▁M": 8891, "res": 8892, "▁al": 8893, "our": 8894, "ab": 8895, "ess": 8896, "▁are": 8897, "发展": 8898, "▁he": 8899, "ect": 8900, "ac": 8901, "ere": 8902, "▁ex": 8903, "▁P": 8904, "ity": 8905, "▁v": 8906, "os": 8907, "▁or": 8908, "▁com": 8909, "ill": 8910, "ory": 8911, "ts": 8912, "ec": 8913, "ore": 8914, "oc": 8915, "▁it": 8916, "rom": 8917, "qu": 8918, "ment": 8919, "ain": 8920, "--": 8921, "igh": 8922, "ke": 8923, "pp": 8924, "▁B": 8925, "est": 8926, "ive": 8927, "ud": 8928, "▁by": 8929, ":▁": 8930, "▁was": 8931, "▁wh": 8932, "ial": 8933, "ld": 8934, "▁at": 8935, "中国": 8936, "▁ch": 8937, "ure": 8938, "▁R": 8939, "社会": 8940, "ri": 8941, "▁de": 8942, "all": 8943, "▁from": 8944, "ant": 8945, "rou": 8946, "▁D": 8947, "▁I": 8948, "▁us": 8949, "▁su": 8950, "ical": 8951, "-▁": 8952, "og": 8953, "经济": 8954, ")▁": 8955, "art": 8956, "nt": 8957, "▁T": 8958, "ort": 8959, "▁can": 8960, "ew": 8961, "▁le": 8962, "▁r": 8963, "her": 8964, "ateg": 8965, "▁E": 8966, "▁H": 8967, "研究": 8968, "ions": 8969, "▁L": 8970, "ap": 8971, "▁en": 8972, "▁ha": 8973, "ine": 8974, "▁G": 8975, "▁sp": 8976, "ell": 8977, "▁F": 8978, "ard": 8979, "技术": 8980, "ge": 8981, "ategory": 8982, "▁sh": 8983, "gh": 8984, "▁you": 8985, "▁N": 8986, "ear": 8987, "pl": 8988, "Category": 8989, "ated": 8990, "▁pl": 8991, "are": 8992, "ight": 8993, "可以": 8994, "ther": 8995, "du": 8996, "▁W": 8997, "▁u": 8998, "▁se": 8999, "▁ab": 9000, "ich": 9001, "ak": 9002, "act": 9003, "per": 9004, "进行": 9005, "▁int": 9006, "iz": 9007, "ome": 9008, "out": 9009, "ff": 9010, "▁wor": 9011, "ans": 9012, "一个": 9013, "企业": 9014, "ip": 9015, "▁im": 9016, "ast": 9017, "ost": 9018, "ust": 9019, "▁their": 9020, "ong": 9021, "ous": 9022, "数据": 9023, "管理": 9024, "pt": 9025, "ia": 9026, "In": 9027, "end": 9028, "学生": 9029, "▁have": 9030, "国家": 9031, "ations": 9032, "问题": 9033, "Th": 9034, "ide": 9035, "ib": 9036, "ould": 9037, "▁your": 9038, "▁not": 9039, "ary": 9040, "▁this": 9041, "so": 9042, "ks": 9043, "age": 9044, "教育": 9045, "通过": 9046, "orm": 9047, "▁comp": 9048, "ru": 9049, "系统": 9050, "▁ad": 9051, "cl": 9052, "hen": 9053, "▁k": 9054, "ents": 9055, "ep": 9056, "▁J": 9057, "▁cont": 9058, "▁dis": 9059, "▁res": 9060, "vel": 9061, "ult": 9062, "ood": 9063, "av": 9064, "信息": 9065, "ance": 9066, "cc": 9067, "ign": 9068, "ber": 9069, "ire": 9070, "▁we": 9071, "ater": 9072, "ind": 9073, "ces": 9074, "ual": 9075, "主义": 9076, "ach": 9077, "----": 9078, "ry": 9079, "wh": 9080, "工作": 9081, "ass": 9082, "▁un": 9083, "重要": 9084, "▁cl": 9085, "we": 9086, "able": 9087, "▁ne": 9088, "ress": 9089, "▁U": 9090, "ild": 9091, "one": 9092, "ence": 9093, "oo": 9094, "建设": 9095, "▁te": 9096, "ice": 9097, "ction": 9098, "ang": 9099, "主要": 9100, "▁all": 9101, "ord": 9102, "▁O": 9103, "ue": 9104, "ish": 9105, "reat": 9106, "ition": 9107, "人民": 9108, "ors": 9109, "▁more": 9110, "ens": 9111, "ub": 9112, "▁other": 9113, "▁also": 9114, "▁me": 9115, "方面": 9116, "ack": 9117, "▁they": 9118, "ame": 9119, "实现": 9120, "ase": 9121, "ian": 9122, "基础": 9123, "ph": 9124, "过程": 9125, "▁has": 9126, "服务": 9127, "▁will": 9128, "ile": 9129, "市场": 9130, "▁were": 9131, "but": 9132, "fere": 9133, "▁imp": 9134, "ely": 9135, "ric": 9136, "▁do": 9137, "▁about": 9138, "ime": 9139, "能力": 9140, "ie": 9141, "文化": 9142, "安全": 9143, "▁per": 9144, "需要": 9145, "▁St": 9146, "rit": 9147, "▁ar": 9148, "我们": 9149, "ace": 9150, "▁▁▁▁": 9151, "▁app": 9152, "▁j": 9153, "使用": 9154, "ake": 9155, "\"▁": 9156, "方法": 9157, "form": 9158, "ike": 9159, "mer": 9160, "▁man": 9161, "▁pre": 9162, "教学": 9163, "ound": 9164, "▁K": 9165, "▁out": 9166, ";▁": 9167, "This": 9168, "own": 9169, "▁his": 9170, "中的": 9171, "It": 9172, "ings": 9173, "▁\"": 9174, "不同": 9175, "ose": 9176, "生产": 9177, "▁them": 9178, "ount": 9179, "very": 9180, "nder": 9181, "tern": 9182, "▁stud": 9183, "环境": 9184, "te": 9185, "aus": 9186, "科学": 9187, "具有": 9188, "分析": 9189, "制度": 9190, "▁ev": 9191, "学习": 9192, "影响": 9193, "我国": 9194, "应用": 9195, "提供": 9196, "ons": 9197, "olog": 9198, "rough": 9199, "政府": 9200, "创新": 9201, "▁sc": 9202, "eop": 9203, "组织": 9204, "▁one": 9205, "),▁": 9206, "erv": 9207, "▁into": 9208, "▁its": 9209, "ond": 9210, "▁sy": 9211, "▁up": 9212, "▁comm": 9213, "网络": 9214, "ite": 9215, "▁tra": 9216, "ail": 9217, "ree": 9218, "▁ro": 9219, "low": 9220, "ov": 9221, "ates": 9222, "eople": 9223, "ities": 9224, "作用": 9225, "–▁": 9226, "理论": 9227, "here": 9228, "ays": 9229, "关系": 9230, "▁part": 9231, "公司": 9232, "ific": 9233, "基本": 9234, "以及": 9235, "体系": 9236, "king": 9237, "要求": 9238, "可能": 9239, "clud": 9240, "lect": 9241, "▁rec": 9242, "ne": 9243, "▁Ch": 9244, "▁qu": 9245, "ob": 9246, "▁bet": 9247, "uring": 9248, "结构": 9249, "ys": 9250, "▁bec": 9251, "资源": 9252, "ove": 9253, "les": 9254, "设计": 9255, "irst": 9256, "▁col": 9257, "ious": 9258, "产业": 9259, "方式": 9260, "▁V": 9261, "ating": 9262, "ren": 9263, "提高": 9264, "ough": 9265, "round": 9266, "ms": 9267, "知识": 9268, "▁these": 9269, "作为": 9270, "▁dif": 9271, "ally": 9272, "改革": 9273, "世界": 9274, "▁tr": 9275, "▁act": 9276, "包括": 9277, "▁under": 9278, "▁kn": 9279, "ning": 9280, "ple": 9281, "形成": 9282, "▁so": 9283, "row": 9284, "ool": 9285, "▁over": 9286, "▁year": 9287, "▁time": 9288, "▁may": 9289, "▁ag": 9290, "同时": 9291, "历史": 9292, "▁than": 9293, "▁–▁": 9294, "一种": 9295, "lp": 9296, "国际": 9297, "ath": 9298, "which": 9299, "yp": 9300, "法律": 9301, "ular": 9302, "▁who": 9303, "hed": 9304, "▁when": 9305, "ced": 9306, "相关": 9307, "▁some": 9308, "▁des": 9309, "这些": 9310, "lic": 9311, "red": 9312, "ational": 9313, "ics": 9314, "存在": 9315, "fter": 9316, "▁people": 9317, "**": 9318, "ark": 9319, "规定": 9320, "部分": 9321, "over": 9322, "▁ra": 9323, "alth": 9324, "内容": 9325, "ll": 9326, "▁new": 9327, "细胞": 9328, "行为": 9329, "保护": 9330, "als": 9331, "▁tw": 9332, "int": 9333, "ures": 9334, "ject": 9335, "▁like": 9336, "因此": 9337, "▁our": 9338, "▁help": 9339, "活动": 9340, "ased": 9341, "eth": 9342, "金融": 9343, "ex": 9344, "▁through": 9345, "▁cons": 9346, "▁inc": 9347, "▁been": 9348, "▁-▁": 9349, "没有": 9350, "产品": 9351, "oth": 9352, "velop": 9353, "政治": 9354, "▁fe": 9355, "其他": 9356, "成为": 9357, "ng": 9358, "▁how": 9359, "建立": 9360, "▁spec": 9361, "标准": 9362, "ful": 9363, "现代": 9364, "就是": 9365, "政策": 9366, "ments": 9367, "stem": 9368, "old": 9369, "ffect": 9370, "ient": 9371, "提出": 9372, "▁use": 9373, "实践": 9374, "uc": 9375, "ft": 9376, "▁rel": 9377, "▁which": 9378, "ook": 9379, "思想": 9380, "▁acc": 9381, "目标": 9382, "ause": 9383, "控制": 9384, "Wh": 9385, "利用": 9386, "▁had": 9387, "▁bl": 9388, "▁gen": 9389, "▁first": 9390, "iss": 9391, "价值": 9392, "ative": 9393, "aw": 9394, "uch": 9395, "计算": 9396, "发生": 9397, "▁ind": 9398, "▁need": 9399, "情况": 9400, "▁rep": 9401, "ivers": 9402, "▁differe": 9403, "erm": 9404, "ween": 9405, "时间": 9406, "▁exp": 9407, "▁work": 9408, "▁em": 9409, "▁am": 9410, "▁reg": 9411, "之间": 9412, "处理": 9413, "ract": 9414, "领域": 9415, "风险": 9416, "ied": 9417, "第一": 9418, "to": 9419, "▁used": 9420, "land": 9421, "根据": 9422, "质量": 9423, "▁pr": 9424, "对于": 9425, "▁off": 9426, "ility": 9427, "数字": 9428, "▁Un": 9429, "有效": 9430, "rop": 9431, "▁ass": 9432, "▁inv": 9433, "人的": 9434, "▁ph": 9435, "必须": 9436, "产生": 9437, "▁two": 9438, "社会主义": 9439, "He": 9440, "--------": 9441, ").▁": 9442, "▁ac": 9443, "这种": 9444, "功能": 9445, "ise": 9446, "▁produ": 9447, "▁would": 9448, "水平": 9449, "ss": 9450, "▁between": 9451, "ife": 9452, "its": 9453, ".\"": 9454, "tain": 9455, "解决": 9456, "生活": 9457, "ef": 9458, "iet": 9459, "▁dec": 9460, "▁sur": 9461, "ting": 9462, "oss": 9463, "”▁": 9464, "▁prov": 9465, "▁develop": 9466, "劳动": 9467, "ram": 9468, "传统": 9469, "▁what": 9470, "▁child": 9471, "St": 9472, "cy": 9473, "智能": 9474, "全面": 9475, "▁her": 9476, "chool": 9477, "机制": 9478, "ins": 9479, "模式": 9480, "▁any": 9481, "dition": 9482, "gan": 9483, "ily": 9484, "ict": 9485, "不断": 9486, "ont": 9487, "?▁": 9488, "项目": 9489, "专业": 9490, "ick": 9491, "认为": 9492, "▁most": 9493, "由于": 9494, "投资": 9495, "ited": 9496, "wn": 9497, "▁sa": 9498, "ade": 9499, "oy": 9500, "▁rem": 9501, "ower": 9502, "ident": 9503, "hes": 9504, "ines": 9505, "ever": 9506, "美国": 9507, "eg": 9508, "chn": 9509, "▁sm": 9510, "条件": 9511, "中心": 9512, "▁fl": 9513, "工程": 9514, "人员": 9515, "▁system": 9516, "meric": 9517, "▁Y": 9518, "机构": 9519, "ange": 9520, "变化": 9521, "▁exam": 9522, "。▁": 9523, "▁bu": 9524, "get": 9525, "cess": 9526, "教师": 9527, "▁such": 9528, "▁ob": 9529, "ural": 9530, "城市": 9531, "▁inf": 9532, "民族": 9533, "ible": 9534, "com": 9535, "ered": 9536, "如果": 9537, "课程": 9538, "▁includ": 9539, "能够": 9540, "实施": 9541, "▁trans": 9542, "ten": 9543, "cer": 9544, "行政": 9545, "自己": 9546, "aking": 9547, "▁inst": 9548, "ble": 9549, "▁sub": 9550, "性的": 9551, "How": 9552, "io": 9553, "实验": 9554, "▁att": 9555, "elf": 9556, "▁In": 9557, "时代": 9558, "发展的": 9559, "这一": 9560, "ists": 9561, "arch": 9562, "培养": 9563, "实际": 9564, "▁could": 9565, "大学": 9566, "▁only": 9567, "推动": 9568, "定的": 9569, "▁no": 9570, "▁sign": 9571, "地区": 9572, "other": 9573, "科技": 9574, "上的": 9575, "ward": 9576, "所有": 9577, "第二": 9578, "ata": 9579, "hip": 9580, "urn": 9581, "需求": 9582, "全球": 9583, "发现": 9584, "▁lear": 9585, "出现": 9586, "▁var": 9587, "▁different": 9588, "▁pat": 9589, "▁play": 9590, "大的": 9591, "ature": 9592, "▁if": 9593, "▁inter": 9594, "结合": 9595, "ues": 9596, "As": 9597, "ives": 9598, "ology": 9599, "any": 9600, "或者": 9601, "ink": 9602, "▁during": 9603, "生态": 9604, "fore": 9605, "▁pers": 9606, "▁pol": 9607, "▁many": 9608, "..": 9609, "▁there": 9610, "vent": 9611, "推进": 9612, "生物": 9613, ").": 9614, "一些": 9615, "▁“": 9616, "▁exper": 9617, "resent": 9618, "▁supp": 9619, "▁mod": 9620, "ience": 9621, "▁cre": 9622, "sp": 9623, "代表": 9624, "合作": 9625, "促进": 9626, "▁po": 9627, "增加": 9628, "他们": 9629, "ection": 9630, "不能": 9631, "责任": 9632, "ps": 9633, "▁num": 9634, "共同": 9635, "▁disc": 9636, "▁loc": 9637, "▁well": 9638, "ants": 9639, "▁form": 9640, "的发展": 9641, "▁high": 9642, "▁go": 9643, "增长": 9644, "▁water": 9645, "ness": 9646, "支持": 9647, "▁sim": 9648, "|▁": 9649, "ollow": 9650, "工业": 9651, "ev": 9652, "orn": 9653, "精神": 9654, "战略": 9655, "▁years": 9656, "▁ear": 9657, "中央": 9658, "▁found": 9659, "自然": 9660, "阶段": 9661, "iqu": 9662, "▁health": 9663, "We": 9664, "stand": 9665, "农业": 9666, "开发": 9667, "They": 9668, "一步": 9669, "核心": 9670, "加强": 9671, "arm": 9672, "cent": 9673, "新的": 9674, "ism": 9675, "▁every": 9676, "提升": 9677, "For": 9678, "!▁": 9679, "结果": 9680, "ork": 9681, "they": 9682, "let": 9683, "Al": 9684, "▁import": 9685, "\",": 9686, "▁med": 9687, "ix": 9688, "形式": 9689, "部门": 9690, "of": 9691, "成本": 9692, "ages": 9693, "▁after": 9694, "▁resp": 9695, "资本": 9696, "▁call": 9697, "imes": 9698, "ruct": 9699, "Ch": 9700, "▁commun": 9701, "ically": 9702, "党的": 9703, "▁cent": 9704, "ds": 9705, "ices": 9706, "▁car": 9707, "ck": 9708, "erg": 9709, "的是": 9710, "▁get": 9711, "▁det": 9712, "空间": 9713, "已经": 9714, "目前": 9715, "ized": 9716, "▁typ": 9717, "关键": 9718, "▁know": 9719, "ually": 9720, "个人": 9721, "设备": 9722, "选择": 9723, "▁co": 9724, "▁dist": 9725, "坚持": 9726, "ential": 9727, "这个": 9728, "iew": 9729, "化的": 9730, "ize": 9731, "▁each": 9732, "▁ke": 9733, "▁fam": 9734, "原则": 9735, "ik": 9736, "▁rese": 9737, "▁effect": 9738, "的一": 9739, "eng": 9740, "inal": 9741, "直接": 9742, "ran": 9743, "因素": 9744, "过程中": 9745, "综合": 9746, "con": 9747, "其中": 9748, "▁expl": 9749, "cept": 9750, "▁set": 9751, "导致": 9752, "ug": 9753, "▁techn": 9754, "▁Americ": 9755, "保障": 9756, "▁str": 9757, "持续": 9758, "单位": 9759, "人才": 9760, "的重要": 9761, "ax": 9762, "第三": 9763, "▁sk": 9764, "合同": 9765, "运动": 9766, "▁art": 9767, "▁using": 9768, "led": 9769, "raph": 9770, "omm": 9771, "进一步": 9772, "oh": 9773, "▁sec": 9774, "up": 9775, "ale": 9776, "人类": 9777, "全国": 9778, "积极": 9779, "▁prog": 9780, "formation": 9781, "▁cell": 9782, "模型": 9783, "也是": 9784, "▁where": 9785, "具体": 9786, "▁long": 9787, "▁lar": 9788, "tle": 9789, "oun": 9790, "ien": 9791, "主体": 9792, "ral": 9793, "If": 9794, "平台": 9795, "不是": 9796, "▁bel": 9797, "iel": 9798, "ee": 9799, "开放": 9800, "如何": 9801, "▁those": 9802, "*▁": 9803, "范围": 9804, "▁make": 9805, "▁hum": 9806, "治理": 9807, "),": 9808, "ional": 9809, "领导": 9810, "These": 9811, "ather": 9812, "▁incre": 9813, "▁ext": 9814, "ron": 9815, "ases": 9816, "▁ed": 9817, "ier": 9818, "特色": 9819, "获得": 9820, "材料": 9821, "”,": 9822, "ivid": 9823, "中华": 9824, "▁ent": 9825, "一般": 9826, "feren": 9827, "▁world": 9828, "▁mem": 9829, "参与": 9830, "得到": 9831, "有关": 9832, "An": 9833, "▁process": 9834, "明确": 9835, "意义": 9836, "▁grou": 9837, "iron": 9838, "air": 9839, "联网": 9840, "▁The": 9841, "▁should": 9842, "评价": 9843, "从而": 9844, "制造": 9845, "ock": 9846, "▁back": 9847, "程序": 9848, "ody": 9849, "▁but": 9850, "完善": 9851, "资产": 9852, "▁even": 9853, "▁life": 9854, "消费": 9855, "能源": 9856, "▁gener": 9857, "way": 9858, "▁count": 9859, "因为": 9860, "ublic": 9861, "▁way": 9862, "各种": 9863, "ead": 9864, "治疗": 9865, "▁fact": 9866, "▁show": 9867, "采用": 9868, "▁val": 9869, "▁soc": 9870, "▁serv": 9871, "▁follow": 9872, "▁fun": 9873, "发挥": 9874, "be": 9875, "ars": 9876, "表现": 9877, "▁just": 9878, "ah": 9879, "开始": 9880, "▁own": 9881, "学校": 9882, "▁lead": 9883, "with": 9884, "ave": 9885, "▁being": 9886, "xt": 9887, "▁study": 9888, "cri": 9889, "▁hist": 9890, "▁pop": 9891, "▁char": 9892, "iversity": 9893, "▁find": 9894, "ished": 9895, "利益": 9896, "ality": 9897, "▁see": 9898, "ince": 9899, "任务": 9900, "▁activ": 9901, "▁level": 9902, "for": 9903, "▁around": 9904, "▁min": 9905, "特征": 9906, "▁ref": 9907, "ury": 9908, "充分": 9909, "ribut": 9910, "There": 9911, "开展": 9912, "▁school": 9913, "rain": 9914, "公共": 9915, "els": 9916, "iving": 9917, "行业": 9918, "▁before": 9919, "经营": 9920, "患者": 9921, "▁mon": 9922, "但是": 9923, "uss": 9924, "▁main": 9925, "不仅": 9926, "▁both": 9927, "ution": 9928, "olv": 9929, "革命": 9930, "▁grow": 9931, "▁made": 9932, "什么": 9933, "pr": 9934, "ared": 9935, "▁Ar": 9936, "ross": 9937, "基于": 9938, "随着": 9939, "地方": 9940, "▁cur": 9941, "▁end": 9942, "统一": 9943, "und": 9944, "▁def": 9945, "%▁": 9946, "▁design": 9947, "重点": 9948, "outh": 9949, "▁read": 9950, "NA": 9951, "▁requ": 9952, "计划": 9953, "ision": 9954, "确定": 9955, "Ex": 9956, "应当": 9957, "▁par": 9958, "read": 9959, "▁data": 9960, "ty": 9961, "ering": 9962, "akes": 9963, "▁children": 9964, "▁som": 9965, "pro": 9966, "▁aut": 9967, "规划": 9968, "▁person": 9969, "健康": 9970, "竞争": 9971, "ands": 9972, "▁add": 9973, "▁important": 9974, "规模": 9975, "▁care": 9976, "hem": 9977, "为了": 9978, "'▁": 9979, "程度": 9980, "两个": 9981, "When": 9982, "用于": 9983, "▁again": 9984, "银行": 9985, "But": 9986, "执行": 9987, "关于": 9988, "gg": 9989, "区域": 9990, "▁small": 9991, "职业": 9992, "农村": 9993, "ok": 9994, "来的": 9995, "ulation": 9996, "you": 9997, "ted": 9998, "▁writ": 9999, "by": 10000, "时期": 10001, "▁dep": 10002, "▁within": 10003, "▁then": 10004, "——": 10005, "日本": 10006, "构建": 10007, "rol": 10008, "ined": 10009, "达到": 10010, "man": 10011, "▁understand": 10012, "▁partic": 10013, "viron": 10014, "完成": 10015, "iver": 10016, "创造": 10017, "▁because": 10018, "irect": 10019, "例如": 10020, "au": 10021, "▁gl": 10022, "▁example": 10023, "=▁": 10024, "比较": 10025, "▁might": 10026, "操作": 10027, "▁my": 10028, "▁she": 10029, "▁down": 10030, "ash": 10031, "重大": 10032, "业务": 10033, "On": 10034, "▁mus": 10035, "概念": 10036, "▁Pro": 10037, "umb": 10038, "▁cap": 10039, "特点": 10040, "de": 10041, "▁food": 10042, "az": 10043, "▁information": 10044, "电子": 10045, "意识": 10046, "认识": 10047, "▁day": 10048, "oci": 10049, "▁ser": 10050, "收入": 10051, "ouse": 10052, "这样": 10053, "ital": 10054, "基因": 10055, "amp": 10056, "理解": 10057, "overn": 10058, "itions": 10059, "lish": 10060, "方向": 10061, "▁students": 10062, "pect": 10063, "You": 10064, "▁does": 10065, "ement": 10066, "▁called": 10067, "▁very": 10068, "决定": 10069, "ets": 10070, "ides": 10071, "规范": 10072, "之间的": 10073, "所以": 10074, "交易": 10075, "por": 10076, "▁while": 10077, "▁prot": 10078, "▁much": 10079, "表示": 10080, "▁est": 10081, "▁av": 10082, "lex": 10083, "▁ins": 10084, "To": 10085, "omen": 10086, "cing": 10087, "方案": 10088, "▁build": 10089, "建筑": 10090, "特别": 10091, "性和": 10092, "ium": 10093, "是否": 10094, "▁three": 10095, "的人": 10096, "降低": 10097, "▁br": 10098, "权利": 10099, "造成": 10100, "What": 10101, "ividual": 10102, "稳定": 10103, "▁class": 10104, "▁gu": 10105, "der": 10106, "aj": 10107, "指导": 10108, "取得": 10109, "acter": 10110, "▁same": 10111, "世纪": 10112, "▁often": 10113, "Re": 10114, "However": 10115, "ired": 10116, "ients": 10117, "),": 10118, "▁pract": 10119, "▁elect": 10120, "效率": 10121, "pen": 10122, "▁adv": 10123, "之一": 10124, "▁New": 10125, "ames": 10126, "hers": 10127, "sh": 10128, "ton": 10129, "▁start": 10130, "量的": 10131, "▁him": 10132, "bers": 10133, "减少": 10134, "▁organ": 10135, "马克": 10136, "▁number": 10137, "▁dise": 10138, "学科": 10139, "ories": 10140, "目的": 10141, "体现": 10142, "▁▁▁▁▁▁▁▁": 10143, "优势": 10144, "”。": 10145, "orth": 10146, "▁treat": 10147, "▁sol": 10148, "进入": 10149, "▁ris": 10150, "货币": 10151, "▁di": 10152, "ights": 10153, "▁gra": 10154, "▁less": 10155, "inc": 10156, "▁lit": 10157, "的基本": 10158, "▁mat": 10159, "ergy": 10160, "oot": 10161, "▁proble": 10162, "ograph": 10163, "自由": 10164, "vironment": 10165, "angu": 10166, "reen": 10167, "gen": 10168, "ull": 10169, "措施": 10170, "▁known": 10171, "国内": 10172, "法院": 10173, "▁power": 10174, "▁▁▁": 10175, "iety": 10176, "这是": 10177, "报告": 10178, "▁met": 10179, "更加": 10180, "人们": 10181, "day": 10182, "了解": 10183, "好的": 10184, "ason": 10185, "马克思": 10186, "以下": 10187, "艺术": 10188, "par": 10189, "成果": 10190, "有的": 10191, "includ": 10192, "▁occ": 10193, "共产": 10194, "ven": 10195, "▁learn": 10196, "运行": 10197, "&▁": 10198, "反应": 10199, "民主": 10200, "经验": 10201, "状态": 10202, "学生的": 10203, "ffic": 10204, "保险": 10205, "长期": 10206, "物质": 10207, "til": 10208, "▁allow": 10209, "▁ident": 10210, "用户": 10211, "▁good": 10212, "▁vis": 10213, "ean": 10214, "eb": 10215, "▁eng": 10216, "ains": 10217, "\".": 10218, "▁contin": 10219, "而且": 10220, "ively": 10221, "ret": 10222, "ources": 10223, "的研究": 10224, "port": 10225, "▁equ": 10226, "line": 10227, "的基础": 10228, "▁dr": 10229, "增强": 10230, "ann": 10231, "▁pot": 10232, "▁take": 10233, "▁body": 10234, "ults": 10235, "复杂": 10236, "ization": 10237, "▁individual": 10238, "▁cult": 10239, "By": 10240, "合理": 10241, "▁ret": 10242, "贸易": 10243, "▁const": 10244, "▁redu": 10245, "及其": 10246, "▁research": 10247, "str": 10248, "原因": 10249, "ived": 10250, "语言": 10251, "▁support": 10252, "ern": 10253, "一定": 10254, "不同的": 10255, "ately": 10256, "ox": 10257, "ield": 10258, "委员": 10259, "▁common": 10260, "是在": 10261, "aterial": 10262, "▁poss": 10263, "体制": 10264, "rent": 10265, "资金": 10266, "人口": 10267, "riend": 10268, "including": 10269, "体的": 10270, "评估": 10271, "ider": 10272, "▁conf": 10273, "文明": 10274, "ats": 10275, "ify": 10276, "ger": 10277, "ior": 10278, "组成": 10279, "▁did": 10280, "▁beh": 10281, "任何": 10282, "bs": 10283, "▁Sc": 10284, "掌握": 10285, "强调": 10286, "▁=▁": 10287, "▁ele": 10288, "▁fil": 10289, "只有": 10290, "改变": 10291, "是指": 10292, "ethod": 10293, "▁signific": 10294, "▁pos": 10295, "ining": 10296, "ym": 10297, "▁Ind": 10298, "相互": 10299, "itive": 10300, "▁cor": 10301, "ination": 10302, "▁cle": 10303, "未来": 10304, "where": 10305, "调整": 10306, "ently": 10307, "esp": 10308, "▁human": 10309, "ability": 10310, "▁said": 10311, "ids": 10312, "许多": 10313, "nect": 10314, "ially": 10315, "的问题": 10316, "制定": 10317, "▁area": 10318, "ferences": 10319, "指出": 10320, "▁appro": 10321, "ilar": 10322, "agn": 10323, "orts": 10324, "there": 10325, "严重": 10326, "设施": 10327, "年的": 10328, "rap": 10329, "ording": 10330, "▁state": 10331, "▁perform": 10332, "土地": 10333, "价格": 10334, "以来": 10335, "按照": 10336, "重要的": 10337, "ling": 10338, "ember": 10339, "▁pres": 10340, "▁prof": 10341, "osed": 10342, "针对": 10343, "受到": 10344, "现代化": 10345, "更多": 10346, "erest": 10347, "▁&▁": 10348, "ills": 10349, "都是": 10350, "ves": 10351, "One": 10352, "优化": 10353, "sc": 10354, "lu": 10355, "中国特色": 10356, "atic": 10357, "运用": 10358, "参考": 10359, "应该": 10360, "融合": 10361, "▁now": 10362, "ina": 10363, "ccess": 10364, "监督": 10365, "▁chang": 10366, "oms": 10367, "iness": 10368, "化学": 10369, "▁include": 10370, "探索": 10371, "自己的": 10372, "▁Al": 10373, "lished": 10374, "对象": 10375, "根本": 10376, "通常": 10377, "保证": 10378, "手段": 10379, "▁air": 10380, "考虑": 10381, "内部": 10382, "ner": 10383, "的新": 10384, "veral": 10385, "▁quest": 10386, "eral": 10387, "神经": 10388, "iven": 10389, "才能": 10390, "互联网": 10391, "▁want": 10392, "▁Eng": 10393, "蛋白": 10394, "less": 10395, "地位": 10396, "||": 10397, "机关": 10398, "分子": 10399, "▁anal": 10400, "系列": 10401, "▁Sp": 10402, "决策": 10403, "商业": 10404, "▁prom": 10405, "独立": 10406, "思维": 10407, "tt": 10408, "iod": 10409, "的影响": 10410, "。”": 10411, "相对": 10412, "▁pass": 10413, "明显": 10414, "▁American": 10415, "rodu": 10416, "广泛": 10417, "▁test": 10418, "And": 10419, "人工": 10420, "▁plan": 10421, "非常": 10422, "▁Th": 10423, "arc": 10424, "app": 10425, "▁various": 10426, "▁iss": 10427, "ration": 10428, "现实": 10429, "▁imm": 10430, "▁eas": 10431, "以上": 10432, "▁group": 10433, "▁place": 10434, "ians": 10435, "ples": 10436, "ething": 10437, "▁bre": 10438, "首先": 10439, "会计": 10440, "▁University": 10441, "成立": 10442, "联系": 10443, "▁dem": 10444, "ute": 10445, "----------------": 10446, "omp": 10447, "提供了": 10448, "ression": 10449, "类型": 10450, "医疗": 10451, "▁ide": 10452, "ns": 10453, "ental": 10454, "▁impro": 10455, "cial": 10456, "心理": 10457, "ards": 10458, "▁tem": 10459, "检测": 10460, "加快": 10461, "▁material": 10462, "ocus": 10463, "现象": 10464, "isc": 10465, "Ad": 10466, "▁real": 10467, "近平": 10468, "not": 10469, "▁cells": 10470, "ption": 10471, ",\"▁": 10472, "▁rele": 10473, "物理": 10474, "信号": 10475, "监管": 10476, "当前": 10477, "ique": 10478, "▁creat": 10479, "习近平": 10480, "群众": 10481, "vers": 10482, "保持": 10483, "ving": 10484, "orld": 10485, "such": 10486, "▁still": 10487, "ological": 10488, "▁better": 10489, "▁family": 10490, "▁sym": 10491, "事件": 10492, "一方面": 10493, "ances": 10494, "▁sit": 10495, "▁against": 10496, "▁Sh": 10497, "▁ess": 10498, "的主要": 10499, "满足": 10500, "une": 10501, "▁present": 10502, "维护": 10503, "▁hand": 10504, "▁educ": 10505, "▁another": 10506, "法治": 10507, "So": 10508, ",▁\"": 10509, "▁project": 10510, "力的": 10511, ".▁▁": 10512, "测试": 10513, "引导": 10514, "完全": 10515, "自身": 10516, "无法": 10517, "北京": 10518, "资料": 10519, "▁due": 10520, "ries": 10521, "工具": 10522, "▁though": 10523, "▁several": 10524, "它们": 10525, "▁significant": 10526, "▁direct": 10527, "甚至": 10528, "不可": 10529, "▁change": 10530, "ank": 10531, "适应": 10532, "▁development": 10533, "ense": 10534, "疾病": 10535, "理念": 10536, "者的": 10537, "农民": 10538, "交通": 10539, "ditional": 10540, "力量": 10541, "效果": 10542, "诉讼": 10543, "urther": 10544, ".,▁": 10545, "▁oper": 10546, "▁fac": 10547, "▁environment": 10548, "▁govern": 10549, "▁ant": 10550, "▁cour": 10551, "▁United": 10552, "▁home": 10553, "▁pur": 10554, "yn": 10555, "▁Col": 10556, "▁must": 10557, "财政": 10558, "▁create": 10559, "软件": 10560, "关注": 10561, "▁early": 10562, "▁feel": 10563, "II": 10564, "rist": 10565, "anguage": 10566, "深入": 10567, "▁bir": 10568, "ths": 10569, "ogn": 10570, "cle": 10571, "▁pain": 10572, "构成": 10573, "系统的": 10574, "▁opp": 10575, ")。": 10576, "年代": 10577, "ways": 10578, "▁public": 10579, "ole": 10580, "▁anim": 10581, "▁second": 10582, "▁open": 10583, "▁happ": 10584, "规律": 10585, "正确": 10586, "▁near": 10587, "数学": 10588, "▁Is": 10589, "ified": 10590, "▁ben": 10591, "▁disease": 10592, "▁sl": 10593, "▁without": 10594, "▁based": 10595, "▁energy": 10596, "采取": 10597, "▁del": 10598, "引起": 10599, "▁meas": 10600, "成功": 10601, "▁method": 10602, "rem": 10603, "▁bas": 10604, "▁top": 10605, "表明": 10606, "快速": 10607, "外部": 10608, "▁large": 10609, "▁right": 10610, "▁interest": 10611, "表达": 10612, "计算机": 10613, "ode": 10614, "##": 10615, "ided": 10616, "的最": 10617, "▁become": 10618, "self": 10619, "帮助": 10620, "▁phys": 10621, "限制": 10622, "▁control": 10623, "ajor": 10624, "▁great": 10625, "的大": 10626, "▁learning": 10627, "yl": 10628, "atural": 10629, "▁saf": 10630, "▁others": 10631, "br": 10632, "▁Z": 10633, "▁team": 10634, "作品": 10635, "属于": 10636, "Now": 10637, "▁Cl": 10638, "gether": 10639, "▁together": 10640, "ternal": 10641, "▁result": 10642, "分布": 10643, "▁fin": 10644, "▁name": 10645, "▁mar": 10646, "▁caus": 10647, "▁orig": 10648, "性能": 10649, "商品": 10650, "指标": 10651, "绿色": 10652, "ware": 10653, "▁move": 10654, "共产党": 10655, "▁look": 10656, "▁product": 10657, "ention": 10658, "ission": 10659, "要素": 10660, "整体": 10661, "▁associ": 10662, "With": 10663, "年来": 10664, "香港": 10665, "eed": 10666, "▁until": 10667, "称为": 10668, "中国特色社会主义": 10669, "临床": 10670, "▁list": 10671, "集中": 10672, "▁stand": 10673, "▁States": 10674, "▁something": 10675, "SA": 10676, "▁too": 10677, "自动": 10678, "▁chall": 10679, "▁involv": 10680, "技能": 10681, "解释": 10682, "▁old": 10683, "was": 10684, "虽然": 10685, "▁friend": 10686, "Im": 10687, "gin": 10688, "分配": 10689, "▁don": 10690, "▁risk": 10691, "▁belie": 10692, "ball": 10693, "此外": 10694, "▁mark": 10695, "情况下": 10696, "依据": 10697, "ator": 10698, "就业": 10699, "▁history": 10700, "接受": 10701, "▁local": 10702, "协议": 10703, "会议": 10704, "▁among": 10705, "▁light": 10706, "显示": 10707, "▁sing": 10708, "hor": 10709, "物的": 10710, "速度": 10711, "After": 10712, "分为": 10713, "马克思主义": 10714, "涉及": 10715, "符合": 10716, "wards": 10717, "事业": 10718, "Un": 10719, "联合": 10720, "乡村": 10721, "是一个": 10722, "aut": 10723, "min": 10724, "ots": 10725, "书记": 10726, "司法": 10727, "▁function": 10728, "▁gr": 10729, "▁Se": 10730, "ert": 10731, "That": 10732, "▁'": 10733, "▁proper": 10734, "▁few": 10735, "▁species": 10736, "污染": 10737, "alk": 10738, "ley": 10739, "▁keep": 10740, "▁mult": 10741, "注意": 10742, "like": 10743, "▁rest": 10744, "委员会": 10745, "view": 10746, "rag": 10747, "while": 10748, "who": 10749, "▁manag": 10750, "abor": 10751, "imate": 10752, "规则": 10753, "调查": 10754, "道德": 10755, "urop": 10756, "丰富": 10757, "协调": 10758, "ones": 10759, "mber": 10760, "并且": 10761, "▁best": 10762, "▁program": 10763, "是一": 10764, "函数": 10765, "犯罪": 10766, "At": 10767, "▁struct": 10768, "that": 10769, "▁De": 10770, "超过": 10771, "▁ve": 10772, "自主": 10773, "ooks": 10774, "分别": 10775, "▁leg": 10776, "▁following": 10777, "定义": 10778, "▁dev": 10779, "确保": 10780, "oid": 10781, "Some": 10782, "▁Q": 10783, "oring": 10784, "ape": 10785, "通信": 10786, "ertain": 10787, "▁later": 10788, "课堂": 10789, "▁potential": 10790, "▁things": 10791, "高度": 10792, "反映": 10793, "ris": 10794, "方面的": 10795, "▁blood": 10796, "▁bus": 10797, "▁focus": 10798, "▁provide": 10799, "交流": 10800, "供应": 10801, "▁women": 10802, "▁$": 10803, "aces": 10804, "ohn": 10805, "—▁": 10806, "▁areas": 10807, "智慧": 10808, "▁Con": 10809, "how": 10810, "学院": 10811, "整个": 10812, "af": 10813, "企业的": 10814, "义务": 10815, "▁four": 10816, "ved": 10817, "this": 10818, "ditions": 10819, "illion": 10820, "▁social": 10821, "rict": 10822, "’▁": 10823, "▁patients": 10824, "挑战": 10825, "ane": 10826, ",\"": 10827, "病毒": 10828, "acc": 10829, "aster": 10830, "▁cal": 10831, "上海": 10832, "ote": 10833, "iam": 10834, "▁specific": 10835, "▁run": 10836, "问题的": 10837, "转型": 10838, "算法": 10839, "是一种": 10840, "▁che": 10841, "conom": 10842, "▁connect": 10843, "▁role": 10844, "▁tre": 10845, "文件": 10846, "▁Pl": 10847, "▁affect": 10848, "▁law": 10849, "之后": 10850, "▁means": 10851, "oad": 10852, "omet": 10853, "▁record": 10854, "▁bro": 10855, "▁fre": 10856, "统计": 10857, "▁fore": 10858, "有利": 10859, "ication": 10860, "经过": 10861, "▁access": 10862, "▁occur": 10863, "差异": 10864, "ray": 10865, "aper": 10866, "▁mov": 10867, "扩大": 10868, "osp": 10869, "▁report": 10870, "ource": 10871, "财产": 10872, "ung": 10873, "最终": 10874, "px": 10875, "my": 10876, "idence": 10877, "▁across": 10878, "ending": 10879, "▁levels": 10880, "tal": 10881, "▁along": 10882, "起来": 10883, "动力": 10884, "分类": 10885, "▁indu": 10886, "use": 10887, "▁Can": 10888, "▁became": 10889, "在于": 10890, "▁descri": 10891, "数量": 10892, ",”▁": 10893, "▁ter": 10894, "▁enc": 10895, "▁period": 10896, "生命": 10897, "三个": 10898, "▁bo": 10899, "▁times": 10900, "inks": 10901, "▁head": 10902, "ended": 10903, "性质": 10904, "还是": 10905, "承担": 10906, "▁success": 10907, "IS": 10908, "aid": 10909, "必要": 10910, "atory": 10911, "ales": 10912, "▁mean": 10913, "矛盾": 10914, "Con": 10915, "work": 10916, "▁el": 10917, "面临": 10918, "免疫": 10919, "然而": 10920, "▁non": 10921, "agine": 10922, "right": 10923, "机器": 10924, "▁Comm": 10925, "ained": 10926, "``": 10927, "有限": 10928, "oint": 10929, "earch": 10930, "▁special": 10931, "转变": 10932, "▁death": 10933, "▁hig": 10934, "证明": 10935, "原理": 10936, "行动": 10937, "ternational": 10938, "▁major": 10939, "__": 10940, "人工智能": 10941, "▁turn": 10942, "家庭": 10943, "继续": 10944, "▁rece": 10945, "改善": 10946, "多种": 10947, "▁estab": 10948, "▁avail": 10949, "文献": 10950, "作出": 10951, "▁Cent": 10952, ":\"": 10953, "ortun": 10954, "▁crit": 10955, "▁Re": 10956, "来说": 10957, "道路": 10958, "ised": 10959, "she": 10960, "▁low": 10961, "趋势": 10962, "▁line": 10963, "▁land": 10964, "识别": 10965, "作者": 10966, "now": 10967, "很多": 10968, "训练": 10969, "配置": 10970, "重视": 10971, "检查": 10972, "atch": 10973, "raw": 10974, "CA": 10975, "▁mil": 10976, "事实": 10977, "though": 10978, "▁He": 10979, "策略": 10980, "来源": 10981, "ery": 10982, "了一": 10983, "▁National": 10984, "▁current": 10985, "相应": 10986, "idd": 10987, "▁last": 10988, "大量": 10989, "icro": 10990, "共和": 10991, "cul": 10992, "thumb": 10993, "rel": 10994, "观察": 10995, "团队": 10996, "▁Ex": 10997, "||▁": 10998, "sel": 10999, "▁war": 11000, "▁character": 11001, "使得": 11002, "yd": 11003, "▁impact": 11004, "▁similar": 11005, "▁object": 11006, "▁benef": 11007, "▁press": 11008, "环节": 11009, "意见": 11010, "▁works": 11011, "简单": 11012, "传播": 11013, "▁bi": 11014, "建议": 11015, "权的": 11016, "显著": 11017, "▁lim": 11018, "▁book": 11019, "She": 11020, "ring": 11021, "▁age": 11022, "ored": 11023, "特殊": 11024, "▁ens": 11025, "▁point": 11026, "债务": 11027, "ober": 11028, "▁type": 11029, "ivity": 11030, "案件": 11031, "ploy": 11032, "oph": 11033, "法规": 11034, "强化": 11035, "形态": 11036, "ried": 11037, "共享": 11038, "教授": 11039, "▁cause": 11040, "负责": 11041, "ilt": 11042, "▁wee": 11043, "▁diff": 11044, "国民": 11045, "新时代": 11046, "rans": 11047, "支付": 11048, "reg": 11049, "▁plant": 11050, "的数据": 11051, "一是": 11052, "位置": 11053, "ott": 11054, "循环": 11055, "背景": 11056, "第四": 11057, "atures": 11058, "side": 11059, "▁World": 11060, "▁comb": 11061, "高校": 11062, "face": 11063, "避免": 11064, "下的": 11065, "每个": 11066, "后的": 11067, "References": 11068, "高的": 11069, "▁think": 11070, ".(": 11071, "▁An": 11072, "技术的": 11073, "▁post": 11074, "ai": 11075, "财务": 11076, "ument": 11077, "amm": 11078, "哲学": 11079, "most": 11080, "试验": 11081, "立法": 11082, "iting": 11083, "▁appear": 11084, "突出": 11085, "数字化": 11086, "amed": 11087, "▁comput": 11088, "监测": 11089, "▁invest": 11090, "ipp": 11091, "肿瘤": 11092, "下降": 11093, "▁flow": 11094, "▁pe": 11095, "iation": 11096, "▁language": 11097, "ilities": 11098, "izing": 11099, "ae": 11100, "主动": 11101, "▁possible": 11102, "比如": 11103, "ured": 11104, "氧化": 11105, "bed": 11106, "处于": 11107, "ope": 11108, "期间": 11109, "ush": 11110, "▁protect": 11111, "▁community": 11112, "Pro": 11113, "ours": 11114, "▁War": 11115, "▁prevent": 11116, "尤其": 11117, "fric": 11118, "自我": 11119, "观点": 11120, "而言": 11121, "▁young": 11122, "▁sw": 11123, "ols": 11124, "深化": 11125, ".▁(": 11126, ".”": 11127, "平衡": 11128, "▁men": 11129, "角度": 11130, "erc": 11131, "层次": 11132, ":“": 11133, "存储": 11134, "ued": 11135, "培训": 11136, "出版": 11137, "准确": 11138, "Ar": 11139, "有机": 11140, "申请": 11141, "及时": 11142, "转移": 11143, "sy": 11144, "Sp": 11145, "▁determ": 11146, "实行": 11147, "当事": 11148, "▁Ph": 11149, "平均": 11150, "▁systems": 11151, "▁short": 11152, "说明": 11153, "进程": 11154, "的方法": 11155, "伟大": 11156, "▁strong": 11157, "ators": 11158, "▁contribut": 11159, "两种": 11160, "While": 11161, "▁Te": 11162, "aring": 11163, "▁respons": 11164, "iences": 11165, "▁polit": 11166, "▁treatment": 11167, "▁Le": 11168, "真正": 11169, "att": 11170, "介绍": 11171, "二是": 11172, "逐步": 11173, "逻辑": 11174, "ests": 11175, "▁since": 11176, "▁results": 11177, "serv": 11178, "ysis": 11179, "uture": 11180, "流动": 11181, ",“": 11182, "stit": 11183, "▁available": 11184, "▁Ad": 11185, "战争": 11186, "thern": 11187, "ival": 11188, "那么": 11189, "▁certain": 11190, "往往": 11191, "▁natural": 11192, "▁here": 11193, "正常": 11194, "▁nec": 11195, "不足": 11196, "▁represent": 11197, "enn": 11198, "▁cir": 11199, "西方": 11200, "▁able": 11201, "设置": 11202, "ems": 11203, "为主": 11204, "讨论": 11205, "+▁": 11206, "▁why": 11207, "支撑": 11208, "asing": 11209, "▁hard": 11210, "中国共产党": 11211, "▁ey": 11212, "带来": 11213, "▁government": 11214, "olution": 11215, "▁cancer": 11216, "▁discuss": 11217, "落实": 11218, "并不": 11219, "▁complex": 11220, "then": 11221, "▁story": 11222, "etic": 11223, "▁relations": 11224, "put": 11225, "经济发展": 11226, "▁order": 11227, "提出了": 11228, "发布": 11229, "▁Europ": 11230, "成员": 11231, "▁come": 11232, "▁rad": 11233, "学术": 11234, "▁Bl": 11235, "先进": 11236, "ER": 11237, "相同": 11238, "▁percent": 11239, "汽车": 11240, "卫生": 11241, "缺乏": 11242, "▁influ": 11243, "▁opt": 11244, "Sh": 11245, "居民": 11246, "duct": 11247, "part": 11248, "ables": 11249, "▁profess": 11250, "from": 11251, "用的": 11252, "预测": 11253, "val": 11254, "▁space": 11255, "▁whe": 11256, "▁behav": 11257, "istic": 11258, "投入": 11259, "▁lik": 11260, "oll": 11261, "素质": 11262, "ey": 11263, "到了": 11264, "aps": 11265, "▁key": 11266, "vious": 11267, "▁words": 11268, "ches": 11269, "omes": 11270, "ibr": 11271, "而是": 11272, "▁cost": 11273, "lection": 11274, "ney": 11275, "多数": 11276, "ream": 11277, "药物": 11278, "感染": 11279, "连接": 11280, "▁Res": 11281, "进行了": 11282, "ze": 11283, "▁scient": 11284, "特别是": 11285, "现在": 11286, "美元": 11287, "ledge": 11288, "Pl": 11289, "ints": 11290, "▁Count": 11291, "▁view": 11292, "具备": 11293, "上述": 11294, "med": 11295, "▁sugg": 11296, "测量": 11297, "▁vol": 11298, "eter": 11299, "观念": 11300, "pos": 11301, "▁econom": 11302, "逐渐": 11303, ".▁\"": 11304, "Cl": 11305, "▁changes": 11306, "icult": 11307, "文学": 11308, "oman": 11309, "lement": 11310, "ird": 11311, "信用": 11312, "包含": 11313, "mon": 11314, "%,": 11315, "New": 11316, "sw": 11317, "融资": 11318, "▁ill": 11319, "▁population": 11320, "突破": 11321, "▁country": 11322, "aves": 11323, "ency": 11324, "iding": 11325, "的一个": 11326, "ourn": 11327, "▁ways": 11328, "che": 11329, "▁Brit": 11330, "转化": 11331, "供给": 11332, "产权": 11333, "ask": 11334, "▁challeng": 11335, "fer": 11336, "▁music": 11337, "证据": 11338, "▁vir": 11339, "▁conditions": 11340, "thing": 11341, "▁left": 11342, "内的": 11343, "表面": 11344, "多个": 11345, "icle": 11346, "总体": 11347, "最高": 11348, "▁essential": 11349, "▁step": 11350, "when": 11351, "中华民族": 11352, "除了": 11353, "▁days": 11354, "selves": 11355, "最大": 11356, "努力": 11357, "流程": 11358, "▁try": 11359, "augh": 11360, "▁let": 11361, "然后": 11362, "ext": 11363, "审计": 11364, "▁century": 11365, "效应": 11366, "▁case": 11367, "▁sound": 11368, "mp": 11369, "▁members": 11370, "依法": 11371, "aren": 11372, "▁skills": 11373, "周期": 11374, "ruction": 11375, "▁foot": 11376, "有利于": 11377, "科研": 11378, "专家": 11379, "的方式": 11380, "▁problems": 11381, "▁vers": 11382, "▁brain": 11383, "▁say": 11384, "ably": 11385, "ww": 11386, "▁types": 11387, "医学": 11388, "▁prim": 11389, "apt": 11390, "▁Afric": 11391, "ened": 11392, "▁away": 11393, "▁associated": 11394, "普遍": 11395, "状况": 11396, "判断": 11397, "▁past": 11398, "▁temper": 11399, "bum": 11400, "rim": 11401, "mit": 11402, "难以": 11403, "履行": 11404, "完整": 11405, "思考": 11406, "进步": 11407, "本身": 11408, "当时": 11409, "协同": 11410, "还有": 11411, "》,": 11412, "教材": 11413, "rad": 11414, "▁Car": 11415, "▁gre": 11416, "▁city": 11417, "iple": 11418, "▁heart": 11419, "正在": 11420, "来自": 11421, "客观": 11422, "ither": 11423, "yle": 11424, "ography": 11425, "高质量": 11426, "物流": 11427, "▁links": 11428, "一致": 11429, "▁experience": 11430, "损害": 11431, "ID": 11432, "▁init": 11433, "Sc": 11434, "oon": 11435, "▁working": 11436, "▁dam": 11437, "▁School": 11438, "▁resources": 11439, "▁business": 11440, "公平": 11441, "温度": 11442, "urch": 11443, "▁technology": 11444, "基础设施": 11445, "overed": 11446, "发表": 11447, "▁little": 11448, "动态": 11449, "记录": 11450, "容易": 11451, "hips": 11452, "hib": 11453, "▁side": 11454, "▁understanding": 11455, "raft": 11456, "▁mot": 11457, "epend": 11458, "损失": 11459, "高等": 11460, "应对": 11461, "多样": 11462, "深度": 11463, "▁Or": 11464, "国有": 11465, "深刻": 11466, "高效": 11467, "▁groups": 11468, "一定的": 11469, "地理": 11470, "▁particular": 11471, "osis": 11472, "▁sens": 11473, "比例": 11474, "来越": 11475, "▁activities": 11476, "▁throughout": 11477, "总书记": 11478, "来看": 11479, "▁problem": 11480, "▁—▁": 11481, "▁next": 11482, "客户": 11483, "oes": 11484, "Let": 11485, "越来越": 11486, "最后": 11487, "儿童": 11488, "▁cy": 11489, "chie": 11490, "All": 11491, "▁York": 11492, "▁single": 11493, "arth": 11494, "▁building": 11495, "elling": 11496, "aching": 11497, "▁exist": 11498, ")、": 11499, "illed": 11500, "▁put": 11501, "的历史": 11502, "▁norm": 11503, "▁concer": 11504, "英国": 11505, "rug": 11506, "压力": 11507, "▁pred": 11508, "asc": 11509, "▁studies": 11510, "不得": 11511, "AR": 11512, "▁far": 11513, "本质": 11514, "▁er": 11515, "oney": 11516, "▁improve": 11517, "当事人": 11518, "▁Christ": 11519, "研发": 11520, "ged": 11521, "经济学": 11522, "▁enough": 11523, "play": 11524, "ster": 11525, "▁unique": 11526, "危机": 11527, "▁free": 11528, "注重": 11529, "也有": 11530, "inking": 11531, "大数据": 11532, "iction": 11533, ")、": 11534, "的关系": 11535, "▁education": 11536, "/▁": 11537, "之前": 11538, "▁makes": 11539, "uation": 11540, "出的": 11541, "apan": 11542, "ges": 11543, "仍然": 11544, "▁Med": 11545, "▁future": 11546, "alf": 11547, "▁higher": 11548, "▁having": 11549, "ires": 11550, "▁pattern": 11551, "正式": 11552, "ES": 11553, "把握": 11554, "atives": 11555, "层面": 11556, "lying": 11557, ".\"▁": 11558, "▁issues": 11559, "▁created": 11560, "▁further": 11561, "▁big": 11562, "clus": 11563, "传输": 11564, "▁net": 11565, "的作用": 11566, "案例": 11567, "bo": 11568, "bl": 11569, "▁given": 11570, "▁growth": 11571, "诊断": 11572, "▁today": 11573, "▁differen": 11574, "▁effects": 11575, "ected": 11576, "]▁": 11577, "一直": 11578, "ibility": 11579, "▁En": 11580, "的社会": 11581, "sequ": 11582, "▁ground": 11583, "AC": 11584, "▁always": 11585, "inter": 11586, "▁series": 11587, "▁plants": 11588, "aging": 11589, "aving": 11590, "▁kind": 11591, "▁applic": 11592, "▁English": 11593, "ustral": 11594, "贡献": 11595, "共和国": 11596, "▁event": 11597, "中小": 11598, "▁Mar": 11599, "▁factors": 11600, "ification": 11601, "基金": 11602, "▁needs": 11603, "一次": 11604, "acy": 11605, "出口": 11606, "全部": 11607, "▁histor": 11608, "anu": 11609, "▁term": 11610, "相比": 11611, "植物": 11612, "传感": 11613, "ils": 11614, "▁teac": 11615, "▁making": 11616, "ecially": 11617, "▁exc": 11618, "▁self": 11619, "ma": 11620, "各个": 11621, "可持续": 11622, "加工": 11623, "对外": 11624, "▁collect": 11625, "istory": 11626, "▁pub": 11627, "二十": 11628, "▁maintain": 11629, "▁activity": 11630, "适用": 11631, "co": 11632, "更好": 11633, "和发展": 11634, "真实": 11635, "严格": 11636, "旅游": 11637, "▁individuals": 11638, "▁particip": 11639, "ows": 11640, "参数": 11641, "just": 11642, "▁begin": 11643, "▁prote": 11644, "light": 11645, "ada": 11646, "▁strateg": 11647, "中国的": 11648, "more": 11649, "▁model": 11650, "ptoms": 11651, "▁ask": 11652, "alt": 11653, "▁dig": 11654, "和社会": 11655, "aim": 11656, "ese": 11657, "iques": 11658, "ising": 11659, "海洋": 11660, "ips": 11661, "鼓励": 11662, "▁consid": 11663, "论文": 11664, "▁necess": 11665, "roll": 11666, "▁town": 11667, "人民法院": 11668, "▁path": 11669, "贷款": 11670, "双方": 11671, "▁consum": 11672, "收益": 11673, "的能力": 11674, "ooking": 11675, "▁introdu": 11676, "CD": 11677, "▁give": 11678, "▁increase": 11679, "参加": 11680, "chan": 11681, "▁ep": 11682, "必然": 11683, "▁coll": 11684, "▁sum": 11685, "▁‘": 11686, "▁full": 11687, "▁helps": 11688, "他的": 11689, "描述": 11690, "出了": 11691, "▁range": 11692, "集体": 11693, "升级": 11694, "总结": 11695, "▁difficult": 11696, "不会": 11697, "法的": 11698, "▁million": 11699, "lor": 11700, "食品": 11701, "工艺": 11702, "plic": 11703, "媒体": 11704, "especially": 11705, "obal": 11706, "▁South": 11707, "erson": 11708, "▁author": 11709, "anced": 11710, "▁return": 11711, "olic": 11712, "AP": 11713, "获取": 11714, "eor": 11715, "▁course": 11716, "▁z": 11717, "》、": 11718, "ister": 11719, "▁recogn": 11720, "▁someone": 11721, "Ph": 11722, "ene": 11723, "健全": 11724, "▁May": 11725, "各类": 11726, "▁eff": 11727, "工作的": 11728, "can": 11729, "based": 11730, "▁offic": 11731, "rams": 11732, "变革": 11733, "ites": 11734, "archers": 11735, "▁house": 11736, "aken": 11737, "新型": 11738, "aced": 11739, "▁tru": 11740, "fully": 11741, "CO": 11742, "▁stat": 11743, "AT": 11744, "ecause": 11745, "抑制": 11746, "途径": 11747, "恢复": 11748, "权益": 11749, "▁likely": 11750, "▁field": 11751, "▁opportun": 11752, "▁contain": 11753, "电池": 11754, "▁require": 11755, "▁observ": 11756, "rec": 11757, "阶级": 11758, "▁clear": 11759, "rig": 11760, "普通": 11761, "一起": 11762, "#▁": 11763, "量子": 11764, "排放": 11765, "社区": 11766, "uck": 11767, "▁||▁": 11768, "欧洲": 11769, "lege": 11770, "动物": 11771, "▁usually": 11772, "产生的": 11773, "依赖": 11774, "▁countries": 11775, "音乐": 11776, "▁value": 11777, "\",▁": 11778, "中共": 11779, "▁North": 11780, "困难": 11781, "▁paper": 11782, "血管": 11783, "▁production": 11784, "▁began": 11785, "fact": 11786, "拥有": 11787, "认知": 11788, "机械": 11789, "▁consider": 11790, "定位": 11791, "▁ann": 11792, "国家的": 11793, "改革开放": 11794, "权力": 11795, "各国": 11796, "▁lay": 11797, "民事": 11798, "ences": 11799, "▁County": 11800, "面积": 11801, "ump": 11802, "▁practice": 11803, "▁popular": 11804, "气候": 11805, "yth": 11806, "ming": 11807, "su": 11808, "==": 11809, "▁chem": 11810, "利率": 11811, "▁Germ": 11812, "ening": 11813, "▁address": 11814, "时候": 11815, "的基础上": 11816, "▁tri": 11817, "IP": 11818, "▁phot": 11819, "▁mind": 11820, "标志": 11821, "bon": 11822, "▁[": 11823, "AS": 11824, "▁sun": 11825, "▁materials": 11826, "▁lower": 11827, "▁sure": 11828, "▁upon": 11829, "销售": 11830, "▁X": 11831, "驱动": 11832, "▁questions": 11833, "经济的": 11834, "第十": 11835, "CP": 11836, "整合": 11837, "费用": 11838, "生成": 11839, "▁live": 11840, "重新": 11841, "▁Man": 11842, "gest": 11843, "rown": 11844, "早期": 11845, "abit": 11846, "集团": 11847, "▁towards": 11848, "一体": 11849, "▁surface": 11850, "框架": 11851, "典型": 11852, "某些": 11853, "十分": 11854, "▁increased": 11855, "特性": 11856, "inn": 11857, "▁loss": 11858, "度的": 11859, "ground": 11860, "▁Gu": 11861, "从事": 11862, "另外": 11863, "▁season": 11864, "ele": 11865, "▁knowledge": 11866, "▁subject": 11867, "go": 11868, "ores": 11869, "物联网": 11870, "ety": 11871, "▁five": 11872, "DP": 11873, "ystem": 11874, "制造业": 11875, "▁site": 11876, "集成": 11877, "税收": 11878, "ront": 11879, "ference": 11880, "▁physical": 11881, "错误": 11882, "调节": 11883, "▁simple": 11884, "青年": 11885, "始终": 11886, "格局": 11887, "▁achie": 11888, "阅读": 11889, "aling": 11890, "助于": 11891, "实体": 11892, "运营": 11893, "arr": 11894, "▁employ": 11895, "另一方面": 11896, "▁events": 11897, "大会": 11898, "IT": 11899, "过去": 11900, "urb": 11901, "覆盖": 11902, "▁game": 11903, "▁cases": 11904, "德国": 11905, "尽管": 11906, "相关的": 11907, "estern": 11908, "▁hold": 11909, "安排": 11910, "准备": 11911, "理想": 11912, "图像": 11913, "▁living": 11914, "▁interact": 11915, "的主": 11916, "erve": 11917, "军事": 11918, "学者": 11919, "传感器": 11920, "解放": 11921, "ison": 11922, "▁quick": 11923, "▁wind": 11924, "▁animals": 11925, "inary": 11926, "▁comes": 11927, "Americ": 11928, "▁neg": 11929, "▁frequ": 11930, "See": 11931, "所谓": 11932, "▁personal": 11933, "▁text": 11934, "ails": 11935, "可靠": 11936, "转换": 11937, "习近平总书记": 11938, "sych": 11939, "acks": 11940, "▁friends": 11941, "特定": 11942, "arget": 11943, "文章": 11944, "▁company": 11945, "效益": 11946, "ille": 11947, "▁therap": 11948, "▁famil": 11949, "▁modern": 11950, "arl": 11951, "相当": 11952, "上升": 11953, "ender": 11954, "oose": 11955, "行的": 11956, "教育的": 11957, "mb": 11958, "是由": 11959, "平等": 11960, "▁compet": 11961, "▁film": 11962, "前提": 11963, "▁meet": 11964, "▁engine": 11965, "障碍": 11966, "城乡": 11967, "aff": 11968, "社会的": 11969, "▁port": 11970, "发达": 11971, "During": 11972, "▁repl": 11973, "身份": 11974, "▁song": 11975, "吸收": 11976, "ugust": 11977, "城镇": 11978, "等方面": 11979, "▁general": 11980, "Step": 11981, "▁parts": 11982, "me": 11983, "ideo": 11984, "iate": 11985, "本文": 11986, "even": 11987, "▁came": 11988, "场景": 11989, "ched": 11990, "▁indic": 11991, "making": 11992, "▁pressure": 11993, "合法": 11994, "▁themselves": 11995, "▁above": 11996, "orpor": 11997, "▁symptoms": 11998, "公民": 11999, "▁arr": 12000, "领域的": 12001, "请求": 12002, "▁question": 12003, "▁word": 12004, "icip": 12005, "fficient": 12006, "▁red": 12007, "ony": 12008, "Section": 12009, "idge": 12010, "//": 12011, "Acc": 12012, "ules": 12013, "追求": 12014, "Res": 12015, "aries": 12016, "▁deg": 12017, "意味": 12018, "arents": 12019, "▁took": 12020, "人物": 12021, "干部": 12022, "however": 12023, "一样": 12024, "▁Be": 12025, "▁album": 12026, "同样": 12027, "AN": 12028, "▁color": 12029, "实验室": 12030, "dom": 12031, "iol": 12032, "His": 12033, "创业": 12034, "▁super": 12035, "orks": 12036, "▁US": 12037, "▁addition": 12038, "它的": 12039, "▁built": 12040, "▁emer": 12041, "Many": 12042, "虚拟": 12043, "ops": 12044, "oor": 12045, "utions": 12046, "收集": 12047, "▁science": 12048, "▁least": 12049, "adem": 12050, "▁clos": 12051, "urs": 12052, "ters": 12053, "amb": 12054, "More": 12055, "ino": 12056, "leep": 12057, "pts": 12058, "▁arch": 12059, "▁micro": 12060, "▁sent": 12061, "eration": 12062, "多元": 12063, "只能": 12064, "Ind": 12065, "▁liter": 12066, "股东": 12067, "astic": 12068, "部署": 12069, "onstr": 12070, "col": 12071, "▁fund": 12072, "▁developed": 12073, "▁quality": 12074, "卫星": 12075, "债权": 12076, "无论": 12077, "uly": 12078, "的过程": 12079, "▁fall": 12080, "只是": 12081, "▁needed": 12082, "路径": 12083, "▁named": 12084, "的高": 12085, "和谐": 12086, "rect": 12087, "▁As": 12088, "▁aspect": 12089, "ule": 12090, "\"▁(": 12091, "移动": 12092, "中华人民": 12093, "也可以": 12094, "▁jo": 12095, "▁suggest": 12096, "▁polic": 12097, "美國": 12098, "itud": 12099, "off": 12100, "ague": 12101, "ivil": 12102, "▁emot": 12103, "▁America": 12104, "布局": 12105, "mar": 12106, "▁soft": 12107, "▁communities": 12108, "▁national": 12109, "专利": 12110, "的关键": 12111, "IN": 12112, "体育": 12113, "lands": 12114, "验证": 12115, "hel": 12116, "交换": 12117, "Here": 12118, "死亡": 12119, "wo": 12120, "距离": 12121, "▁whether": 12122, "▁bar": 12123, "▁Rep": 12124, "预防": 12125, "设立": 12126, "网络安全": 12127, "▁complet": 12128, "运输": 12129, "▁analysis": 12130, "的信息": 12131, "元素": 12132, "十八": 12133, "▁seen": 12134, "erous": 12135, "oice": 12136, "▁State": 12137, "▁size": 12138, "组合": 12139, "面对": 12140, "utes": 12141, "rench": 12142, "▁Ass": 12143, "▁thought": 12144, "▁cut": 12145, "的工作": 12146, "▁share": 12147, "连续": 12148, "reng": 12149, "▁fig": 12150, "▁God": 12151, "fl": 12152, "首次": 12153, "▁flu": 12154, "▁online": 12155, "传统的": 12156, "ready": 12157, "生长": 12158, "▁nature": 12159, "在此": 12160, "Imagine": 12161, "ype": 12162, "优秀": 12163, "bor": 12164, "No": 12165, "ctor": 12166, "ging": 12167, "赔偿": 12168, "rum": 12169, "▁ever": 12170, "都有": 12171, "...": 12172, "▁stories": 12173, "是对": 12174, "aches": 12175, "激发": 12176, "anuary": 12177, "固定": 12178, "国务": 12179, "uk": 12180, "▁deep": 12181, "▁doc": 12182, "itor": 12183, "▁once": 12184, "▁methods": 12185, "希望": 12186, "角色": 12187, "icles": 12188, "迅速": 12189, "istance": 12190, "verage": 12191, "ournal": 12192, "认定": 12193, "▁previous": 12194, "▁services": 12195, "ana": 12196, "onse": 12197, "▁never": 12198, "输入": 12199, "En": 12200, "▁amount": 12201, "呈现": 12202, "机会": 12203, "uel": 12204, "近年来": 12205, "▁started": 12206, "fect": 12207, "▁products": 12208, "就会": 12209, "PS": 12210, "宏观": 12211, "IV": 12212, "以后": 12213, "▁regular": 12214, "▁going": 12215, "udd": 12216, "▁nut": 12217, "的要求": 12218, "ptember": 12219, "ends": 12220, "▁circ": 12221, "ler": 12222, "pril": 12223, "加大": 12224, "▁entire": 12225, "eak": 12226, "▁stress": 12227, "自治": 12228, "防止": 12229, "aily": 12230, "办法": 12231, "引领": 12232, "nown": 12233, "▁rate": 12234, "▁techniques": 12235, "▁week": 12236, "公开": 12237, "na": 12238, "▁cr": 12239, "amin": 12240, "数据库": 12241, "▁break": 12242, "▁white": 12243, "ulations": 12244, "ume": 12245, "these": 12246, "▁British": 12247, "类似": 12248, "太阳": 12249, "左右": 12250, ".▁“": 12251, "▁designed": 12252, "hood": 12253, "iddle": 12254, "▁reduce": 12255, "elt": 12256, "hold": 12257, "常见": 12258, "▁everyone": 12259, "▁ensure": 12260, "员工": 12261, "ises": 12262, "▁traditional": 12263, "访问": 12264, "疫情": 12265, "预算": 12266, "加速": 12267, "▁John": 12268, "良好的": 12269, "oles": 12270, "Se": 12271, "CR": 12272, "位于": 12273, "公众": 12274, "▁abs": 12275, "▁lab": 12276, "▁assess": 12277, "illiam": 12278, "▁region": 12279, "破坏": 12280, "有效的": 12281, "▁dom": 12282, "证券": 12283, "模拟": 12284, "规定的": 12285, "iment": 12286, "学的": 12287, "主要是": 12288, "加入": 12289, "▁Cal": 12290, "itary": 12291, "金属": 12292, "▁-": 12293, "职能": 12294, "知道": 12295, "数据的": 12296, "eds": 12297, "MS": 12298, "让学生": 12299, "▁allows": 12300, "几个": 12301, "▁considered": 12302, "意味着": 12303, "▁original": 12304, "》、《": 12305, "出发": 12306, "lev": 12307, "lear": 12308, "兴趣": 12309, "▁six": 12310, "模块": 12311, "第五": 12312, "审查": 12313, "▁medical": 12314, "minist": 12315, "imately": 12316, "国务院": 12317, "日益": 12318, "avor": 12319, "地球": 12320, "運動": 12321, "▁mechan": 12322, "▁skin": 12323, "▁prop": 12324, "▁mass": 12325, "born": 12326, "De": 12327, "▁management": 12328, "iverse": 12329, "inally": 12330, "▁evidence": 12331, "▁exerc": 12332, "中华人民共和国": 12333, "奋斗": 12334, "urity": 12335, "能量": 12336, "实时": 12337, "活性": 12338, "Not": 12339, "OS": 12340, "内涵": 12341, "ample": 12342, "▁King": 12343, "优先": 12344, "培育": 12345, "亿元": 12346, "▁City": 12347, "istics": 12348, "AI": 12349, "体验": 12350, "相结合": 12351, "围绕": 12352, "Be": 12353, "其次": 12354, "▁anc": 12355, "如此": 12356, "消费者": 12357, "artment": 12358, "基地": 12359, "▁answ": 12360, "American": 12361, "▁below": 12362, "▁provides": 12363, "▁II": 12364, "▁drug": 12365, "From": 12366, "back": 12367, "主张": 12368, "利润": 12369, "刑事": 12370, "▁harm": 12371, "▁bal": 12372, "的经济": 12373, "=\"": 12374, "如下": 12375, "▁compon": 12376, "▁Soc": 12377, "Can": 12378, "有所": 12379, "▁Austral": 12380, "改造": 12381, "▁surv": 12382, "统筹": 12383, "成熟": 12384, "BC": 12385, "由此": 12386, "▁related": 12387, "改进": 12388, "▁idea": 12389, "▁encou": 12390, "▁integ": 12391, "atter": 12392, "三是": 12393, "Is": 12394, "节点": 12395, "▁healthy": 12396, "▁involved": 12397, "pre": 12398, "enc": 12399, "的内容": 12400, "ctober": 12401, "▁ability": 12402, "复兴": 12403, "▁included": 12404, "▁Comp": 12405, "▁published": 12406, "▁lives": 12407, "尤其是": 12408, "▁react": 12409, "%,": 12410, "▁mix": 12411, "Although": 12412, "://": 12413, "ari": 12414, "▁station": 12415, "▁players": 12416, "▁ver": 12417, "▁express": 12418, "英语": 12419, "▁target": 12420, "CT": 12421, "irl": 12422, "大多数": 12423, "▁relig": 12424, "▁refer": 12425, "▁shows": 12426, "▁reading": 12427, "lete": 12428, "文字": 12429, "电力": 12430, "itation": 12431, "▁`": 12432, "urg": 12433, "▁measure": 12434, "中国人民": 12435, "信息化": 12436, "医院": 12437, "gar": 12438, "看到": 12439, "法国": 12440, "▁multiple": 12441, "▁already": 12442, "ronic": 12443, "分离": 12444, "▁student": 12445, "有助于": 12446, "一切": 12447, "症状": 12448, "子的": 12449, "新闻": 12450, "▁climate": 12451, "更为": 12452, "joy": 12453, "▁inside": 12454, "▁total": 12455, "相应的": 12456, "▁months": 12457, "▁Earth": 12458, "继承": 12459, "▁won": 12460, "电路": 12461, "个人信息": 12462, "參考": 12463, "▁instance": 12464, "ached": 12465, "▁vari": 12466, "▁culture": 12467, "▁princ": 12468, "▁coun": 12469, "▁webs": 12470, "attle": 12471, "▁identify": 12472, "进而": 12473, "▁researchers": 12474, "▁computer": 12475, "异常": 12476, "▁regard": 12477, "实践中": 12478, "According": 12479, "▁tell": 12480, "和平": 12481, "攻击": 12482, "▁Pr": 12483, "aun": 12484, "▁experiences": 12485, "的教学": 12486, "输出": 12487, "宣传": 12488, "购买": 12489, "允许": 12490, "rew": 12491, "架构": 12492, "▁seem": 12493, "Us": 12494, "混合": 12495, "▁black": 12496, "▁really": 12497, "▁Japan": 12498, "▁established": 12499, "创建": 12500, "也就是": 12501, "实际上": 12502, "课题": 12503, "avy": 12504, "公里": 12505, "▁features": 12506, "专门": 12507, "因而": 12508, "▁market": 12509, "ift": 12510, "群体": 12511, "▁insp": 12512, "的规定": 12513, "External": 12514, "▁fem": 12515, "基层": 12516, "▁inj": 12517, "▁explore": 12518, "order": 12519, "▁aim": 12520, "▁River": 12521, "▁diet": 12522, "cember": 12523, "▁diagn": 12524, "▁green": 12525, "的变化": 12526, "▁tools": 12527, "▁required": 12528, "研究人员": 12529, "▁challenges": 12530, "▁cover": 12531, "▁dest": 12532, "▁elements": 12533, "个体": 12534, "▁pict": 12535, "ords": 12536, "▁hours": 12537, "no": 12538, "▁action": 12539, "vey": 12540, "▁March": 12541, ")。": 12542, "duc": 12543, "▁position": 12544, "ctions": 12545, "作业": 12546, "▁either": 12547, "▁remain": 12548, "人力": 12549, "ellow": 12550, "的行为": 12551, "▁necessary": 12552, "推广": 12553, "▁effective": 12554, "四个": 12555, "调控": 12556, "贯彻": 12557, "▁half": 12558, "形成了": 12559, "stead": 12560, "▁cust": 12561, "形势": 12562, "认证": 12563, "▁rou": 12564, "事务": 12565, "▁review": 12566, "▁separ": 12567, "▁money": 12568, "▁led": 12569, "▁source": 12570, "这里": 12571, "扩展": 12572, "登记": 12573, "、\"": 12574, "▁structure": 12575, "▁consist": 12576, "nov": 12577, "▁fail": 12578, "生态环境": 12579, "▁includes": 12580, "▁conduct": 12581, "▁demonstr": 12582, "anc": 12583, "面向": 12584, "▁mor": 12585, "文化的": 12586, "商标": 12587, "aul": 12588, "▁pay": 12589, "▁books": 12590, "water": 12591, "ovember": 12592, "▁love": 12593, "▁cru": 12594, "aged": 12595, "▁mach": 12596, "oved": 12597, "ensive": 12598, "▁schools": 12599, "Other": 12600, "▁rights": 12601, "宪法": 12602, "同一": 12603, "单元": 12604, "▁service": 12605, "▁squ": 12606, "生存": 12607, "经济社会": 12608, "是以": 12609, "said": 12610, "CC": 12611, "▁uses": 12612, "ura": 12613, "cont": 12614, "Bl": 12615, "区别": 12616, "▁taken": 12617, "一系列": 12618, "▁late": 12619, "vere": 12620, "的同时": 12621, "实现了": 12622, "做到": 12623, "经济增长": 12624, "确认": 12625, "▁Wh": 12626, "▁prob": 12627, "这样的": 12628, "素养": 12629, "ford": 12630, "▁produce": 12631, "arent": 12632, "▁sat": 12633, "()": 12634, "▁clean": 12635, "rick": 12636, "▁somet": 12637, "istor": 12638, "ply": 12639, "研究的": 12640, "▁vill": 12641, "▁capt": 12642, "▁ste": 12643, "ivate": 12644, "毕业": 12645, "time": 12646, "十二": 12647, "▁et": 12648, "产品的": 12649, "管理的": 12650, "▁weight": 12651, "▁actually": 12652, "探究": 12653, "进展": 12654, "▁approach": 12655, "▁June": 12656, "▁writing": 12657, "斗争": 12658, "cons": 12659, "▁attention": 12660, "。《": 12661, "▁bur": 12662, "等等": 12663, "毛泽": 12664, "▁|▁": 12665, "Sim": 12666, "▁streng": 12667, "▁recomm": 12668, "条件下": 12669, "频率": 12670, "毛泽东": 12671, "……": 12672, "Int": 12673, "很大": 12674, "▁Pol": 12675, "游戏": 12676, "▁training": 12677, "幼儿": 12678, "主任": 12679, "▁investig": 12680, "▁smo": 12681, "ham": 12682, "经历": 12683, "危险": 12684, "遗产": 12685, "Am": 12686, "器的": 12687, "▁fish": 12688, "劳动者": 12689, "▁response": 12690, "▁positive": 12691, "监控": 12692, "rast": 12693, "▁travel": 12694, "▁job": 12695, "▁political": 12696, "Our": 12697, "考试": 12698, "Or": 12699, "刺激": 12700, "约束": 12701, "head": 12702, "检验": 12703, "▁/▁": 12704, "▁done": 12705, "▁August": 12706, "some": 12707, "▁select": 12708, "拓展": 12709, "▁camp": 12710, "多的": 12711, "▁located": 12712, "古代": 12713, "▁instead": 12714, "强的": 12715, "▁ut": 12716, "▁behavior": 12717, "▁global": 12718, "AM": 12719, "▁prec": 12720, "大力": 12721, "铁路": 12722, "▁medic": 12723, "▁close": 12724, "DNA": 12725, "rs": 12726, "遗传": 12727, "建设的": 12728, "itch": 12729, "▁arg": 12730, "▁extra": 12731, "ustr": 12732, "▁says": 12733, "▁performance": 12734, "%.": 12735, "ara": 12736, "可能会": 12737, "▁div": 12738, "▁face": 12739, "▁sometimes": 12740, ")▁(": 12741, "ength": 12742, "展示": 12743, "olve": 12744, "修改": 12745, "▁Park": 12746, "引入": 12747, "土壤": 12748, "宗教": 12749, "▁lot": 12750, "成就": 12751, "小组": 12752, "isions": 12753, "ropri": 12754, "apter": 12755, "做好": 12756, "opy": 12757, "离子": 12758, "制度的": 12759, "也不": 12760, "rior": 12761, "打造": 12762, "巨大": 12763, "▁surround": 12764, "▁star": 12765, "预期": 12766, "化和": 12767, "```": 12768, "同志": 12769, "ST": 12770, "set": 12771, "Te": 12772, "iforn": 12773, "▁novel": 12774, "。“": 12775, "生的": 12776, "reet": 12777, "▁offer": 12778, "各级": 12779, "情感": 12780, "▁West": 12781, "AD": 12782, "▁reason": 12783, "▁whole": 12784, "合成": 12785, "确立": 12786, "实质": 12787, "▁Health": 12788, "▁temperature": 12789, "tra": 12790, "▁July": 12791, "博士": 12792, "▁forms": 12793, "▁played": 12794, "▁account": 12795, "▁values": 12796, "主题": 12797, "激励": 12798, "▁Co": 12799, "key": 12800, "known": 12801, "cks": 12802, "思路": 12803, "的一种": 12804, "▁ge": 12805, "▁emb": 12806, "当地": 12807, "可见": 12808, "的应用": 12809, "密切": 12810, "▁caused": 12811, "▁outside": 12812, "精准": 12813, "omb": 12814, "▁programs": 12815, "do": 12816, "给予": 12817, "▁ones": 12818, "▁Gen": 12819, "yt": 12820, "▁normal": 12821, "▁patterns": 12822, "科学家": 12823, "stry": 12824, "▁written": 12825, "imal": 12826, "▁tit": 12827, "的技术": 12828, "▁mess": 12829, "的不": 12830, "),": 12831, "\"\"": 12832, "rance": 12833, "▁points": 12834, "cil": 12835, "allow": 12836, "的情况下": 12837, "▁Act": 12838, "▁primary": 12839, "ervation": 12840, "▁soil": 12841, "▁Su": 12842, "形象": 12843, "建成": 12844, ",▁“": 12845, "互动": 12846, "▁condition": 12847, "▁behind": 12848, "▁sense": 12849, "fort": 12850, "▁distribut": 12851, "▁fire": 12852, "▁rather": 12853, "▁oil": 12854, "ades": 12855, "▁January": 12856, "lin": 12857, ")▁": 12858, "▁draw": 12859, "秩序": 12860, "国的": 12861, "探讨": 12862, "供应链": 12863, "信息技术": 12864, "结论": 12865, "▁enjoy": 12866, "unction": 12867, "▁critical": 12868, "▁member": 12869, "发行": 12870, "▁numbers": 12871, "▁heat": 12872, "▁sources": 12873, "▁environmental": 12874, "▁taking": 12875, "知识产权": 12876, "▁Fran": 12877, "争议": 12878, "人民币": 12879, "▁clin": 12880, "▁parents": 12881, "efore": 12882, "、“": 12883, "Over": 12884, "▁respect": 12885, "ifornia": 12886, "▁compared": 12887, "ief": 12888, "▁fat": 12889, "Just": 12890, "代理": 12891, ":**": 12892, "iter": 12893, "金融机构": 12894, "Each": 12895, "▁mom": 12896, "isms": 12897, "▁Reg": 12898, "▁suff": 12899, "▁doing": 12900, "之外": 12901, "pe": 12902, "导向": 12903, "广大": 12904, "资源的": 12905, "anies": 12906, "人大": 12907, "▁image": 12908, "注册": 12909, "所在": 12910, "▁produced": 12911, "oming": 12912, "▁gas": 12913, "▁Bar": 12914, "属性": 12915, "统治": 12916, "的理论": 12917, "纳入": 12918, "▁average": 12919, "▁September": 12920, "ension": 12921, "▁spread": 12922, "中國": 12923, "ebru": 12924, "法定": 12925, "hing": 12926, "成长": 12927, "情形": 12928, "检察": 12929, "▁All": 12930, "rage": 12931, "百年": 12932, "日常": 12933, "ebruary": 12934, "▁bring": 12935, "的概念": 12936, "关联": 12937, "生产力": 12938, "▁benefits": 12939, "潜在": 12940, "▁itself": 12941, "izations": 12942, "的时间": 12943, "各地": 12944, "所得": 12945, "▁feed": 12946, "振兴": 12947, "ials": 12948, "▁video": 12949, "uild": 12950, "》(": 12951, "Most": 12952, "cles": 12953, "▁daily": 12954, "arily": 12955, "▁Part": 12956, "▁takes": 12957, "▁increasing": 12958, "▁states": 12959, "▁broad": 12960, "udents": 12961, "▁《": 12962, "▁society": 12963, "当代": 12964, "▁independ": 12965, "▁terms": 12966, "▁April": 12967, "。\"": 12968, "▁link": 12969, "市场经济": 12970, "ometimes": 12971, "ET": 12972, "高速": 12973, "事故": 12974, "能力的": 12975, "ED": 12976, "▁tiss": 12977, "comp": 12978, "abet": 12979, "▁threat": 12980, "▁eval": 12981, "itect": 12982, "Why": 12983, "▁promot": 12984, "▁overall": 12985, "航空": 12986, "▁warm": 12987, "▁slow": 12988, "▁card": 12989, "强度": 12990, "▁beaut": 12991, "的法律": 12992, "▁longer": 12993, "即使": 12994, "odies": 12995, "First": 12996, "▁cool": 12997, "态度": 12998, "▁sou": 12999, "inct": 13000, "公司的": 13001, "故事": 13002, "有些": 13003, "`▁": 13004, "▁,▁": 13005, "▁football": 13006, "des": 13007, "▁yourself": 13008, "可以通过": 13009, "范围内": 13010, "ica": 13011, "▁held": 13012, "▁sleep": 13013, "▁damage": 13014, "▁protein": 13015, "▁aud": 13016, "贫困": 13017, "有着": 13018, "stitute": 13019, "适当": 13020, "存在的": 13021, "onom": 13022, "▁quickly": 13023, "较大": 13024, "▁wild": 13025, "在中国": 13026, "▁forest": 13027, "amples": 13028, "职责": 13029, "▁cross": 13030, "▁practices": 13031, "▁fru": 13032, "igen": 13033, "US": 13034, "ricult": 13035, "▁served": 13036, "▁safety": 13037, "他人": 13038, "Once": 13039, "oe": 13040, "Eng": 13041, "哪些": 13042, "展开": 13043, "▁Rec": 13044, "人才培养": 13045, "研究所": 13046, "▁dog": 13047, "ington": 13048, "而不是": 13049, "积累": 13050, "rand": 13051, "担保": 13052, "▁standard": 13053, "alls": 13054, "▁altern": 13055, "mm": 13056, "沟通": 13057, "▁sex": 13058, "Another": 13059, "▁chemical": 13060, "irit": 13061, "遵循": 13062, "▁Har": 13063, "▁provided": 13064, "▁earl": 13065, "John": 13066, "出来": 13067, "当然": 13068, "▁stop": 13069, "约定": 13070, "威胁": 13071, "▁concept": 13072, "更新": 13073, "standing": 13074, "较为": 13075, "▁matter": 13076, "▁enh": 13077, "▁October": 13078, "▁farm": 13079, "▁reve": 13080, "IC": 13081, "再次": 13082, "维持": 13083, "▁released": 13084, "porary": 13085, ",▁": 13086, "参考文献": 13087, "养老": 13088, "他们的": 13089, "▁expression": 13090, "补偿": 13091, "民间": 13092, "大利": 13093, "内在": 13094, "▁kids": 13095, "ership": 13096, "▁patient": 13097, "我们的": 13098, "到的": 13099, "▁stru": 13100, "▁cat": 13101, "绩效": 13102, "ederal": 13103, "▁content": 13104, "▁(": 13105, "acters": 13106, "另一": 13107, "ha": 13108, "创作": 13109, "▁psych": 13110, "团结": 13111, "的核心": 13112, "▁yet": 13113, "▁Ed": 13114, "▁reflect": 13115, "▁cultural": 13116, "overy": 13117, "alled": 13118, "危害": 13119, "usic": 13120, "商务": 13121, "  ": 13122, "新兴": 13123, "▁humans": 13124, "▁Ab": 13125, "▁subst": 13126, "RNA": 13127, "###▁": 13128, "ondon": 13129, "大部分": 13130, "▁added": 13131, "life": 13132, "之中": 13133, "价值观": 13134, "ama": 13135, "市场的": 13136, "▁safe": 13137, "▁log": 13138, "▁media": 13139, "▁lines": 13140, "施工": 13141, "用人": 13142, "▁final": 13143, "new": 13144, "▁Par": 13145, "力度": 13146, "并在": 13147, "▁causes": 13148, "强制": 13149, "制作": 13150, "理性": 13151, "▁wood": 13152, "OR": 13153, "将其": 13154, "uro": 13155, "rought": 13156, "ibrary": 13157, "各项": 13158, "▁road": 13159, "esc": 13160, "密度": 13161, "▁ox": 13162, "▁games": 13163, "缺陷": 13164, "osing": 13165, "依靠": 13166, "最佳": 13167, "对应": 13168, "▁shown": 13169, "变量": 13170, "oud": 13171, "▁rev": 13172, "▁Min": 13173, "上市": 13174, "那些": 13175, "▁avoid": 13176, "▁sust": 13177, "转让": 13178, "▁habit": 13179, "▁stay": 13180, "渠道": 13181, "电流": 13182, "asons": 13183, "▁Am": 13184, "▁French": 13185, "▁third": 13186, "冲突": 13187, "补充": 13188, "考核": 13189, "示范": 13190, "▁recent": 13191, "非法": 13192, "ON": 13193, "EP": 13194, "而不": 13195, "used": 13196, "iff": 13197, "\".▁": 13198, "▁greater": 13199, "Bob": 13200, "▁doesn": 13201, "▁exact": 13202, "under": 13203, "接触": 13204, "党中央": 13205, "Dr": 13206, "▁easy": 13207, "引发": 13208, "pper": 13209, "ditionally": 13210, "▁tree": 13211, "形成的": 13212, "osition": 13213, "协商": 13214, "▁importance": 13215, "see": 13216, "支出": 13217, "▁including": 13218, "▁talk": 13219, "ogen": 13220, "ius": 13221, "▁implement": 13222, "room": 13223, "纤维": 13224, "尊重": 13225, "违法": 13226, "ror": 13227, "Le": 13228, "%。": 13229, "加以": 13230, "ternet": 13231, "anks": 13232, "People": 13233, "ears": 13234, "为什么": 13235, "坚定": 13236, "替代": 13237, "orthern": 13238, "▁December": 13239, "oma": 13240, "其它": 13241, "▁movement": 13242, "经常": 13243, "▁visual": 13244, "▁Dr": 13245, "iber": 13246, "》,": 13247, "App": 13248, "▁Dep": 13249, "反对": 13250, "▁ideas": 13251, "程度上": 13252, "人民群众": 13253, "ties": 13254, "ico": 13255, "、▁": 13256, "iece": 13257, "合物": 13258, "正是": 13259, "▁aff": 13260, "干扰": 13261, "▁establish": 13262, "资本主义": 13263, "▁electric": 13264, "rote": 13265, "▁wa": 13266, "▁syn": 13267, "▁Europe": 13268, "习惯": 13269, "▁night": 13270, "alking": 13271, "▁mag": 13272, "▁sold": 13273, "响应": 13274, "因子": 13275, "▁.": 13276, "空气": 13277, "▁significantly": 13278, "add": 13279, "有了": 13280, "vention": 13281, "pose": 13282, "▁High": 13283, "▁died": 13284, "走向": 13285, "▁historical": 13286, "▁progress": 13287, "主席": 13288, "最大的": 13289, "▁sil": 13290, "ancial": 13291, "几乎": 13292, "面的": 13293, "行使": 13294, "▁career": 13295, "著作": 13296, "院校": 13297, ".”▁": 13298, "只要": 13299, "的安全": 13300, "▁industry": 13301, "▁former": 13302, "更好地": 13303, "atively": 13304, "▁cannot": 13305, "▁El": 13306, "某种": 13307, "ounds": 13308, "▁International": 13309, "▁developing": 13310, "odes": 13311, "resh": 13312, "gl": 13313, "平方": 13314, "做出": 13315, "ancy": 13316, "带来的": 13317, "予以": 13318, "▁extrem": 13319, "▁received": 13320, "資料": 13321, "营养": 13322, "ologies": 13323, "▁lands": 13324, "今天": 13325, "十四": 13326, "▁Qu": 13327, "足球": 13328, "▁hy": 13329, "ufact": 13330, "htt": 13331, "▁November": 13332, "iers": 13333, "▁host": 13334, "▁code": 13335, "活动的": 13336, "关系的": 13337, "时的": 13338, "▁north": 13339, "手术": 13340, "▁international": 13341, "损伤": 13342, "传递": 13343, "▁custom": 13344, "▁And": 13345, "可以在": 13346, "但在": 13347, "espite": 13348, "基础上": 13349, "Rec": 13350, "十九": 13351, "ky": 13352, "▁claim": 13353, "产业链": 13354, "iles": 13355, "芯片": 13356, "吸引": 13357, "释放": 13358, "):": 13359, "▁communication": 13360, "汇率": 13361, "▁House": 13362, "bit": 13363, "):▁": 13364, "▁true": 13365, "•▁": 13366, "少数": 13367, "Through": 13368, "指数": 13369, "▁animal": 13370, "不再": 13371, "▁larger": 13372, "▁European": 13373, "高级": 13374, "also": 13375, "良好": 13376, "网站": 13377, "改革的": 13378, "重复": 13379, "▁aware": 13380, "▁minutes": 13381, "人与": 13382, "▁growing": 13383, "ira": 13384, "的思想": 13385, "初步": 13386, "▁feature": 13387, ",《": 13388, "▁families": 13389, "term": 13390, "路线": 13391, "▁determine": 13392, "▁issue": 13393, "itude": 13394, ".▁**": 13395, "对其": 13396, "inated": 13397, "Col": 13398, "▁continue": 13399, "ios": 13400, "uff": 13401, "边缘": 13402, "iring": 13403, "步骤": 13404, "▁mental": 13405, "reek": 13406, "EM": 13407, "avid": 13408, "▁Center": 13409, "股权": 13410, "代谢": 13411, "after": 13412, "大學": 13413, "▁economic": 13414, "大型": 13415, "come": 13416, "学家": 13417, "▁almost": 13418, "和其他": 13419, "▁website": 13420, "品牌": 13421, "▁decre": 13422, "体系的": 13423, "▁page": 13424, "队伍": 13425, "▁Cont": 13426, "揭示": 13427, "▁went": 13428, "个性": 13429, "流通": 13430, "▁complete": 13431, "自觉": 13432, "服务器": 13433, "▁band": 13434, "启动": 13435, "原子": 13436, "iency": 13437, "▁concent": 13438, "▁magn": 13439, "▁variety": 13440, "粮食": 13441, "▁bacter": 13442, "ned": 13443, "采集": 13444, "大规模": 13445, "▁symb": 13446, "为核心": 13447, "▁active": 13448, "▁article": 13449, "思政": 13450, "▁meaning": 13451, "孩子": 13452, "职业教育": 13453, "ounts": 13454, "命运": 13455, "iny": 13456, "党员": 13457, "▁contact": 13458, "适合": 13459, "ously": 13460, "bes": 13461, "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁": 13462, "更多的": 13463, "PP": 13464, "has": 13465, "▁reported": 13466, "CS": 13467, "eal": 13468, "iot": 13469, "人在": 13470, "唯一": 13471, "为基础": 13472, "Well": 13473, "▁basic": 13474, "▁images": 13475, "▁You": 13476, "▁base": 13477, "结束": 13478, "GDP": 13479, "▁strategies": 13480, "台灣": 13481, "侵权": 13482, "ula": 13483, "▁speed": 13484, "的结果": 13485, "▁shap": 13486, "▁accept": 13487, "▁Sw": 13488, "ocal": 13489, "▁Gl": 13490, "同步": 13491, "服务的": 13492, "uries": 13493, "被告": 13494, "▁places": 13495, "▁feet": 13496, "uth": 13497, "充分发挥": 13498, "大量的": 13499, "Do": 13500, "表现为": 13501, "▁discovered": 13502, "▁opportunities": 13503, "enge": 13504, "▁sn": 13505, "条款": 13506, "科技创新": 13507, "应急": 13508, "Since": 13509, "atform": 13510, "力和": 13511, "▁believe": 13512, "▁creating": 13513, "的学习": 13514, "不少": 13515, "Under": 13516, "▁Dist": 13517, "高质量发展": 13518, "anish": 13519, "▁processes": 13520, "▁asked": 13521, "ying": 13522, "大小": 13523, "▁foods": 13524, "原始": 13525, "▁additional": 13526, "▁correct": 13527, "批准": 13528, "ulate": 13529, "了一个": 13530, "Alice": 13531, "agement": 13532, "▁appl": 13533, "年度": 13534, "▁network": 13535, "▁Me": 13536, "care": 13537, "ulated": 13538, "izes": 13539, "▁diseases": 13540, "**:▁": 13541, "resident": 13542, "▁achieve": 13543, "▁easily": 13544, "▁eth": 13545, "ildren": 13546, "▁via": 13547, "浙江": 13548, "▁eye": 13549, "▁continued": 13550, "▁lif": 13551, "road": 13552, "间的": 13553, "▁appropri": 13554, "▁crucial": 13555, "接收": 13556, "授权": 13557, "辐射": 13558, "▁hor": 13559, "主导": 13560, "▁everything": 13561, "Ab": 13562, "issions": 13563, "每年": 13564, "▁Stud": 13565, "Comp": 13566, "独特": 13567, "ether": 13568, "装置": 13569, ">▁": 13570, "▁collabor": 13571, "差距": 13572, "▁shape": 13573, "▁attem": 13574, "▁Art": 13575, "omas": 13576, "▁print": 13577, "灵活": 13578, "uable": 13579, "son": 13580, "劳动合同": 13581, "▁viol": 13582, "▁lo": 13583, "敏感": 13584, "▁veget": 13585, "▁Sec": 13586, "相似": 13587, "|-": 13588, "▁trees": 13589, "▁prep": 13590, "使用的": 13591, "▁eat": 13592, "▁cele": 13593, "之路": 13594, "idents": 13595, "有限公司": 13596, "▁virus": 13597, "lead": 13598, "Then": 13599, "纳米": 13600, "▁goal": 13601, "事项": 13602, "fess": 13603, "vest": 13604, "▁visit": 13605, "▁analy": 13606, "▁simply": 13607, "rest": 13608, "▁document": 13609, "工资": 13610, "▁stri": 13611, "▁aspects": 13612, "▁mole": 13613, "▁getting": 13614, "蛋白质": 13615, "修复": 13616, "ections": 13617, "電影": 13618, "大幅": 13619, "Co": 13620, "▁influence": 13621, "ields": 13622, "通道": 13623, "▁remains": 13624, "ros": 13625, "▁south": 13626, "Gen": 13627, "▁carbon": 13628, "▁manufact": 13629, "▁ec": 13630, "▁becomes": 13631, "iar": 13632, "的特点": 13633, "▁eyes": 13634, "▁characters": 13635, "cean": 13636, "现有": 13637, "ython": 13638, "AL": 13639, "▁ang": 13640, "不过": 13641, "视频": 13642, "rid": 13643, "▁For": 13644, "▁breat": 13645, "▁hands": 13646, "▁efforts": 13647, "oday": 13648, "期限": 13649, "BS": 13650, "▁version": 13651, "ipl": 13652, "一代": 13653, "▁x": 13654, "bre": 13655, "orders": 13656, "老师": 13657, "用人单位": 13658, "equ": 13659, "召开": 13660, "sec": 13661, "ald": 13662, "许可": 13663, "yond": 13664, "链接": 13665, "▁mother": 13666, "igned": 13667, "Further": 13668, "▁hot": 13669, "Mar": 13670, "文物": 13671, "▁structures": 13672, "辅助": 13673, "浓度": 13674, "▁Russ": 13675, "▁commit": 13676, "外的": 13677, "投资者": 13678, "自动化": 13679, "roup": 13680, "岗位": 13681, "债券": 13682, "▁Canada": 13683, "edi": 13684, "Even": 13685, "代码": 13686, "年人": 13687, "▁thing": 13688, "党和": 13689, "十一": 13690, "考察": 13691, "制约": 13692, "仲裁": 13693, "ceed": 13694, "试点": 13695, "职工": 13696, "纠纷": 13697, "▁guid": 13698, "大大": 13699, "istry": 13700, "外交": 13701, "电压": 13702, "電視": 13703, "详细": 13704, "▁check": 13705, "▁transport": 13706, "▁tax": 13707, "均衡": 13708, "紧密": 13709, "aint": 13710, "通知": 13711, "成分": 13712, "▁fram": 13713, "这就": 13714, "▁favor": 13715, "imum": 13716, "▁relationship": 13717, "的风险": 13718, "▁sea": 13719, "▁Africa": 13720, "▁neigh": 13721, "Cont": 13722, ":▁\"": 13723, "组成部分": 13724, "wide": 13725, "随机": 13726, "▁lost": 13727, "▁calcul": 13728, "many": 13729, "iful": 13730, "智能化": 13731, "▁wond": 13732, "抵押": 13733, "组织的": 13734, "illing": 13735, "olit": 13736, "aur": 13737, "气体": 13738, "ydro": 13739, "▁stage": 13740, "▁hyp": 13741, "phas": 13742, "编制": 13743, "were": 13744, "▁Tra": 13745, "iec": 13746, "osure": 13747, "十三": 13748, "▁poll": 13749, "十年": 13750, "信息的": 13751, "▁Science": 13752, "▁German": 13753, "▁ancient": 13754, "▁College": 13755, "有一": 13756, "EN": 13757, "writ": 13758, "为中心": 13759, "▁shared": 13760, "▁Ac": 13761, "学会": 13762, "伦理": 13763, "▁front": 13764, "▁bab": 13765, "罗斯": 13766, "▁central": 13767, "▁gard": 13768, "▁February": 13769, "atin": 13770, "▁rules": 13771, "微生物": 13772, "ocr": 13773, "地产": 13774, "融入": 13775, "军队": 13776, "men": 13777, "编码": 13778, "▁African": 13779, "航天": 13780, "董事": 13781, "IL": 13782, "也会": 13783, "etc": 13784, "craft": 13785, "ux": 13786, "Don": 13787, "值得": 13788, "少年": 13789, "▁decided": 13790, "ett": 13791, "▁der": 13792, "第一次": 13793, "que": 13794, "▁decision": 13795, "▁companies": 13796, "▁tum": 13797, "机器人": 13798, "采购": 13799, "resp": 13800, "▁emp": 13801, "left": 13802, "环保": 13803, "▁looking": 13804, "opt": 13805, "▁Institute": 13806, "办公": 13807, "地区的": 13808, "PC": 13809, "若干": 13810, "▁pack": 13811, "chol": 13812, "uman": 13813, "大学生": 13814, "发电": 13815, "▁described": 13816, "rab": 13817, "印度": 13818, "Their": 13819, "▁isn": 13820, "eorge": 13821, "在线": 13822, "▁convers": 13823, "▁born": 13824, "▁transl": 13825, "▁else": 13826, "方程": 13827, "▁Associ": 13828, "inese": 13829, "▁beyond": 13830, "高中": 13831, "▁length": 13832, "▁Air": 13833, "  ": 13834, "gn": 13835, "▁East": 13836, "▁situ": 13837, "▁force": 13838, "发生的": 13839, "My": 13840, "▁sett": 13841, "并非": 13842, "使命": 13843, "单一": 13844, "ception": 13845, "▁severe": 13846, "一旦": 13847, "进口": 13848, "▁Per": 13849, "▁Mc": 13850, "uge": 13851, "接口": 13852, "vant": 13853, "▁Day": 13854, "区块": 13855, "配合": 13856, "节能": 13857, "局部": 13858, "电影": 13859, "▁acid": 13860, "Cons": 13861, "解决方案": 13862, "今年": 13863, "▁sus": 13864, "iples": 13865, "ducation": 13866, "▁projects": 13867, "mission": 13868, "\"。": 13869, "▁attack": 13870, "传承": 13871, "▁thinking": 13872, "▁mount": 13873, "上下": 13874, "▁difference": 13875, "视觉": 13876, "▁App": 13877, "▁ful": 13878, "装备": 13879, "▁Jew": 13880, "▁devices": 13881, "Comm": 13882, "体现了": 13883, "using": 13884, "▁screen": 13885, "▁rock": 13886, "股票": 13887, "发育": 13888, "轨道": 13889, "itar": 13890, "共同体": 13891, "▁fight": 13892, "执法": 13893, "zz": 13894, "pid": 13895, "硬件": 13896, "▁Ang": 13897, "▁sal": 13898, "▁objects": 13899, "▁digital": 13900, "国家安全": 13901, "假设": 13902, "至少": 13903, "clusion": 13904, "方针": 13905, "绝对": 13906, "的形式": 13907, "▁History": 13908, "ipment": 13909, "because": 13910, "记忆": 13911, "▁models": 13912, "PD": 13913, "使学生": 13914, "▁proced": 13915, "▁reach": 13916, "era": 13917, "▁wid": 13918, "▁steps": 13919, "西部": 13920, "uments": 13921, "▁responsible": 13922, "unicip": 13923, "短期": 13924, "接近": 13925, "▁successful": 13926, "▁scientists": 13927, "台湾": 13928, "▁son": 13929, "▁lack": 13930, "编辑": 13931, "现状": 13932, "▁At": 13933, "lim": 13934, ":**▁": 13935, "SS": 13936, "条例": 13937, "▁agre": 13938, "还要": 13939, "▁valuable": 13940, "股份": 13941, "EC": 13942, "▁differences": 13943, "▁involves": 13944, "ynam": 13945, "▁birth": 13946, "▁perspect": 13947, "▁center": 13948, "违反": 13949, "▁Research": 13950, "irm": 13951, "urrent": 13952, "著名": 13953, "审判": 13954, "▁room": 13955, "class": 13956, "近代": 13957, "wood": 13958, "May": 13959, "▁administ": 13960, "▁earth": 13961, "org": 13962, "着力": 13963, "abetes": 13964, "year": 13965, "▁components": 13966, "▁quant": 13967, "airs": 13968, "urt": 13969, "不到": 13970, "cre": 13971, "▁Rev": 13972, "同意": 13973, "met": 13974, "的教育": 13975, "扩张": 13976, "▁deb": 13977, "活力": 13978, "▁Serv": 13979, "胜利": 13980, "宇宙": 13981, "▁ing": 13982, "umn": 13983, "则是": 13984, "▁strugg": 13985, "出台": 13986, "Su": 13987, "ospital": 13988, "▁infl": 13989, "清楚": 13990, "挖掘": 13991, "▁sustain": 13992, "▁worked": 13993, "gu": 13994, "ashington": 13995, "ero": 13996, "▁therapy": 13997, "发射": 13998, "www": 13999, "▁professional": 14000, "提出的": 14001, "____": 14002, "第六": 14003, "bal": 14004, "▁instit": 14005, "ancing": 14006, "▁ast": 14007, "ocks": 14008, "▁contains": 14009, "事物": 14010, "再生": 14011, "电视": 14012, "▁soon": 14013, "▁release": 14014, "观测": 14015, "红色": 14016, "身体": 14017, "▁saw": 14018, "▁male": 14019, "▁directly": 14020, "▁infection": 14021, "▁op": 14022, "明朝": 14023, "leg": 14024, "▁Bo": 14025, "消除": 14026, "▁cou": 14027, "ampions": 14028, "▁veh": 14029, "怎样": 14030, "▁incorpor": 14031, "新技术": 14032, "”、“": 14033, "竞争力": 14034, "▁ice": 14035, "▁expect": 14036, "Rem": 14037, "▁England": 14038, "▁powerful": 14039, "切实": 14040, "load": 14041, "学习的": 14042, "emporary": 14043, "▁software": 14044, "▁India": 14045, "oration": 14046, "▁Mon": 14047, "▁track": 14048, "条规定": 14049, "century": 14050, "所需": 14051, "adian": 14052, "记者": 14053, "▁Indian": 14054, "spec": 14055, "年龄": 14056, "ifically": 14057, "▁dry": 14058, "▁poor": 14059, "指挥": 14060, "what": 14061, "itis": 14062, "感知": 14063, "ought": 14064, "▁dang": 14065, "ieces": 14066, "dis": 14067, "▁weeks": 14068, "功率": 14069, "▁innov": 14070, "▁adults": 14071, "gency": 14072, "天然": 14073, "故障": 14074, "▁estim": 14075, "第一个": 14076, "找到": 14077, "usion": 14078, "教学中": 14079, "品种": 14080, "▁System": 14081, "是中国": 14082, "小时": 14083, "执政": 14084, "▁har": 14085, "大气": 14086, "▁rates": 14087, "全会": 14088, "得以": 14089, "咨询": 14090, "”“": 14091, "财富": 14092, "强国": 14093, "▁earlier": 14094, "人为": 14095, "▁rob": 14096, "itiz": 14097, "而在": 14098, "情境": 14099, "lymp": 14100, "▁theory": 14101, "的原则": 14102, "▁search": 14103, "报道": 14104, "样本": 14105, "一带": 14106, "划分": 14107, "▁dou": 14108, "▁vit": 14109, "抽象": 14110, "呼吸": 14111, "▁diverse": 14112, "aught": 14113, "▁tool": 14114, "▁speak": 14115, "\"、\"": 14116, "垄断": 14117, "▁predict": 14118, "▁requires": 14119, "树立": 14120, "序列": 14121, "▁village": 14122, "▁relationships": 14123, "icular": 14124, "pat": 14125, "▁conce": 14126, "▁fa": 14127, "▁und": 14128, "准则": 14129, "▁playing": 14130, "ias": 14131, "▁hon": 14132, "▁write": 14133, "万元": 14134, "语文": 14135, "南京": 14136, "aly": 14137, "劳动力": 14138, "cast": 14139, "▁ago": 14140, "▁cam": 14141, "▁leaves": 14142, "视为": 14143, "▁ir": 14144, "cell": 14145, "▁showed": 14146, "负债": 14147, "avig": 14148, "高于": 14149, "复杂的": 14150, "▁defin": 14151, "机遇": 14152, "等级": 14153, "▁location": 14154, "vert": 14155, "ij": 14156, "以前": 14157, "人文": 14158, "▁William": 14159, "多次": 14160, "▁trying": 14161, "▁vacc": 14162, "渗透": 14163, "能力和": 14164, "vis": 14165, "board": 14166, "▁according": 14167, "▁moved": 14168, "ander": 14169, "公路": 14170, "▁limited": 14171, "巨大的": 14172, "经典": 14173, "我们党": 14174, "出现了": 14175, "巩固": 14176, "sm": 14177, "突变": 14178, "干预": 14179, "oyal": 14180, "▁gain": 14181, "nection": 14182, "▁section": 14183, "▁fit": 14184, "合并": 14185, "▁Church": 14186, "民法": 14187, "可持续发展": 14188, "▁serious": 14189, "▁encourag": 14190, "它是": 14191, "的时候": 14192, "▁table": 14193, "的情况": 14194, "ilos": 14195, "人体": 14196, "▁Val": 14197, "成了": 14198, "gram": 14199, "▁findings": 14200, "取得了": 14201, "冲击": 14202, "带动": 14203, "使其": 14204, "家族": 14205, "动机": 14206, "ament": 14207, "Pre": 14208, "▁gradu": 14209, "▁items": 14210, "得到了": 14211, "MP": 14212, "inating": 14213, "▁experien": 14214, "▁civil": 14215, "▁+▁": 14216, "数字经济": 14217, "ensity": 14218, "个月": 14219, "结构的": 14220, "▁quite": 14221, "ras": 14222, "疫苗": 14223, "五年": 14224, "▁month": 14225, "gy": 14226, "Additionally": 14227, "▁dark": 14228, "▁colon": 14229, "▁scientific": 14230, "▁device": 14231, "zh": 14232, "应用于": 14233, "▁bra": 14234, "线性": 14235, "发病": 14236, "适用于": 14237, "中间": 14238, "▁prior": 14239, "▁generally": 14240, "itable": 14241, "edic": 14242, "▁conflic": 14243, "ners": 14244, "的政治": 14245, "清晰": 14246, "含量": 14247, "▁exercise": 14248, "▁smaller": 14249, "ael": 14250, "用来": 14251, "不良": 14252, "处罚": 14253, "coh": 14254, "的目标": 14255, "货币政策": 14256, "低于": 14257, "▁balance": 14258, "激活": 14259, "激光": 14260, "尚未": 14261, "防治": 14262, "现场": 14263, "▁learned": 14264, "对此": 14265, "▁examples": 14266, "成绩": 14267, "房地产": 14268, "▁mut": 14269, "▁sequ": 14270, "对比": 14271, "▁memory": 14272, "自信": 14273, "有效地": 14274, "ny": 14275, "▁platform": 14276, "区的": 14277, "鉴定": 14278, "book": 14279, "Her": 14280, "▁wide": 14281, "行为的": 14282, "▁cho": 14283, "change": 14284, "▁perfect": 14285, "是不": 14286, "中有": 14287, "formed": 14288, "▁mid": 14289, ";(": 14290, "▁piece": 14291, "useum": 14292, "资格": 14293, "▁construct": 14294, "办理": 14295, "▁ord": 14296, "▁collection": 14297, "▁context": 14298, "林匹": 14299, "知识的": 14300, "▁club": 14301, "所示": 14302, "▁got": 14303, "》(": 14304, "ste": 14305, "levision": 14306, "富裕": 14307, "sk": 14308, "▁Your": 14309, "工人": 14310, "hemat": 14311, "*▁**": 14312, "being": 14313, "▁largest": 14314, "▁thous": 14315, "比重": 14316, "解除": 14317, "▁style": 14318, "alities": 14319, "ville": 14320, "▁applications": 14321, "探测": 14322, "安装": 14323, "▁League": 14324, "Tra": 14325, "▁teachers": 14326, "▁obtain": 14327, "▁financial": 14328, "▁egg": 14329, "▁pan": 14330, "大家": 14331, "▁carry": 14332, "▁offers": 14333, "更高": 14334, "秘密": 14335, "蒙古": 14336, "复合": 14337, "haps": 14338, "▁clinical": 14339, "三角": 14340, "承包": 14341, "▁fast": 14342, "较低": 14343, "东北": 14344, "▁goals": 14345, "DA": 14346, "ximately": 14347, "▁tend": 14348, "SP": 14349, "各自": 14350, "林匹克": 14351, "hens": 14352, "▁architect": 14353, "品质": 14354, "▁didn": 14355, "法官": 14356, "▁formed": 14357, "生理": 14358, "提高了": 14359, "的国家": 14360, "Your": 14361, "保留": 14362, "低碳": 14363, "背景下": 14364, "公正": 14365, "有力": 14366, "Its": 14367, "》。": 14368, "▁China": 14369, "▁display": 14370, "▁famous": 14371, "▁respond": 14372, "igr": 14373, "▁mention": 14374, "▁Im": 14375, "▁highly": 14376, "▁military": 14377, "Pr": 14378, "苏联": 14379, "交互": 14380, "▁contribute": 14381, "▁ult": 14382, "▁regarding": 14383, "农产品": 14384, "char": 14385, "的管理": 14386, "东西": 14387, "wise": 14388, "▁father": 14389, "载体": 14390, "ida": 14391, "▁Techn": 14392, "ta": 14393, "反馈": 14394, "▁negative": 14395, "稳定性": 14396, "▁construction": 14397, "▁CO": 14398, "▁evalu": 14399, "后来": 14400, "▁bad": 14401, "区块链": 14402, "Per": 14403, "▁ten": 14404, "▁Sm": 14405, "无线": 14406, "▁hous": 14407, "▁integr": 14408, "▁Hol": 14409, "hors": 14410, "的功能": 14411, "▁remember": 14412, "▁summer": 14413, "▁hom": 14414, "related": 14415, "委托": 14416, "▁Cons": 14417, "的原因": 14418, "▁Ant": 14419, "通过对": 14420, "三年": 14421, "地址": 14422, "▁appropriate": 14423, "▁Coun": 14424, "field": 14425, "放在": 14426, "的科学": 14427, "▁factor": 14428, "封建": 14429, "的目的": 14430, "▁industr": 14431, "和管理": 14432, "ften": 14433, "一项": 14434, "名称": 14435, "iated": 14436, "公共服务": 14437, "天下": 14438, "转化为": 14439, "运动员": 14440, "▁block": 14441, "inate": 14442, "▁interesting": 14443, "隐私": 14444, "▁bit": 14445, "▁teaching": 14446, "有序": 14447, "意志": 14448, "▁box": 14449, "评论": 14450, "▁leading": 14451, "政府的": 14452, "raz": 14453, "Using": 14454, "一体化": 14455, "膨胀": 14456, "▁capac": 14457, "trans": 14458, "rong": 14459, "本书": 14460, "▁behavi": 14461, "的价值": 14462, "roph": 14463, "▁San": 14464, "▁Commun": 14465, "works": 14466, "签订": 14467, "一路": 14468, "▁forces": 14469, "档案": 14470, "▁religious": 14471, "变得": 14472, "其实": 14473, "国外": 14474, "版本": 14475, "▁unit": 14476, "▁round": 14477, "▁typically": 14478, "▁protection": 14479, "并没有": 14480, "▁Ital": 14481, "多年": 14482, "▁bound": 14483, "▁cred": 14484, "▁acqu": 14485, "伟大复兴": 14486, "och": 14487, "外国": 14488, "全体": 14489, "▁nuc": 14490, "▁constit": 14491, "符号": 14492, "aled": 14493, "▁:▁": 14494, "▁performed": 14495, "ares": 14496, "ding": 14497, "▁Island": 14498, "▁sites": 14499, "ML": 14500, "的需求": 14501, "分工": 14502, "▁tissue": 14503, "▁waste": 14504, "▁miss": 14505, "tic": 14506, "至今": 14507, "▁California": 14508, "三种": 14509, "的过程中": 14510, "▁fair": 14511, "▁gold": 14512, "asks": 14513, "▁answer": 14514, "定了": 14515, "区分": 14516, "ingu": 14517, "倾向": 14518, "--▁": 14519, "▁purpose": 14520, "▁teacher": 14521, "▁situation": 14522, "公布": 14523, "分解": 14524, "▁belief": 14525, "▁ball": 14526, "▁news": 14527, "▁detail": 14528, "▁spirit": 14529, "。(": 14530, "借鉴": 14531, "▁Press": 14532, "▁exposure": 14533, "局限": 14534, "▁mis": 14535, "▁rat": 14536, "先后": 14537, "一年": 14538, "小学": 14539, "▁Australia": 14540, "细菌": 14541, "点的": 14542, "制的": 14543, "▁policy": 14544, "icate": 14545, "urban": 14546, "▁choose": 14547, "▁tests": 14548, "动脉": 14549, "ava": 14550, "Act": 14551, "▁Great": 14552, "成為": 14553, "Cal": 14554, "▁cand": 14555, "▁trust": 14556, "imens": 14557, "Because": 14558, "atur": 14559, "▁rapid": 14560, "有可能": 14561, "▁Association": 14562, "Also": 14563, "病人": 14564, "fe": 14565, ");": 14566, "▁autom": 14567, "PR": 14568, "▁serve": 14569, "笔者": 14570, "▁District": 14571, "服务业": 14572, "式的": 14573, "▁doctor": 14574, "▁Tr": 14575, "連結": 14576, "oper": 14577, "传统文化": 14578, "ician": 14579, "▁vict": 14580, "undred": 14581, "▁jud": 14582, "velopment": 14583, "車站": 14584, "anguages": 14585, "▁Red": 14586, "▁Christian": 14587, "居住": 14588, "▁exhib": 14589, "出版社": 14590, "百分": 14591, "▁older": 14592, "▁jour": 14593, "边界": 14594, "▁involve": 14595, "olving": 14596, "Sm": 14597, "▁brought": 14598, "emic": 14599, "▁properties": 14600, "IM": 14601, "发展和": 14602, "流行": 14603, "▁deaths": 14604, "提取": 14605, "就可以": 14606, "增速": 14607, "▁Society": 14608, "▁Fl": 14609, "▁exactly": 14610, "TC": 14611, "▁private": 14612, "aste": 14613, "▁bott": 14614, "广东": 14615, "▁player": 14616, "▁actions": 14617, "转向": 14618, "宣布": 14619, "ocial": 14620, "▁scen": 14621, "极大": 14622, "三大": 14623, "技术和": 14624, "较高": 14625, "▁challenge": 14626, "十六": 14627, "曲线": 14628, "简称": 14629, "isl": 14630, "▁wrote": 14631, "▁options": 14632, "cular": 14633, "aters": 14634, "▁births": 14635, "还可以": 14636, "▁win": 14637, "地的": 14638, "文本": 14639, "Qu": 14640, "mosp": 14641, "很难": 14642, "▁affected": 14643, "▁distinct": 14644, "ube": 14645, "PA": 14646, "▁details": 14647, "行星": 14648, "elines": 14649, "have": 14650, "although": 14651, "▁functions": 14652, "rees": 14653, "催化": 14654, "延伸": 14655, "欧盟": 14656, "Des": 14657, "▁fresh": 14658, "▁No": 14659, "Use": 14660, "comes": 14661, "ago": 14662, "▁stra": 14663, "▁sports": 14664, "▁equipment": 14665, "amil": 14666, "▁application": 14667, "▁identified": 14668, "organ": 14669, "纳税": 14670, "SD": 14671, "rical": 14672, "house": 14673, "这项": 14674, "▁celebr": 14675, "SC": 14676, "借助": 14677, "▁transfer": 14678, "大陆": 14679, "社会主义现代化": 14680, "▁pieces": 14681, "▁himself": 14682, "ref": 14683, "rition": 14684, "▁numerous": 14685, "方的": 14686, "▁efficient": 14687, "▁Ag": 14688, "according": 14689, "both": 14690, "ellig": 14691, "等问题": 14692, "中共中央": 14693, "▁beautiful": 14694, "mark": 14695, "oses": 14696, "第二节": 14697, "周围": 14698, "▁female": 14699, "▁solution": 14700, "房屋": 14701, "乡村振兴": 14702, "诸多": 14703, "禁止": 14704, "▁weather": 14705, "细胞的": 14706, "ouch": 14707, "负担": 14708, "信贷": 14709, "ken": 14710, "抗体": 14711, "合理的": 14712, "igenous": 14713, "▁surrounding": 14714, "▁Char": 14715, "▁labor": 14716, "建立了": 14717, "流量": 14718, "eper": 14719, "外汇": 14720, "▁wanted": 14721, "▁girl": 14722, "认真": 14723, "科学院": 14724, "▁useful": 14725, "举措": 14726, "我国的": 14727, "rome": 14728, "▁Int": 14729, "▁status": 14730, "▁reduced": 14731, "▁supply": 14732, "obert": 14733, "▁solar": 14734, "▁church": 14735, "acing": 14736, "▁onto": 14737, "ii": 14738, "发明": 14739, "运作": 14740, "▁measures": 14741, "▁mill": 14742, "ecut": 14743, "认同": 14744, "▁teach": 14745, "审美": 14746, "anging": 14747, "共识": 14748, "人群": 14749, "place": 14750, "roy": 14751, "▁purch": 14752, "▁London": 14753, "第一节": 14754, "▁Party": 14755, "▁connections": 14756, "▁adapt": 14757, "▁Union": 14758, "强烈": 14759, "▁expand": 14760, "▁Ser": 14761, "种类": 14762, "▁placed": 14763, "▁appe": 14764, "核算": 14765, "▁explain": 14766, "翻译": 14767, "Part": 14768, "森林": 14769, "▁nation": 14770, "淋巴": 14771, "斯特": 14772, "well": 14773, "▁receive": 14774, "概括": 14775, "▁users": 14776, "antly": 14777, "判决": 14778, "添加": 14779, "发达国家": 14780, "align": 14781, "ya": 14782, "的精神": 14783, "在一起": 14784, "产生了": 14785, "▁graph": 14786, "ifying": 14787, "▁forward": 14788, "▁rare": 14789, "plications": 14790, "▁coast": 14791, "▁Em": 14792, "另一个": 14793, "▁teeth": 14794, "防范": 14795, "交叉": 14796, "并不是": 14797, "担任": 14798, "的具体": 14799, "arly": 14800, "▁beginning": 14801, "▁Trans": 14802, "pped": 14803, "▁controll": 14804, "▁Roman": 14805, "▁DNA": 14806, "工厂": 14807, "▁organizations": 14808, "全局": 14809, "amily": 14810, "▁currently": 14811, "▁rich": 14812, "inf": 14813, "Despite": 14814, "▁advant": 14815, "联邦": 14816, "为例": 14817, "pret": 14818, "二氧化": 14819, "容量": 14820, "是什么": 14821, "心脏": 14822, "」,": 14823, "的不同": 14824, "▁anti": 14825, "▁costs": 14826, "▁allowed": 14827, "overnment": 14828, "某一": 14829, "hest": 14830, "▁continu": 14831, "car": 14832, "加密": 14833, "▁detect": 14834, "俄罗斯": 14835, "Ke": 14836, "直到": 14837, "的文化": 14838, "回答": 14839, "Ret": 14840, "▁apprec": 14841, "扶贫": 14842, "Moreover": 14843, "▁district": 14844, "中国家": 14845, "urning": 14846, "國家": 14847, "含义": 14848, "▁thr": 14849, "▁file": 14850, "亿美元": 14851, "Ed": 14852, "的小": 14853, "女性": 14854, "▁river": 14855, "世界上": 14856, "▁literature": 14857, "aign": 14858, "▁security": 14859, "Instead": 14860, "的设计": 14861, "cohol": 14862, "▁Com": 14863, "ressive": 14864, "mun": 14865, "为此": 14866, "依然": 14867, "oster": 14868, "▁testing": 14869, "成效": 14870, "▁occurs": 14871, "iced": 14872, "精度": 14873, "state": 14874, "▁property": 14875, "▁agricult": 14876, "▁picture": 14877, "AB": 14878, "理论和": 14879, "定期": 14880, "riev": 14881, "波动": 14882, "▁Department": 14883, "普及": 14884, "▁decl": 14885, "福利": 14886, "▁initial": 14887, "▁benefit": 14888, "分散": 14889, "abilities": 14890, "权威": 14891, "所有的": 14892, "encies": 14893, "每一个": 14894, "透明": 14895, "▁background": 14896, "(),": 14897, "opp": 14898, "▁Cong": 14899, "▁attempt": 14900, "山东": 14901, "Me": 14902, "推荐": 14903, "正确的": 14904, "▁consequ": 14905, "▁stim": 14906, "整理": 14907, "▁dat": 14908, "命令": 14909, "olved": 14910, "小的": 14911, "▁narr": 14912, "▁wear": 14913, "匹配": 14914, "水平的": 14915, "生活的": 14916, "▁rail": 14917, "RI": 14918, "可能是": 14919, "估计": 14920, "eters": 14921, "athy": 14922, "论述": 14923, "▁Mod": 14924, "慢性": 14925, "▁probably": 14926, "建构": 14927, "▁bacteria": 14928, "▁presence": 14929, "消耗": 14930, "增值": 14931, "▁We": 14932, "sect": 14933, "中全会": 14934, "▁user": 14935, "reating": 14936, "稳定的": 14937, "附近": 14938, "十八大": 14939, "效力": 14940, "▁workers": 14941, "外部連結": 14942, "全球化": 14943, "也可": 14944, "people": 14945, "ightly": 14946, "方便": 14947, "unt": 14948, "风格": 14949, "▁sugar": 14950, "▁bul": 14951, "AA": 14952, "位於": 14953, "增加了": 14954, "van": 14955, "新发展": 14956, "\t\t": 14957, "保存": 14958, "博物": 14959, "一条": 14960, "变动": 14961, "▁commer": 14962, "▁▁▁▁▁": 14963, "ilit": 14964, "bing": 14965, "onic": 14966, "▁accur": 14967, "bec": 14968, "都会": 14969, "达成": 14970, "GB": 14971, "中华民族伟大复兴": 14972, "足够": 14973, "▁cold": 14974, "方位": 14975, "概率": 14976, "mat": 14977, "的权利": 14978, "将会": 14979, "人士": 14980, "▁organization": 14981, "▁max": 14982, "za": 14983, "gra": 14984, "Today": 14985, "委会": 14986, "糖尿": 14987, "====": 14988, "相互作用": 14989, "▁moment": 14990, "图书": 14991, "▁.▁": 14992, "协作": 14993, "▁middle": 14994, "尝试": 14995, "▁Chinese": 14996, "▁names": 14997, "▁goes": 14998, "long": 14999, "目的是": 15000, "▁laun": 15001, "irection": 15002, "rupt": 15003, "lam": 15004, "▁gene": 15005, "最近": 15006, "▁Education": 15007, "不利": 15008, "▁figure": 15009, "的使用": 15010, "▁Black": 15011, "出生": 15012, "引导学生": 15013, "▁immune": 15014, "▁store": 15015, "协会": 15016, "必要的": 15017, "批判": 15018, "标准化": 15019, "寻找": 15020, "▁resistance": 15021, "▁date": 15022, "▁eight": 15023, "后果": 15024, "▁party": 15025, "Sec": 15026, "的有效": 15027, "有人": 15028, "▁filled": 15029, "男子": 15030, "edia": 15031, "▁capital": 15032, "已成为": 15033, "ees": 15034, "rief": 15035, "▁i": 15036, "联合国": 15037, "$▁": 15038, "存在着": 15039, "▁Br": 15040, "▁Mex": 15041, "产物": 15042, "estic": 15043, "ibly": 15044, "信仰": 15045, "▁swe": 15046, "配套": 15047, "▁plays": 15048, "住房": 15049, "antic": 15050, "ams": 15051, "othes": 15052, "精确": 15053, "▁buildings": 15054, "gery": 15055, "▁map": 15056, "车辆": 15057, "聚焦": 15058, "▁rout": 15059, "Similar": 15060, "顺序": 15061, "▁concerns": 15062, "Reg": 15063, "总量": 15064, "研究院": 15065, "▁genetic": 15066, "写作": 15067, "于是": 15068, "生态文明": 15069, "▁alone": 15070, "\"(": 15071, "▁emphas": 15072, "rael": 15073, "繁荣": 15074, "▁contract": 15075, "知识和": 15076, "失去": 15077, "itz": 15078, "概述": 15079, "ademic": 15080, "Gu": 15081, "overs": 15082, "▁assist": 15083, "▁moving": 15084, "▁regions": 15085, "▁identity": 15086, "▁birds": 15087, "▁Ne": 15088, "发送": 15089, "人民的": 15090, "难题": 15091, "▁pow": 15092, "EL": 15093, "iology": 15094, "课堂教学": 15095, "▁Museum": 15096, "ounced": 15097, "▁Pre": 15098, "此时": 15099, "被称为": 15100, "相反": 15101, "营销": 15102, "享有": 15103, "▁Go": 15104, "onds": 15105, "▁illustr": 15106, "▁observed": 15107, "Go": 15108, "Com": 15109, "糖尿病": 15110, "平面": 15111, "gor": 15112, "eech": 15113, "▁anything": 15114, "omy": 15115, "仪器": 15116, "aughter": 15117, "国内外": 15118, "万人": 15119, "▁Mount": 15120, "▁antib": 15121, "▁Cour": 15122, "▁miles": 15123, "旨在": 15124, "》▁": 15125, "动作": 15126, "▁demand": 15127, "管理和": 15128, "▁discover": 15129, "",": 15130, "▁expected": 15131, "Both": 15132, "大脑": 15133, "依托": 15134, "以上的": 15135, "TO": 15136, "指南": 15137, "▁decisions": 15138, "▁bodies": 15139, "云计算": 15140, "已有": 15141, "orial": 15142, "潜力": 15143, "做法": 15144, "批评": 15145, "berg": 15146, "赋予": 15147, "刑法": 15148, "▁existing": 15149, "▁promote": 15150, "病变": 15151, "allowing": 15152, "▁web": 15153, "立场": 15154, "your": 15155, "▁principles": 15156, "▁Council": 15157, "有时": 15158, "的多": 15159, "his": 15160, "存款": 15161, "GF": 15162, "▁office": 15163, "小康": 15164, "幸福": 15165, "▁sounds": 15166, "▁changed": 15167, "▁signs": 15168, "美术": 15169, "食物": 15170, "▁helped": 15171, "民生": 15172, "高等教育": 15173, "Before": 15174, "▁planet": 15175, "数据中心": 15176, "患者的": 15177, "▁concepts": 15178, "struct": 15179, "▁eventually": 15180, "▁reasons": 15181, "▁equal": 15182, "▁legal": 15183, "前沿": 15184, "证书": 15185, "▁board": 15186, "科学技术": 15187, "▁guide": 15188, "▁glass": 15189, "的认识": 15190, "中小企业": 15191, "prov": 15192, "官方": 15193, "远程": 15194, "地震": 15195, "视角": 15196, "地區": 15197, "thes": 15198, "▁Republic": 15199, "▁machine": 15200, "▁introduced": 15201, "ka": 15202, "打破": 15203, "▁virt": 15204, "间接": 15205, "一批": 15206, "理由": 15207, "MA": 15208, "计量": 15209, "▁trade": 15210, "astern": 15211, "意思": 15212, "测定": 15213, "rehens": 15214, "ographic": 15215, "失败": 15216, "▁limit": 15217, "初期": 15218, "以便": 15219, "主观": 15220, "颗粒": 15221, "▁Des": 15222, "▁comfort": 15223, "血液": 15224, "引起的": 15225, "▁tour": 15226, "癌症": 15227, "Every": 15228, "取决": 15229, "irgin": 15230, "多样性": 15231, "semb": 15232, "▁Pal": 15233, "III": 15234, "▁records": 15235, "▁Western": 15236, "也要": 15237, "侵犯": 15238, "立足": 15239, "▁gives": 15240, "History": 15241, "腐败": 15242, "▁citiz": 15243, "驾驶": 15244, "exas": 15245, "iance": 15246, "遵守": 15247, "inding": 15248, "中学": 15249, "》《": 15250, "▁mouth": 15251, "与其他": 15252, "产量": 15253, "仅仅": 15254, "价值的": 15255, "排名": 15256, "停止": 15257, "▁Port": 15258, "▁laws": 15259, "专项": 15260, "Read": 15261, "与此": 15262, "▁solutions": 15263, "能否": 15264, "也在": 15265, "inger": 15266, "大于": 15267, "▁colors": 15268, "nam": 15269, "▁eating": 15270, "▁felt": 15271, "器官": 15272, "四川": 15273, "有一个": 15274, "的市场": 15275, "▁turned": 15276, "ygen": 15277, "▁title": 15278, "▁fuel": 15279, "回归": 15280, "通用": 15281, "▁recently": 15282, "本科": 15283, "主义的": 15284, "▁util": 15285, "更是": 15286, "def": 15287, "El": 15288, "可能性": 15289, "实用": 15290, "iant": 15291, "▁experim": 15292, "▁connected": 15293, "作物": 15294, "大国": 15295, "▁corn": 15296, "提供的": 15297, "force": 15298, "▁journey": 15299, "▁pregn": 15300, "医药": 15301, "▁CD": 15302, "▁attract": 15303, "发生了": 15304, "优质": 15305, "法人": 15306, "公益": 15307, "IF": 15308, "asts": 15309, "查询": 15310, "▁dynam": 15311, "▁lived": 15312, "ded": 15313, "取决于": 15314, "前景": 15315, "▁distance": 15316, "特定的": 15317, "rich": 15318, "參考資料": 15319, "enty": 15320, "夏季": 15321, "mod": 15322, "强大": 15323, "变更": 15324, "▁nearly": 15325, "▁radio": 15326, "所有权": 15327, "斯坦": 15328, "uilding": 15329, "阐述": 15330, "不可能": 15331, "ogether": 15332, "lease": 15333, "的环境": 15334, "系数": 15335, "aud": 15336, "▁hundred": 15337, "选举": 15338, "ichael": 15339, "▁UK": 15340, "Em": 15341, "▁risks": 15342, "▁ap": 15343, "▁Her": 15344, "两者": 15345, "▁woman": 15346, "地下": 15347, "unk": 15348, "无效": 15349, "▁beg": 15350, "▁effort": 15351, "练习": 15352, "▁degree": 15353, "indu": 15354, "▁Street": 15355, "过程的": 15356, "地面": 15357, "▁happens": 15358, "▁leave": 15359, "...▁": 15360, "最早": 15361, "▁essay": 15362, "▁Phil": 15363, "▁tim": 15364, "西北": 15365, "取代": 15366, "▁diabetes": 15367, "超越": 15368, "对称": 15369, "联盟": 15370, "年前": 15371, "▁bran": 15372, "▁effectively": 15373, "复制": 15374, "依照": 15375, "▁passed": 15376, "以此": 15377, "石油": 15378, "▁landsc": 15379, "cription": 15380, "电网": 15381, "▁core": 15382, "▁opportunity": 15383, "▁gets": 15384, "灾害": 15385, "▁connection": 15386, "鲜明": 15387, "丰富的": 15388, "▁rise": 15389, "▁providing": 15390, "熟悉": 15391, "▁Cor": 15392, "现金": 15393, "借款": 15394, "了中国": 15395, "爆发": 15396, "进行的": 15397, "▁easier": 15398, "▁told": 15399, "▁watch": 15400, ");▁": 15401, "▁ur": 15402, "their": 15403, "國際": 15404, "女子": 15405, "▁alternative": 15406, "▁recorded": 15407, "正义": 15408, "音樂": 15409, "▁Law": 15410, "局面": 15411, "▁pet": 15412, "▁hair": 15413, "▁cop": 15414, "▁crop": 15415, "返回": 15416, "不够": 15417, "货物": 15418, "▁Japanese": 15419, "▁atmosp": 15420, "asion": 15421, "分享": 15422, "▁winter": 15423, "急性": 15424, "ctors": 15425, "▁root": 15426, "帝国": 15427, "共有": 15428, "国防": 15429, "培养学生": 15430, "参考资料": 15431, "体现在": 15432, "至关": 15433, "消息": 15434, "cript": 15435, "▁standards": 15436, "可用": 15437, "衔接": 15438, "west": 15439, "亚洲": 15440, "抗日": 15441, "zing": 15442, "xiety": 15443, "▁Div": 15444, "辩证": 15445, "▁illness": 15446, "▁operations": 15447, "的发生": 15448, "的中国": 15449, "一带一路": 15450, "基因组": 15451, "积极性": 15452, "iable": 15453, "▁Olymp": 15454, "開始": 15455, "历史上": 15456, "Rep": 15457, "esus": 15458, "].": 15459, "意识形态": 15460, "▁divid": 15461, "▁appoint": 15462, "▁Dem": 15463, "代表大会": 15464, "▁plans": 15465, "icularly": 15466, "text": 15467, "▁artists": 15468, "rese": 15469, "税务": 15470, "债权人": 15471, "▁capacity": 15472, "ognitive": 15473, "EE": 15474, "部队": 15475, "thlet": 15476, "运算": 15477, "▁fully": 15478, "第七": 15479, "主管": 15480, "器件": 15481, "▁effic": 15482, "主持": 15483, "pected": 15484, "aker": 15485, "▁Inter": 15486, "▁France": 15487, "▁Sou": 15488, "nel": 15489, "orage": 15490, "Furthermore": 15491, "武器": 15492, "▁believed": 15493, "无人": 15494, "集群": 15495, "icians": 15496, "ache": 15497, "一方": 15498, "交往": 15499, "违约": 15500, "造成的": 15501, "储备": 15502, "may": 15503, "iveness": 15504, "事情": 15505, "▁mission": 15506, "自身的": 15507, "mitted": 15508, "大多": 15509, "alle": 15510, "▁dead": 15511, "▁cities": 15512, "▁Road": 15513, "▁distribution": 15514, "展现": 15515, "▁inflamm": 15516, "▁surpr": 15517, "编写": 15518, "最为": 15519, "TV": 15520, "有权": 15521, "▁drugs": 15522, "前进": 15523, "分析和": 15524, "▁fix": 15525, "气象": 15526, "▁depend": 15527, "▁inhib": 15528, "▁heavy": 15529, "▁languages": 15530, "mean": 15531, "系统中": 15532, "公式": 15533, "▁commonly": 15534, "erate": 15535, "edom": 15536, "人力资源": 15537, "日期": 15538, "▁phen": 15539, "范畴": 15540, "resents": 15541, "思想政治": 15542, "法律法规": 15543, "演变": 15544, "▁running": 15545, "过程中的": 15546, "▁planning": 15547, "▁navig": 15548, "类型的": 15549, "▁television": 15550, "\b\b": 15551, "ado": 15552, "▁secret": 15553, "SO": 15554, "arian": 15555, "染色": 15556, "要在": 15557, "人格": 15558, "▁Americans": 15559, "bet": 15560, "▁technique": 15561, "▁heard": 15562, "Finally": 15563, "▁populations": 15564, "ouis": 15565, "忽视": 15566, "新能源": 15567, "力学": 15568, "▁feelings": 15569, "过度": 15570, "感觉": 15571, "情绪": 15572, "▁epis": 15573, "▁absor": 15574, "环境的": 15575, "PL": 15576, "▁basis": 15577, "创造性": 15578, "▁advanced": 15579, "▁My": 15580, "▁returned": 15581, "?\"": 15582, "长的": 15583, "▁mo": 15584, "终端": 15585, "命名": 15586, "反思": 15587, "▁staff": 15588, "iament": 15589, "▁situations": 15590, "他在": 15591, "条件的": 15592, "press": 15593, "场所": 15594, "▁hope": 15595, "▁federal": 15596, "最初": 15597, "科学的": 15598, "脱贫": 15599, "▁On": 15600, "杂志": 15601, "医生": 15602, "地方政府": 15603, "编程": 15604, "▁fasc": 15605, ".《": 15606, "排除": 15607, "▁cry": 15608, "怎么": 15609, "only": 15610, "▁blue": 15611, "▁ingred": 15612, "▁opened": 15613, "学生在": 15614, "这类": 15615, "▁President": 15616, "▁sess": 15617, "CH": 15618, "▁completed": 15619, "▁followed": 15620, "视野": 15621, "rian": 15622, "想象": 15623, "win": 15624, "eding": 15625, "iest": 15626, "▁element": 15627, "▁mel": 15628, "po": 15629, "▁liqu": 15630, "可靠性": 15631, "的结构": 15632, "应用程序": 15633, "▁toward": 15634, "现代化的": 15635, "减轻": 15636, "起源": 15637, "误差": 15638, "新时代中国特色社会主义": 15639, "rog": 15640, "不变": 15641, "以往": 15642, "▁approximately": 15643, "center": 15644, "ria": 15645, "ework": 15646, "▁ship": 15647, "itors": 15648, "通讯": 15649, "▁belong": 15650, "....": 15651, "▁sharing": 15652, "▁separate": 15653, "认可": 15654, "bert": 15655, "Sometimes": 15656, "攻坚": 15657, "▁king": 15658, "▁load": 15659, "加上": 15660, "」。": 15661, "歌曲": 15662, "缓解": 15663, ".)": 15664, "商业银行": 15665, "▁tasks": 15666, "▁applied": 15667, "提交": 15668, "▁journal": 15669, "人民政府": 15670, "统一的": 15671, "▁completely": 15672, "强大的": 15673, "udden": 15674, "▁cook": 15675, "推出": 15676, "otes": 15677, "▁lung": 15678, "▁match": 15679, "leading": 15680, "eline": 15681, "▁deal": 15682, "function": 15683, "▁adult": 15684, "▁native": 15685, "▁frequently": 15686, "▁seems": 15687, "RS": 15688, "▁cast": 15689, "▁fol": 15690, "ario": 15691, "▁instruct": 15692, "▁adjust": 15693, "obile": 15694, "Students": 15695, "▁enter": 15696, "租赁": 15697, "▁technologies": 15698, "TP": 15699, "Lear": 15700, "says": 15701, "ston": 15702, "图形": 15703, "干细胞": 15704, "显然": 15705, "tee": 15706, "particularly": 15707, "遗址": 15708, "无论是": 15709, "▁breast": 15710, "ogle": 15711, "燃料": 15712, "▁lessons": 15713, "▁municip": 15714, "不确定": 15715, "each": 15716, "▁seven": 15717, "民众": 15718, "▁park": 15719, "rows": 15720, "的生产": 15721, "处置": 15722, "ycl": 15723, "生物学": 15724, "先生": 15725, "的国际": 15726, "▁tox": 15727, "▁imag": 15728, "▁excess": 15729, "国有企业": 15730, "▁Washington": 15731, "▁setting": 15732, "感受": 15733, "▁Dis": 15734, "撤销": 15735, "河南": 15736, "▁occup": 15737, "down": 15738, "自行": 15739, "▁immun": 15740, "便利": 15741, "园区": 15742, "▁peace": 15743, "审理": 15744, "ittle": 15745, "的根本": 15746, "high": 15747, "▁authors": 15748, "反射": 15749, "分布式": 15750, "出来的": 15751, "▁profession": 15752, "发展中国家": 15753, "dent": 15754, "▁previously": 15755, "记载": 15756, "disc": 15757, "Sw": 15758, "▁island": 15759, "▁hydro": 15760, "数的": 15761, "未成": 15762, "ishing": 15763, "新冠": 15764, "NF": 15765, "▁fruit": 15766, "信任": 15767, "▁apply": 15768, "▁spect": 15769, "▁injury": 15770, "olid": 15771, "enry": 15772, "▁input": 15773, "▁nutri": 15774, "▁thoughts": 15775, "彻底": 15776, "第三节": 15777, "▁hit": 15778, "rd": 15779, "CL": 15780, "▁court": 15781, "ini": 15782, "gorith": 15783, "发性": 15784, "ager": 15785, "婚姻": 15786, "Trans": 15787, "▁gave": 15788, "坚决": 15789, "▁muscle": 15790, "地域": 15791, "指令": 15792, "的中": 15793, "部位": 15794, "▁repe": 15795, "▁outcomes": 15796, "工业化": 15797, "实例": 15798, "osen": 15799, "经理": 15800, "ilosoph": 15801, "▁Arch": 15802, "▁rh": 15803, "公园": 15804, "产业发展": 15805, "▁Sur": 15806, "▁bone": 15807, "▁baby": 15808, "即可": 15809, "going": 15810, "占有": 15811, "十五": 15812, "▁compar": 15813, "每一": 15814, "性与": 15815, "团体": 15816, "研究员": 15817, "\n\t": 15818, "roduction": 15819, "▁coming": 15820, "内容的": 15821, "世界的": 15822, "Hz": 15823, "▁metal": 15824, "▁scale": 15825, "ala": 15826, "众多": 15827, "清洁": 15828, "构造": 15829, "▁deliver": 15830, "重要作用": 15831, "气候变化": 15832, "▁disorders": 15833, "▁save": 15834, "分割": 15835, "政权": 15836, "▁gender": 15837, "▁vary": 15838, "uit": 15839, "臺灣": 15840, "的企业": 15841, "这就是": 15842, "know": 15843, "ilm": 15844, "儒家": 15845, "样品": 15846, "▁rule": 15847, "大众": 15848, "互相": 15849, "▁election": 15850, "▁finding": 15851, "例子": 15852, "CI": 15853, "azing": 15854, "▁direction": 15855, "关节": 15856, "▁den": 15857, "▁race": 15858, "olar": 15859, "▁urban": 15860, "皇帝": 15861, "▁plastic": 15862, "成像": 15863, "ascular": 15864, "特异": 15865, "▁strength": 15866, "谈判": 15867, "()": 15868, "的角度": 15869, "拒绝": 15870, "▁recommend": 15871, "▁Green": 15872, "流域": 15873, "▁mentioned": 15874, "维度": 15875, "▁subjects": 15876, "主要包括": 15877, "承诺": 15878, "時間": 15879, "凝聚": 15880, "ologist": 15881, "单独": 15882, "oke": 15883, "克服": 15884, "▁dram": 15885, "·▁": 15886, "▁Lake": 15887, "▁spot": 15888, "▁spent": 15889, "MD": 15890, "否则": 15891, "▁vess": 15892, "▁appears": 15893, "umber": 15894, "爱国": 15895, "▁cultures": 15896, "▁layer": 15897, "等方面的": 15898, "Have": 15899, "葡萄": 15900, "▁relevant": 15901, "简单的": 15902, "▁Cup": 15903, "irt": 15904, "▁heav": 15905, "▁topics": 15906, "严重的": 15907, "ports": 15908, "▁deeper": 15909, "心理学": 15910, "活动中": 15911, "扫描": 15912, "日起": 15913, "▁experiment": 15914, "▁esc": 15915, "burg": 15916, "▁independent": 15917, "常规": 15918, "事实上": 15919, "▁,": 15920, "▁garden": 15921, "apers": 15922, "不要": 15923, "▁fields": 15924, "育人": 15925, "取消": 15926, "诱导": 15927, "plant": 15928, "通货": 15929, "▁refers": 15930, "声明": 15931, "Ne": 15932, "http": 15933, "▁fib": 15934, "▁hear": 15935, "ocol": 15936, "移植": 15937, "修正": 15938, "Car": 15939, "之下": 15940, "歷史": 15941, "osh": 15942, "治理体系": 15943, "作战": 15944, "当今": 15945, "律师": 15946, "也就": 15947, "▁Pat": 15948, "营造": 15949, "▁presented": 15950, "uls": 15951, "侵害": 15952, "▁Que": 15953, "ulum": 15954, "ki": 15955, "▁films": 15956, "▁starting": 15957, "常见的": 15958, "▁official": 15959, "方法的": 15960, "▁territ": 15961, "在我国": 15962, "相同的": 15963, "分泌": 15964, "西南": 15965, "未来的": 15966, "dep": 15967, "目标的": 15968, "▁contrast": 15969, "公安": 15970, "共同富裕": 15971, "并发": 15972, "手机": 15973, "种植": 15974, "ructure": 15975, "Think": 15976, "▁homes": 15977, "得主": 15978, "▁Bay": 15979, "▁upd": 15980, "▁letter": 15981, "present": 15982, "的形成": 15983, "▁pen": 15984, "▁counter": 15985, "▁voc": 15986, "▁--▁": 15987, "Of": 15988, "主要有": 15989, "▁temperatures": 15990, "▁college": 15991, "▁#": 15992, "▁prepar": 15993, "norm": 15994, "▁aren": 15995, "Two": 15996, "▁characteristics": 15997, "▁trig": 15998, "▁favorite": 15999, "物体": 16000, "明显的": 16001, "▁solid": 16002, "▁Sch": 16003, "▁<": 16004, "具体的": 16005, "▁focused": 16006, "▁Mor": 16007, "难度": 16008, "la": 16009, "证实": 16010, "▁articles": 16011, "▁James": 16012, "党的领导": 16013, "垃圾": 16014, "▁thousands": 16015, "举办": 16016, "碳排放": 16017, "\u0007\u0007": 16018, "ota": 16019, "ypes": 16020, "体制改革": 16021, "pport": 16022, "othing": 16023, "重建": 16024, "得出": 16025, "差别": 16026, "版权": 16027, "▁emotional": 16028, "深圳": 16029, "▁recip": 16030, "▁president": 16031, "校园": 16032, "iled": 16033, "den": 16034, "Expl": 16035, "ector": 16036, "▁Spanish": 16037, "▁increases": 16038, "along": 16039, "▁emotions": 16040, "andom": 16041, "lar": 16042, "飞行": 16043, "▁Champions": 16044, "BN": 16045, "▁studied": 16046, "▁readers": 16047, "起到": 16048, "列表": 16049, "Man": 16050, "Disc": 16051, "的一部分": 16052, "▁roles": 16053, "▁task": 16054, "防护": 16055, "过渡": 16056, "市镇": 16057, "▁lat": 16058, "信念": 16059, "如图": 16060, "引进": 16061, "▁happen": 16062, "含有": 16063, "节约": 16064, "推行": 16065, "rieved": 16066, "進行": 16067, "本地": 16068, "助力": 16069, "初始": 16070, "管辖": 16071, "▁leaders": 16072, "▁Nor": 16073, "实习": 16074, "国家和": 16075, "安全性": 16076, "提示": 16077, "年至": 16078, "rac": 16079, "▁recept": 16080, "▁societ": 16081, "▁happened": 16082, "办学": 16083, "同时也": 16084, ")▁–▁": 16085, "党的十八大": 16086, "促使": 16087, "化合物": 16088, "ements": 16089, "职务": 16090, "li": 16091, "OT": 16092, "政策的": 16093, "▁medicine": 16094, "是我国": 16095, "▁minor": 16096, "年间": 16097, "粒子": 16098, "在这": 16099, "▁resource": 16100, "中国经济": 16101, "ensus": 16102, "天津": 16103, "分化": 16104, "▁approaches": 16105, "ena": 16106, "依法治": 16107, "▁notes": 16108, "▁wrong": 16109, "考古": 16110, "人和": 16111, "的知识": 16112, "Key": 16113, "▁leads": 16114, "▁genes": 16115, "▁stream": 16116, "常用": 16117, "者和": 16118, "▁consumption": 16119, "我们可以": 16120, "▁nearby": 16121, "包装": 16122, "更大": 16123, "随后": 16124, "▁majority": 16125, "▁TV": 16126, "长江": 16127, "专题": 16128, "的相关": 16129, "和服务": 16130, "▁master": 16131, "▁experienced": 16132, "ulner": 16133, "太空": 16134, "▁educational": 16135, "▁highest": 16136, "就能": 16137, "物权": 16138, "小平": 16139, "▁lett": 16140, "多少": 16141, "anges": 16142, "▁General": 16143, "found": 16144, "▁campaign": 16145, "调解": 16146, "顺利": 16147, "▁advance": 16148, "[@": 16149, "州市": 16150, "国情": 16151, "集合": 16152, "设备的": 16153, "ca": 16154, "▁Germany": 16155, "km": 16156, "▁cere": 16157, "ientists": 16158, "Char": 16159, "▁sand": 16160, "后者": 16161, "最低": 16162, "师生": 16163, "反复": 16164, "—▁▁": 16165, "rix": 16166, "▁alt": 16167, "审批": 16168, "标记": 16169, "▁awareness": 16170, "▁walk": 16171, "实力": 16172, "sub": 16173, "ags": 16174, "承认": 16175, "osa": 16176, "▁rot": 16177, "gypt": 16178, "是通过": 16179, "分辨": 16180, "为核心的": 16181, "中所": 16182, "作家": 16183, "ologists": 16184, "一部分": 16185, "▁choice": 16186, "城镇化": 16187, "线的": 16188, "ulf": 16189, "lo": 16190, "和技术": 16191, "未能": 16192, "enced": 16193, "otal": 16194, "▁closely": 16195, "two": 16196, "▁Mal": 16197, "annel": 16198, "▁appeared": 16199, "▁Central": 16200, "和完善": 16201, "▁Sun": 16202, "球員": 16203, "ndrome": 16204, "跟踪": 16205, "▁formation": 16206, "重组": 16207, "sequently": 16208, "▁becoming": 16209, "结构性": 16210, "色彩": 16211, "福建": 16212, "name": 16213, "iling": 16214, "的光": 16215, "▁treated": 16216, "otic": 16217, "项目的": 16218, "▁manage": 16219, "itoring": 16220, "▁classroom": 16221, "并将": 16222, "Red": 16223, "ped": 16224, "▁brother": 16225, "唯物": 16226, "优点": 16227, "在其": 16228, "内存": 16229, "HD": 16230, "bi": 16231, "cious": 16232, "▁suppl": 16233, "下列": 16234, "调动": 16235, "古典": 16236, "江苏": 16237, "成的": 16238, "层的": 16239, "预警": 16240, "uration": 16241, "▁policies": 16242, "的前提": 16243, "电子商务": 16244, "历程": 16245, "带来了": 16246, "人均": 16247, "百姓": 16248, "▁explained": 16249, "▁schol": 16250, "▁feeling": 16251, "indows": 16252, "Thus": 16253, "意大利": 16254, "▁Congress": 16255, "▁inh": 16256, "▁remained": 16257, "带领": 16258, "经济社会发展": 16259, "全过程": 16260, "指定": 16261, "oving": 16262, "▁participants": 16263, "▁pick": 16264, "实训": 16265, "研制": 16266, "大约": 16267, "期的": 16268, "主体的": 16269, "every": 16270, "肺炎": 16271, "▁trend": 16272, "active": 16273, "Mod": 16274, "olf": 16275, "▁replace": 16276, "IR": 16277, "下来": 16278, "演員": 16279, "▁commercial": 16280, "某个": 16281, "地质": 16282, "▁cycle": 16283, "arsh": 16284, "▁vital": 16285, "▁concentr": 16286, "新中国": 16287, "▁Sum": 16288, "分钟": 16289, "agon": 16290, "▁units": 16291, "提起": 16292, "修订": 16293, "rm": 16294, "的重大": 16295, "破产": 16296, "升高": 16297, "▁fer": 16298, "话语": 16299, "法制": 16300, "usiness": 16301, "cel": 16302, "▁west": 16303, "▁▁(": 16304, "在一定": 16305, "部的": 16306, "rapy": 16307, "的需要": 16308, "▁changing": 16309, "ersonal": 16310, "也就是说": 16311, "▁pal": 16312, "▁Aut": 16313, "ropical": 16314, "▁dial": 16315, "中華": 16316, "市场化": 16317, "防控": 16318, "生动": 16319, "电源": 16320, "National": 16321, "为代表": 16322, "sur": 16323, "▁contemporary": 16324, "海外": 16325, "▁\\": 16326, "called": 16327, "nic": 16328, "▁bed": 16329, "▁Alex": 16330, "▁weak": 16331, "CE": 16332, "anned": 16333, "样的": 16334, "▁sem": 16335, "erved": 16336, "▁note": 16337, "数字化转型": 16338, "Like": 16339, "▁sexual": 16340, "▁carefully": 16341, "▁Sam": 16342, "▁east": 16343, "▁gather": 16344, "}-": 16345, "▁comprehens": 16346, "都要": 16347, "▁improved": 16348, "rish": 16349, "▁immedi": 16350, "ato": 16351, "lorida": 16352, "▁reached": 16353, "since": 16354, "Gl": 16355, "可以说": 16356, "UN": 16357, "kin": 16358, "▁alcohol": 16359, "目录": 16360, "失业": 16361, "小鼠": 16362, "follow": 16363, "▁smooth": 16364, "反映了": 16365, "acific": 16366, "▁creation": 16367, "佛教": 16368, "小说": 16369, "ictor": 16370, "经费": 16371, "正当": 16372, "enth": 16373, "▁chronic": 16374, "▁defined": 16375, "will": 16376, "调研": 16377, "等人": 16378, "一個": 16379, "衡量": 16380, "党委": 16381, "idden": 16382, "requ": 16383, "与社会": 16384, "isher": 16385, "打击": 16386, "▁emissions": 16387, "是最": 16388, "▁insights": 16389, "总统": 16390, "▁conducted": 16391, "与发展": 16392, "账户": 16393, ".)▁": 16394, "▁proposed": 16395, "iox": 16396, "在国际": 16397, "和方法": 16398, "前的": 16399, "学位": 16400, "▁oxygen": 16401, "hand": 16402, "▁elev": 16403, "Har": 16404, "▁du": 16405, "所得税": 16406, "ultural": 16407, "美好": 16408, "的可": 16409, "举行": 16410, "青少年": 16411, "ichard": 16412, "回收": 16413, "▁spring": 16414, "▁disorder": 16415, "eaking": 16416, "无疑": 16417, "部件": 16418, "▁George": 16419, "Che": 16420, "▁sample": 16421, "太平": 16422, "▁pu": 16423, "出现的": 16424, "▁actual": 16425, "asp": 16426, "格式": 16427, "▁billion": 16428, "Therefore": 16429, "之所以": 16430, "▁hyper": 16431, "ella": 16432, "▁voice": 16433, "fessor": 16434, "▁degrees": 16435, "师范": 16436, "变成": 16437, "第二次": 16438, "完整的": 16439, "▁Mus": 16440, "▁immediately": 16441, "▁Israel": 16442, "讲话": 16443, "bour": 16444, "影像": 16445, "net": 16446, "Remember": 16447, "在这个": 16448, "Germ": 16449, "炎症": 16450, "解读": 16451, "akers": 16452, "▁suggests": 16453, "一段": 16454, "对照": 16455, "▁exploring": 16456, "确定的": 16457, "▁requirements": 16458, "etry": 16459, "图片": 16460, "▁isol": 16461, "▁vision": 16462, "仿真": 16463, "转载": 16464, "▁anyone": 16465, "ona": 16466, "导体": 16467, "had": 16468, "与其": 16469, "杠杆": 16470, "战斗": 16471, "▁Public": 16472, "民营": 16473, "▁David": 16474, "▁whose": 16475, "飾演": 16476, "flow": 16477, "▁interpret": 16478, "央行": 16479, "Def": 16480, "atholic": 16481, "较高的": 16482, "是从": 16483, "年底": 16484, "金额": 16485, "材料的": 16486, "▁motor": 16487, "抓住": 16488, "▁worldwide": 16489, "噪声": 16490, "▁advent": 16491, "Similarly": 16492, "线上": 16493, "):": 16494, "▁samples": 16495, "ye": 16496, "type": 16497, "▁joined": 16498, "▁iron": 16499, "ola": 16500, "十七": 16501, "我们要": 16502, "▁covered": 16503, "▁bottom": 16504, "信心": 16505, "湖南": 16506, "▁challenging": 16507, "▁cardi": 16508, "OM": 16509, "▁Are": 16510, "的特征": 16511, "教育部": 16512, "乃至": 16513, "▁wall": 16514, "list": 16515, "▁chance": 16516, "eck": 16517, "irginia": 16518, "edicated": 16519, "oral": 16520, "邓小平": 16521, "试图": 16522, "分裂": 16523, "▁economy": 16524, "抗原": 16525, "披露": 16526, "皮肤": 16527, "▁wonder": 16528, "▁reality": 16529, "▁electricity": 16530, "osc": 16531, "同年": 16532, "▁businesses": 16533, "信托": 16534, "迁移": 16535, "▁volume": 16536, "▁Mart": 16537, "ano": 16538, "▁proteins": 16539, "urd": 16540, "elligence": 16541, "Pat": 16542, "▁label": 16543, "▁Medic": 16544, "▁paint": 16545, "政党": 16546, "iders": 16547, "▁command": 16548, "容器": 16549, "之间的关系": 16550, "看出": 16551, "▁Service": 16552, "立即": 16553, "▁mathemat": 16554, "暴露": 16555, "▁citizens": 16556, "▁looked": 16557, "几何": 16558, "ht": 16559, "▁Life": 16560, "受体": 16561, "orough": 16562, "非洲": 16563, "運動員": 16564, "▁Web": 16565, "elect": 16566, "Spec": 16567, "ymph": 16568, "妇女": 16569, "▁faced": 16570, "▁Paul": 16571, "很大的": 16572, "vironments": 16573, "三维": 16574, "形式的": 16575, "尺寸": 16576, "两大": 16577, "▁processing": 16578, "RA": 16579, "▁buy": 16580, "▁milk": 16581, "▁expert": 16582, "的生活": 16583, "respond": 16584, "▁unf": 16585, "▁La": 16586, "Writ": 16587, "raction": 16588, "密集": 16589, "飞机": 16590, "▁surgery": 16591, "(,": 16592, "都在": 16593, "▁Carol": 16594, "互联": 16595, "▁habitat": 16596, "丧失": 16597, "全国人大": 16598, "▁prefer": 16599, "level": 16600, "企业在": 16601, "占比": 16602, "ums": 16603, "▁income": 16604, "▁Plan": 16605, "▁minim": 16606, "▁initi": 16607, "加拿": 16608, "Keep": 16609, "▁Greek": 16610, "List": 16611, "edy": 16612, "寿命": 16613, "的组织": 16614, ":(": 16615, "放大": 16616, "icks": 16617, "Follow": 16618, "较大的": 16619, "python": 16620, "▁Met": 16621, "Med": 16622, "速率": 16623, "文化遗产": 16624, "▁upper": 16625, "等领域": 16626, "▁represents": 16627, "ship": 16628, "理论的": 16629, "血压": 16630, "cers": 16631, "神经元": 16632, "▁fear": 16633, "▁appearance": 16634, "界定": 16635, "▁tiny": 16636, "文艺": 16637, "标准的": 16638, "▁figures": 16639, "利息": 16640, "归纳": 16641, "▁classes": 16642, "▁thick": 16643, "研究中": 16644, "政协": 16645, "▁southern": 16646, "運動會": 16647, "加强对": 16648, "Sub": 16649, "药品": 16650, "看来": 16651, "涵盖": 16652, "英國": 16653, "尽可能": 16654, "BM": 16655, "ocratic": 16656, "条约": 16657, "发出": 16658, "▁married": 16659, "▁relatively": 16660, "父母": 16661, "▁Canadian": 16662, "数据安全": 16663, "▁combination": 16664, "▁algorith": 16665, "Make": 16666, "令人": 16667, "新疆": 16668, "▁Hall": 16669, "▁meeting": 16670, "▁First": 16671, "▁output": 16672, "ait": 16673, "▁Leg": 16674, "▁insect": 16675, "▁letters": 16676, "线程": 16677, "密码": 16678, "倡导": 16679, "rant": 16680, "ademy": 16681, "资源配置": 16682, "牌得主": 16683, "▁foreign": 16684, "osystem": 16685, "▁Company": 16686, "传染": 16687, "真理": 16688, "殖民": 16689, "inations": 16690, "fered": 16691, "orking": 16692, "▁Group": 16693, "band": 16694, "▁imagine": 16695, "▁Off": 16696, ":▁": 16697, "pha": 16698, "▁message": 16699, "▁possess": 16700, "vironmental": 16701, "解析": 16702, "同学": 16703, "ysical": 16704, "roke": 16705, "王朝": 16706, "▁Prot": 16707, "▁price": 16708, "▁widely": 16709, "▁Court": 16710, "等的": 16711, "▁particularly": 16712, "最新": 16713, "▁install": 16714, "的地方": 16715, "icial": 16716, "▁assessment": 16717, "▁slightly": 16718, "而非": 16719, "电磁": 16720, "▁wasn": 16721, "▁elected": 16722, "▁speech": 16723, "often": 16724, "English": 16725, "▁Music": 16726, "▁assum": 16727, "认识到": 16728, "▁mechanisms": 16729, "▁▁-▁": 16730, "▁cra": 16731, "▁enhance": 16732, "指示": 16733, "▁reducing": 16734, "expl": 16735, "不受": 16736, "▁desp": 16737, "重要的是": 16738, "的最大": 16739, "▁vent": 16740, "▁movements": 16741, "工商": 16742, "\u0005\u0006": 16743, "沒有": 16744, "▁carried": 16745, "环境保护": 16746, "博物馆": 16747, "▁train": 16748, "▁trou": 16749, "▁Found": 16750, "▁generation": 16751, "的制度": 16752, "▁tow": 16753, "暴力": 16754, "▁failure": 16755, "▁determined": 16756, "补贴": 16757, "行政机关": 16758, "研究生": 16759, "▁arm": 16760, "Art": 16761, "▁Fore": 16762, "South": 16763, "▁award": 16764, "▁remove": 16765, "寻求": 16766, "热点": 16767, "ressed": 16768, "之处": 16769, "截至": 16770, "ani": 16771, "等于": 16772, "tical": 16773, "▁flood": 16774, "health": 16775, "atal": 16776, "free": 16777, "体内": 16778, "新时代中国特色社会主义思想": 16779, "要有": 16780, "▁sets": 16781, "▁Rail": 16782, "预计": 16783, "度和": 16784, "▁involving": 16785, "William": 16786, "教师的": 16787, "合适": 16788, "▁songs": 16789, "ulin": 16790, "供应商": 16791, "▁qual": 16792, "RE": 16793, "▁sac": 16794, "▁removed": 16795, "Fran": 16796, "四是": 16797, "▁batter": 16798, "未经": 16799, "在这种": 16800, "电气": 16801, "技术创新": 16802, "inent": 16803, "▁household": 16804, "▁math": 16805, "生平": 16806, "并未": 16807, ",《": 16808, "▁Bel": 16809, "atically": 16810, "Chapter": 16811, "ortunately": 16812, "光学": 16813, "▁consequences": 16814, "▁northern": 16815, "病理": 16816, "▁tail": 16817, "▁hospital": 16818, "常常": 16819, "▁faith": 16820, "在一个": 16821, "难点": 16822, "▁Army": 16823, "ogue": 16824, "环境中": 16825, "▁Jewish": 16826, "▁roll": 16827, "arah": 16828, "▁Gra": 16829, "到达": 16830, "▁stations": 16831, "等方式": 16832, "▁candid": 16833, "sim": 16834, "Fe": 16835, "▁mist": 16836, "生素": 16837, "▁ocean": 16838, "▁destroy": 16839, "可分为": 16840, "▁square": 16841, "osph": 16842, "买卖": 16843, "▁primarily": 16844, "▁kid": 16845, "▁List": 16846, "▁healthcare": 16847, "asure": 16848, "▁maintaining": 16849, "▁engage": 16850, "生活中": 16851, "▁symbol": 16852, "▁survey": 16853, "▁touch": 16854, "▁meant": 16855, "riage": 16856, "verse": 16857, "arn": 16858, "▁signal": 16859, "”(": 16860, "▁instrum": 16861, "尼亚": 16862, "▁academic": 16863, "▁Atl": 16864, "▁evolution": 16865, "roid": 16866, "poses": 16867, "▁vulner": 16868, "▁studying": 16869, "生产的": 16870, "▁internal": 16871, "漏洞": 16872, "▁environments": 16873, "▁specifically": 16874, "决定了": 16875, "TS": 16876, "前往": 16877, "produ": 16878, "上涨": 16879, "护理": 16880, "▁Program": 16881, "▁horm": 16882, "创意": 16883, "中等": 16884, "through": 16885, "流动性": 16886, "人员的": 16887, "ivation": 16888, "▁creative": 16889, "形状": 16890, "▁agg": 16891, "▁ju": 16892, "弹性": 16893, "面临的": 16894, "更高的": 16895, "▁facilit": 16896, "othe": 16897, "▁thus": 16898, "---": 16899, "设计的": 16900, "igration": 16901, "▁tooth": 16902, "▁Royal": 16903, "被认为": 16904, "▁Mont": 16905, "系统性": 16906, "用途": 16907, "▁Mark": 16908, "ua": 16909, "中和": 16910, "▁themes": 16911, "合格": 16912, "razil": 16913, "防御": 16914, "▁ready": 16915, "▁height": 16916, "PM": 16917, "▁worth": 16918, "abase": 16919, "▁examine": 16920, "▁Year": 16921, "▁bow": 16922, "▁param": 16923, "-{": 16924, "技巧": 16925, "uma": 16926, "充满": 16927, "合规": 16928, "建设和": 16929, "▁Cap": 16930, "▁straight": 16931, "eria": 16932, "▁annual": 16933, "现行": 16934, "实体经济": 16935, "hether": 16936, "▁Mat": 16937, "anta": 16938, "▁offered": 16939, "康复": 16940, "alysis": 16941, "weight": 16942, "的学生": 16943, "▁bird": 16944, "▁elim": 16945, "struction": 16946, "决议": 16947, "的标准": 16948, "内外": 16949, "▁Jesus": 16950, "国民党": 16951, "社会保障": 16952, "组件": 16953, "▁storage": 16954, "ipped": 16955, "▁grand": 16956, "是有": 16957, "bel": 16958, "对话": 16959, "值的": 16960, "▁metab": 16961, "arter": 16962, "ishes": 16963, "获得了": 16964, "▁parent": 16965, "▁decades": 16966, "HL": 16967, "的水": 16968, "▁Tur": 16969, "广告": 16970, "比赛": 16971, "▁leader": 16972, "太阳能": 16973, "▁reference": 16974, "▁la": 16975, "微观": 16976, "信息系统": 16977, "riculum": 16978, "▁seeds": 16979, "网络空间": 16980, "模式的": 16981, "私人": 16982, "制备": 16983, "放射": 16984, "estival": 16985, "满意": 16986, "单纯": 16987, "纪律": 16988, "通货膨胀": 16989, "▁drive": 16990, "共建": 16991, "支配": 16992, "与此同时": 16993, "utch": 16994, "▁battle": 16995, "▁Kore": 16996, "▁Class": 16997, "时期的": 16998, "Understanding": 16999, "▁conservation": 17000, "?\"▁": 17001, "省级": 17002, "官员": 17003, "▁amounts": 17004, "武装": 17005, "调用": 17006, "▁estimated": 17007, "▁ri": 17008, "yles": 17009, "隔离": 17010, "▁Ge": 17011, "yr": 17012, "print": 17013, "caus": 17014, "通胀": 17015, "国民经济": 17016, "about": 17017, "▁reports": 17018, "▁eggs": 17019, "RF": 17020, "▁mice": 17021, "▁rain": 17022, "certain": 17023, "▁rul": 17024, "▁flex": 17025, "需要的": 17026, "rics": 17027, "似乎": 17028, "unte": 17029, "总额": 17030, "促进了": 17031, "注入": 17032, "ml": 17033, "▁Old": 17034, "全方位": 17035, "本网": 17036, "时代的": 17037, "伤害": 17038, "裁判": 17039, "▁Mil": 17040, "▁spl": 17041, "征收": 17042, "论证": 17043, "▁Histor": 17044, "如今": 17045, "bran": 17046, "▁linked": 17047, "▁*": 17048, "▁Time": 17049, "".": 17050, "审核": 17051, "▁Development": 17052, "Stud": 17053, "▁Kingdom": 17054, "▁Mary": 17055, "▁nothing": 17056, "▁Mac": 17057, "▁sav": 17058, "oul": 17059, "cm": 17060, "▁pul": 17061, "Mon": 17062, "独立的": 17063, "HE": 17064, "更好的": 17065, "DC": 17066, "生态系统": 17067, "▁drop": 17068, "坚实": 17069, "▁Bro": 17070, "▁properly": 17071, "anda": 17072, "新增": 17073, "di": 17074, "▁spaces": 17075, "公元": 17076, "答案": 17077, "声音": 17078, "▁colle": 17079, "对接": 17080, "Next": 17081, "静脉": 17082, "▁Sen": 17083, "▁closed": 17084, "▁excell": 17085, "委員": 17086, "▁lesson": 17087, "▁chapter": 17088, "▁Sal": 17089, "研究中心": 17090, "▁conver": 17091, "建造": 17092, "对方": 17093, "书面": 17094, "Ass": 17095, "贯穿": 17096, "的重要性": 17097, "纪念": 17098, "▁helping": 17099, "▁neuro": 17100, "▁interview": 17101, "政务": 17102, "玻璃": 17103, "▁atmosphere": 17104, "▁Ber": 17105, "rey": 17106, "▁therefore": 17107, "累计": 17108, "清朝": 17109, "南北": 17110, "一级": 17111, "出资": 17112, "▁survival": 17113, "▁pages": 17114, "▁mit": 17115, "美国的": 17116, "ault": 17117, "iller": 17118, "▁huge": 17119, "工程师": 17120, "▁grass": 17121, "▁notice": 17122, "打印": 17123, "▁especially": 17124, "▁giving": 17125, "NS": 17126, "表现出": 17127, "弘扬": 17128, "Oh": 17129, "▁depression": 17130, "因為": 17131, "▁dedicated": 17132, "引用": 17133, "▁▁▁▁▁▁": 17134, "饮食": 17135, "山西": 17136, "后期": 17137, "ventional": 17138, "物品": 17139, "▁exposed": 17140, "▁coord": 17141, "unch": 17142, "BA": 17143, "相当于": 17144, "全党": 17145, "hire": 17146, "物种": 17147, "▁finally": 17148, "war": 17149, "不断提高": 17150, "激素": 17151, "▁encourage": 17152, "重庆": 17153, "▁engineering": 17154, "sometimes": 17155, "azine": 17156, "不开": 17157, "apping": 17158, "icago": 17159, "High": 17160, "▁pictures": 17161, "运动会": 17162, "主权": 17163, "溶液": 17164, "缺失": 17165, "sembly": 17166, "reland": 17167, "ohns": 17168, "▁selected": 17169, "▁Net": 17170, "出血": 17171, "终止": 17172, "名义": 17173, "▁conv": 17174, "ented": 17175, "chers": 17176, "▁categ": 17177, "point": 17178, "uh": 17179, "dem": 17180, "commun": 17181, "Dep": 17182, "外资": 17183, "赋能": 17184, "加拿大": 17185, "▁consists": 17186, "▁apart": 17187, "产能": 17188, "党和国家": 17189, "▁combined": 17190, "后续": 17191, "arrow": 17192, "起诉": 17193, "▁strategy": 17194, "Av": 17195, "量化": 17196, "清单": 17197, "▁extremely": 17198, "▁looks": 17199, "毕业生": 17200, "▁Che": 17201, "▁containing": 17202, "▁transform": 17203, "Vol": 17204, "颁布": 17205, "车站": 17206, "▁killed": 17207, "Ac": 17208, "生效": 17209, "人数": 17210, "▁traffic": 17211, "oz": 17212, "SM": 17213, "▁grade": 17214, "▁Latin": 17215, "肌肉": 17216, "▁interests": 17217, "▁liver": 17218, "遇到": 17219, "▁wife": 17220, "转录": 17221, "United": 17222, "▁advoc": 17223, "消失": 17224, "lick": 17225, "功能的": 17226, "▁brief": 17227, "▁format": 17228, "党内": 17229, "化解": 17230, "hemical": 17231, "朝鲜": 17232, "▁library": 17233, "路由": 17234, "anged": 17235, "脂肪": 17236, "spect": 17237, "▁Pen": 17238, "享受": 17239, "OC": 17240, "▁ingredients": 17241, "体积": 17242, "ek": 17243, "合法权益": 17244, "研究和": 17245, "▁origin": 17246, "▁anxiety": 17247, "致力": 17248, "年夏季": 17249, "担当": 17250, "ootball": 17251, "▁moist": 17252, "▁conflict": 17253, "▁tal": 17254, "标的": 17255, "Brit": 17256, "带有": 17257, "爆炸": 17258, "▁circum": 17259, "▁industrial": 17260, "▁referred": 17261, "的战略": 17262, "地图": 17263, "权限": 17264, "▁regularly": 17265, "演化": 17266, "电话": 17267, "unct": 17268, "▁Australian": 17269, "▁Mexico": 17270, "Par": 17271, "▁closer": 17272, "▁recommended": 17273, "说的": 17274, "对外开放": 17275, "Ag": 17276, "▁prepared": 17277, "iana": 17278, "stream": 17279, "▁diagnosis": 17280, "▁topic": 17281, "设定": 17282, "负载": 17283, "mas": 17284, "eorg": 17285, "▁continues": 17286, "uses": 17287, "在内的": 17288, "搭建": 17289, "inet": 17290, "或是": 17291, "▁pret": 17292, "待遇": 17293, "的政策": 17294, "▁discussion": 17295, "更大的": 17296, "mic": 17297, "▁flowers": 17298, "债务人": 17299, "▁frequency": 17300, "媒介": 17301, "▁liquid": 17302, "▁operation": 17303, "体制机制": 17304, "肯定": 17305, "增大": 17306, "冠軍": 17307, "▁Town": 17308, "既是": 17309, "的分析": 17310, "▁burn": 17311, "ibilities": 17312, "奠定了": 17313, "情节": 17314, "▁Water": 17315, "▁inform": 17316, "▁hun": 17317, "搜索": 17318, "istant": 17319, "黄河": 17320, "塑造": 17321, "▁radiation": 17322, "表演": 17323, "Ge": 17324, "uan": 17325, "对中国": 17326, "▁generations": 17327, "▁muscles": 17328, "▁Project": 17329, "名为": 17330, "▁manufacture": 17331, "▁vast": 17332, "▁Mag": 17333, "▁guidelines": 17334, "模糊": 17335, "▁follows": 17336, "公约": 17337, "公有": 17338, "动能": 17339, "▁describe": 17340, "▁cars": 17341, "▁Do": 17342, "▁opin": 17343, "▁dro": 17344, "▁Direct": 17345, "▁yellow": 17346, "协助": 17347, "市民": 17348, "▁bank": 17349, "相信": 17350, "Fl": 17351, "bur": 17352, "个别": 17353, "这一点": 17354, "',▁": 17355, "工作中": 17356, "其中的": 17357, "▁AD": 17358, "高端": 17359, "▁Gold": 17360, "arp": 17361, "任意": 17362, "gment": 17363, "▁director": 17364, "曾经": 17365, "信息安全": 17366, "告诉": 17367, "▁Ben": 17368, "▁vegetables": 17369, "asy": 17370, "又称": 17371, "ferent": 17372, "坚持以": 17373, "urance": 17374, "aval": 17375, "的前": 17376, "活跃": 17377, "▁raised": 17378, "▁teams": 17379, "协定": 17380, "ls": 17381, "主教": 17382, "▁experts": 17383, "人生": 17384, "▁storm": 17385, "▁Asia": 17386, "▁indicate": 17387, "标签": 17388, "▁settle": 17389, "诈骗": 17390, "聚集": 17391, "RC": 17392, "VD": 17393, "民国": 17394, "历史的": 17395, "▁barri": 17396, "▁professionals": 17397, "之後": 17398, "期刊": 17399, "獲得": 17400, "▁random": 17401, "ora": 17402, "确实": 17403, "的患者": 17404, "▁clim": 17405, "▁choices": 17406, "▁cognitive": 17407, "▁option": 17408, "▁particles": 17409, "考虑到": 17410, "▁beliefs": 17411, "▁pric": 17412, "ulture": 17413, "氛围": 17414, "就是要": 17415, "科学发展": 17416, "东南": 17417, "isation": 17418, "iration": 17419, "▁nutrition": 17420, "主流": 17421, "利益的": 17422, "▁worry": 17423, "▁accurate": 17424, "erse": 17425, "▁aircraft": 17426, "▁collected": 17427, "▁lies": 17428, "▁periods": 17429, "充分利用": 17430, "Ant": 17431, "用地": 17432, "党的十八大以来": 17433, "遊戲": 17434, "▁treatments": 17435, "cking": 17436, "▁Egypt": 17437, "▁nuclear": 17438, "▁Miss": 17439, "▁sides": 17440, "减排": 17441, "\b\u0006": 17442, "机器学习": 17443, "oseph": 17444, "▁Lab": 17445, "作为一种": 17446, "PE": 17447, "伙伴": 17448, "aks": 17449, "▁sustainable": 17450, "▁HIV": 17451, "压缩": 17452, "不仅仅": 17453, "人身": 17454, "▁reaction": 17455, "研究成果": 17456, "负责人": 17457, "类的": 17458, ":▁“": 17459, "经济发展的": 17460, "icing": 17461, "今后": 17462, "▁roots": 17463, "五个": 17464, "▁impacts": 17465, "什么是": 17466, "▁familiar": 17467, "标识": 17468, "▁Franc": 17469, "▁artist": 17470, "dec": 17471, "during": 17472, "▁dangerous": 17473, "有关的": 17474, "还需要": 17475, "它们的": 17476, "▁Journal": 17477, "金融危机": 17478, "▁responses": 17479, "North": 17480, "▁copy": 17481, "善于": 17482, "河北": 17483, "▁cris": 17484, "lig": 17485, "▁It": 17486, "cher": 17487, "▁Zeal": 17488, "结算": 17489, "引擎": 17490, "▁execut": 17491, "▁Lear": 17492, "▁disp": 17493, "模型的": 17494, "▁Rad": 17495, "pping": 17496, "扩散": 17497, "▁keeping": 17498, "▁faster": 17499, "病例": 17500, "产业结构": 17501, "ita": 17502, "isp": 17503, "Japan": 17504, "overty": 17505, "eless": 17506, "ups": 17507, "订立": 17508, "▁univers": 17509, "理论与": 17510, "ulating": 17511, "dr": 17512, "高职": 17513, "都可以": 17514, "▁centuries": 17515, "▁institutions": 17516, "▁plot": 17517, "▁Catholic": 17518, "▁infections": 17519, "开启": 17520, "▁tumor": 17521, "延长": 17522, "▁suggested": 17523, "▁pip": 17524, "friend": 17525, "ican": 17526, "obe": 17527, "定量": 17528, "工业互联网": 17529, "▁Sing": 17530, "几种": 17531, "被动": 17532, "▁increasingly": 17533, "▁announced": 17534, "算力": 17535, "正如": 17536, "▁noted": 17537, "▁violence": 17538, "▁meat": 17539, "提前": 17540, "所述": 17541, "rence": 17542, "教学的": 17543, "了对": 17544, "▁statement": 17545, "第八": 17546, "…▁": 17547, "▁amazing": 17548, "规章": 17549, "▁efficiency": 17550, "ingly": 17551, "调度": 17552, "▁Academy": 17553, "阿尔": 17554, "▁diversity": 17555, "初级": 17556, "faces": 17557, "zym": 17558, "▁incred": 17559, "first": 17560, "instead": 17561, "变化的": 17562, "就要": 17563, "▁Prov": 17564, "红军": 17565, "ependent": 17566, ")▁-▁": 17567, "日报": 17568, "ette": 17569, "的一项": 17570, "各方": 17571, "很少": 17572, "irds": 17573, "oom": 17574, "LE": 17575, "原料": 17576, "▁prem": 17577, "推理": 17578, "認為": 17579, "▁hearing": 17580, "expected": 17581, "天文": 17582, "夫妻": 17583, "▁Civil": 17584, "▁regional": 17585, "▁taught": 17586, "Christ": 17587, "▁stem": 17588, "时空": 17589, "机理": 17590, "▁vs": 17591, "的性质": 17592, "▁Mem": 17593, "▁neighbor": 17594, "他們": 17595, "建模": 17596, "表述": 17597, "交付": 17598, "同比": 17599, "arliament": 17600, "▁founded": 17601, "作了": 17602, "朋友": 17603, "需求的": 17604, "▁pollution": 17605, "▁creates": 17606, "二者": 17607, "孔子": 17608, "的重要组成部分": 17609, "部长": 17610, "▁operating": 17611, "▁begins": 17612, "▁Records": 17613, "Add": 17614, "▁stars": 17615, "报表": 17616, "▁Emp": 17617, "▁legisl": 17618, "界面": 17619, "▁ecosystem": 17620, "▁Zealand": 17621, "▁aid": 17622, "天气": 17623, "研究者": 17624, "▁mort": 17625, "fit": 17626, "西藏": 17627, "关心": 17628, "起点": 17629, "FC": 17630, "临时": 17631, "▁measured": 17632, "oly": 17633, "▁Britain": 17634, "▁News": 17635, "▁Out": 17636, "家长": 17637, "不动": 17638, "中文": 17639, "enses": 17640, "\",\"": 17641, "已知": 17642, "第三方": 17643, "多元化": 17644, "ses": 17645, "主要的": 17646, "oves": 17647, "疼痛": 17648, "删除": 17649, "家的": 17650, "态势": 17651, "▁mm": 17652, "火箭": 17653, "▁syndrome": 17654, "加剧": 17655, "既要": 17656, "gr": 17657, "读者": 17658, "▁phase": 17659, "受益": 17660, "企业和": 17661, "▁phenomen": 17662, "来实现": 17663, "▁networks": 17664, "智力": 17665, "监察": 17666, "开设": 17667, "▁hour": 17668, "opes": 17669, "周边": 17670, "▁stone": 17671, "HO": 17672, "▁Spec": 17673, "▁Rel": 17674, "▁disapp": 17675, "最小": 17676, "故意": 17677, "发生在": 17678, "晶体": 17679, "▁poly": 17680, "▁fort": 17681, "数值": 17682, "▁valid": 17683, "orph": 17684, "▁motion": 17685, "Who": 17686, "▁significance": 17687, "对抗": 17688, "▁adop": 17689, "▁component": 17690, "创造了": 17691, "网上": 17692, "icious": 17693, "▁revealed": 17694, "▁compos": 17695, "诚信": 17696, "▁row": 17697, "村民": 17698, "既有": 17699, "跨境": 17700, "▁priv": 17701, "长度": 17702, "▁References": 17703, "不久": 17704, "kins": 17705, "不但": 17706, "限度": 17707, "代替": 17708, "线路": 17709, "快速发展": 17710, "▁joint": 17711, "han": 17712, "inder": 17713, "ptions": 17714, "▁compl": 17715, "落后": 17716, "PI": 17717, "▁realized": 17718, "Inter": 17719, "程度的": 17720, "▁chosen": 17721, "将在": 17722, "二次": 17723, "oto": 17724, "anted": 17725, "期望": 17726, "orter": 17727, "上是": 17728, "istan": 17729, "▁double": 17730, "ching": 17731, "aying": 17732, "和应用": 17733, "Example": 17734, "网络的": 17735, "cules": 17736, "建築": 17737, "街道": 17738, "▁professor": 17739, "help": 17740, "▁divided": 17741, "np": 17742, "▁fine": 17743, "数额": 17744, "▁fruits": 17745, "的存在": 17746, "▁defic": 17747, "▁association": 17748, "Such": 17749, "可再生": 17750, "▁depending": 17751, "IG": 17752, "领先": 17753, "落地": 17754, "▁brown": 17755, "年轻": 17756, "颜色": 17757, "高温": 17758, "二氧化碳": 17759, "loc": 17760, "ells": 17761, ":《": 17762, "Fig": 17763, "rastructure": 17764, "习近平新时代中国特色社会主义思想": 17765, "Mean": 17766, "负面": 17767, "已经成为": 17768, "▁clearly": 17769, "退出": 17770, "生涯": 17771, "方式的": 17772, "农业生产": 17773, "▁nerv": 17774, "▁freedom": 17775, "老年": 17776, "▁Test": 17777, "矩阵": 17778, "的现象": 17779, "大致": 17780, "▁Pacific": 17781, "极端": 17782, "▁renew": 17783, "的范围": 17784, "剩余": 17785, "taining": 17786, "变异": 17787, "院士": 17788, "库存": 17789, "▁,": 17790, "rolog": 17791, "ications": 17792, "顾客": 17793, "光伏": 17794, "和实践": 17795, "在不同": 17796, "occ": 17797, "▁vehicle": 17798, "▁occurred": 17799, "▁mal": 17800, "Living": 17801, "▁Library": 17802, "kes": 17803, "▁secure": 17804, "當時": 17805, "简介": 17806, "▁girls": 17807, "▁dogs": 17808, "style": 17809, "指引": 17810, "兴起": 17811, "▁loved": 17812, "缺少": 17813, "▁despite": 17814, "▁files": 17815, "典型的": 17816, "Research": 17817, "在新": 17818, "部门的": 17819, "首要": 17820, "theast": 17821, "广州": 17822, "▁spiritual": 17823, "境内": 17824, "gal": 17825, "▁chemicals": 17826, "的第一": 17827, "管制": 17828, "▁perspectives": 17829, "▁fascinating": 17830, "直观": 17831, "▁enable": 17832, "▁electrical": 17833, "人对": 17834, "在全球": 17835, "意义上": 17836, "意图": 17837, "特异性": 17838, "▁muse": 17839, "韩国": 17840, "子女": 17841, "单个": 17842, "很快": 17843, "▁Division": 17844, "▁replaced": 17845, "▁external": 17846, "尽量": 17847, "respect": 17848, "▁parties": 17849, "外部链接": 17850, "▁reb": 17851, "分支": 17852, "▁starts": 17853, "的所有": 17854, "▁settings": 17855, "發展": 17856, "ested": 17857, "▁Club": 17858, "IA": 17859, "nes": 17860, "开辟": 17861, "▁floor": 17862, "降低了": 17863, "▁knew": 17864, "型的": 17865, "▁dra": 17866, "Up": 17867, "▁extract": 17868, "World": 17869, "▁bright": 17870, "较少": 17871, "体系建设": 17872, "▁calc": 17873, "▁One": 17874, "▁adding": 17875, "▁residents": 17876, "起来的": 17877, "▁Tor": 17878, "化石": 17879, "ictionary": 17880, "联动": 17881, "疗法": 17882, "▁Hill": 17883, "类别": 17884, "▁diss": 17885, "不需要": 17886, "▁Angel": 17887, "深化改革": 17888, "北京市": 17889, "▁opening": 17890, "▁recognize": 17891, "ificial": 17892, "该研究": 17893, "此类": 17894, "之为": 17895, "我们在": 17896, "▁Internet": 17897, "Web": 17898, "缩小": 17899, "Retrieved": 17900, "cycl": 17901, "▁waters": 17902, "oviet": 17903, "法学": 17904, "建立健全": 17905, "教学内容": 17906, "组成的": 17907, "工作者": 17908, "▁practical": 17909, "广阔": 17910, "最重要的": 17911, "▁smart": 17912, "综合征": 17913, "不应": 17914, "的时代": 17915, "▁western": 17916, "百分点": 17917, "eff": 17918, "专用": 17919, "oted": 17920, "民法典": 17921, "和分析": 17922, "iform": 17923, "▁kept": 17924, "bridge": 17925, "还原": 17926, "soft": 17927, "民國": 17928, "Are": 17929, "由於": 17930, "▁attribut": 17931, "▁morning": 17932, "bra": 17933, "▁managed": 17934, "▁Grand": 17935, "ounter": 17936, "▁facilities": 17937, "▁organic": 17938, "▁justice": 17939, "▁craft": 17940, "能耗": 17941, "全社会": 17942, "▁Russian": 17943, "iro": 17944, "▁competition": 17945, "▁Pe": 17946, "▁procedure": 17947, "并对": 17948, "社会主义核心": 17949, "top": 17950, "依赖于": 17951, "▁perspective": 17952, "▁firm": 17953, "分别为": 17954, "▁traditions": 17955, "上市公司": 17956, "半导体": 17957, "▁White": 17958, "季度": 17959, "▁runs": 17960, "▁neur": 17961, "英雄": 17962, "ushing": 17963, "到底": 17964, "广泛的": 17965, "跨越": 17966, "▁discovery": 17967, "电极": 17968, "产业的": 17969, "University": 17970, "能在": 17971, "▁sen": 17972, "▁era": 17973, "▁represented": 17974, "TA": 17975, "▁Rock": 17976, "▁Texas": 17977, "英文": 17978, "云南": 17979, "keep": 17980, "变换": 17981, "常态": 17982, "▁index": 17983, "▁Thomas": 17984, "进化": 17985, "▁nutrients": 17986, "\u0007\u0006": 17987, "▁purposes": 17988, "hav": 17989, "生育": 17990, "▁She": 17991, "▁constant": 17992, "奧林匹克": 17993, "Get": 17994, "学生的学习": 17995, "Rel": 17996, "那样": 17997, "nut": 17998, "▁programming": 17999, "▁forests": 18000, "eling": 18001, "omin": 18002, "附加": 18003, "阻碍": 18004, "长远": 18005, "着眼": 18006, "这次": 18007, "▁Space": 18008, "▁Sl": 18009, "DS": 18010, "▁advantage": 18011, "零售": 18012, "▁Commission": 18013, "一轮": 18014, "结构和": 18015, "abil": 18016, "受害": 18017, "▁highlight": 18018, "希腊": 18019, "▁exchange": 18020, "规定了": 18021, "明了": 18022, "▁collaboration": 18023, "▁stages": 18024, "创新的": 18025, "▁charge": 18026, "光谱": 18027, "可视": 18028, "Bel": 18029, "垂直": 18030, "▁computers": 18031, "▁walls": 18032, "eterm": 18033, "▁phone": 18034, "abits": 18035, "▁spend": 18036, "放弃": 18037, "▁Sea": 18038, "▁bud": 18039, "对立": 18040, "阶段的": 18041, "几年": 18042, "▁fab": 18043, "行政区": 18044, "结合起来": 18045, "▁toxic": 18046, "▁interactions": 18047, "▁intended": 18048, "接入": 18049, "广播": 18050, "劳务": 18051, "▁Management": 18052, "复习": 18053, "▁Carolina": 18054, "风险的": 18055, "明确了": 18056, "▁rein": 18057, "▁affects": 18058, "▁snow": 18059, "itt": 18060, "inity": 18061, "至关重要": 18062, "don": 18063, "▁partners": 18064, "▁Award": 18065, "方法和": 18066, "社會": 18067, "▁talking": 18068, "▁responsibility": 18069, "为主要": 18070, "中山": 18071, "资产阶级": 18072, "LS": 18073, "二年": 18074, "Last": 18075, "▁correspond": 18076, "演出": 18077, "▁layers": 18078, "人类社会": 18079, "▁goods": 18080, "run": 18081, "肠道": 18082, "itness": 18083, "收购": 18084, "▁Social": 18085, ",▁(": 18086, "的外": 18087, "对学生": 18088, "级别": 18089, "▁inflammation": 18090, "▁Games": 18091, "CN": 18092, "ima": 18093, "▁Cast": 18094, "▁join": 18095, "扎实": 18096, "小于": 18097, "▁discrim": 18098, "▁interested": 18099, "▁sudden": 18100, "包容": 18101, "▁behaviors": 18102, "征程": 18103, "▁Middle": 18104, "简化": 18105, "剂量": 18106, "▁seek": 18107, "incre": 18108, "机构的": 18109, "表现在": 18110, "对待": 18111, "vol": 18112, "ads": 18113, "▁optim": 18114, "Where": 18115, "现有的": 18116, "▁mountain": 18117, "DR": 18118, "plicated": 18119, "▁Ter": 18120, "rat": 18121, "ulting": 18122, "彼此": 18123, "嵌入": 18124, "▁resil": 18125, "高达": 18126, "igan": 18127, "总是": 18128, "▁mainly": 18129, "Yes": 18130, "▁dream": 18131, "igital": 18132, "▁fluid": 18133, "启发": 18134, "个性化": 18135, "▁mer": 18136, "xts": 18137, "效能": 18138, "▁god": 18139, "Cre": 18140, "ventions": 18141, "人民代表大会": 18142, "▁Times": 18143, "的理解": 18144, "取向": 18145, "当中": 18146, "real": 18147, "uke": 18148, "▁Smith": 18149, "▁supported": 18150, "全民": 18151, "质量和": 18152, "创新能力": 18153, "种子": 18154, "电解": 18155, "tenance": 18156, "下面": 18157, "▁mostly": 18158, "(▁": 18159, "并通过": 18160, "Less": 18161, "uing": 18162, "▁monitoring": 18163, "▁solve": 18164, "了一系列": 18165, "▁III": 18166, "时刻": 18167, "的定义": 18168, "▁maximum": 18169, "走出": 18170, "▁philosoph": 18171, "▁medium": 18172, "管理体系": 18173, "习近平同志": 18174, "QL": 18175, "或其他": 18176, "擔任": 18177, "▁generate": 18178, "meaning": 18179, "汉语": 18180, "检索": 18181, "Alex": 18182, "esis": 18183, "▁injuries": 18184, "梳理": 18185, "困境": 18186, "建立在": 18187, "▁showing": 18188, "▁Sim": 18189, "▁Sk": 18190, "▁salt": 18191, "▁designs": 18192, "Mc": 18193, "中断": 18194, "▁Pan": 18195, "▁relax": 18196, "▁To": 18197, "David": 18198, "▁Arab": 18199, "reatment": 18200, "▁Parliament": 18201, "▁shel": 18202, "RT": 18203, "至于": 18204, "▁victim": 18205, "▁Book": 18206, "▁ax": 18207, "又是": 18208, "定律": 18209, "▁unexpected": 18210, "ady": 18211, "FS": 18212, "amental": 18213, "Mr": 18214, "claim": 18215, "住宅": 18216, "▁facts": 18217, "▁truth": 18218, "▁suitable": 18219, "iat": 18220, "ao": 18221, "▁flat": 18222, "第二个": 18223, "未成年人": 18224, "脉冲": 18225, "Austral": 18226, "▁defe": 18227, "病的": 18228, "▁appointed": 18229, "学说": 18230, "离婚": 18231, "常委会": 18232, "舞蹈": 18233, "耕地": 18234, "个百分点": 18235, "吸附": 18236, "的位置": 18237, "aturally": 18238, "▁harmful": 18239, "awa": 18240, "▁shapes": 18241, "Among": 18242, "Current": 18243, "创设": 18244, "率的": 18245, "▁recon": 18246, "解决问题": 18247, "▁chain": 18248, "巴黎": 18249, "建筑物": 18250, "設計": 18251, "▁Foundation": 18252, "▁recognized": 18253, "▁seed": 18254, "redu": 18255, "▁unknown": 18256, "imagine": 18257, "VID": 18258, "诞生": 18259, "clusive": 18260, "▁couldn": 18261, "超声": 18262, "转型升级": 18263, "▁ourselves": 18264, "Aut": 18265, "omer": 18266, "▁excellent": 18267, "▁wealth": 18268, "▁youth": 18269, "等多": 18270, "▁landscape": 18271, "▁jobs": 18272, "▁kinds": 18273, "Take": 18274, "body": 18275, "https": 18276, "itivity": 18277, "ishop": 18278, "致力于": 18279, "stone": 18280, "▁rural": 18281, "acts": 18282, "▁die": 18283, "▁lic": 18284, "等因素": 18285, "增多": 18286, "▁turns": 18287, "开创": 18288, "Ste": 18289, "學校": 18290, "▁NA": 18291, "知名": 18292, "▁thin": 18293, "▁fif": 18294, "illa": 18295, "▁potentially": 18296, "依法治国": 18297, "rison": 18298, "系統": 18299, "可在": 18300, "PT": 18301, "传导": 18302, "命题": 18303, "ifferent": 18304, "ifications": 18305, "▁procedures": 18306, "▁Scott": 18307, "上看": 18308, "介质": 18309, "▁waves": 18310, "脱离": 18311, "电阻": 18312, "▁Cam": 18313, "年在": 18314, "▁phr": 18315, "▁kil": 18316, "▁assign": 18317, "开关": 18318, "▁helpful": 18319, "uty": 18320, "▁relative": 18321, "武汉": 18322, "静态": 18323, "▁promoting": 18324, "elled": 18325, "文獻": 18326, "▁guidance": 18327, "▁capable": 18328, "期货": 18329, "迫切": 18330, "发现了": 18331, "▁ideal": 18332, ":▁(": 18333, "限于": 18334, "▁originally": 18335, "▁wait": 18336, "usually": 18337, "▁Italian": 18338, "製作": 18339, "▁Di": 18340, "以外": 18341, "回到": 18342, "德育": 18343, "rors": 18344, "其在": 18345, "▁frag": 18346, "优惠": 18347, "pet": 18348, "oir": 18349, "▁Engine": 18350, "尺度": 18351, "ifies": 18352, "▁causing": 18353, "本站": 18354, "asty": 18355, "▁reduction": 18356, "aming": 18357, "报酬": 18358, "舆论": 18359, "离不开": 18360, "时间的": 18361, "双重": 18362, "感到": 18363, "东方": 18364, "持有": 18365, "▁ran": 18366, "清算": 18367, "思想的": 18368, "中的应用": 18369, "不存在": 18370, "heim": 18371, "onomy": 18372, "参见": 18373, "班牙": 18374, "西班牙": 18375, "ISBN": 18376, "从严": 18377, "不仅是": 18378, "▁hero": 18379, "浪费": 18380, "自然科学": 18381, "▁Wild": 18382, "▁lots": 18383, "▁truly": 18384, "处分": 18385, "激烈": 18386, "▁abilities": 18387, "rate": 18388, "專輯": 18389, "Cent": 18390, "▁serves": 18391, "df": 18392, "▁satis": 18393, "▁seat": 18394, "!\"": 18395, "gely": 18396, "细化": 18397, "纠正": 18398, "▁sensitive": 18399, "延迟": 18400, "前者": 18401, "图书馆": 18402, "▁coal": 18403, "▁wet": 18404, "▁obs": 18405, "▁aimed": 18406, "wa": 18407, "Bar": 18408, "▁nor": 18409, "▁score": 18410, "rogen": 18411, "▁vehicles": 18412, "经济体": 18413, "sex": 18414, "▁signed": 18415, "幅度": 18416, "OL": 18417, "▁extreme": 18418, "▁forced": 18419, "奧林匹克運動會": 18420, "▁Mad": 18421, "fig": 18422, "estion": 18423, "▁concentration": 18424, "fish": 18425, "月球": 18426, "▁ban": 18427, "▁neut": 18428, "▁Commit": 18429, "▁critic": 18430, "▁Columb": 18431, "罗马": 18432, "开拓": 18433, "最高人民法院": 18434, "non": 18435, "基准": 18436, "▁pil": 18437, "地点": 18438, "azz": 18439, "enny": 18440, "▁perman": 18441, "\",": 18442, "lines": 18443, "水利": 18444, "各方面": 18445, "陷入": 18446, "中介": 18447, "▁density": 18448, "▁drink": 18449, "会导致": 18450, "便于": 18451, "命运共同体": 18452, "Time": 18453, "▁tested": 18454, "aph": 18455, "凸显": 18456, "和经济": 18457, "不平衡": 18458, "高水平": 18459, "的实践": 18460, "可行": 18461, "燃烧": 18462, "▁ST": 18463, "ione": 18464, "apes": 18465, "James": 18466, "水的": 18467, "▁catch": 18468, "▁tips": 18469, "都能": 18470, "▁route": 18471, "▁Medicine": 18472, "争取": 18473, "▁marked": 18474, "GA": 18475, "煤炭": 18476, "史上": 18477, "▁satell": 18478, "▁trial": 18479, "办公室": 18480, "安徽": 18481, "cou": 18482, "▁Robert": 18483, "供给侧": 18484, "CM": 18485, "▁Don": 18486, "▁vitamin": 18487, "HT": 18488, "一名": 18489, "asive": 18490, "ultane": 18491, "较多": 18492, "此次": 18493, "▁stronger": 18494, "▁emergency": 18495, "要把": 18496, "这也是": 18497, "het": 18498, "sem": 18499, "锻炼": 18500, "▁ign": 18501, "lers": 18502, "介绍了": 18503, "▁tun": 18504, "发展战略": 18505, "ansion": 18506, "stood": 18507, "液体": 18508, "ublished": 18509, "▁Bas": 18510, "lets": 18511, "理事": 18512, "收缩": 18513, "制度和": 18514, "相适应": 18515, "耦合": 18516, "HS": 18517, "—▁▁—▁▁": 18518, "estyle": 18519, "▁Government": 18520, "营业": 18521, "申报": 18522, "在全国": 18523, "利亚": 18524, "等多种": 18525, "▁Tre": 18526, "▁depth": 18527, "▁alongside": 18528, "Ref": 18529, "率先": 18530, "要求的": 18531, "▁obtained": 18532, "▁km": 18533, "▁mixed": 18534, "源于": 18535, "聚合": 18536, "情景": 18537, "定价": 18538, "▁writers": 18539, "法和": 18540, "▁Ste": 18541, "pass": 18542, "新生": 18543, "这两个": 18544, "初中": 18545, "▁Tri": 18546, "研究表明": 18547, "元件": 18548, "的实际": 18549, "电信": 18550, "▁wel": 18551, "▁oral": 18552, "▁improving": 18553, "▁newsp": 18554, "实现中华民族伟大复兴": 18555, "▁listed": 18556, "▁seeking": 18557, "▁Valley": 18558, "▁remaining": 18559, "个人的": 18560, "可再生能源": 18561, "▁whom": 18562, "▁tradition": 18563, "维修": 18564, "ih": 18565, "安全的": 18566, "▁underlying": 18567, "▁except": 18568, "招生": 18569, "▁Dan": 18570, "▁locations": 18571, "▁Islam": 18572, "▁interaction": 18573, "ori": 18574, "Set": 18575, "无限": 18576, "stein": 18577, "▁Read": 18578, "▁documents": 18579, "▁gar": 18580, "▁suc": 18581, "▁horse": 18582, "▁writer": 18583, "students": 18584, "▁Land": 18585, "全面建成": 18586, "极为": 18587, "组织和": 18588, "雷达": 18589, "准入": 18590, "▁musical": 18591, "West": 18592, "stances": 18593, "光纤": 18594, "Data": 18595, "▁cards": 18596, "▁controlled": 18597, "eries": 18598, "院长": 18599, "智慧城市": 18600, "▁daughter": 18601, "▁resulting": 18602, "新一代": 18603, "▁saying": 18604, "▁||": 18605, "。(": 18606, "▁signals": 18607, "erving": 18608, "▁walking": 18609, "警察": 18610, "▁haz": 18611, "▁platforms": 18612, "ohnson": 18613, "ture": 18614, "Mark": 18615, "行政管理": 18616, "揭示了": 18617, "▁ren": 18618, "▁extended": 18619, "▁demonstrate": 18620, "充电": 18621, "沉积": 18622, "电脑": 18623, "▁vaccine": 18624, "▁foundation": 18625, "行业的": 18626, "▁Del": 18627, "main": 18628, "是为了": 18629, "▁Technology": 18630, "▁ple": 18631, "▁substant": 18632, "▁scri": 18633, "jo": 18634, "▁accomp": 18635, "▁diam": 18636, "过于": 18637, "La": 18638, "党的十九": 18639, "lishing": 18640, "同時": 18641, "治党": 18642, "数字技术": 18643, "更有": 18644, "舞台": 18645, "▁doll": 18646, "▁Sy": 18647, "immy": 18648, "ellect": 18649, "▁Camp": 18650, "▁introduction": 18651, "thetic": 18652, "意愿": 18653, "站在": 18654, "▁machines": 18655, "▁Power": 18656, "Mem": 18657, "▁Henry": 18658, "▁exercises": 18659, "本土": 18660, "▁Organ": 18661, "▁Elect": 18662, "经营者": 18663, "raining": 18664, "遭受": 18665, "演唱": 18666, "校长": 18667, "深远": 18668, "▁Paris": 18669, "▁rapidly": 18670, "司令": 18671, "▁concern": 18672, "earing": 18673, "一流": 18674, "bar": 18675, "eli": 18676, "美丽": 18677, "EF": 18678, "Early": 18679, "中期": 18680, "▁Ireland": 18681, "自治区": 18682, "▁texts": 18683, "▁AI": 18684, "social": 18685, "相对于": 18686, "▁Charles": 18687, "▁mac": 18688, "creating": 18689, "变迁": 18690, "▁Stand": 18691, "▁guitar": 18692, "outs": 18693, "本章": 18694, "▁Frank": 18695, "▁decide": 18696, "DL": 18697, "延续": 18698, "血糖": 18699, "事业单位": 18700, "意义的": 18701, "umin": 18702, "cal": 18703, "▁drinking": 18704, "▁fiction": 18705, "为止": 18706, "hent": 18707, "▁chart": 18708, "▁Victor": 18709, "▁arms": 18710, "▁edge": 18711, "ompl": 18712, "▁ancest": 18713, "也将": 18714, "明确的": 18715, "率为": 18716, "纲要": 18717, "▁houses": 18718, "学生对": 18719, "盈利": 18720, "▁od": 18721, "研讨": 18722, "自然资源": 18723, "社会主义市场经济": 18724, "iological": 18725, "stitution": 18726, "▁bridge": 18727, "▁audience": 18728, "恶性": 18729, "Those": 18730, "上有": 18731, "加坡": 18732, "▁swim": 18733, "从中": 18734, "▁handle": 18735, "Consider": 18736, "ractice": 18737, "▁finished": 18738, "ipping": 18739, "▁supporting": 18740, "▁Def": 18741, "总之": 18742, "离开": 18743, "ilation": 18744, "承载": 18745, "实务": 18746, "回顾": 18747, "具有重要": 18748, "▁acts": 18749, "▁noticed": 18750, "word": 18751, "Sam": 18752, "▁Ev": 18753, "thus": 18754, "▁typical": 18755, "educ": 18756, "umes": 18757, "设计和": 18758, "▁fle": 18759, "▁biological": 18760, "▁Dec": 18761, "▁plate": 18762, "▁communicate": 18763, "▁sort": 18764, "农户": 18765, "小康社会": 18766, "硕士": 18767, "腺癌": 18768, "Water": 18769, "的效果": 18770, "比特": 18771, "try": 18772, "▁experiments": 18773, "▁tells": 18774, "的本质": 18775, "的空间": 18776, "列入": 18777, "▁hypothes": 18778, "▁consistent": 18779, "的意义": 18780, "参照": 18781, "▁leadership": 18782, "原本": 18783, "▁decrease": 18784, "封闭": 18785, "欢迎": 18786, "▁portion": 18787, "▁+": 18788, "转变为": 18789, "▁attacks": 18790, "rus": 18791, "before": 18792, "hered": 18793, "江西": 18794, "▁capture": 18795, "▁messages": 18796, "▁array": 18797, "尽快": 18798, "彰显": 18799, "British": 18800, "用水": 18801, "節目": 18802, "▁Scot": 18803, "污水": 18804, "阿拉": 18805, "▁instruments": 18806, "▁flight": 18807, "过错": 18808, "Form": 18809, "%)▁": 18810, "uous": 18811, "生命周期": 18812, "▁Form": 18813, "mes": 18814, "Ben": 18815, "oting": 18816, "▁Fin": 18817, "起义": 18818, "消化": 18819, "高原": 18820, "无关": 18821, "選舉": 18822, "iano": 18823, "▁visible": 18824, "Histor": 18825, "▁inspired": 18826, "▁doub": 18827, "呈现出": 18828, "▁herit": 18829, ")▁▁": 18830, "▁conclud": 18831, "▁nations": 18832, "ossible": 18833, "onia": 18834, "追究": 18835, "▁lose": 18836, "指向": 18837, "大批": 18838, "书中": 18839, "消灭": 18840, "▁narratives": 18841, "应用的": 18842, "中小学": 18843, "▁younger": 18844, "data": 18845, "▁cert": 18846, "解决了": 18847, "▁Lord": 18848, "组建": 18849, "化工": 18850, "比賽": 18851, "▁foss": 18852, "agues": 18853, "权和": 18854, "每天": 18855, "增长的": 18856, "解放军": 18857, "▁wants": 18858, "四大": 18859, "血清": 18860, "污染物": 18861, "一位": 18862, "▁cm": 18863, "南方": 18864, "操作系统": 18865, "▁secondary": 18866, "sug": 18867, "ctic": 18868, "orrow": 18869, "▁credit": 18870, "▁amb": 18871, "night": 18872, "Paul": 18873, "rust": 18874, "▁sky": 18875, "▁tried": 18876, "erb": 18877, "四年": 18878, "▁subs": 18879, "▁comment": 18880, "DM": 18881, "坐标": 18882, "▁recovery": 18883, "践行": 18884, "大报告": 18885, "\b\u0005": 18886, "治国": 18887, "▁internet": 18888, "LA": 18889, "isease": 18890, "导航": 18891, "全面建设": 18892, "的各种": 18893, "▁grown": 18894, "▁ongoing": 18895, "▁advice": 18896, "▁grew": 18897, "log": 18898, "▁gained": 18899, "▁taste": 18900, "onal": 18901, "普惠": 18902, "进行分析": 18903, "出于": 18904, "检察院": 18905, "▁cooking": 18906, "hi": 18907, "causing": 18908, "▁arrived": 18909, "扮演": 18910, "venue": 18911, "iberal": 18912, "多媒体": 18913, "▁Data": 18914, "▁gun": 18915, "▁movie": 18916, "▁cart": 18917, "oil": 18918, "金融市场": 18919, "▁UN": 18920, "赢得": 18921, "throp": 18922, "降解": 18923, "深度融合": 18924, "的建设": 18925, "▁shif": 18926, "变形": 18927, "$$": 18928, "年以来": 18929, "上海市": 18930, "aine": 18931, "此后": 18932, "集聚": 18933, "合同的": 18934, "以为": 18935, "和非": 18936, "持久": 18937, "▁intelligence": 18938, "▁pair": 18939, "▁dive": 18940, "遭到": 18941, "▁molecules": 18942, "▁dim": 18943, "频繁": 18944, "中国科学院": 18945, "ylvan": 18946, "工作人员": 18947, "终身": 18948, "生产经营": 18949, "BI": 18950, "ighter": 18951, "本课程": 18952, "▁allerg": 18953, "缺点": 18954, "onomic": 18955, "former": 18956, "▁wis": 18957, "澳大利": 18958, "神经网络": 18959, "入侵": 18960, "▁mere": 18961, "▁slowly": 18962, "▁Sub": 18963, "缩短": 18964, "▁Rob": 18965, "▁derived": 18966, "gent": 18967, "▁functional": 18968, "▁Northern": 18969, "学习和": 18970, "reme": 18971, "▁scene": 18972, "▁hidden": 18973, "否定": 18974, "▁Minister": 18975, "占据": 18976, "筛选": 18977, "性疾病": 18978, "▁stret": 18979, "sen": 18980, "互通": 18981, "》:": 18982, "又有": 18983, "机的": 18984, "▁religion": 18985, "TR": 18986, "▁accompl": 18987, "但由于": 18988, "时间内": 18989, "▁painting": 18990, "▁albums": 18991, "gs": 18992, "小结": 18993, "▁technical": 18994, "常用的": 18995, "PU": 18996, "▁intervention": 18997, "独特的": 18998, "注射": 18999, "tery": 19000, "aturing": 19001, "前后": 19002, "Second": 19003, "▁membran": 19004, "▁ensures": 19005, "▁edition": 19006, "早在": 19007, "在经济": 19008, "hat": 19009, "Elect": 19010, "ket": 19011, "自愿": 19012, "amine": 19013, "心肌": 19014, "▁abuse": 19015, "发起": 19016, "论坛": 19017, "ISO": 19018, "erals": 19019, "▁listen": 19020, "参与者": 19021, "产出": 19022, "章程": 19023, "▁athlet": 19024, "▁happy": 19025, "第九": 19026, "▁rough": 19027, "▁Care": 19028, "▁fant": 19029, "LC": 19030, "zen": 19031, "泄露": 19032, "二级": 19033, "▁recycl": 19034, "步伐": 19035, "产业化": 19036, "的一般": 19037, "▁pregnancy": 19038, "相關": 19039, "发的": 19040, "%、": 19041, "宗旨": 19042, "学派": 19043, "▁Super": 19044, "逝世": 19045, "的部分": 19046, "▁multi": 19047, "不同于": 19048, "兄弟": 19049, "十四五": 19050, "适当的": 19051, "NO": 19052, "ostering": 19053, "讲解": 19054, "▁composition": 19055, "业态": 19056, "流转": 19057, "万吨": 19058, "金融服务": 19059, "▁Tem": 19060, "▁arts": 19061, "对策": 19062, "vision": 19063, "▁Empire": 19064, "aked": 19065, "Learn": 19066, "才是": 19067, "美的": 19068, "▁mechanism": 19069, "▁sole": 19070, "性地": 19071, "援助": 19072, "射线": 19073, "eut": 19074, "▁volunte": 19075, "诉讼法": 19076, "▁definition": 19077, "fortunately": 19078, "▁stick": 19079, "▁curriculum": 19080, "▁wildlife": 19081, "whereas": 19082, "▁Star": 19083, "cut": 19084, "▁virtual": 19085, "一下": 19086, "另一种": 19087, "idae": 19088, "zed": 19089, "综合性": 19090, "保密": 19091, "lean": 19092, "rot": 19093, "▁twice": 19094, "创新创业": 19095, "的选择": 19096, "utional": 19097, "▁enzym": 19098, "▁Committee": 19099, "hop": 19100, "校友": 19101, "▁accident": 19102, "▁employed": 19103, "原告": 19104, "思政课": 19105, "北方": 19106, "面临着": 19107, "室内": 19108, "▁switch": 19109, "有力的": 19110, "教育教学": 19111, "诗歌": 19112, "▁window": 19113, "▁Up": 19114, "▁Office": 19115, "Dec": 19116, "▁transition": 19117, "作為": 19118, "水稻": 19119, "▁Inf": 19120, "alse": 19121, "isco": 19122, "少数民族": 19123, "opulation": 19124, "固体": 19125, "▁Hel": 19126, "▁selection": 19127, "忽略": 19128, "lder": 19129, "塑料": 19130, "的总": 19131, "▁Mr": 19132, "imp": 19133, "ashion": 19134, "▁driving": 19135, "收到": 19136, "ili": 19137, "span": 19138, "成人": 19139, "direct": 19140, "▁employees": 19141, "收支": 19142, "▁demonstrated": 19143, "▁participate": 19144, "直至": 19145, "wan": 19146, "作曲": 19147, "顶层": 19148, "▁fundamental": 19149, "良性": 19150, "培养学生的": 19151, "▁childhood": 19152, "aped": 19153, "鉴别": 19154, "世界经济": 19155, "researchers": 19156, "复苏": 19157, "高度重视": 19158, "的主体": 19159, "▁existence": 19160, "Ps": 19161, "重的": 19162, "▁flo": 19163, "▁Virginia": 19164, "▁gall": 19165, "留下": 19166, "Vis": 19167, "MO": 19168, "▁prepare": 19169, "第四节": 19170, "治理能力": 19171, "均匀": 19172, "制定的": 19173, "以下几个": 19174, "▁Soviet": 19175, "社会科学": 19176, "sequent": 19177, "▁initially": 19178, "全面发展": 19179, "nce": 19180, "icking": 19181, "HA": 19182, "▁innovative": 19183, "▁notable": 19184, "▁Southern": 19185, "也为": 19186, "效率和": 19187, "rh": 19188, "draw": 19189, "oding": 19190, "afety": 19191, "根本上": 19192, "短板": 19193, "的责任": 19194, "世界各国": 19195, "▁speaking": 19196, "Children": 19197, "ostic": 19198, "inux": 19199, "▁din": 19200, "ban": 19201, "rather": 19202, "chnology": 19203, "平方公里": 19204, "景观": 19205, "▁Play": 19206, "rize": 19207, "▁fellow": 19208, "▁inches": 19209, "结果表明": 19210, "voc": 19211, "▁sick": 19212, "▁agricultural": 19213, "▁infected": 19214, "▁vessels": 19215, "的话": 19216, "索引": 19217, "战略性": 19218, "陕西": 19219, "来源于": 19220, "▁creatures": 19221, "成都": 19222, "▁assistance": 19223, "▁instructions": 19224, "绘画": 19225, "作用的": 19226, "也能": 19227, "服務": 19228, "▁leaf": 19229, "▁architecture": 19230, "▁farmers": 19231, "▁send": 19232, "▁wire": 19233, "▁generated": 19234, "▁wave": 19235, "▁organized": 19236, "一家": 19237, "春秋": 19238, "源头": 19239, "发布的": 19240, "ricts": 19241, "欧元": 19242, "abul": 19243, "rovers": 19244, "▁missing": 19245, "境外": 19246, "资本市场": 19247, "动员": 19248, "ylvania": 19249, "Hel": 19250, "Black": 19251, "vity": 19252, "愿意": 19253, "立体": 19254, "▁inject": 19255, "Did": 19256, "ester": 19257, "在此基础上": 19258, "万亿元": 19259, "]。": 19260, "▁engaging": 19261, ")(": 19262, "▁police": 19263, "▁army": 19264, "MR": 19265, "在美国": 19266, "▁university": 19267, "▁sentence": 19268, "越大": 19269, "▁perhaps": 19270, "阻止": 19271, "▁poverty": 19272, "▁neighborhood": 19273, "▁ic": 19274, "文书": 19275, "原有": 19276, "期待": 19277, "▁crops": 19278, "▁blocks": 19279, "发动": 19280, "演进": 19281, "▁protected": 19282, "發現": 19283, "在对": 19284, "▁styles": 19285, "之上": 19286, "▁therm": 19287, "▁ratio": 19288, "缓慢": 19289, "▁:": 19290, "▁tall": 19291, "无需": 19292, "olester": 19293, "chen": 19294, "▁Post": 19295, "人们的": 19296, "排列": 19297, "省份": 19298, "心血管": 19299, "amps": 19300, "导致的": 19301, "基本的": 19302, "成員": 19303, "](": 19304, "▁largely": 19305, "介入": 19306, "],▁": 19307, "▁scholars": 19308, "▁Olympics": 19309, "无形": 19310, "负荷": 19311, "真正的": 19312, "周年": 19313, "及其他": 19314, "▁overl": 19315, "界的": 19316, "▁recognition": 19317, "發行": 19318, "ji": 19319, "ograp": 19320, "▁breath": 19321, "Min": 19322, "▁define": 19323, "orous": 19324, "▁boundaries": 19325, "▁regulations": 19326, "▁electronic": 19327, "▁Control": 19328, "▁positions": 19329, "▁distingu": 19330, "最多": 19331, "习题": 19332, "保健": 19333, "California": 19334, "▁skill": 19335, "uter": 19336, "恶意": 19337, "前期": 19338, "对手": 19339, "▁cup": 19340, "所未": 19341, "薄弱": 19342, "每次": 19343, "奥林匹克": 19344, "aser": 19345, "抵抗": 19346, "病原": 19347, "▁expressed": 19348, "▁authority": 19349, "▁infrastructure": 19350, "▁administration": 19351, "▁everyday": 19352, "基本上": 19353, "能够在": 19354, "获得的": 19355, "thesis": 19356, "show": 19357, "农药": 19358, "▁agreed": 19359, "Following": 19360, "▁Human": 19361, "irus": 19362, "Life": 19363, "▁ships": 19364, "荧光": 19365, "高考": 19366, "新加坡": 19367, "oston": 19368, "▁heritage": 19369, "表征": 19370, "法律规定": 19371, "草案": 19372, "但其": 19373, "奖励": 19374, "严峻": 19375, "湖北": 19376, "coming": 19377, "▁matters": 19378, "▁succeed": 19379, "老年人": 19380, "较强的": 19381, "▁prison": 19382, "▁detailed": 19383, "弥补": 19384, "▁inner": 19385, "▁proport": 19386, "Sch": 19387, "经历了": 19388, "会上": 19389, "磁场": 19390, "黄金": 19391, "adium": 19392, "▁facing": 19393, "近期": 19394, "▁Po": 19395, "▁massive": 19396, "▁Line": 19397, "本国": 19398, "党史": 19399, "两国": 19400, "▁Fe": 19401, "▁featured": 19402, "遥感": 19403, "uracy": 19404, "atre": 19405, "国土": 19406, "储存": 19407, "▁customers": 19408, "those": 19409, "effect": 19410, "出售": 19411, "▁Vol": 19412, "▁division": 19413, "年起": 19414, "契约": 19415, "中国式": 19416, "▁couple": 19417, "iral": 19418, "▁pig": 19419, "DF": 19420, "▁pit": 19421, "台北": 19422, "流感": 19423, "资产的": 19424, "▁sequence": 19425, "▁views": 19426, "在实际": 19427, "race": 19428, "▁Food": 19429, "特殊的": 19430, "ocyt": 19431, "▁tro": 19432, "高压": 19433, "国际化": 19434, "ivalent": 19435, "▁entirely": 19436, "广义": 19437, "▁astron": 19438, "consider": 19439, "完成了": 19440, "▁instruction": 19441, "▁habits": 19442, "fficial": 19443, "永远": 19444, "Dem": 19445, "残疾": 19446, "omething": 19447, "建立起": 19448, "双向": 19449, "Ident": 19450, "偏差": 19451, "的条件": 19452, "作出了": 19453, "▁variables": 19454, "▁manip": 19455, "▁struggle": 19456, "hy": 19457, "专业的": 19458, "made": 19459, "exp": 19460, "▁soldiers": 19461, "Only": 19462, "随时": 19463, "元年": 19464, "giving": 19465, "ideos": 19466, "打开": 19467, "美学": 19468, "▁naturally": 19469, "▁administr": 19470, "▁Chicago": 19471, "称之为": 19472, "▁indigenous": 19473, "草原": 19474, "▁department": 19475, "▁sell": 19476, "着重": 19477, "学生学习": 19478, "▁fly": 19479, "科院": 19480, "hus": 19481, "ocation": 19482, "Inc": 19483, "anes": 19484, "▁weap": 19485, "▁controls": 19486, "▁molecular": 19487, "ipal": 19488, "▁bones": 19489, "▁conventional": 19490, "▁kit": 19491, "lements": 19492, "▁narrow": 19493, "智能制造": 19494, "▁Bank": 19495, "Though": 19496, "▁attend": 19497, "osite": 19498, "工会": 19499, "战役": 19500, "关闭": 19501, "▁millions": 19502, "▁prices": 19503, "很好": 19504, "▁fell": 19505, "▁street": 19506, "语音": 19507, "基督": 19508, "是实现": 19509, "带宽": 19510, "本案": 19511, "突发": 19512, "要坚持": 19513, "ING": 19514, "在这一": 19515, "▁inters": 19516, "kg": 19517, "细节": 19518, "授予": 19519, "和数据": 19520, "提到": 19521, "▁calls": 19522, "▁Medical": 19523, "▁With": 19524, "▁answers": 19525, "近日": 19526, "评审": 19527, "科学发展观": 19528, "水资源": 19529, "▁sections": 19530, "▁Mer": 19531, "保护的": 19532, "研究发现": 19533, "▁nurs": 19534, "Bet": 19535, "▁af": 19536, "CB": 19537, "重要的作用": 19538, "与之": 19539, "动力学": 19540, "人类的": 19541, "▁nine": 19542, "合约": 19543, "资助": 19544, "Any": 19545, "anger": 19546, "▁comprehensive": 19547, "gers": 19548, "是因为": 19549, "势力": 19550, "和创新": 19551, "教师在": 19552, "▁acknow": 19553, "isk": 19554, "▁shot": 19555, "▁appreciate": 19556, "改变了": 19557, "▁investment": 19558, "▁drawing": 19559, "初心": 19560, "会有": 19561, "做了": 19562, "encing": 19563, "▁covers": 19564, "kl": 19565, "▁desired": 19566, "书法": 19567, "inning": 19568, "月份": 19569, "Click": 19570, "▁sufficient": 19571, "▁fewer": 19572, "▁vibr": 19573, "otype": 19574, "新华": 19575, "摘要": 19576, "第三人": 19577, "▁revolution": 19578, "▁enem": 19579, "forming": 19580, "▁Work": 19581, "增值税": 19582, "▁cutting": 19583, "asters": 19584, "Open": 19585, "在一": 19586, "▁consult": 19587, "▁sector": 19588, "要以": 19589, "与管理": 19590, "的网络": 19591, "▁feedback": 19592, "xford": 19593, "▁seemed": 19594, "▁serving": 19595, "color": 19596, "志愿": 19597, "抗战": 19598, "▁trials": 19599, "▁confir": 19600, "Examples": 19601, "▁jump": 19602, "▁Jud": 19603, "阶层": 19604, "君主": 19605, "▁circumstances": 19606, "▁intake": 19607, "▁stored": 19608, "va": 19609, "isters": 19610, "所需的": 19611, "▁sweet": 19612, "Rev": 19613, "▁Budd": 19614, "▁gluc": 19615, "fin": 19616, "▁representation": 19617, "rument": 19618, "▁simpl": 19619, "參考文獻": 19620, "▁rub": 19621, "法律的": 19622, "改为": 19623, "▁conversation": 19624, "产阶级": 19625, "▁mobile": 19626, "责任的": 19627, "热情": 19628, "结核": 19629, "和文化": 19630, "itudes": 19631, "▁domin": 19632, "分辨率": 19633, "本人": 19634, "action": 19635, "▁Bill": 19636, "▁string": 19637, "▁Centre": 19638, "▁simultane": 19639, "▁schem": 19640, "瓶颈": 19641, "▁kill": 19642, "毫米": 19643, "▁successfully": 19644, "还能": 19645, "▁somew": 19646, "tw": 19647, "全身": 19648, "发挥了": 19649, "▁instrument": 19650, "▁stands": 19651, "我的": 19652, "olesterol": 19653, "▁centre": 19654, "▁fold": 19655, "▁bond": 19656, "有益": 19657, "里的": 19658, "▁monitor": 19659, "inds": 19660, "▁meals": 19661, "进程中": 19662, "受理": 19663, "George": 19664, "共产主义": 19665, "FL": 19666, "壮大": 19667, "变为": 19668, "▁paid": 19669, "Meanwhile": 19670, "▁alter": 19671, "格尔": 19672, "各族": 19673, "甲基": 19674, "已被": 19675, "对企业": 19676, "March": 19677, "▁survive": 19678, "▁raise": 19679, "影响的": 19680, "olitical": 19681, "achers": 19682, "有望": 19683, "▁explan": 19684, "鐵路": 19685, "ali": 19686, "实证": 19687, "极其": 19688, "Resear": 19689, "▁evaluate": 19690, "侦查": 19691, "过剩": 19692, "著作权": 19693, "VI": 19694, "▁coff": 19695, "高等学校": 19696, "小行星": 19697, "▁latest": 19698, "优良": 19699, "祖国": 19700, "运动的": 19701, "▁suffering": 19702, "▁teen": 19703, "辅导": 19704, "紧张": 19705, "管理制度": 19706, "▁photos": 19707, "映射": 19708, "▁ven": 19709, "▁transportation": 19710, "\"▁|▁": 19711, "牺牲": 19712, "摩擦": 19713, "rons": 19714, "▁eastern": 19715, "omic": 19716, "▁claims": 19717, "超级": 19718, "▁regul": 19719, "▁ble": 19720, "▁migr": 19721, "▁brings": 19722, "稱為": 19723, "提倡": 19724, "▁prevention": 19725, "▁ended": 19726, "重构": 19727, "ibl": 19728, "分组": 19729, "▁dys": 19730, "Mat": 19731, "uis": 19732, "较小": 19733, "▁mamm": 19734, "東京": 19735, "nsylvania": 19736, "管理系统": 19737, "▁Just": 19738, "▁ends": 19739, "湿地": 19740, "基础设施建设": 19741, "▁tur": 19742, "▁door": 19743, "▁Florida": 19744, "stud": 19745, "▁noise": 19746, "▁persist": 19747, "互补": 19748, "有关部门": 19749, "的世界": 19750, "▁bill": 19751, "▁beauty": 19752, "ichigan": 19753, "加深": 19754, "不确定性": 19755, "roat": 19756, "涉及到": 19757, "中医": 19758, "的支持": 19759, "▁Gard": 19760, "teen": 19761, "Unfortunately": 19762, "接种": 19763, "▁extensive": 19764, "一套": 19765, "Sur": 19766, "▁pretty": 19767, "▁Big": 19768, "丝绸": 19769, "相继": 19770, "人们对": 19771, "术语": 19772, "签署": 19773, "实现的": 19774, "▁Squ": 19775, "▁sed": 19776, "染色体": 19777, "▁usage": 19778, "发动机": 19779, "注意的是": 19780, "due": 19781, "▁cloud": 19782, "的观点": 19783, "还没有": 19784, "ellectual": 19785, "最後": 19786, "旋转": 19787, "▁Nations": 19788, "itative": 19789, "多样化": 19790, "所谓的": 19791, "▁expectations": 19792, "▁Brazil": 19793, "▁reactions": 19794, "就有": 19795, "并发症": 19796, "顺应": 19797, "Find": 19798, "北部": 19799, "Commun": 19800, "▁shell": 19801, "▁agriculture": 19802, "选取": 19803, "对象的": 19804, "would": 19805, "照片": 19806, "全面推进": 19807, "派遣": 19808, "phone": 19809, "期間": 19810, "▁deliv": 19811, "零件": 19812, "▁Irish": 19813, "▁Energy": 19814, "▁org": 19815, "解决问题的": 19816, "境界": 19817, "box": 19818, "atus": 19819, "冷却": 19820, "是为": 19821, "▁propos": 19822, "▁horiz": 19823, "▁brand": 19824, "connect": 19825, "质的": 19826, "\"▁–▁": 19827, "▁pray": 19828, "▁describes": 19829, "▁Peter": 19830, "管控": 19831, "fts": 19832, "▁Second": 19833, "▁(\"": 19834, "▁remark": 19835, "代价": 19836, "革命的": 19837, "唯物主义": 19838, "公有制": 19839, "▁Arts": 19840, ");": 19841, "法庭": 19842, "发展的重要": 19843, "▁thorough": 19844, "lif": 19845, "ivated": 19846, "▁lymph": 19847, "Orig": 19848, "在该": 19849, "▁medications": 19850, "illy": 19851, "国际贸易": 19852, "omach": 19853, "▁Mel": 19854, "摆脱": 19855, "▁border": 19856, "▁focuses": 19857, "ba": 19858, "▁Bur": 19859, "建立的": 19860, "教育和": 19861, "阳性": 19862, "▁Ke": 19863, "▁politics": 19864, "▁understood": 19865, "这意味着": 19866, "▁hundreds": 19867, "law": 19868, "▁deeply": 19869, "page": 19870, "时效": 19871, "回应": 19872, "约为": 19873, "选用": 19874, "opping": 19875, "▁versions": 19876, "esh": 19877, "ulpt": 19878, "▁Russia": 19879, "▁achieved": 19880, "作为一个": 19881, "▁Str": 19882, "▁Haw": 19883, "UR": 19884, "▁sod": 19885, "▁dance": 19886, "去年": 19887, "ucky": 19888, "等技术": 19889, "izer": 19890, "▁Board": 19891, "▁Revolution": 19892, "riz": 19893, "oli": 19894, "男性": 19895, "致使": 19896, "About": 19897, "da": 19898, "物价": 19899, "宏观经济": 19900, "ansas": 19901, "▁maintenance": 19902, "诸如": 19903, "迭代": 19904, "▁bot": 19905, "▁manner": 19906, "▁reprodu": 19907, "体会": 19908, "不得不": 19909, "的非": 19910, "usual": 19911, "▁confidence": 19912, "EA": 19913, "▁Aust": 19914, "▁adopt": 19915, "\";": 19916, "quality": 19917, ")(": 19918, "test": 19919, "的质量": 19920, "环境下": 19921, "温室": 19922, "巴士": 19923, "实物": 19924, "comfort": 19925, "iratory": 19926, "平稳": 19927, "隧道": 19928, "救济": 19929, "本专业": 19930, "▁domestic": 19931, "iosity": 19932, "cin": 19933, "▁Saint": 19934, "▁Wood": 19935, "having": 19936, "电动": 19937, "所有制": 19938, "和企业": 19939, "优秀传统文化": 19940, "▁/": 19941, "东部": 19942, "积分": 19943, "世紀": 19944, "▁pull": 19945, "etts": 19946, "▁pump": 19947, "ecess": 19948, "▁paralle": 19949, "储能": 19950, "影响力": 19951, "▁supports": 19952, "世界大": 19953, "小型": 19954, "aired": 19955, "决定的": 19956, "▁legs": 19957, "先行": 19958, "Bi": 19959, "▁maps": 19960, "abulary": 19961, "人心": 19962, "ND": 19963, "▁launched": 19964, "stract": 19965, "▁Ocean": 19966, "▁camera": 19967, "Men": 19968, "存在于": 19969, "ón": 19970, "私有": 19971, "▁nit": 19972, "退休": 19973, "cribed": 19974, "▁database": 19975, "▁steel": 19976, "两次": 19977, "等地": 19978, "日在": 19979, "▁Not": 19980, "实际情况": 19981, "▁transmission": 19982, "▁stre": 19983, "▁Love": 19984, "碰撞": 19985, "焦点": 19986, "创立": 19987, "海上": 19988, "随之": 19989, "红外": 19990, "奋斗目标": 19991, "inson": 19992, "Europ": 19993, "▁moon": 19994, "▁standing": 19995, "▁governments": 19996, "制订": 19997, "集中在": 19998, "桥梁": 19999, "Back": 20000, "▁Mass": 20001, "▁adequ": 20002, "▁fighting": 20003, "▁rely": 20004, "混凝": 20005, "分析了": 20006, "▁abnorm": 20007, "▁tissues": 20008, "因果": 20009, "▁download": 20010, "idential": 20011, "rue": 20012, "使之": 20013, "兼顾": 20014, "要点": 20015, "\u0007\u0005": 20016, "uce": 20017, "为一": 20018, "著名的": 20019, "eorgia": 20020, "▁shift": 20021, "”,▁": 20022, "Green": 20023, "份额": 20024, "西安": 20025, "▁stock": 20026, "▁discipl": 20027, "Out": 20028, "多项": 20029, "▁email": 20030, "▁partner": 20031, "opl": 20032, "名字": 20033, "事物的": 20034, "arant": 20035, "看法": 20036, "▁surfaces": 20037, "国家级": 20038, "▁ages": 20039, "行为人": 20040, "管理者": 20041, "▁county": 20042, "▁Fort": 20043, "▁butter": 20044, "opic": 20045, "▁funding": 20046, "沿海": 20047, "需要在": 20048, "▁encount": 20049, "氨基": 20050, "abling": 20051, "为代表的": 20052, "天地": 20053, "▁careful": 20054, "▁substance": 20055, "▁restrict": 20056, "我国经济": 20057, "是如何": 20058, "Researchers": 20059, "滥用": 20060, "▁align": 20061, "客户端": 20062, "▁variable": 20063, "理工": 20064, "rie": 20065, "uality": 20066, "印刷": 20067, "▁improvement": 20068, "中美": 20069, "▁courses": 20070, "▁afford": 20071, "恐怖": 20072, "显得": 20073, "专业化": 20074, "克斯": 20075, "API": 20076, "後來": 20077, "ovascular": 20078, "”.▁": 20079, "▁doctors": 20080, "隐患": 20081, "和新": 20082, "▁les": 20083, "▁heavily": 20084, "▁repeated": 20085, "养殖": 20086, "玉米": 20087, "城市的": 20088, "▁perce": 20089, "▁▁\"": 20090, "▁Eastern": 20091, "会在": 20092, "紧急": 20093, "bury": 20094, "▁optimal": 20095, "enger": 20096, "乡镇": 20097, "滞后": 20098, "conf": 20099, "通路": 20100, "world": 20101, "▁electron": 20102, "bu": 20103, "▁discussions": 20104, "▁engaged": 20105, "▁otherwise": 20106, "健康发展": 20107, "历史性": 20108, "▁Cross": 20109, "Later": 20110, "”▁(": 20111, "without": 20112, "为学生": 20113, "贯彻落实": 20114, "人与自然": 20115, "▁Sil": 20116, "eek": 20117, "Thomas": 20118, "必需": 20119, "▁analyze": 20120, "▁fill": 20121, "herent": 20122, "性问题": 20123, "侧重": 20124, "将军": 20125, "下游": 20126, "审议": 20127, "职权": 20128, "旗帜": 20129, "电商": 20130, "理论上": 20131, "▁seeing": 20132, "▁tropical": 20133, "ervative": 20134, "标志着": 20135, "▁discussed": 20136, "纷纷": 20137, "▁prominent": 20138, "意义上的": 20139, "疾病的": 20140, "活動": 20141, "▁budget": 20142, "▁formal": 20143, "人权": 20144, "总理": 20145, "的新型": 20146, "▁asking": 20147, "投票": 20148, "▁breathing": 20149, "孪生": 20150, "合金": 20151, "的创新": 20152, "▁pool": 20153, "stra": 20154, "abeth": 20155, "aska": 20156, "城市化": 20157, "韓國": 20158, "▁adopted": 20159, "教科": 20160, "▁trip": 20161, "].▁": 20162, "▁insulin": 20163, "ogs": 20164, "中药": 20165, "突然": 20166, "▁Conf": 20167, "▁managing": 20168, "易于": 20169, "pring": 20170, "有必要": 20171, "推动了": 20172, "固定资产": 20173, "海关": 20174, "中毒": 20175, "mary": 20176, "▁comfortable": 20177, "ami": 20178, "crete": 20179, "▁▁||▁": 20180, "人人": 20181, "▁Design": 20182, "▁greatest": 20183, "▁preval": 20184, "▁Michael": 20185, "农民工": 20186, "义务教育": 20187, "衍生": 20188, "▁newly": 20189, "追溯": 20190, "▁Labor": 20191, "▁Summer": 20192, "host": 20193, "▁damaged": 20194, "eting": 20195, "▁extent": 20196, "启示": 20197, "也没有": 20198, "▁ahead": 20199, "▁categories": 20200, "uten": 20201, "的保护": 20202, "长征": 20203, "的活动": 20204, "使用权": 20205, "资本的": 20206, "▁invent": 20207, "可以看出": 20208, "▁circuit": 20209, "mond": 20210, "▁entry": 20211, "之大": 20212, "是将": 20213, "科学研究": 20214, "▁crow": 20215, "small": 20216, "▁Ob": 20217, "管理人员": 20218, "留在": 20219, "▁Navy": 20220, "▁sales": 20221, "▁susp": 20222, "▁ultimately": 20223, "很大程度上": 20224, "给出": 20225, "▁Louis": 20226, "uber": 20227, "首都": 20228, "Robert": 20229, "▁decreased": 20230, "服装": 20231, "的因素": 20232, "大学的": 20233, "idity": 20234, "▁stated": 20235, "▁decor": 20236, "唐朝": 20237, "的一个重要": 20238, "借贷": 20239, "养老保险": 20240, "平成": 20241, "學家": 20242, "并行": 20243, "可以将": 20244, "影響": 20245, "▁ment": 20246, "▁agreement": 20247, "▁san": 20248, "sl": 20249, "处的": 20250, "是国家": 20251, "aria": 20252, "胰岛": 20253, "受损": 20254, "监督管理": 20255, "▁Tom": 20256, "▁accepted": 20257, "▁Learning": 20258, "注明": 20259, "加重": 20260, "从根本上": 20261, "商业秘密": 20262, "机动": 20263, "▁Pers": 20264, "▁historic": 20265, "▁argument": 20266, "▁nerve": 20267, "Met": 20268, "杆菌": 20269, "count": 20270, "党组织": 20271, "发掘": 20272, "▁guess": 20273, "二维": 20274, "保守": 20275, "▁accounts": 20276, "▁Station": 20277, "%)": 20278, "school": 20279, "▁manufacturing": 20280, "劳动关系": 20281, "▁medication": 20282, "Care": 20283, "ressing": 20284, "▁=": 20285, "▁informed": 20286, "ova": 20287, "prom": 20288, "aka": 20289, "的产品": 20290, "企业家": 20291, "他认为": 20292, "another": 20293, "▁magnetic": 20294, ","": 20295, "GS": 20296, "achus": 20297, "▁(▁": 20298, "▁theme": 20299, "istical": 20300, "eutic": 20301, "感情": 20302, "▁subsequent": 20303, "加热": 20304, "制品": 20305, "abel": 20306, "Net": 20307, "%;": 20308, "共赢": 20309, "作风": 20310, "种种": 20311, "领导干部": 20312, "水平和": 20313, "▁addressing": 20314, "oken": 20315, "ailed": 20316, "无产阶级": 20317, "▁Fre": 20318, "民俗": 20319, "生产要素": 20320, "文物保护": 20321, "政策和": 20322, "ensuring": 20323, "溶解": 20324, "fulness": 20325, "Select": 20326, "▁listening": 20327, "普查": 20328, "为其": 20329, "▁symbols": 20330, "_{": 20331, "▁corpor": 20332, "oices": 20333, "▁beneficial": 20334, "的可能性": 20335, "▁error": 20336, "▁Battle": 20337, "▁marriage": 20338, "光子": 20339, "造型": 20340, "横向": 20341, "Based": 20342, "▁cort": 20343, "直线": 20344, "▁sport": 20345, "▁aw": 20346, "▁fourth": 20347, "▁adap": 20348, "被告人": 20349, "脱贫攻坚": 20350, "▁gal": 20351, "▁Sciences": 20352, "▁fract": 20353, "▁emerged": 20354, "中部": 20355, "Access": 20356, "General": 20357, "▁rhyth": 20358, "▁rig": 20359, "▁imaging": 20360, "taking": 20361, "▁holds": 20362, "▁meal": 20363, "enh": 20364, "监视": 20365, "▁passion": 20366, "中最": 20367, "▁Information": 20368, "先进的": 20369, "cover": 20370, "▁constructed": 20371, "▁lake": 20372, "科目": 20373, "复杂性": 20374, "的数量": 20375, "催化剂": 20376, "▁。": 20377, "便是": 20378, "定制": 20379, "疗效": 20380, "与应用": 20381, "▁Mo": 20382, "排序": 20383, "Dis": 20384, "▁forget": 20385, "Together": 20386, "扶持": 20387, "实事": 20388, "这时": 20389, "▁correl": 20390, "▁officials": 20391, "▁dynamics": 20392, "▁engagement": 20393, "exper": 20394, "Yet": 20395, "▁myth": 20396, "cor": 20397, "泡沫": 20398, "业绩": 20399, "不断地": 20400, "社会主义核心价值观": 20401, "测序": 20402, "▁rank": 20403, "▁{": 20404, "很好的": 20405, "▁broken": 20406, "范式": 20407, "▁Bible": 20408, "以其": 20409, "宝贵": 20410, "▁neighb": 20411, "被认为是": 20412, "rooms": 20413, "power": 20414, "天然气": 20415, "▁latter": 20416, "聯盟": 20417, "▁episode": 20418, "riminal": 20419, ";▁": 20420, "界限": 20421, "Note": 20422, "▁accum": 20423, "▁photograph": 20424, "Good": 20425, "London": 20426, "olk": 20427, "▁antibiot": 20428, "中原": 20429, "▁towns": 20430, "密钥": 20431, "▁universe": 20432, "▁depends": 20433, "战场": 20434, "rowing": 20435, "▁toler": 20436, "erry": 20437, "▁railway": 20438, "▁trends": 20439, "处在": 20440, "奥林匹克运动会": 20441, "estab": 20442, "法國": 20443, "▁marine": 20444, "Russ": 20445, "晚期": 20446, "Conclusion": 20447, "imm": 20448, "考查": 20449, "pread": 20450, "▁sessions": 20451, "▁Google": 20452, "救助": 20453, "取得的": 20454, "post": 20455, "▁Tw": 20456, "免费": 20457, "whose": 20458, "▁territory": 20459, "leaving": 20460, "mann": 20461, "▁enables": 20462, "▁opposite": 20463, "▁literary": 20464, "造成了": 20465, ";(": 20466, "▁electro": 20467, "控制的": 20468, "▁Home": 20469, "▁honor": 20470, "▁Rights": 20471, "就必须": 20472, "▁ske": 20473, "叫做": 20474, "▁resilience": 20475, "itle": 20476, "就像": 20477, "▁nom": 20478, "可视化": 20479, "越南": 20480, "▁dental": 20481, "gener": 20482, "acent": 20483, "afe": 20484, "谋划": 20485, "最大限度": 20486, "社会经济": 20487, "分级": 20488, "▁knows": 20489, "▁supplies": 20490, "成为了": 20491, "otion": 20492, "inv": 20493, "明确提出": 20494, "的培养": 20495, "实施的": 20496, "▁failed": 20497, "▁Long": 20498, "▁inn": 20499, "rays": 20500, "idespread": 20501, "Sever": 20502, "西亚": 20503, "前列": 20504, "鉴于": 20505, "议会": 20506, "▁diagnosed": 20507, "▁producing": 20508, "ects": 20509, "▁harvest": 20510, "两类": 20511, "▁influenced": 20512, "▁museum": 20513, "▁Us": 20514, "出現": 20515, "start": 20516, "指的是": 20517, "▁framework": 20518, "sts": 20519, "▁aer": 20520, "▁People": 20521, "ographical": 20522, "▁centers": 20523, "access": 20524, "形的": 20525, "宣告": 20526, "从而使": 20527, "公务": 20528, "关税": 20529, "▁obvious": 20530, "▁differently": 20531, "Try": 20532, "娱乐": 20533, "▁chief": 20534, "▁vulnerable": 20535, "▁insects": 20536, "不利于": 20537, "窗口": 20538, "ulty": 20539, "▁Mars": 20540, "票据": 20541, "为主的": 20542, "复议": 20543, "市场主体": 20544, "奥运": 20545, "等待": 20546, "specific": 20547, "▁debut": 20548, "▁observations": 20549, "▁fabric": 20550, "oval": 20551, "▁Asian": 20552, "▁delivery": 20553, "scale": 20554, "▁boy": 20555, "太平洋": 20556, "主管部门": 20557, "硬化": 20558, "working": 20559, "▁End": 20560, "▁attached": 20561, "最优": 20562, "icide": 20563, "------------": 20564, "▁independence": 20565, "▁htt": 20566, "▁accel": 20567, "▁conscious": 20568, "▁cycl": 20569, "ais": 20570, "▁Bi": 20571, "竞赛": 20572, "完备": 20573, "帮助学生": 20574, "▁habitats": 20575, "混凝土": 20576, "▁societal": 20577, "▁crisis": 20578, "机体": 20579, "ipher": 20580, "导致了": 20581, "▁decline": 20582, "▁pron": 20583, "▁aims": 20584, "▁detection": 20585, "GE": 20586, "侵略": 20587, "的系统": 20588, "Please": 20589, "很容易": 20590, "mg": 20591, "ourse": 20592, "▁Study": 20593, "lights": 20594, "▁witness": 20595, "▁broader": 20596, "▁evaluation": 20597, "andon": 20598, "▁NASA": 20599, "wing": 20600, "▁substances": 20601, "磷酸": 20602, "▁Islands": 20603, "▁implications": 20604, "根源": 20605, "的任务": 20606, "唐代": 20607, "方式和": 20608, "跨国": 20609, "▁-▁▁-▁": 20610, "▁raw": 20611, "▁reduces": 20612, "▁column": 20613, "▁minimum": 20614, "Canada": 20615, "▁dust": 20616, "理解和": 20617, "生产和": 20618, "▁Ann": 20619, "的利益": 20620, "▁expensive": 20621, "拉斯": 20622, "Sl": 20623, "极大地": 20624, "▁Ca": 20625, "olism": 20626, "▁Swed": 20627, "achusetts": 20628, "这也": 20629, "反而": 20630, "实践活动": 20631, "Class": 20632, "worth": 20633, "▁intric": 20634, "潮流": 20635, "▁Administ": 20636, "▁boost": 20637, "ivating": 20638, "▁vote": 20639, "物质的": 20640, "itter": 20641, "南部": 20642, "还会": 20643, "▁Christmas": 20644, "▁happening": 20645, "▁Best": 20646, "inois": 20647, "书写": 20648, "Non": 20649, "任命": 20650, "即将": 20651, "物资": 20652, "原材料": 20653, "▁·▁": 20654, "▁zone": 20655, "喜欢": 20656, "Ep": 20657, "unning": 20658, "▁compare": 20659, "ION": 20660, "词汇": 20661, "▁implementation": 20662, "阐释": 20663, "优越": 20664, "聯賽": 20665, "develop": 20666, "向量": 20667, "▁offering": 20668, "▁directed": 20669, "▁lip": 20670, "出租": 20671, "博弈": 20672, "Michael": 20673, "装饰": 20674, "▁Dev": 20675, "▁stability": 20676, "▁Moon": 20677, "前所未": 20678, "Cam": 20679, ".[": 20680, "▁phosph": 20681, "emia": 20682, "▁Gal": 20683, "een": 20684, "▁How": 20685, "多边": 20686, "崛起": 20687, "▁resulted": 20688, "ieties": 20689, "組織": 20690, "ambig": 20691, "实现对": 20692, "仍有": 20693, "端口": 20694, "esity": 20695, "▁apparent": 20696, "澳門": 20697, "Tax": 20698, "数量的": 20699, "螺旋": 20700, "虚假": 20701, "实践的": 20702, "支柱": 20703, "适宜": 20704, "手续": 20705, "的速度": 20706, "可以从": 20707, "SR": 20708, "racy": 20709, "▁Oper": 20710, "▁flav": 20711, "providing": 20712, "不当": 20713, "自贸": 20714, "从业": 20715, "新中国成立": 20716, "▁Italy": 20717, "▁yield": 20718, "日至": 20719, "来讲": 20720, "可通过": 20721, "▁Bre": 20722, "开发的": 20723, "不符合": 20724, "經濟": 20725, "风险管理": 20726, "合作社": 20727, "技术在": 20728, "数据集": 20729, "▁seconds": 20730, "cho": 20731, "▁resolution": 20732, "说法": 20733, "▁remote": 20734, "字母": 20735, "气管": 20736, "进攻": 20737, "OP": 20738, "▁sunlight": 20739, "完整性": 20740, "氨酸": 20741, "▁presentation": 20742, "▁Av": 20743, "▁agency": 20744, "▁moves": 20745, "术后": 20746, "网膜": 20747, "适度": 20748, "澳大利亚": 20749, "▁retain": 20750, "平行": 20751, "滤波": 20752, "年均": 20753, "▁Native": 20754, "▁Muslim": 20755, "▁mild": 20756, "ockey": 20757, "威廉": 20758, "angle": 20759, "司法解释": 20760, "核心技术": 20761, "永久": 20762, "Health": 20763, "的状态": 20764, "▁Federal": 20765, "不论": 20766, "控制系统": 20767, "的人口": 20768, "▁Good": 20769, "▁strict": 20770, "充足": 20771, "▁unusual": 20772, "歌手": 20773, "bro": 20774, "模仿": 20775, "要件": 20776, "▁Language": 20777, "不管": 20778, "辩护": 20779, "直接影响": 20780, "也不能": 20781, "pH": 20782, "▁commission": 20783, "▁convey": 20784, "ospit": 20785, "的产生": 20786, "▁poem": 20787, "▁threats": 20788, "物理学": 20789, "▁flag": 20790, "▁acquired": 20791, "的方向": 20792, "海军": 20793, "可以用": 20794, "irth": 20795, "▁installed": 20796, "董事会": 20797, "回报": 20798, "课程标准": 20799, "Unlike": 20800, "▁discrimination": 20801, "应在": 20802, "▁Network": 20803, "一点": 20804, "移民": 20805, "▁normally": 20806, "ieval": 20807, "Li": 20808, "▁reson": 20809, "厂商": 20810, "嫌疑": 20811, "關係": 20812, "▁fiber": 20813, "plete": 20814, "▁permanent": 20815, "▁fav": 20816, "▁indicates": 20817, "irty": 20818, "ediate": 20819, "储蓄": 20820, "不高": 20821, "too": 20822, "有害": 20823, "恒星": 20824, "贝尔": 20825, "政治人物": 20826, "▁BC": 20827, "▁Sir": 20828, "▁chrom": 20829, "▁occasion": 20830, "城区": 20831, "也可能": 20832, "green": 20833, "▁By": 20834, "▁receptor": 20835, "▁peak": 20836, "直径": 20837, "和产业": 20838, "见的": 20839, "▁Cur": 20840, "▁Rome": 20841, "last": 20842, "assion": 20843, "届三": 20844, "积极参与": 20845, "倡议": 20846, "ribution": 20847, "Post": 20848, "▁organisms": 20849, "语句": 20850, "perial": 20851, "名稱": 20852, "处理的": 20853, "fast": 20854, "aining": 20855, "Public": 20856, "又要": 20857, "▁enthus": 20858, "海南": 20859, "足够的": 20860, "是基于": 20861, "还包括": 20862, "秘书": 20863, "▁feels": 20864, "Ob": 20865, "为导向": 20866, "分成": 20867, "▁characterized": 20868, "tage": 20869, "izabeth": 20870, "etics": 20871, "羅斯": 20872, "▁Ill": 20873, "▁stable": 20874, "睡眠": 20875, "▁creativity": 20876, "▁Angeles": 20877, "lementary": 20878, "规制": 20879, "入手": 20880, "经济效益": 20881, "中央银行": 20882, "人之": 20883, "▁encounter": 20884, "▁municipality": 20885, "▁planned": 20886, "TE": 20887, "oT": 20888, "Gra": 20889, "▁exists": 20890, "起着": 20891, "的大小": 20892, "Create": 20893, "运维": 20894, "尤为": 20895, "为主体": 20896, "定性": 20897, "▁owned": 20898, "▁investigate": 20899, "贵族": 20900, "))": 20901, "列宁": 20902, "cies": 20903, "respectively": 20904, "布置": 20905, "制度改革": 20906, "发展新": 20907, "▁trained": 20908, "FA": 20909, "▁description": 20910, "▁encourages": 20911, "某某": 20912, "稳步": 20913, "自由贸易": 20914, "生产总": 20915, "中外": 20916, "dist": 20917, "▁funds": 20918, "便捷": 20919, "病情": 20920, "anning": 20921, "▁corner": 20922, "为核心的党中央": 20923, "野生": 20924, "▁nucle": 20925, "▁mg": 20926, "▁immediate": 20927, "bles": 20928, "教学方法": 20929, "是要": 20930, "和高": 20931, "社会学": 20932, "▁medal": 20933, "▁Of": 20934, "▁stores": 20935, "▁performing": 20936, "early": 20937, "▁Jews": 20938, "Long": 20939, "▁colour": 20940, "▁leaving": 20941, "▁branch": 20942, "Pol": 20943, "携带": 20944, "不易": 20945, "仓库": 20946, "LP": 20947, "有效性": 20948, "▁chair": 20949, "园林": 20950, "▁shall": 20951, "▁curren": 20952, "▁artificial": 20953, "arks": 20954, "这两种": 20955, "达到了": 20956, "这个问题": 20957, "atever": 20958, "次数": 20959, "▁Columbia": 20960, "▁nan": 20961, "体系中": 20962, "▁explains": 20963, "▁examination": 20964, "▁matrix": 20965, "▁exploration": 20966, "▁puzz": 20967, "▁channel": 20968, "asma": 20969, "明确规定": 20970, "交通运输": 20971, "▁detected": 20972, "是一项": 20973, "▁tracks": 20974, "▁abund": 20975, "▁foster": 20976, "▁holding": 20977, "▁entered": 20978, "▁Econom": 20979, "決賽": 20980, "▁compounds": 20981, "课程的": 20982, "▁friendly": 20983, "August": 20984, "攻关": 20985, "副主任": 20986, "收入分配": 20987, "修饰": 20988, "▁coffee": 20989, "uster": 20990, "▁industries": 20991, "▁suffer": 20992, "bot": 20993, "富有": 20994, "unc": 20995, "▁papers": 20996, "象征": 20997, "位的": 20998, "深度学习": 20999, "Est": 21000, "Several": 21001, "年中国": 21002, "平方米": 21003, "告知": 21004, "arity": 21005, "▁moments": 21006, "Play": 21007, "利用率": 21008, "与技术": 21009, "高效的": 21010, "▁cryst": 21011, "德國": 21012, "▁housing": 21013, "▁pup": 21014, "▁accuracy": 21015, "▁clothing": 21016, "笔者认为": 21017, "原来": 21018, "增进": 21019, "蕴含": 21020, "的成本": 21021, "科技成果": 21022, "多年来": 21023, "\"、": 21024, "▁Review": 21025, "年开始": 21026, "一定要": 21027, "▁Sol": 21028, "年级": 21029, "onym": 21030, "▁profile": 21031, "▁tub": 21032, "▁–": 21033, "▁vac": 21034, "▁arrang": 21035, "拉克": 21036, "▁controvers": 21037, "▁Children": 21038, "数字孪生": 21039, "一国": 21040, "异议": 21041, "杭州": 21042, "py": 21043, "iy": 21044, "减少了": 21045, "▁sheet": 21046, "resulting": 21047, "▁entertain": 21048, "icken": 21049, "绘制": 21050, "大使": 21051, "的对象": 21052, "▁manager": 21053, "年份": 21054, "▁recording": 21055, "peror": 21056, "流入": 21057, "远远": 21058, "生产率": 21059, "▁regulation": 21060, "社交": 21061, "OD": 21062, "oured": 21063, "▁introduce": 21064, "▁worse": 21065, "▁repair": 21066, "和对": 21067, "▁reserv": 21068, "Great": 21069, "▁Spain": 21070, "我们将": 21071, "▁affecting": 21072, "▁reveal": 21073, "▁colleagues": 21074, "Mart": 21075, "▁authorities": 21076, "Common": 21077, "Look": 21078, ";▁(": 21079, "whether": 21080, "协调发展": 21081, "预后": 21082, "公共卫生": 21083, "质疑": 21084, "▁outcome": 21085, "Louis": 21086, "▁criteria": 21087, "屬於": 21088, "是我们": 21089, "触发": 21090, "发现的": 21091, "▁Studies": 21092, "考生": 21093, "▁shaping": 21094, "师范大学": 21095, "▁smoke": 21096, "▁widespread": 21097, "可能的": 21098, "▁adj": 21099, "去除": 21100, "▁split": 21101, "Check": 21102, "▁acids": 21103, "▁politician": 21104, "▁agents": 21105, "▁aqu": 21106, "可控": 21107, "当下": 21108, "▁powers": 21109, "▁roof": 21110, "Throughout": 21111, "▁incredible": 21112, "ackson": 21113, "時期": 21114, "对应的": 21115, "插入": 21116, "必将": 21117, "一百": 21118, "▁Community": 21119, "arters": 21120, "▁Coast": 21121, "机床": 21122, "▁ceremon": 21123, "▁receiving": 21124, "陶瓷": 21125, "的指导": 21126, "▁healing": 21127, "urric": 21128, "Bo": 21129, "Mary": 21130, "常务": 21131, "▁destroyed": 21132, "▁cream": 21133, "姓名": 21134, "Bre": 21135, "▁Atlantic": 21136, "过的": 21137, "PV": 21138, "GC": 21139, "▁moral": 21140, "acles": 21141, "兼容": 21142, "局限性": 21143, "不在": 21144, "▁Ma": 21145, "▁Pet": 21146, "▁assigned": 21147, "▁routine": 21148, "▁simultaneously": 21149, "失效": 21150, "清除": 21151, "white": 21152, "HR": 21153, "▁hole": 21154, "▁bread": 21155, "dule": 21156, "▁ethical": 21157, "两年": 21158, "▁sight": 21159, "蔬菜": 21160, "教训": 21161, "的表达": 21162, "▁session": 21163, "▁authent": 21164, "▁silver": 21165, "▁laboratory": 21166, "振动": 21167, "处理器": 21168, "brid": 21169, "zy": 21170, "學院": 21171, "▁meters": 21172, "why": 21173, "BP": 21174, "客体": 21175, "▁accessible": 21176, "San": 21177, "▁poetry": 21178, "▁Wales": 21179, "Phil": 21180, "▁depos": 21181, "hma": 21182, "幼儿园": 21183, "找出": 21184, "了一种": 21185, "▁Women": 21186, "Science": 21187, "可以根据": 21188, "大力发展": 21189, "▁uns": 21190, "显微": 21191, "▁sought": 21192, "▁frame": 21193, "与中国": 21194, "环境和": 21195, "宽松": 21196, "ampl": 21197, "▁Creek": 21198, "HC": 21199, "ydr": 21200, "明代": 21201, "的前提下": 21202, "▁depart": 21203, "Activity": 21204, "▁Micro": 21205, "厚的": 21206, "会产生": 21207, "▁shoot": 21208, "annels": 21209, "▁examined": 21210, "伊斯": 21211, "句话": 21212, "tes": 21213, "河流": 21214, "▁barriers": 21215, "维生素": 21216, "壁垒": 21217, "不断完善": 21218, "碳中和": 21219, "Lesson": 21220, "电荷": 21221, "▁Dou": 21222, "▁Bra": 21223, "▁reform": 21224, "办事": 21225, "全省": 21226, "在社会": 21227, "新一轮": 21228, "nee": 21229, "时间和": 21230, "的比例": 21231, "可用于": 21232, "问题是": 21233, "▁Works": 21234, "▁orient": 21235, "根據": 21236, "▁Rh": 21237, "上级": 21238, "的出现": 21239, "新兴产业": 21240, "教学模式": 21241, "安全生产": 21242, "Dist": 21243, "▁expansion": 21244, "▁agencies": 21245, "未知": 21246, "▁conc": 21247, "employ": 21248, "Ang": 21249, "以下简称": 21250, "inus": 21251, "▁explo": 21252, "▁measurements": 21253, "的重点": 21254, "!\"▁": 21255, "▁merg": 21256, "ritis": 21257, "whel": 21258, "▁parameters": 21259, "▁Brown": 21260, "都需要": 21261, "控股": 21262, "▁operate": 21263, "▁visitors": 21264, "King": 21265, "author": 21266, "▁photo": 21267, "▁statistics": 21268, "ocket": 21269, "特別": 21270, "▁behaviour": 21271, "amber": 21272, "economic": 21273, "以习近平同志": 21274, "▁innovation": 21275, "otypes": 21276, "▁Represent": 21277, "inical": 21278, "▁purchase": 21279, "參與": 21280, "abs": 21281, "▁marg": 21282, "▁rivers": 21283, "▁females": 21284, "为中国": 21285, "修养": 21286, "国债": 21287, "徒刑": 21288, "▁advantages": 21289, "▁lights": 21290, "格斯": 21291, "不明": 21292, "Start": 21293, "严格的": 21294, "点和": 21295, "imensional": 21296, "▁glucose": 21297, "它在": 21298, "Mal": 21299, "▁bio": 21300, "裁定": 21301, "大纲": 21302, "的其他": 21303, "」(": 21304, "在一定程度上": 21305, "目标是": 21306, "▁stomach": 21307, "价值链": 21308, "损害赔偿": 21309, "全面深化改革": 21310, "▁>▁": 21311, "厘米": 21312, "会员": 21313, "▁drawn": 21314, "过滤": 21315, "atern": 21316, "Max": 21317, "多层次": 21318, "文化和": 21319, "▁fertil": 21320, "▁agree": 21321, "去世": 21322, "拓宽": 21323, "切除": 21324, "ersey": 21325, "▁branches": 21326, "ko": 21327, "▁obst": 21328, "合适的": 21329, "var": 21330, "isting": 21331, "▁crew": 21332, "▁adoles": 21333, "控制器": 21334, "ker": 21335, "▁tea": 21336, "▁holid": 21337, "千米": 21338, "▁Bob": 21339, "ntario": 21340, "▁province": 21341, "用电": 21342, "精神的": 21343, "多年的": 21344, "atial": 21345, "▁click": 21346, "▁warming": 21347, "igious": 21348, "节奏": 21349, "ema": 21350, "资源和": 21351, "▁epid": 21352, "▁Open": 21353, "届三中全会": 21354, "中的作用": 21355, "iability": 21356, "June": 21357, "icted": 21358, "首先要": 21359, "合一": 21360, "下一": 21361, "的全": 21362, "▁hem": 21363, "之間": 21364, "▁Disc": 21365, "▁pun": 21366, "半年": 21367, "先天": 21368, "抑制剂": 21369, "对该": 21370, "▁limits": 21371, "Micro": 21372, "▁complications": 21373, "ventually": 21374, "▁van": 21375, "▁gently": 21376, "奠定": 21377, "养成": 21378, "食品安全": 21379, "Port": 21380, "▁herself": 21381, "▁specialized": 21382, "讲授": 21383, "越来越多": 21384, "求是": 21385, "都市": 21386, "想法": 21387, "ito": 21388, "▁trouble": 21389, "China": 21390, "ediat": 21391, "并购": 21392, "文明的": 21393, "▁complicated": 21394, "學生": 21395, "看作": 21396, "Encou": 21397, "区间": 21398, "石墨": 21399, "毒性": 21400, "全面的": 21401, "里斯": 21402, "的优势": 21403, "CPU": 21404, "▁Richard": 21405, "abled": 21406, "承受": 21407, "▁dealing": 21408, "ommod": 21409, "MT": 21410, "▁mood": 21411, "▁ov": 21412, "与时": 21413, "管道": 21414, "▁contained": 21415, "idst": 21416, "▁Series": 21417, "ogenic": 21418, "▁||▁▁||▁": 21419, "▁zero": 21420, "MI": 21421, "丝绸之路": 21422, "▁equivalent": 21423, "组的": 21424, "和使用": 21425, "▁Ep": 21426, "函数的": 21427, "给学生": 21428, "意识和": 21429, "position": 21430, "▁captured": 21431, "▁flour": 21432, "▁lifestyle": 21433, "acher": 21434, "发挥着": 21435, "▁boys": 21436, "▁gro": 21437, "▁genus": 21438, "――": 21439, "▁percentage": 21440, "▁stimul": 21441, "Ev": 21442, "▁analys": 21443, "▁pure": 21444, "十年代": 21445, "ugh": 21446, "▁rocks": 21447, "敢于": 21448, "和控制": 21449, "▁formula": 21450, "holders": 21451, "比率": 21452, "是人类": 21453, "伴随着": 21454, "特征的": 21455, "所有者": 21456, "▁Scotland": 21457, "▁Acc": 21458, "▁cos": 21459, "▁insight": 21460, "当年": 21461, "日常生活": 21462, "农业农村": 21463, "合力": 21464, "Count": 21465, "▁advert": 21466, "ruit": 21467, "▁item": 21468, "文中": 21469, "钢铁": 21470, "不断发展": 21471, "GBT": 21472, "印象": 21473, "出身": 21474, "▁adventure": 21475, "▁Den": 21476, "绿色发展": 21477, "约定的": 21478, "在大": 21479, "的三": 21480, "▁See": 21481, "五大": 21482, "研究了": 21483, "Never": 21484, "▁activation": 21485, "成功的": 21486, "Social": 21487, "▁relief": 21488, "induced": 21489, "▁composed": 21490, "▁script": 21491, ":「": 21492, "纺织": 21493, "▁magazine": 21494, "▁bigger": 21495, "而上": 21496, "港口": 21497, "▁hus": 21498, "進士": 21499, "较好的": 21500, "其一": 21501, "▁negot": 21502, "itamin": 21503, "撰写": 21504, "▁)": 21505, "▁Hor": 21506, "施行": 21507, "浙江省": 21508, "制定了": 21509, "将来": 21510, "慈善": 21511, "rin": 21512, "技术与": 21513, "血症": 21514, "衰竭": 21515, "体系和": 21516, "对我国": 21517, "最好": 21518, "▁impossible": 21519, "▁ensuring": 21520, "病因": 21521, "▁drain": 21522, "▁mortality": 21523, "▁awarded": 21524, "▁league": 21525, "▁Step": 21526, "年初": 21527, "icit": 21528, "orado": 21529, "▁battery": 21530, "▁theore": 21531, "上世纪": 21532, "▁caught": 21533, "▁biggest": 21534, "▁smoking": 21535, "athered": 21536, "▁episodes": 21537, "必须在": 21538, "出现在": 21539, "▁fixed": 21540, "otton": 21541, "ador": 21542, "透过": 21543, "信号的": 21544, "ocolate": 21545, "Di": 21546, "ati": 21547, "▁category": 21548, "▁prev": 21549, "资产负债": 21550, "决定性": 21551, "▁rom": 21552, "▁influences": 21553, "Arch": 21554, "▁rice": 21555, "▁dish": 21556, "清代": 21557, "行政法规": 21558, "iti": 21559, "▁continuous": 21560, "的专业": 21561, "▁Team": 21562, "XX": 21563, "eoples": 21564, "aver": 21565, "▁crime": 21566, "▁Force": 21567, "▁fossil": 21568, "▁inhabit": 21569, "ja": 21570, "▁tack": 21571, "▁circle": 21572, "lessly": 21573, "农田": 21574, "represent": 21575, "定理": 21576, "入口": 21577, "oute": 21578, "natural": 21579, "▁nest": 21580, "▁Common": 21581, "贵州": 21582, "End": 21583, "Jo": 21584, "ustain": 21585, "▁trauma": 21586, "委員會": 21587, "\b\u0007": 21588, "举证": 21589, "越高": 21590, "破解": 21591, "澳门": 21592, "▁Airport": 21593, "▁External": 21594, "▁Nature": 21595, "ocracy": 21596, "▁produces": 21597, "两个方面": 21598, "甘肃": 21599, "umps": 21600, "children": 21601, "arg": 21602, "▁calcium": 21603, "▁spending": 21604, "door": 21605, "oln": 21606, "联储": 21607, "▁wisdom": 21608, "▁facility": 21609, "你的": 21610, "废水": 21611, "面前": 21612, "供电": 21613, "层级": 21614, "ycle": 21615, "的整体": 21616, "领导人": 21617, "灵魂": 21618, "mi": 21619, "▁Way": 21620, "▁reader": 21621, "ambiguation": 21622, "uted": 21623, "▁Eth": 21624, "onto": 21625, "▁Dutch": 21626, "的一些": 21627, "▁markets": 21628, "▁dishes": 21629, "▁expanded": 21630, "irc": 21631, "追踪": 21632, "税率": 21633, "柔性": 21634, "贬值": 21635, "人民检察院": 21636, "浏览": 21637, "otherapy": 21638, "只有在": 21639, "▁Hospital": 21640, "史料": 21641, "清华": 21642, "▁comparison": 21643, "▁mouse": 21644, "对社会": 21645, "▁efficiently": 21646, "的机会": 21647, "采用了": 21648, "▁tele": 21649, "▁Professor": 21650, "的一系列": 21651, "ude": 21652, "▁navigate": 21653, "特别是在": 21654, "stic": 21655, "Women": 21656, "体外": 21657, "各民族": 21658, "长期以来": 21659, "策划": 21660, "山水": 21661, "宣言": 21662, "oven": 21663, "原创": 21664, "▁subt": 21665, "▁cholesterol": 21666, "▁lect": 21667, "▁confirmed": 21668, "▁psychological": 21669, "党的建设": 21670, "▁Football": 21671, "▁Max": 21672, "°▁": 21673, "\")▁": 21674, "▁candidate": 21675, "pty": 21676, "Val": 21677, "▁stroke": 21678, "▁volcan": 21679, "▁certainly": 21680, "▁Disease": 21681, "SE": 21682, "▁mixture": 21683, "好处": 21684, "和政治": 21685, "ela": 21686, "mem": 21687, "▁regist": 21688, "熟练": 21689, "电机": 21690, "不断提升": 21691, "动手": 21692, "全新的": 21693, "▁sensitivity": 21694, "日的": 21695, "ocking": 21696, "法案": 21697, "▁、": 21698, "影响了": 21699, "灵活性": 21700, "同期": 21701, "全世界": 21702, "▁push": 21703, "▁videos": 21704, "▁Stat": 21705, "議員": 21706, "所致": 21707, "导师": 21708, "身心": 21709, "提升了": 21710, "Mil": 21711, "▁So": 21712, "yal": 21713, "▁reject": 21714, "想要": 21715, "words": 21716, "sis": 21717, "gian": 21718, "微信": 21719, "的传统": 21720, "均为": 21721, "▁Bet": 21722, "rolled": 21723, "求解": 21724, "▁meth": 21725, "消极": 21726, "积极的": 21727, "”、": 21728, "▁request": 21729, "empl": 21730, "tre": 21731, "pot": 21732, "時代": 21733, "BL": 21734, "俄国": 21735, "英格": 21736, "進入": 21737, "国企": 21738, "教师要": 21739, "发放": 21740, "创新发展": 21741, "▁examining": 21742, "▁surprise": 21743, "立方": 21744, "books": 21745, "极大的": 21746, "绝大多数": 21747, "新冠肺炎": 21748, "休闲": 21749, "make": 21750, "中華民國": 21751, "▁organs": 21752, "▁pra": 21753, "Maybe": 21754, "低温": 21755, "系统和": 21756, "发扬": 21757, "的实施": 21758, "▁constitu": 21759, "plement": 21760, "干涉": 21761, "▁islands": 21762, "▁bear": 21763, "family": 21764, "Music": 21765, "Mac": 21766, "▁angle": 21767, "▁Services": 21768, "adel": 21769, "▁basket": 21770, "▁ethnic": 21771, "agram": 21772, "▁allowing": 21773, "最終": 21774, "冬季": 21775, "▁sculpt": 21776, "确定了": 21777, "较好": 21778, "cyclop": 21779, "▁conversations": 21780, "政治局": 21781, "▁Dav": 21782, "枢纽": 21783, "▁dynamic": 21784, "單曲": 21785, "alling": 21786, "▁bat": 21787, "ometry": 21788, "International": 21789, "构成了": 21790, "lik": 21791, "准确性": 21792, "拓扑": 21793, "agen": 21794, "更快": 21795, "ega": 21796, "查看": 21797, "NT": 21798, "▁Oh": 21799, "战国": 21800, "========": 21801, "分数": 21802, "ongs": 21803, "▁reliable": 21804, "▁decade": 21805, "内蒙古": 21806, "▁satellite": 21807, "县级": 21808, "转基因": 21809, "或者其他": 21810, "保险公司": 21811, "Scientists": 21812, "▁returns": 21813, "▁facilitate": 21814, "▁Hot": 21815, "不知": 21816, "airy": 21817, "意外": 21818, "遭遇": 21819, "aylor": 21820, "▁Queen": 21821, "EV": 21822, "诉求": 21823, "以下几": 21824, "社会治理": 21825, "增殖": 21826, "▁preparation": 21827, "Prov": 21828, "▁contributed": 21829, "anic": 21830, "废弃": 21831, "救援": 21832, "高血压": 21833, "在这里": 21834, "机场": 21835, "itory": 21836, "▁Att": 21837, "▁fing": 21838, "hemistry": 21839, "alleng": 21840, "应用场景": 21841, "近似": 21842, "▁contributions": 21843, "neys": 21844, "▁participation": 21845, "▁knowing": 21846, "pes": 21847, "aya": 21848, "清偿": 21849, "和市场": 21850, ",▁▁": 21851, "phib": 21852, "演员": 21853, "的控制": 21854, "▁bron": 21855, "yes": 21856, ")\"": 21857, "分区": 21858, "列车": 21859, "党派": 21860, ":"": 21861, "为企业": 21862, "rier": 21863, "起了": 21864, "来进行": 21865, "▁fro": 21866, "▁sentences": 21867, "▁principle": 21868, "▁turb": 21869, "bell": 21870, "▁officer": 21871, "上面": 21872, "▁conflicts": 21873, "▁frequent": 21874, "纲领": 21875, "结构性改革": 21876, "必须坚持": 21877, "人力资本": 21878, "思想和": 21879, "发展中": 21880, "operation": 21881, "网格": 21882, "▁persons": 21883, "UK": 21884, "名单": 21885, "科普": 21886, "内核": 21887, "flamm": 21888, "确立了": 21889, "期徒刑": 21890, "▁dent": 21891, "占领": 21892, "▁Sund": 21893, "▁Martin": 21894, "美洲": 21895, "telling": 21896, "候选": 21897, "间隔": 21898, "和国家": 21899, "▁difficulties": 21900, "take": 21901, "还应": 21902, "敌人": 21903, "全球经济": 21904, "三个方面": 21905, "▁preserve": 21906, "alm": 21907, "▁desc": 21908, "▁disrupt": 21909, "合伙": 21910, "性别": 21911, "aret": 21912, "▁districts": 21913, "具有一定的": 21914, "战线": 21915, "不仅要": 21916, "检察机关": 21917, "ioxide": 21918, "▁troops": 21919, "一致性": 21920, "编译": 21921, "prot": 21922, "▁wheel": 21923, "▁objective": 21924, "aterials": 21925, "▁concrete": 21926, "关键技术": 21927, "各部门": 21928, "▁intense": 21929, "▁absol": 21930, "▁considering": 21931, "▁moisture": 21932, "▁quiet": 21933, "▁tap": 21934, "交易所": 21935, "数据处理": 21936, "Rad": 21937, "▁learners": 21938, "以外的": 21939, "▁strain": 21940, "▁▁▁▁▁▁▁": 21941, "break": 21942, "▁Family": 21943, "▁stuff": 21944, "三次": 21945, "机制的": 21946, "黑色": 21947, "▁experimental": 21948, "osion": 21949, "IDS": 21950, "全面从严": 21951, "夯实": 21952, "拉动": 21953, "问题和": 21954, "应该是": 21955, "yan": 21956, "▁Card": 21957, "▁strengthen": 21958, "划分为": 21959, "ila": 21960, "▁insurance": 21961, "▁concerned": 21962, "▁issued": 21963, "learning": 21964, "完善的": 21965, "核心素养": 21966, "为人民": 21967, "并不能": 21968, "冠状": 21969, "▁Secret": 21970, "为实现": 21971, "地说": 21972, "Three": 21973, "common": 21974, "▁combat": 21975, "French": 21976, "▁adm": 21977, "disambiguation": 21978, "ping": 21979, "印发": 21980, "合同法": 21981, "研究团队": 21982, "▁shut": 21983, "▁Championship": 21984, "ctu": 21985, "宿主": 21986, "▁Viet": 21987, "▁classic": 21988, "▁pursu": 21989, "数据和": 21990, "其主要": 21991, "▁fashion": 21992, "▁greatly": 21993, "财务管理": 21994, "授课": 21995, "恶化": 21996, "辽宁": 21997, "▁correctly": 21998, "广泛应用": 21999, "▁encouraged": 22000, "▁consumers": 22001, "所属": 22002, "失衡": 22003, "环境污染": 22004, "季节": 22005, "涌现": 22006, "二元": 22007, "▁Province": 22008, "Year": 22009, "RP": 22010, "actions": 22011, "监护": 22012, "FF": 22013, "▁collective": 22014, "▁kilomet": 22015, "▁males": 22016, "▁operated": 22017, "inch": 22018, "▁Ol": 22019, "在国家": 22020, "但不": 22021, "▁neurons": 22022, "osqu": 22023, "ragon": 22024, "▁greenhouse": 22025, "▁robot": 22026, "下行": 22027, "共生": 22028, "当局": 22029, "▁Rom": 22030, "\")": 22031, "Mass": 22032, "▁investigation": 22033, "burgh": 22034, "习近平总书记指出": 22035, "思潮": 22036, "会议上": 22037, "究竟": 22038, "以习近平同志为核心的党中央": 22039, "技术的发展": 22040, "despite": 22041, "SQL": 22042, "▁Guide": 22043, "陈述": 22044, "Br": 22045, "▁coach": 22046, "step": 22047, "opher": 22048, "这种方法": 22049, "胚胎": 22050, "量和": 22051, "think": 22052, "etime": 22053, "ypically": 22054, "▁solving": 22055, "集團": 22056, "在实践中": 22057, "密切相关": 22058, "采样": 22059, "▁Liter": 22060, "小麦": 22061, "▁therapeutic": 22062, "▁Writ": 22063, "vin": 22064, "▁researc": 22065, "▁owner": 22066, "读书": 22067, "关键词": 22068, "ymb": 22069, "▁unable": 22070, "bb": 22071, "▁emerging": 22072, "language": 22073, "大局": 22074, "会对": 22075, "的地": 22076, "▁ring": 22077, "也被": 22078, "yet": 22079, "▁nervous": 22080, "▁seasons": 22081, "▁faces": 22082, "提问": 22083, "▁manif": 22084, "▁ampl": 22085, "▁threatened": 22086, "alter": 22087, "case": 22088, "的表现": 22089, "申请人": 22090, "美联储": 22091, "当代中国": 22092, "▁integrated": 22093, "戏剧": 22094, "Leg": 22095, "▁accommod": 22096, "▁Los": 22097, "▁transp": 22098, "▁effectiveness": 22099, "用户的": 22100, "▁coastal": 22101, "▁identifying": 22102, "April": 22103, "数控": 22104, "Sarah": 22105, "而成": 22106, "▁finger": 22107, "▁hel": 22108, "ushed": 22109, "emet": 22110, "▁lens": 22111, "都不": 22112, "归属": 22113, "的有": 22114, "Develop": 22115, "▁exciting": 22116, "重大的": 22117, "视网膜": 22118, "学分": 22119, "语法": 22120, "bean": 22121, "在本": 22122, "Peter": 22123, "藝術": 22124, "▁traits": 22125, "inction": 22126, "erus": 22127, "自学": 22128, "這些": 22129, "单位的": 22130, "▁prove": 22131, "Windows": 22132, "▁giant": 22133, "Inf": 22134, "违背": 22135, "▁obesity": 22136, "是非常": 22137, "acebook": 22138, "▁abandon": 22139, "▁Er": 22140, "%,▁": 22141, "歐洲": 22142, "▁plane": 22143, "原型": 22144, "________": 22145, "父亲": 22146, "等内容": 22147, "▁discussing": 22148, "做的": 22149, "▁providers": 22150, "▁Age": 22151, "的计算": 22152, "▁complexity": 22153, "也需要": 22154, "一号": 22155, "发展趋势": 22156, "▁nic": 22157, "▁Young": 22158, "背后": 22159, "第一百": 22160, "考验": 22161, "保护和": 22162, "应力": 22163, "▁flower": 22164, "▁Blue": 22165, "汉字": 22166, "▁gram": 22167, "▁safely": 22168, "▁targets": 22169, "电站": 22170, "hard": 22171, "▁gap": 22172, "▁gent": 22173, "▁incorporate": 22174, "▁incorporating": 22175, "师资": 22176, "共产党的": 22177, "畅通": 22178, "意识到": 22179, "流失": 22180, "纵向": 22181, "真实性": 22182, "经济学家": 22183, "字符": 22184, "上了": 22185, "▁Korea": 22186, "▁empathy": 22187, "發生": 22188, "支援": 22189, "领导的": 22190, "政府部门": 22191, "出土": 22192, "大地": 22193, "的处理": 22194, "首席": 22195, "ussion": 22196, "▁adds": 22197, "▁Francisco": 22198, "在教学": 22199, "战后": 22200, "▁possibility": 22201, "▁turning": 22202, "薄膜": 22203, "▁Gr": 22204, "▁intest": 22205, "▁translation": 22206, "▁initiatives": 22207, "▁protective": 22208, "付款": 22209, "▁Gree": 22210, "▁membrane": 22211, "something": 22212, "贯通": 22213, "就没有": 22214, "three": 22215, "的重": 22216, "公告": 22217, "▁variations": 22218, "▁owners": 22219, "iva": 22220, "骨干": 22221, "这些问题": 22222, "再到": 22223, "原有的": 22224, "凭证": 22225, "▁keeps": 22226, "between": 22227, "elihood": 22228, "▁Hy": 22229, "卓越": 22230, "▁sister": 22231, "▁intellectual": 22232, "生活方式": 22233, "当事人的": 22234, "财经": 22235, "之日起": 22236, "NASA": 22237, "TT": 22238, "埃及": 22239, "得多": 22240, "线索": 22241, "▁escape": 22242, "mus": 22243, "为本": 22244, "不移": 22245, "运河": 22246, "▁exhibit": 22247, "▁passing": 22248, "减小": 22249, "▁stake": 22250, "▁Story": 22251, "大臣": 22252, "当时的": 22253, "thur": 22254, "ailing": 22255, "appro": 22256, "加快推进": 22257, "应有": 22258, "短缺": 22259, "灵敏": 22260, "▁evolved": 22261, "itage": 22262, "forcement": 22263, "har": 22264, "▁interventions": 22265, "among": 22266, "ishment": 22267, "具有重要意义": 22268, "pson": 22269, "erior": 22270, "▁hop": 22271, "直流": 22272, "高质量发展的": 22273, "▁minimize": 22274, "▁neck": 22275, "封装": 22276, "Java": 22277, "▁IV": 22278, "▁approved": 22279, "主義": 22280, "ibraries": 22281, "▁newspaper": 22282, "等一系列": 22283, "rous": 22284, "UTC": 22285, "▁thread": 22286, "▁earthqu": 22287, "itual": 22288, "DE": 22289, "▁overwhel": 22290, "海水": 22291, "did": 22292, "分之一": 22293, "▁mathematical": 22294, "不予": 22295, "中国式现代化": 22296, "萎缩": 22297, "领土": 22298, "规范化": 22299, "日军": 22300, "Plus": 22301, "干燥": 22302, "ga": 22303, "MC": 22304, "▁hydrogen": 22305, "▁tens": 22306, "▁artistic": 22307, "▁Windows": 22308, "sign": 22309, "▁guard": 22310, "法则": 22311, "的一切": 22312, "▁IP": 22313, "▁commitment": 22314, "Having": 22315, "▁Cat": 22316, "十三五": 22317, "人事": 22318, "前瞻": 22319, "传授": 22320, "削弱": 22321, "融合发展": 22322, "塞尔": 22323, "那里": 22324, "类似于": 22325, "Cor": 22326, "发生变化": 22327, "▁dose": 22328, "▁spots": 22329, "isode": 22330, "incoln": 22331, "orses": 22332, "▁shad": 22333, "hum": 22334, "以来的": 22335, "开展了": 22336, "▁tel": 22337, "fessional": 22338, "▁grid": 22339, "▁frog": 22340, "▁tube": 22341, "未有": 22342, "▁Film": 22343, "▁filter": 22344, "党建": 22345, "省委": 22346, "乾隆": 22347, "构筑": 22348, "ocument": 22349, "▁Under": 22350, "列为": 22351, "▁contamin": 22352, "ruption": 22353, "ontal": 22354, "scientists": 22355, "until": 22356, "▁tip": 22357, "▁websites": 22358, "▁memories": 22359, "▁scores": 22360, "Main": 22361, "新征程": 22362, "配备": 22363, "▁outer": 22364, "道理": 22365, "他们在": 22366, "▁meaningful": 22367, "cribe": 22368, "▁opinion": 22369, "论的": 22370, "lt": 22371, "▁waiting": 22372, "▁earn": 22373, "起步": 22374, "▁calculate": 22375, "主角": 22376, "斯基": 22377, "atching": 22378, "▁Indigenous": 22379, "SL": 22380, "▁pharm": 22381, "▁watching": 22382, "▁emotion": 22383, "yo": 22384, "学历": 22385, "议题": 22386, "国际合作": 22387, "知识点": 22388, "▁difficulty": 22389, "一部": 22390, "可以是": 22391, "演示": 22392, "weet": 22393, "Being": 22394, "iodiversity": 22395, "千年": 22396, "缓存": 22397, "▁expressions": 22398, "服从": 22399, "靶向": 22400, "混乱": 22401, "习近平总书记在": 22402, "数据分析": 22403, "umni": 22404, "inners": 22405, "▁ru": 22406, "Miss": 22407, "into": 22408, "▁measurement": 22409, "Fin": 22410, "stery": 22411, "运转": 22412, "▁racial": 22413, "灾难": 22414, "文档": 22415, "    ": 22416, "▁Bul": 22417, "▁gradually": 22418, "本质上": 22419, "ortion": 22420, "elly": 22421, "▁philosophy": 22422, "published": 22423, "▁tumors": 22424, "DO": 22425, "▁attended": 22426, "PN": 22427, "三农": 22428, "评分": 22429, "深层次": 22430, "诊疗": 22431, "全面建成小康社会": 22432, "▁acute": 22433, "使用了": 22434, "Place": 22435, "▁buried": 22436, "▁excessive": 22437, "▁Agency": 22438, "psy": 22439, "长时间": 22440, "▁Joseph": 22441, "▁Little": 22442, "无人机": 22443, "▁sched": 22444, "▁toys": 22445, "▁Railway": 22446, "iger": 22447, "巴西": 22448, "▁Gall": 22449, "和中国": 22450, "than": 22451, "越来越多的": 22452, "东亚": 22453, "▁Mur": 22454, "备份": 22455, "统计学": 22456, "中科院": 22457, "▁digest": 22458, "法律责任": 22459, "违规": 22460, "社会组织": 22461, "的力量": 22462, "均有": 22463, "国王": 22464, "helial": 22465, "iner": 22466, "广西": 22467, "▁microsc": 22468, "▁dates": 22469, "▁archae": 22470, "▁workshe": 22471, "nor": 22472, "质量的": 22473, "▁Books": 22474, "可能导致": 22475, "▁windows": 22476, "lower": 22477, "Cap": 22478, "雕塑": 22479, "有限的": 22480, "▁mechanical": 22481, "足以": 22482, "Charles": 22483, "agers": 22484, "▁babies": 22485, "▁bonds": 22486, "▁colonial": 22487, "acco": 22488, "▁distributed": 22489, "红利": 22490, "内部的": 22491, "摄影": 22492, "▁comprom": 22493, "▁uncertain": 22494, "四种": 22495, "▁concentrations": 22496, "▁plenty": 22497, "友好": 22498, "▁Order": 22499, "gender": 22500, "▁Forest": 22501, "上游": 22502, "决心": 22503, "Mult": 22504, "▁launch": 22505, "▁beings": 22506, "年到": 22507, "pred": 22508, "Air": 22509, "▁mode": 22510, "情报": 22511, "基础研究": 22512, "▁Method": 22513, "▁finds": 22514, "▁intricate": 22515, "▁realize": 22516, "▁publication": 22517, "▁myster": 22518, "革新": 22519, "丢失": 22520, "传染病": 22521, "▁roads": 22522, "▁treating": 22523, "western": 22524, "▁Systems": 22525, "▁vocabulary": 22526, "▁cab": 22527, "惩罚": 22528, "衰退": 22529, "▁driver": 22530, "▁chest": 22531, "▁screening": 22532, "淘汰": 22533, "▁brows": 22534, "叠加": 22535, "▁cul": 22536, "▁losing": 22537, "▁remarkable": 22538, "的反": 22539, "▁Top": 22540, "oids": 22541, "ilson": 22542, "星期": 22543, "▁societies": 22544, "评定": 22545, "放电": 22546, "来自于": 22547, "随意": 22548, "OH": 22549, "▁editor": 22550, "此前": 22551, "暂时": 22552, "▁delay": 22553, "▁remind": 22554, "裁决": 22555, "蓬勃": 22556, "有哪些": 22557, "三十": 22558, "▁Assembly": 22559, "MB": 22560, "▁novels": 22561, "▁Tim": 22562, "牢牢": 22563, "cient": 22564, "Consequently": 22565, "▁substantial": 22566, "▁sharp": 22567, "Dan": 22568, "動畫": 22569, "或不": 22570, "宋代": 22571, "老龄": 22572, "将成为": 22573, "的情形": 22574, "eenth": 22575, "▁surve": 22576, "▁restaur": 22577, "LAN": 22578, "▁classical": 22579, "emetery": 22580, "共振": 22581, "rine": 22582, "组装": 22583, "ordinary": 22584, "▁debate": 22585, "ologic": 22586, "▁bath": 22587, "▁indicated": 22588, "olds": 22589, "omatic": 22590, "个人信息保护": 22591, "压迫": 22592, "的改革": 22593, "发表在": 22594, "中国古代": 22595, "berry": 22596, "▁dioxide": 22597, "▁observe": 22598, "▁Ast": 22599, "白色": 22600, "food": 22601, "言之": 22602, "投资的": 22603, "▁estimate": 22604, "▁handling": 22605, "▁identification": 22606, "写入": 22607, "ipe": 22608, "asses": 22609, "▁flows": 22610, "▁partn": 22611, "坚强": 22612, "勇于": 22613, "之道": 22614, "因其": 22615, "Att": 22616, "原因是": 22617, "标准和": 22618, "card": 22619, "断裂": 22620, "上皮": 22621, "imals": 22622, "▁channels": 22623, "节省": 22624, "▁pand": 22625, "War": 22626, "▁Boston": 22627, "▁parallel": 22628, "最大化": 22629, "轨迹": 22630, "讲述": 22631, "▁tables": 22632, "路線": 22633, "Due": 22634, "斯科": 22635, "▁strongly": 22636, "▁flavor": 22637, "迄今": 22638, "Design": 22639, "SN": 22640, "下去": 22641, "两岸": 22642, "其余": 22643, "的最高": 22644, "▁respiratory": 22645, "▁reaching": 22646, "July": 22647, "January": 22648, "潜在的": 22649, "總統": 22650, "注释": 22651, "▁presents": 22652, "▁equation": 22653, "▁ped": 22654, "分开": 22655, "进出口": 22656, "生态文明建设": 22657, "目标和": 22658, "有什么": 22659, "有其": 22660, "改良": 22661, "apse": 22662, "可达": 22663, "公園": 22664, "▁mob": 22665, "阿拉伯": 22666, "的物质": 22667, "▁joy": 22668, "God": 22669, "下载": 22670, "arios": 22671, "学科的": 22672, "是企业": 22673, "里程": 22674, "生物多样性": 22675, "艰苦": 22676, "飞跃": 22677, "生产总值": 22678, "并以": 22679, "的细胞": 22680, "engine": 22681, "\",▁\"": 22682, "ello": 22683, "▁tut": 22684, "伴随": 22685, "鐵道": 22686, "oa": 22687, "语义": 22688, "],": 22689, "Pop": 22690, "中华优秀传统文化": 22691, "市场上": 22692, "实事求是": 22693, "新模式": 22694, "▁kidney": 22695, "iture": 22696, "havior": 22697, "▁tension": 22698, "低成本": 22699, "存在的问题": 22700, "的经验": 22701, "百万": 22702, "emb": 22703, "▁falls": 22704, "heimer": 22705, "UT": 22706, "lav": 22707, "治理体系和": 22708, "伟大的": 22709, "边缘计算": 22710, "甲状": 22711, "缴纳": 22712, "怀疑": 22713, "▁relation": 22714, "目前的": 22715, "名為": 22716, "梯度": 22717, "ospitals": 22718, "▁tons": 22719, "ometric": 22720, "▁mic": 22721, "ME": 22722, "基本原理": 22723, "▁biology": 22724, "▁targeted": 22725, "▁officers": 22726, "在这些": 22727, "饱和": 22728, "经贸": 22729, "▁algorithms": 22730, "music": 22731, "hedule": 22732, "ivities": 22733, "▁transferred": 22734, "▁Festival": 22735, "olicy": 22736, "DI": 22737, "track": 22738, "神话": 22739, "传送": 22740, "▁COVID": 22741, "▁senior": 22742, "▁supplement": 22743, "neg": 22744, "星系": 22745, "金融风险": 22746, "扣除": 22747, "被害": 22748, "创新驱动": 22749, "规避": 22750, "例外": 22751, "的共同": 22752, "成立了": 22753, "yroid": 22754, "Food": 22755, "itting": 22756, "综上": 22757, "▁union": 22758, "▁scientist": 22759, "▁veter": 22760, "Cur": 22761, "operative": 22762, "unior": 22763, "设备和": 22764, "同盟": 22765, "空中": 22766, "▁twenty": 22767, "现代农业": 22768, "的伟大": 22769, "在世界": 22770, "atoes": 22771, ")-": 22772, "Sing": 22773, "▁Democratic": 22774, "置于": 22775, "邮件": 22776, "康熙": 22777, "繁殖": 22778, "icating": 22779, "▁sizes": 22780, "▁Administration": 22781, "以及其他": 22782, "顶层设计": 22783, "链条": 22784, "▁Down": 22785, "▁server": 22786, "iginal": 22787, "▁structural": 22788, "▁More": 22789, "School": 22790, "引力": 22791, "认定为": 22792, "▁fever": 22793, "amins": 22794, "▁hormone": 22795, "▁adequate": 22796, "▁IL": 22797, "色列": 22798, "发酵": 22799, "中医药": 22800, "public": 22801, "用作": 22802, "为人": 22803, "▁draft": 22804, "▁principal": 22805, "▁featuring": 22806, "▁Bab": 22807, "Best": 22808, "▁Ec": 22809, "有待": 22810, "坚定不移": 22811, "发作": 22812, "▁designated": 22813, "▁immigr": 22814, "▁domain": 22815, "▁blog": 22816, "反之": 22817, "固醇": 22818, "▁carb": 22819, "▁inspiration": 22820, "▁protecting": 22821, "▁visiting": 22822, "▁wouldn": 22823, "金山": 22824, "▁Ver": 22825, "改革开放以来": 22826, "日趋": 22827, "实效": 22828, "的理念": 22829, "AF": 22830, "▁argue": 22831, "SI": 22832, "▁Pres": 22833, "imensions": 22834, "Real": 22835, "Choose": 22836, "让人": 22837, "碎片": 22838, "股份有限公司": 22839, "▁Wall": 22840, ")▁▁": 22841, "▁algorithm": 22842, "September": 22843, "ouri": 22844, "医疗卫生": 22845, "人类命运共同体": 22846, "课时": 22847, "收费": 22848, "港澳": 22849, "群体的": 22850, "▁carrying": 22851, "▁gone": 22852, "▁practicing": 22853, "ERP": 22854, ".▁[": 22855, "▁council": 22856, "▁curious": 22857, "thereby": 22858, "定向": 22859, "和研究": 22860, "的自然": 22861, "重要性": 22862, "学研究": 22863, "可供": 22864, "mult": 22865, "engers": 22866, "变局": 22867, "并与": 22868, "北京大学": 22869, "权人": 22870, "▁exec": 22871, "others": 22872, "vard": 22873, "▁expertise": 22874, "▁feeding": 22875, "▁minerals": 22876, "▁recommendations": 22877, "邀请": 22878, "Cs": 22879, "名的": 22880, "▁suscept": 22881, "▁laid": 22882, "外界": 22883, "▁mand": 22884, "German": 22885, "海拔": 22886, "▁stere": 22887, "▁experiencing": 22888, "伴有": 22889, "的价格": 22890, "程序的": 22891, "这两": 22892, "▁intent": 22893, "▁prompt": 22894, "▁phenomenon": 22895, "动画": 22896, "pers": 22897, "觉得": 22898, "Mo": 22899, "▁Det": 22900, "▁objectives": 22901, "▁Radio": 22902, "writing": 22903, "外科": 22904, "▁excit": 22905, "▁claimed": 22906, "上层": 22907, "处理好": 22908, "冠军": 22909, "Exper": 22910, "▁tank": 22911, "▁preferences": 22912, "bow": 22913, "▁displ": 22914, "重塑": 22915, "介石": 22916, "▁Light": 22917, "如果没有": 22918, "itely": 22919, "▁impl": 22920, "▁Director": 22921, "她的": 22922, "面積": 22923, "管理体制": 22924, "发言": 22925, "欣赏": 22926, "前面": 22927, "▁poison": 22928, "▁vocals": 22929, "▁danger": 22930, "stant": 22931, "這個": 22932, "▁inequ": 22933, "▁lie": 22934, "高速公路": 22935, "学界": 22936, "cat": 22937, "手法": 22938, "▁suffered": 22939, ":《": 22940, "▁elder": 22941, "供给侧结构性改革": 22942, "脊髓": 22943, "▁Pub": 22944, "eller": 22945, "▁settlement": 22946, "oga": 22947, "成立的": 22948, "aints": 22949, "▁curiosity": 22950, "骨髓": 22951, "regular": 22952, "球隊": 22953, "▁cardiovascular": 22954, "▁Ret": 22955, "朝廷": 22956, "坏死": 22957, "颠覆": 22958, "▁Kh": 22959, "andy": 22960, "▁chose": 22961, "不如": 22962, "Bas": 22963, "▁ce": 22964, "Avoid": 22965, "otor": 22966, "▁consumer": 22967, "内需": 22968, "这与": 22969, "展望": 22970, "▁Psych": 22971, "通過": 22972, "发展规划": 22973, "▁passage": 22974, "月台": 22975, "端的": 22976, "RN": 22977, "心的": 22978, "azon": 22979, "GPS": 22980, "▁shaped": 22981, "▁temple": 22982, "定义为": 22983, "Po": 22984, "ennis": 22985, "读取": 22986, "同一个": 22987, "决赛": 22988, "▁profound": 22989, "金融监管": 22990, "干旱": 22991, "模具": 22992, "素质教育": 22993, "市场需求": 22994, "相关性": 22995, "图谱": 22996, "▁errors": 22997, "者在": 22998, "除外": 22999, "aki": 23000, "HP": 23001, "▁improvements": 23002, "人民为中心": 23003, "工程技术": 23004, "和历史": 23005, "中国社会": 23006, "非物质": 23007, "▁printed": 23008, "▁usual": 23009, "的最佳": 23010, "human": 23011, "▁Portug": 23012, "▁rect": 23013, "▁hypothesis": 23014, "▁capabilities": 23015, "▁mir": 23016, "腐蚀": 23017, "强烈的": 23018, "殖民地": 23019, "▁Head": 23020, "file": 23021, "克隆": 23022, "其所": 23023, "资讯": 23024, "歧视": 23025, "陆续": 23026, "哪里": 23027, "Richard": 23028, "▁holes": 23029, "▁mur": 23030, "▁physics": 23031, ";\"": 23032, "正面": 23033, "为目的": 23034, "全面建设社会主义现代化": 23035, "宏观调控": 23036, "课程思政": 23037, "思想政治教育": 23038, "搜集": 23039, "▁Historic": 23040, "日志": 23041, "▁mining": 23042, "▁applying": 23043, "▁breeding": 23044, "限定": 23045, "vestig": 23046, "size": 23047, ")》": 23048, "reens": 23049, "▁committed": 23050, "权利的": 23051, "更容易": 23052, "▁Child": 23053, "▁possibly": 23054, "▁bene": 23055, "数据进行": 23056, "Washington": 23057, "Mus": 23058, "akistan": 23059, "地位和": 23060, "在整个": 23061, "排斥": 23062, "▁heads": 23063, "India": 23064, "发力": 23065, "增高": 23066, "抓好": 23067, "天线": 23068, "肝脏": 23069, "成员国": 23070, "行政部门": 23071, "与企业": 23072, "Total": 23073, "check": 23074, "▁crick": 23075, "Nor": 23076, "ysics": 23077, "itled": 23078, "▁theories": 23079, "尼亞": 23080, "渐进": 23081, "全书": 23082, "ools": 23083, "向前": 23084, "比亚": 23085, "官僚": 23086, "延安": 23087, "育种": 23088, "过敏": 23089, "结果显示": 23090, "▁Python": 23091, "leased": 23092, "▁wish": 23093, "overnor": 23094, "可信": 23095, "显现": 23096, "▁fr": 23097, "several": 23098, "这是一个": 23099, "支架": 23100, "plex": 23101, "▁Free": 23102, "igue": 23103, "Del": 23104, "公司法": 23105, "与实践": 23106, "创新型": 23107, "俱进": 23108, "因此在": 23109, "▁isolated": 23110, "▁maybe": 23111, "omers": 23112, "Google": 23113, "ounce": 23114, "▁agent": 23115, "isted": 23116, "yer": 23117, "▁gly": 23118, "▁seg": 23119, "ientific": 23120, "cos": 23121, "▁sitting": 23122, "gress": 23123, "▁farming": 23124, "用药": 23125, "发挥作用": 23126, "减弱": 23127, "基础知识": 23128, "上一": 23129, "热带": 23130, "ritical": 23131, "▁instances": 23132, "▁minds": 23133, "為了": 23134, "新发展格局": 23135, "韧性": 23136, "班级": 23137, "胰岛素": 23138, "的增长": 23139, "心灵": 23140, "▁Special": 23141, "▁panel": 23142, "Often": 23143, "总的": 23144, "学问": 23145, "性格": 23146, "以色列": 23147, "▁linear": 23148, "Ext": 23149, "▁connecting": 23150, "▁desire": 23151, "▁representing": 23152, "▁tales": 23153, "本法": 23154, "法律制度": 23155, "氨基酸": 23156, "▁liv": 23157, "它可以": 23158, "mal": 23159, "tem": 23160, "Introduction": 23161, "import": 23162, "占用": 23163, "运行的": 23164, "氧化物": 23165, "底层": 23166, "配送": 23167, "平台的": 23168, "ewis": 23169, "▁Jersey": 23170, "▁Engineering": 23171, "▁Coll": 23172, "ardless": 23173, "选项": 23174, "▁beneath": 23175, "▁uniform": 23176, "自强": 23177, "国有资产": 23178, "不用": 23179, "流体": 23180, "▁gut": 23181, "plot": 23182, "的分": 23183, "▁Will": 23184, "▁fairly": 23185, "▁minute": 23186, "▁furn": 23187, "rep": 23188, "amination": 23189, "Germany": 23190, "本次": 23191, "▁Environmental": 23192, "Modern": 23193, "電視劇": 23194, "▁arise": 23195, "許多": 23196, "Notes": 23197, "▁CE": 23198, "基本原则": 23199, "从此": 23200, "操纵": 23201, "还在": 23202, "▁asp": 23203, "▁interactive": 23204, "▁constantly": 23205, "▁sustainability": 23206, "vanced": 23207, "率和": 23208, "节目": 23209, "Afric": 23210, "Rob": 23211, "izz": 23212, "▁census": 23213, "是与": 23214, "神经系统": 23215, "约翰": 23216, "▁Ven": 23217, "▁forth": 23218, "▁matches": 23219, "▁arrest": 23220, "▁norms": 23221, "▁listing": 23222, "片段": 23223, "▁alike": 23224, "▁wearing": 23225, ")=": 23226, "新发展理念": 23227, "不断增强": 23228, "订单": 23229, "基建": 23230, "▁alive": 23231, "agraph": 23232, "rait": 23233, "▁necessarily": 23234, "onents": 23235, "▁marks": 23236, "▁Edward": 23237, ",'▁": 23238, "▁husband": 23239, "包含了": 23240, "rip": 23241, "Tom": 23242, "▁nod": 23243, "自主学习": 23244, "紧紧": 23245, "发展到": 23246, "有针对": 23247, "与时俱进": 23248, "followed": 23249, "”;": 23250, "相连": 23251, "▁Wil": 23252, "▁reput": 23253, "▁Exper": 23254, "▁gast": 23255, "▁Over": 23256, "▁surge": 23257, "omal": 23258, "▁<▁": 23259, "▁container": 23260, "迎来": 23261, "人际": 23262, "摄像": 23263, "問題": 23264, "是其": 23265, "狭窄": 23266, "▁magical": 23267, "▁quarter": 23268, "upreme": 23269, "導演": 23270, "民主主义": 23271, "而被": 23272, "或许": 23273, "很高": 23274, "代表性": 23275, "tr": 23276, "劳动争议": 23277, "Sum": 23278, "▁Ap": 23279, "▁oxid": 23280, "Free": 23281, "▁sad": 23282, "▁acknowled": 23283, "▁heating": 23284, "内生": 23285, "食用": 23286, "urches": 23287, "瑞典": 23288, "entially": 23289, "▁nob": 23290, "▁wound": 23291, "题目": 23292, "▁Corpor": 23293, "结晶": 23294, "▁Mah": 23295, "公斤": 23296, "▁tract": 23297, "凭借": 23298, "阻塞": 23299, "four": 23300, "合法性": 23301, "▁config": 23302, "▁varying": 23303, "直播": 23304, "Organ": 23305, "一度": 23306, "friendly": 23307, "▁edges": 23308, "▁Mountain": 23309, "各族人民": 23310, "很强的": 23311, "▁hall": 23312, "并为": 23313, "得到的": 23314, "▁intra": 23315, "▁coron": 23316, "▁Castle": 23317, "▁spark": 23318, "Sign": 23319, "▁migration": 23320, "▁inherent": 23321, "拍卖": 23322, "math": 23323, "▁fu": 23324, "ersion": 23325, "▁literacy": 23326, "olves": 23327, "和安全": 23328, "自律": 23329, "问卷": 23330, "的艺术": 23331, "return": 23332, "much": 23333, "及相关": 23334, "区域的": 23335, "一组": 23336, "主要由": 23337, "▁corresponding": 23338, "urolog": 23339, "的作品": 23340, "第一章": 23341, "经济建设": 23342, "活化": 23343, "中心的": 23344, "▁intern": 23345, "▁inher": 23346, "▁false": 23347, "在中": 23348, "▁Rem": 23349, "核酸": 23350, "erman": 23351, "▁compris": 23352, "▁estimates": 23353, "auc": 23354, "heric": 23355, "GO": 23356, "▁Jul": 23357, "▁rid": 23358, "ouses": 23359, "miss": 23360, "WTO": 23361, "管理与": 23362, "净化": 23363, "竞争优势": 23364, "调制": 23365, "▁mathematics": 23366, "以确保": 23367, "Pe": 23368, "heart": 23369, "innes": 23370, "机构和": 23371, "沿线": 23372, "▁calculated": 23373, "▁dialogue": 23374, "▁Af": 23375, "人为本": 23376, "由此可见": 23377, "政治经济学": 23378, "内容和": 23379, "广东省": 23380, "理性的": 23381, "这对": 23382, "服务于": 23383, "梦想": 23384, "▁Girl": 23385, ".▁.▁": 23386, "▁*▁": 23387, "參見": 23388, "这将": 23389, "的程度": 23390, "▁absence": 23391, "▁strange": 23392, "助理": 23393, "ocytes": 23394, "▁Naz": 23395, "学前": 23396, "五四": 23397, "等相关": 23398, "学校的": 23399, "日前": 23400, "问题上": 23401, "aware": 23402, "▁implemented": 23403, "▁tact": 23404, "Figure": 23405, "▁measuring": 23406, "▁ille": 23407, "▁paintings": 23408, "化疗": 23409, "在进行": 23410, "Connect": 23411, "eness": 23412, "▁Dar": 23413, "地形": 23414, "▁athletes": 23415, "▁Sat": 23416, "▁pathways": 23417, "试题": 23418, "一线": 23419, "明清": 23420, "iki": 23421, "▁demands": 23422, "▁engines": 23423, "▁estate": 23424, "##▁": 23425, "第二章": 23426, "。」": 23427, "器和": 23428, "以太": 23429, "采访": 23430, "设有": 23431, "anna": 23432, "。▁▁": 23433, "▁mitig": 23434, "文物保护单位": 23435, "传统产业": 23436, "脆弱": 23437, "俄羅斯": 23438, "高性能": 23439, "參加": 23440, "基督教": 23441, "▁defense": 23442, "charge": 23443, "地进行": 23444, "Four": 23445, "athan": 23446, "▁Global": 23447, "▁shares": 23448, "USA": 23449, "▁intrig": 23450, "▁equally": 23451, "▁mountains": 23452, "ederation": 23453, "万物": 23454, "极限": 23455, "分析方法": 23456, "White": 23457, "中对": 23458, "VA": 23459, "▁magic": 23460, "纽约": 23461, "▁refuge": 23462, "adder": 23463, "注意力": 23464, "医师": 23465, "▁Report": 23466, "regon": 23467, "angered": 23468, "▁stead": 23469, "▁voltage": 23470, "其中包括": 23471, "▁burning": 23472, "▁celebrate": 23473, "▁solely": 23474, "▁Vis": 23475, "▁Four": 23476, "心理健康": 23477, "另有": 23478, "证明了": 23479, "opyright": 23480, "▁intensity": 23481, "▁resid": 23482, "▁lighting": 23483, "▁overcome": 23484, "ateral": 23485, "江南": 23486, "接着": 23487, "恩格斯": 23488, "▁tower": 23489, "亞洲": 23490, "营商": 23491, "竞争力的": 23492, "增加值": 23493, "最高的": 23494, "Fi": 23495, "roud": 23496, "▁Men": 23497, "消毒": 23498, "附属": 23499, "acob": 23500, "▁oldest": 23501, "▁victims": 23502, "教研": 23503, "连带": 23504, "我们必须": 23505, "▁customer": 23506, "Write": 23507, "Tw": 23508, "zer": 23509, "可知": 23510, "结果的": 23511, "©▁": 23512, "升值": 23513, "可以分为": 23514, "和政策": 23515, "缺血": 23516, "适应性": 23517, "国际社会": 23518, "Pen": 23519, "olt": 23520, "▁gathered": 23521, "focus": 23522, "收藏": 23523, "使用者": 23524, "空间的": 23525, "愿望": 23526, "Law": 23527, "▁guarant": 23528, "ranch": 23529, "▁Jack": 23530, "▁Other": 23531, "▁coverage": 23532, "▁finish": 23533, "新聞": 23534, "Coll": 23535, "瑞士": 23536, "几十": 23537, "薪酬": 23538, "预报": 23539, "要加强": 23540, "调试": 23541, "模板": 23542, "▁evening": 23543, "▁excited": 23544, "▁bag": 23545, "▁biom": 23546, "▁neutral": 23547, "▁peoples": 23548, "▁accurately": 23549, "▁ritual": 23550, "▁probability": 23551, "▁His": 23552, "France": 23553, "look": 23554, "del": 23555, "▁ecosystems": 23556, "。[": 23557, "的态度": 23558, "为指导": 23559, "电能": 23560, "过多": 23561, "欺诈": 23562, "完成的": 23563, "alian": 23564, "histor": 23565, "中国人民解放军": 23566, "▁Fred": 23567, "edu": 23568, "▁Cancer": 23569, "▁broadcast": 23570, "▁trick": 23571, "▁interpretation": 23572, "anied": 23573, "昭和": 23574, "三级": 23575, "▁robust": 23576, "德里": 23577, "▁Bridge": 23578, "▁modified": 23579, "权重": 23580, "更重要的是": 23581, "案件的": 23582, "是由于": 23583, "▁wooden": 23584, "▁Modern": 23585, "判定": 23586, "根基": 23587, "▁concerning": 23588, "位点": 23589, "条第": 23590, "马克思主义中国": 23591, "治理体系和治理能力": 23592, "业主": 23593, "公务员": 23594, "应以": 23595, "现阶段": 23596, "要从": 23597, "的治疗": 23598, "RO": 23599, "▁appeal": 23600, "联赛": 23601, "▁preventing": 23602, "▁scenes": 23603, "cultural": 23604, "也不是": 23605, "做出了": 23606, "▁Philipp": 23607, "Little": 23608, "haust": 23609, "▁calm": 23610, "▁acting": 23611, "▁declared": 23612, "▁nose": 23613, "▁()▁": 23614, "更具": 23615, "周恩": 23616, "展览": 23617, "公允": 23618, "分别是": 23619, "ctive": 23620, "课题组": 23621, "▁cleaning": 23622, "▁grows": 23623, "▁purchased": 23624, "▁rats": 23625, "▁involvement": 23626, "明白": 23627, "业务的": 23628, "fire": 23629, "Texas": 23630, "Smith": 23631, "ioxid": 23632, "酒店": 23633, "▁diameter": 23634, "可以使用": 23635, "uns": 23636, "倾斜": 23637, "装配": 23638, "并无": 23639, "潜能": 23640, "偿还": 23641, "实在": 23642, "武帝": 23643, "yself": 23644, "▁cellular": 23645, ":(": 23646, "皇家": 23647, "▁enhanced": 23648, "自动驾驶": 23649, "分別": 23650, "innesota": 23651, "▁epit": 23652, "▁proved": 23653, "rub": 23654, "▁integration": 23655, "党的二十": 23656, "供需": 23657, "开发利用": 23658, "范围的": 23659, "sey": 23660, "羽毛": 23661, "终于": 23662, "項目": 23663, "▁asthma": 23664, "▁fishing": 23665, "live": 23666, "▁attempts": 23667, "▁Mid": 23668, "结构调整": 23669, "皮质": 23670, "▁Media": 23671, "▁RNA": 23672, "▁conclusion": 23673, "does": 23674, "second": 23675, "▁defend": 23676, "▁supposed": 23677, "date": 23678, "▁spectrum": 23679, "▁sensors": 23680, "税法": 23681, "蒋介石": 23682, "月至": 23683, "▁toy": 23684, "rock": 23685, "Off": 23686, "oons": 23687, "▁dependent": 23688, "卡尔": 23689, "▁viruses": 23690, "▁precise": 23691, "和不": 23692, "自然界": 23693, "Supp": 23694, "process": 23695, "▁visited": 23696, "到期": 23697, "的综合": 23698, "过失": 23699, "有很多": 23700, "的统一": 23701, "▁tight": 23702, "▁analyzed": 23703, "▁phrase": 23704, "▁preserving": 23705, "▁recover": 23706, "feed": 23707, "荷兰": 23708, "Que": 23709, "▁Fire": 23710, "▁engineers": 23711, "lecting": 23712, "轻松": 23713, "据此": 23714, "也许": 23715, "被视为": 23716, "science": 23717, "他说": 23718, "用工": 23719, "临床试验": 23720, "每个人": 23721, "何种": 23722, "公共利益": 23723, "林业": 23724, "有无": 23725, "还可": 23726, "bul": 23727, "除此": 23728, "iants": 23729, "Ig": 23730, "▁Bu": 23731, "信道": 23732, "要想": 23733, "December": 23734, "國民": 23735, "▁studio": 23736, "Ill": 23737, "同比增长": 23738, "人民民主": 23739, "附录": 23740, "大胆": 23741, "并存": 23742, "essment": 23743, "impro": 23744, "open": 23745, "east": 23746, "issance": 23747, "please": 23748, "▁varieties": 23749, "外来": 23750, "▁personality": 23751, "▁delivered": 23752, "▁wellbeing": 23753, "千瓦": 23754, "犯罪嫌疑": 23755, "投影": 23756, "汉族": 23757, "▁overs": 23758, "法典": 23759, "年和": 23760, "adelph": 23761, "▁weapons": 23762, "ogenesis": 23763, "→▁": 23764, "线下": 23765, "是社会": 23766, "天主教": 23767, "itzer": 23768, "▁Buddh": 23769, "▁Ur": 23770, "示例": 23771, "sum": 23772, "▁renewable": 23773, "▁technological": 23774, "▁extend": 23775, "Journal": 23776, "龙江": 23777, "結果": 23778, "ui": 23779, "▁Ohio": 23780, "riculture": 23781, "▁putting": 23782, "▁criminal": 23783, "》.": 23784, "和处理": 23785, "经营管理": 23786, "增量": 23787, "仔细": 23788, "和生产": 23789, "每日": 23790, "▁Lee": 23791, "▁employment": 23792, "▁flying": 23793, "▁harder": 23794, "▁Natural": 23795, "制造商": 23796, "顾问": 23797, "器械": 23798, "聚合物": 23799, "BD": 23800, "▁Prize": 23801, "▁Kong": 23802, "▁Lim": 23803, "。$": 23804, "座谈": 23805, "我国在": 23806, "▁banks": 23807, "Members": 23808, "▁mini": 23809, "pur": 23810, "formance": 23811, "选择性": 23812, "焊接": 23813, "和组织": 23814, "强制性": 23815, "输送": 23816, "▁conven": 23817, "▁satisf": 23818, "▁consideration": 23819, "以下几个方面": 23820, "分层": 23821, "余额": 23822, "淀粉": 23823, "基础性": 23824, "except": 23825, "Lar": 23826, "leton": 23827, "▁cash": 23828, "itively": 23829, "▁displayed": 23830, "▁Main": 23831, "▁Corn": 23832, "▁secre": 23833, "shaped": 23834, "以实现": 23835, "ividuals": 23836, "understanding": 23837, "▁calories": 23838, "▁lungs": 23839, "青春": 23840, ".|": 23841, "产品质量": 23842, "国家战略": 23843, "設有": 23844, "▁pregnant": 23845, "▁proceed": 23846, "▁qualities": 23847, "▁scenarios": 23848, "blem": 23849, "Ask": 23850, "td": 23851, "小說": 23852, "世界观": 23853, "可以帮助": 23854, "Ser": 23855, "缓冲": 23856, "cn": 23857, "October": 23858, "storm": 23859, "ippi": 23860, "▁Holy": 23861, "感受到": 23862, "因地": 23863, "纳税人": 23864, "屏障": 23865, "保险人": 23866, "还将": 23867, "parts": 23868, "ovement": 23869, "MRI": 23870, "▁rising": 23871, "Nature": 23872, "Personal": 23873, "▁legislation": 23874, "低的": 23875, "和国际": 23876, "個人": 23877, "resses": 23878, "▁tempor": 23879, "犯罪的": 23880, "儒学": 23881, "一个国家": 23882, "▁streets": 23883, "etherlands": 23884, "数据传输": 23885, "▁variation": 23886, "▁cancers": 23887, "▁wine": 23888, "一份": 23889, "出任": 23890, "隐藏": 23891, "Sal": 23892, "iments": 23893, "▁disaster": 23894, "文化建设": 23895, "密集型": 23896, "adelphia": 23897, "▁Rich": 23898, "vance": 23899, "▁aged": 23900, "▁contributes": 23901, "其二": 23902, "准确地": 23903, "互联互通": 23904, "理论基础": 23905, "不可避免": 23906, "沿着": 23907, "汇聚": 23908, "确定性": 23909, "身上": 23910, "heat": 23911, "▁Resources": 23912, "行政区划": 23913, "雖然": 23914, "仍然是": 23915, "为基础的": 23916, "▁beat": 23917, "尼斯": 23918, "▁attach": 23919, "▁shop": 23920, "▁cav": 23921, "▁Luc": 23922, "不容": 23923, "所说的": 23924, "工伤": 23925, "Pa": 23926, "▁Heart": 23927, "jud": 23928, "ieve": 23929, "(,),": 23930, "公元前": 23931, "foot": 23932, "iop": 23933, "amous": 23934, "▁pathway": 23935, "分析与": 23936, "即在": 23937, "胎儿": 23938, "我们对": 23939, "research": 23940, "▁dominant": 23941, "▁extraordinary": 23942, "人員": 23943, "ika": 23944, "▁Justice": 23945, "金融业": 23946, "为重点": 23947, "增强了": 23948, "边际": 23949, "进入了": 23950, "▁reviews": 23951, ":“": 23952, "▁Expl": 23953, "的最终": 23954, "这是因为": 23955, "▁stones": 23956, "男女": 23957, "unn": 23958, "igma": 23959, "本体": 23960, "广场": 23961, "伯特": 23962, "Does": 23963, "▁batt": 23964, "▁minimal": 23965, "俱乐": 23966, "临界": 23967, "▁limitations": 23968, "▁narrative": 23969, "utely": 23970, "▁possibilities": 23971, "State": 23972, "遏制": 23973, "▁galax": 23974, "ictional": 23975, "文的": 23976, "▁subsequently": 23977, "仅有": 23978, "这么": 23979, "浪潮": 23980, "否认": 23981, "体重": 23982, "▁tick": 23983, "累积": 23984, "▁memor": 23985, "uer": 23986, "月的": 23987, "▁deploy": 23988, "第三章": 23989, "宅基地": 23990, "摄入": 23991, "课外": 23992, "ymptoms": 23993, "▁forg": 23994, "▁origins": 23995, "▁client": 23996, "描绘": 23997, "▁surg": 23998, "▁pounds": 23999, "pm": 24000, "▁vessel": 24001, "民事诉讼": 24002, "饲料": 24003, "中枢": 24004, "恰当": 24005, "热量": 24006, "教会": 24007, "较快": 24008, "治疗的": 24009, "西洋": 24010, "▁champions": 24011, "▁elections": 24012, "▁functioning": 24013, "\t\t\t\t": 24014, "▁Ken": 24015, "▁executive": 24016, "itarian": 24017, "▁panels": 24018, "会出现": 24019, "▁ordinary": 24020, "cap": 24021, "Gold": 24022, "诗人": 24023, "Contin": 24024, "▁Hon": 24025, "▁emphasis": 24026, "▁sacr": 24027, "▁resc": 24028, "淋巴结": 24029, "eld": 24030, "首位": 24031, "用以": 24032, "負責": 24033, "Ca": 24034, "▁clock": 24035, "▁mineral": 24036, "avery": 24037, "▁proven": 24038, "▁amidst": 24039, "▁vibrant": 24040, "raine": 24041, "谨慎": 24042, "致病": 24043, "▁lingu": 24044, "asm": 24045, "grade": 24046, "inflamm": 24047, "adding": 24048, "▁destruction": 24049, "November": 24050, "▁actively": 24051, "▁identities": 24052, "▁Ram": 24053, "”,“": 24054, "\n  ": 24055, "文化产业": 24056, "零部件": 24057, "着眼于": 24058, "水土": 24059, "制宜": 24060, "智库": 24061, "清醒": 24062, "诱发": 24063, "时机": 24064, "选拔": 24065, "国会": 24066, "综述": 24067, "▁Championships": 24068, "标本": 24069, "▁clients": 24070, "Super": 24071, "下了": 24072, "也应": 24073, "曾任": 24074, "盲目": 24075, "Canadian": 24076, "zheimer": 24077, "▁breaking": 24078, "▁marginal": 24079, "ighth": 24080, "support": 24081, "▁vector": 24082, "事件的": 24083, "物业": 24084, "水质": 24085, "离散": 24086, "规格": 24087, "不仅仅是": 24088, "角膜": 24089, "▁±": 24090, "十字": 24091, "Which": 24092, "▁Conference": 24093, "▁focusing": 24094, "▁Two": 24095, "▁Ext": 24096, "olis": 24097, "▁Type": 24098, "▁removal": 24099, "▁adapted": 24100, "低收入": 24101, "清理": 24102, "超出": 24103, "PCR": 24104, "年后": 24105, "火山": 24106, "▁gentle": 24107, "賽事": 24108, "大夫": 24109, "第三次": 24110, "▁forming": 24111, "▁maintained": 24112, "▁Enter": 24113, "dy": 24114, "的重要内容": 24115, "专制": 24116, "损耗": 24117, "和环境": 24118, "根据地": 24119, "中国人": 24120, "构成的": 24121, "ricks": 24122, "either": 24123, "Na": 24124, "▁automatically": 24125, "▁personnel": 24126, "的土地": 24127, "▁neural": 24128, "将是": 24129, "▁Baron": 24130, "amie": 24131, "▁steam": 24132, "新的历史": 24133, "必修": 24134, "权利人": 24135, "设想": 24136, "望远": 24137, "illage": 24138, "▁fur": 24139, "aven": 24140, "inals": 24141, "古老": 24142, "▁purs": 24143, "▁OF": 24144, "TH": 24145, "存量": 24146, "等多个": 24147, "签名": 24148, "精细": 24149, "色的": 24150, "▁clothes": 24151, "▁indeed": 24152, "▁physically": 24153, "uties": 24154, "NE": 24155, "Young": 24156, "画面": 24157, "▁breaks": 24158, "▁disturb": 24159, "roc": 24160, "▁rac": 24161, "lation": 24162, "能动": 24163, "制裁": 24164, "基石": 24165, "生态保护": 24166, "design": 24167, "▁spr": 24168, "母亲": 24169, "▁victory": 24170, "村庄": 24171, "max": 24172, "播出": 24173, "rowth": 24174, "▁pairs": 24175, "▁Field": 24176, "照明": 24177, "ener": 24178, "▁entering": 24179, "▁portray": 24180, "不大": 24181, "荣誉": 24182, "Direct": 24183, "▁shed": 24184, "。。": 24185, "SW": 24186, "新业态": 24187, "绿色低碳": 24188, "品德": 24189, "底线": 24190, "见解": 24191, "感性": 24192, "固定的": 24193, "Within": 24194, "▁Area": 24195, "eh": 24196, "Win": 24197, "alo": 24198, "显微镜": 24199, "的语言": 24200, "▁titles": 24201, "▁computing": 24202, "医学院": 24203, "也包括": 24204, "ournament": 24205, "▁beta": 24206, "▁warning": 24207, "▁Far": 24208, "的联系": 24209, "实地": 24210, "高新技术": 24211, "水肿": 24212, "源泉": 24213, "的现实": 24214, "uther": 24215, "Without": 24216, "▁interior": 24217, "▁passes": 24218, "士兵": 24219, "争论": 24220, "忠诚": 24221, "点击": 24222, "▁Pot": 24223, "iah": 24224, "▁dispar": 24225, "可行性": 24226, "面貌": 24227, "之地": 24228, "的基因": 24229, "更改": 24230, "大事": 24231, "could": 24232, "ceptions": 24233, "▁audio": 24234, "▁availability": 24235, "和地方": 24236, "会使": 24237, "备案": 24238, "的必要": 24239, "组分": 24240, "以提高": 24241, "的评价": 24242, "的服务": 24243, "comb": 24244, "▁Imp": 24245, "▁transformation": 24246, "inte": 24247, "Frank": 24248, "▁Security": 24249, "▁convert": 24250, "▁vel": 24251, "▁button": 24252, "Dou": 24253, "捕获": 24254, "性质的": 24255, "▁requiring": 24256, "▁establishments": 24257, "形势下": 24258, "医疗服务": 24259, "基础教育": 24260, "大幅度": 24261, "一词": 24262, "▁Michigan": 24263, "▁villages": 24264, "▁grant": 24265, "▁earliest": 24266, "▁fulf": 24267, "▁Die": 24268, "山区": 24269, "gradu": 24270, "suggest": 24271, "▁determination": 24272, "RD": 24273, "公平正义": 24274, "即便": 24275, "束缚": 24276, "他人的": 24277, "▁progression": 24278, "▁earned": 24279, "izers": 24280, "inging": 24281, "▁EU": 24282, "都具有": 24283, "估算": 24284, "本身的": 24285, "网关": 24286, "发表了": 24287, "变量的": 24288, "人口的": 24289, "ession": 24290, "perhaps": 24291, "▁enthusias": 24292, "▁explanation": 24293, "戰爭": 24294, "有期徒刑": 24295, "细胞中": 24296, "中国共产党领导": 24297, "外观": 24298, "away": 24299, "aque": 24300, "▁Scottish": 24301, "Australia": 24302, "▁inhabitants": 24303, "教堂": 24304, "sit": 24305, "重力": 24306, "和个人": 24307, "公安机关": 24308, "所学": 24309, "临床表现": 24310, "隐性": 24311, "常识": 24312, "帝国主义": 24313, "转移到": 24314, "▁compound": 24315, "拍摄": 24316, "amiliar": 24317, "孤立": 24318, "▁flash": 24319, "ois": 24320, "交换机": 24321, "有一定的": 24322, "▁Change": 24323, "▁sever": 24324, "▁printing": 24325, "quest": 24326, "▁royal": 24327, "▁highlights": 24328, "▁carcin": 24329, "▁versus": 24330, "ptic": 24331, "年夏季奥林匹克运动会": 24332, "图的": 24333, "石墨烯": 24334, "观察到": 24335, "▁orbit": 24336, "催生": 24337, "州的": 24338, "ampion": 24339, "氧气": 24340, "▁enemy": 24341, "水量": 24342, ".'▁": 24343, "▁appreciation": 24344, "▁Region": 24345, "既然": 24346, "理论体系": 24347, "▁festival": 24348, "望远镜": 24349, "为何": 24350, "▁thousand": 24351, "rav": 24352, "吉林": 24353, "为目标": 24354, "▁voices": 24355, "导入": 24356, "▁assessed": 24357, "rizona": 24358, "职业技能": 24359, "理想信念": 24360, "严密": 24361, "也存在": 24362, "并进行": 24363, "acqu": 24364, "rame": 24365, "▁rose": 24366, "▁Sign": 24367, "▁curve": 24368, "同类": 24369, "过去的": 24370, "▁musicians": 24371, "sens": 24372, "inates": 24373, "once": 24374, "Regular": 24375, "▁Stan": 24376, "六年": 24377, "图表": 24378, "制度建设": 24379, "医疗机构": 24380, "与传统": 24381, "担心": 24382, "一人": 24383, "▁Lead": 24384, "▁conj": 24385, "ictions": 24386, "▁fung": 24387, "▁engineer": 24388, "necess": 24389, "▁embra": 24390, "awn": 24391, "sters": 24392, "CF": 24393, "出版的": 24394, "是个": 24395, "ricted": 24396, "▁authentic": 24397, "▁Bow": 24398, "▁tor": 24399, "團體": 24400, "所产生的": 24401, "操作性": 24402, "党政": 24403, "▁Bal": 24404, "BO": 24405, "%~": 24406, "解散": 24407, "▁Point": 24408, "Human": 24409, "issippi": 24410, "▁slavery": 24411, "聯合": 24412, "牢固": 24413, "均可": 24414, "重量": 24415, "icture": 24416, "▁Jeff": 24417, "▁ton": 24418, "▁cats": 24419, "anti": 24420, "lan": 24421, "治安": 24422, "民营企业": 24423, "收入的": 24424, "可持续发展的": 24425, "权力的": 24426, "民族的": 24427, "▁Highway": 24428, "▁consume": 24429, "本研究": 24430, "▁elevated": 24431, "Down": 24432, "edge": 24433, "▁etc": 24434, "▁evaluated": 24435, "neum": 24436, "otional": 24437, "在这种情况下": 24438, "波长": 24439, "应收": 24440, "影响到": 24441, "药物的": 24442, "京津": 24443, "手中": 24444, "世纪初": 24445, "成熟的": 24446, "▁temporary": 24447, "▁contributing": 24448, "▁dietary": 24449, "大陸": 24450, "不稳定": 24451, "类似的": 24452, "妻子": 24453, "eras": 24454, "fall": 24455, "▁Week": 24456, "▁Bat": 24457, "增长率": 24458, "植入": 24459, "▁disabilities": 24460, "網站": 24461, "▁observation": 24462, "umer": 24463, "▁cord": 24464, "物料": 24465, "叙述": 24466, "显示出": 24467, "▁blind": 24468, "depending": 24469, "▁households": 24470, "▁chances": 24471, "▁ordered": 24472, "mates": 24473, "▁fingers": 24474, "旅行": 24475, "▁footballers": 24476, "▁separated": 24477, "运营商": 24478, "terior": 24479, "ez": 24480, "▁Carl": 24481, "European": 24482, "▁Aff": 24483, "}{": 24484, "艰巨": 24485, "公主": 24486, "Scott": 24487, "的两": 24488, "▁fifth": 24489, "▁Marc": 24490, "▁Cub": 24491, "▁impair": 24492, "和解": 24493, "▁Ham": 24494, "▁Game": 24495, "控制和": 24496, "效用": 24497, "▁hardware": 24498, "▁stopped": 24499, "rial": 24500, "iating": 24501, "▁Trust": 24502, "asant": 24503, "▁ly": 24504, "严谨": 24505, "供求": 24506, "贫血": 24507, "▁incident": 24508, "▁collections": 24509, "共和國": 24510, "prene": 24511, "▁thermal": 24512, "已經": 24513, "▁Inc": 24514, "还存在": 24515, "被迫": 24516, "igher": 24517, "▁physician": 24518, "▁reward": 24519, "▁fostering": 24520, "計劃": 24521, "▁Real": 24522, "Sil": 24523, "icting": 24524, "设计与": 24525, "学员": 24526, "辉煌": 24527, "内部审计": 24528, "本来": 24529, "▁Santa": 24530, "少的": 24531, "画家": 24532, "並且": 24533, "▁Kent": 24534, "编号": 24535, "▁arguments": 24536, "ouds": 24537, "gence": 24538, "dam": 24539, "Sk": 24540, "性原则": 24541, "进一步提高": 24542, "不了": 24543, "提醒": 24544, "影片": 24545, "配音": 24546, "技術": 24547, "eder": 24548, "▁medieval": 24549, "▁roughly": 24550, "光明": 24551, "保全": 24552, "试验区": 24553, "历代": 24554, "化学反应": 24555, "溶剂": 24556, "在一些": 24557, "二世": 24558, "艺术家": 24559, "▁myself": 24560, "exts": 24561, "yard": 24562, "▁directions": 24563, "▁routes": 24564, "湿度": 24565, "关注的": 24566, "reprene": 24567, "”.": 24568, "领袖": 24569, "▁Heritage": 24570, "cur": 24571, "ynasty": 24572, "uz": 24573, "wind": 24574, "\u0006\u0006": 24575, "全面从严治党": 24576, "之内": 24577, "征求": 24578, "科举": 24579, "product": 24580, "一般来说": 24581, "以及对": 24582, "功夫": 24583, "凝胶": 24584, "即是": 24585, "播放": 24586, "有趣": 24587, "▁preparing": 24588, "▁whenever": 24589, "生物质": 24590, "▁prospect": 24591, "名词": 24592, "财物": 24593, "看待": 24594, "阐述了": 24595, "企业管理": 24596, "致的": 24597, "之初": 24598, "高峰": 24599, "用例": 24600, "明治": 24601, "水分": 24602, "▁wat": 24603, "ogy": 24604, "源自": 24605, "front": 24606, "是非": 24607, "开发和": 24608, "空白": 24609, "▁Analysis": 24610, "ibli": 24611, "ercise": 24612, "▁obstacles": 24613, "社会保险": 24614, "趋于": 24615, "整治": 24616, "▁Tour": 24617, "?**": 24618, "是指在": 24619, "概论": 24620, "的实验": 24621, "仅为": 24622, "aze": 24623, "ediatric": 24624, "▁Olympic": 24625, "cence": 24626, "▁horses": 24627, "行政行为": 24628, "有关规定": 24629, "范围内的": 24630, "▁Jones": 24631, "▁losses": 24632, "▁chocolate": 24633, "Power": 24634, "▁schedule": 24635, "▁Jan": 24636, "▁flexible": 24637, "▁reaches": 24638, "building": 24639, "February": 24640, "建设工程": 24641, "集体经济": 24642, "长效": 24643, "的事实": 24644, "打通": 24645, "御史": 24646, "的主要内容": 24647, "补助": 24648, "▁assets": 24649, "发布了": 24650, "▁drinks": 24651, "▁laser": 24652, "Know": 24653, "best": 24654, "▁)▁": 24655, "细胞和": 24656, "通过了": 24657, "改制": 24658, "这样一个": 24659, "题材": 24660, "素材": 24661, "▁Night": 24662, "▁semi": 24663, "▁equality": 24664, "▁tough": 24665, "▁debt": 24666, "▁Base": 24667, "▁id": 24668, "uts": 24669, "行政处罚": 24670, "理论研究": 24671, "ailable": 24672, "原来的": 24673, "精心": 24674, "▁infect": 24675, "kind": 24676, "▁Fact": 24677, "▁Business": 24678, "orb": 24679, "elfare": 24680, "▁Know": 24681, "可以实现": 24682, "知识分子": 24683, "▁juice": 24684, "incorpor": 24685, "▁legend": 24686, "should": 24687, "▁balanced": 24688, "▁Survey": 24689, "自然保护": 24690, "规划和": 24691, "施加": 24692, "青藏": 24693, "▁explored": 24694, "▁vegetation": 24695, "▁suit": 24696, "▁mosqu": 24697, "▁planets": 24698, "▁dipl": 24699, "中国在": 24700, "相等": 24701, "之际": 24702, "杂交": 24703, "▁dropped": 24704, "▁willing": 24705, "的事": 24706, "iations": 24707, "Top": 24708, "▁kin": 24709, "Type": 24710, "、《": 24711, "主要矛盾": 24712, "银行的": 24713, "举例": 24714, "消费者的": 24715, "起草": 24716, "北宋": 24717, "抓手": 24718, "可以为": 24719, "▁classified": 24720, "▁vertical": 24721, "门槛": 24722, "▁Boy": 24723, "Prot": 24724, "Ber": 24725, "Japanese": 24726, "▁transmit": 24727, "▁contribution": 24728, "];": 24729, "村落": 24730, "ranean": 24731, "▁fought": 24732, "▁suddenly": 24733, "▁shock": 24734, "inition": 24735, "土耳": 24736, "ivo": 24737, "▁preferred": 24738, "中华文明": 24739, "更要": 24740, "亲自": 24741, "充分的": 24742, "温室气体": 24743, "政府在": 24744, "▁Fer": 24745, "▁dollars": 24746, "▁selling": 24747, "日本的": 24748, "总部": 24749, "▁Author": 24750, "▁induced": 24751, "achine": 24752, "apped": 24753, "▁ownership": 24754, "安全和": 24755, "天的": 24756, "功耗": 24757, "owa": 24758, "商人": 24759, "▁This": 24760, "iscons": 24761, "▁illustrate": 24762, "中长期": 24763, "尚不": 24764, "银行业": 24765, "废除": 24766, "▁dimensions": 24767, "▁moderate": 24768, "▁Cre": 24769, "状态的": 24770, "將軍": 24771, "▁Charl": 24772, "elve": 24773, "aug": 24774, "▁viral": 24775, "▁spoken": 24776, "Small": 24777, "▁struggles": 24778, "届全国人大": 24779, "相位": 24780, "各界": 24781, "周恩来": 24782, "aneous": 24783, "学和": 24784, "▁arter": 24785, "相邻": 24786, "▁loop": 24787, "isconsin": 24788, "▁globe": 24789, "俱乐部": 24790, "水中": 24791, "精英": 24792, "的主题": 24793, "FM": 24794, "umns": 24795, "電子": 24796, "▁binding": 24797, "爱国主义": 24798, "复发": 24799, "产业集群": 24800, "数十": 24801, "见于": 24802, "综合素质": 24803, "赤字": 24804, "视力": 24805, "一直是": 24806, "教室": 24807, "党员干部": 24808, "分歧": 24809, "▁analyt": 24810, "arming": 24811, "▁wonderful": 24812, "決定": 24813, "▁combine": 24814, "▁taxes": 24815, "asis": 24816, "代理人": 24817, "黑龙江": 24818, "总局": 24819, "火灾": 24820, "特点是": 24821, "最好的": 24822, "▁manual": 24823, "▁campus": 24824, "共性": 24825, "中国特色社会主义制度": 24826, "发展与": 24827, "管理等": 24828, "健康的": 24829, "什么样的": 24830, "船舶": 24831, "similar": 24832, "án": 24833, "agnetic": 24834, "▁Georgia": 24835, "▁Show": 24836, "成品": 24837, "通常是": 24838, "▁diagnostic": 24839, "▁fert": 24840, "LL": 24841, "archy": 24842, "Si": 24843, "海岸": 24844, "课堂上": 24845, "阵地": 24846, "▁Jo": 24847, "缔约": 24848, "的东西": 24849, "▁scar": 24850, "▁comments": 24851, "▁choosing": 24852, "的含义": 24853, "废物": 24854, "▁Sarah": 24855, "▁celebrated": 24856, "▁characteristic": 24857, "▁proportion": 24858, "▁confident": 24859, "市的": 24860, "uris": 24861, "土耳其": 24862, "Short": 24863, "政法": 24864, "不动产": 24865, "加大对": 24866, "立案": 24867, "峰值": 24868, "文人": 24869, "语境": 24870, "▁But": 24871, "即为": 24872, "观众": 24873, "%.▁": 24874, "一个人": 24875, "要么": 24876, "sper": 24877, "▁cas": 24878, "▁gardens": 24879, "▁hazard": 24880, "▁thanks": 24881, "pain": 24882, "▁Elizabeth": 24883, "▁receptors": 24884, "▁coat": 24885, "▁drivers": 24886, "新建": 24887, "▁coc": 24888, "工业革命": 24889, "同等": 24890, "给付": 24891, "欧美": 24892, "的道路": 24893, "▁trail": 24894, "eren": 24895, "真空": 24896, "▁alle": 24897, "okes": 24898, "comput": 24899, "▁singer": 24900, "终结": 24901, "▁swimming": 24902, "到来": 24903, "立德": 24904, "remember": 24905, "Er": 24906, "dimensional": 24907, "▁Model": 24908, "xim": 24909, "专业知识": 24910, "应变": 24911, "提炼": 24912, "收获": 24913, "▁settled": 24914, "一支": 24915, "▁actors": 24916, "特区": 24917, "link": 24918, "President": 24919, "▁paras": 24920, "▁Avenue": 24921, "▁performances": 24922, "史学": 24923, "光电": 24924, "学业": 24925, "纯粹": 24926, "portation": 24927, "依次": 24928, "tension": 24929, "onent": 24930, "出席": 24931, "▁hyd": 24932, "统一战线": 24933, "自然人": 24934, "军区": 24935, "▁aes": 24936, "▁gum": 24937, "▁eliminate": 24938, "有用": 24939, "▁psychology": 24940, "▁Ott": 24941, "idal": 24942, "▁prime": 24943, "▁boat": 24944, "▁replacement": 24945, "agre": 24946, "▁occurring": 24947, "的限制": 24948, "體育": 24949, "burn": 24950, "▁prolif": 24951, "arding": 24952, "▁audiences": 24953, "▁delicious": 24954, "▁winning": 24955, "抗日战争": 24956, "外商": 24957, "创造力": 24958, "质押": 24959, "返还": 24960, "领会": 24961, "启蒙": 24962, "欲望": 24963, "的大量": 24964, "olitan": 24965, "▁segment": 24966, "▁permission": 24967, "青山": 24968, "▁anticip": 24969, "▁prey": 24970, "不超过": 24971, "更多地": 24972, "▁degrad": 24973, "fold": 24974, "chron": 24975, "逮捕": 24976, "▁datas": 24977, "▁Az": 24978, "▁replied": 24979, "▁superior": 24980, "olly": 24981, "Mel": 24982, "▁von": 24983, "外贸": 24984, "下一步": 24985, "大体": 24986, "商业模式": 24987, "折旧": 24988, "前所未有的": 24989, "汉代": 24990, "龙头": 24991, "亲属": 24992, "▁plasma": 24993, "▁updated": 24994, "▁Organization": 24995, "fly": 24996, "fs": 24997, "▁Cr": 24998, "uting": 24999, "罪的": 25000, "清华大学": 25001, "倾向于": 25002, "的机制": 25003, "raq": 25004, "展示了": 25005, "▁Math": 25006, "▁Johnson": 25007, "▁cooling": 25008, "▁equipped": 25009, "条的规定": 25010, "网友": 25011, "县域": 25012, "头脑": 25013, "节课": 25014, "学习者": 25015, "列举": 25016, "支部": 25017, "有两种": 25018, "table": 25019, "▁covering": 25020, "▁developments": 25021, "▁dil": 25022, "etary": 25023, "▁promoted": 25024, "ochond": 25025, "therefore": 25026, "▁;": 25027, "uv": 25028, "合理性": 25029, "▁analyzing": 25030, "uled": 25031, "网络化": 25032, "准备金": 25033, "或缺": 25034, "预见": 25035, "房产": 25036, "校企": 25037, "射频": 25038, "全年": 25039, "起到了": 25040, "▁interface": 25041, "一半": 25042, "’,▁": 25043, "▁adjacent": 25044, "▁opinions": 25045, "borne": 25046, "▁recre": 25047, "regation": 25048, "職業": 25049, "▁polar": 25050, "Bill": 25051, "▁extension": 25052, "▁lists": 25053, "▁explicit": 25054, "▁popularity": 25055, "]\\": 25056, "质生产力": 25057, "和信息": 25058, "工农": 25059, "▁establishment": 25060, "erted": 25061, "phibians": 25062, "group": 25063, "▁py": 25064, "astics": 25065, "VR": 25066, "GR": 25067, "财政部": 25068, "一场": 25069, "显著的": 25070, "计划的": 25071, "▁stood": 25072, "标题": 25073, "▁shorter": 25074, "▁weigh": 25075, "iac": 25076, "ugs": 25077, "){": 25078, "发展规律": 25079, "解答": 25080, "主要体现在": 25081, "量子计算": 25082, "都必须": 25083, "甲状腺": 25084, "柴油": 25085, "thod": 25086, "学术界": 25087, "women": 25088, "▁marketing": 25089, "队列": 25090, "▁Equ": 25091, "酸盐": 25092, "▁Jackson": 25093, "产权的": 25094, "各省": 25095, "抵御": 25096, "▁happiness": 25097, "▁confirm": 25098, "才会": 25099, "介导": 25100, "gien": 25101, "▁designing": 25102, "▁landscapes": 25103, "ecutive": 25104, "rying": 25105, "lications": 25106, "hops": 25107, "江苏省": 25108, "实践教学": 25109, "主机": 25110, "经济的发展": 25111, "black": 25112, "▁perception": 25113, "▁|": 25114, "但是在": 25115, "有所不同": 25116, "written": 25117, "rained": 25118, "话题": 25119, "植被": 25120, "规模的": 25121, "七年": 25122, "helping": 25123, "▁Williams": 25124, "strong": 25125, "Tim": 25126, "▁disability": 25127, "要实现": 25128, "数据采集": 25129, "最大限度地": 25130, "思维的": 25131, "主动性": 25132, "▁radical": 25133, "查找": 25134, "道的": 25135, "曾在": 25136, "▁Awards": 25137, "▁Sunday": 25138, "cyclopedia": 25139, "▁flexibility": 25140, "有两个": 25141, "构建了": 25142, "低下": 25143, "条件和": 25144, "▁colorful": 25145, "short": 25146, "Tur": 25147, "appy": 25148, "BR": 25149, "▁beach": 25150, "制剂": 25151, "适用的": 25152, "▁merely": 25153, "LO": 25154, "▁fatty": 25155, "▁controlling": 25156, "▁metres": 25157, "第十二": 25158, "课文": 25159, "当作": 25160, "夫人": 25161, "iary": 25162, "Share": 25163, "ydney": 25164, "▁Process": 25165, "▁abstract": 25166, "▁duration": 25167, "▁empty": 25168, "▁falling": 25169, "发展道路": 25170, "其对": 25171, "必然要求": 25172, "现实的": 25173, "上诉": 25174, "Incre": 25175, "'.▁": 25176, "▁wise": 25177, "report": 25178, "解剖": 25179, "尔斯": 25180, "所在地": 25181, "▁Prim": 25182, "theless": 25183, "▁uncle": 25184, "生產": 25185, "数据显示": 25186, "认识和": 25187, "收取": 25188, "Sir": 25189, "的模式": 25190, "▁Online": 25191, "全程": 25192, "口头": 25193, "事先": 25194, "错误的": 25195, "▁charts": 25196, "▁quantum": 25197, "▁morph": 25198, "duction": 25199, "Recent": 25200, "yte": 25201, "ocated": 25202, "▁countless": 25203, "▁privacy": 25204, "经济全球化": 25205, "应用型": 25206, "内部控制": 25207, "不宜": 25208, "厚度": 25209, "▁transplant": 25210, "▁vocal": 25211, "防火": 25212, "▁Historical": 25213, "▁tribes": 25214, "▁hurt": 25215, "▁incorporated": 25216, "▁precious": 25217, "endar": 25218, "▁±▁": 25219, "▁>": 25220, "以致": 25221, "▁USA": 25222, "伦敦": 25223, "▁scenario": 25224, "▁About": 25225, "erts": 25226, "lla": 25227, "的自": 25228, "▁wing": 25229, "SH": 25230, "▁absorb": 25231, "Var": 25232, "阐明": 25233, "▁advers": 25234, "asures": 25235, "igion": 25236, "▁exped": 25237, "▁markers": 25238, "▁perceived": 25239, "表的": 25240, "▁Prince": 25241, "開發": 25242, "▁producer": 25243, "管理部门": 25244, "交易的": 25245, "集约": 25246, "链路": 25247, "局限于": 25248, "▁bomb": 25249, "▁Strateg": 25250, "Florida": 25251, "Will": 25252, "战胜": 25253, "创办": 25254, "breaking": 25255, "结束后": 25256, "▁baseball": 25257, "▁Princ": 25258, "应用中": 25259, "▁analyses": 25260, "▁copies": 25261, "▁excitement": 25262, "▁rooms": 25263, "第四章": 25264, "测评": 25265, "信息和": 25266, "力量的": 25267, "国家公园": 25268, "验收": 25269, "医保": 25270, "胆固醇": 25271, "肾脏": 25272, "专注": 25273, "Learning": 25274, "系统地": 25275, "keeping": 25276, "NC": 25277, "itches": 25278, "agg": 25279, "SV": 25280, "▁Let": 25281, "Gr": 25282, "与方法": 25283, "在企业": 25284, "▁cardiac": 25285, "獎牌得主": 25286, "▁converted": 25287, "▁pione": 25288, "▁interpre": 25289, "Building": 25290, "▁aging": 25291, "contin": 25292, "深入推进": 25293, "收益率": 25294, "成本的": 25295, "着手": 25296, "精力": 25297, "开放的": 25298, "在内": 25299, "▁assistant": 25300, "獨立": 25301, "手工": 25302, "esides": 25303, "▁texture": 25304, "沉淀": 25305, "^{": 25306, "一类": 25307, "▁Alexander": 25308, "▁parks": 25309, "later": 25310, "并于": 25311, "▁Supreme": 25312, "olph": 25313, "▁pilot": 25314, "orus": 25315, "全体人民": 25316, "非物质文化遗产": 25317, "作品的": 25318, "患病": 25319, "的基本原则": 25320, "▁granted": 25321, "▁somewhat": 25322, "▁Dictionary": 25323, "機構": 25324, "偶然": 25325, ")▁=▁": 25326, "len": 25327, "机动车": 25328, "过来": 25329, "实际的": 25330, "那种": 25331, "得益": 25332, "▁blow": 25333, "上帝": 25334, "夺取": 25335, "▁Country": 25336, "personal": 25337, "ayer": 25338, "▁Bang": 25339, "▁trigger": 25340, "mented": 25341, "精神和": 25342, "的意见": 25343, "语言文字": 25344, "合作的": 25345, "仍是": 25346, "艰难": 25347, "年限": 25348, "▁soph": 25349, "▁Christianity": 25350, "受到了": 25351, "年第": 25352, "cule": 25353, "機場": 25354, "▁statements": 25355, "enabling": 25356, "▁struck": 25357, "▁exch": 25358, "Track": 25359, "▁surprising": 25360, "是否有": 25361, "品格": 25362, "保護": 25363, "▁es": 25364, "纪录": 25365, "▁Conservation": 25366, "▁Route": 25367, "▁http": 25368, "▁£": 25369, "SF": 25370, "▁Norm": 25371, "ivals": 25372, "▁alternatives": 25373, "▁grains": 25374, "▁inspire": 25375, "▁weakness": 25376, "而对": 25377, "上年": 25378, "考量": 25379, "交际": 25380, "因地制宜": 25381, "标注": 25382, "▁Hun": 25383, "▁grain": 25384, "部分的": 25385, "感兴趣": 25386, "▁graphic": 25387, "pres": 25388, "▁encomp": 25389, "▁advis": 25390, "游泳": 25391, "稳健": 25392, "但它": 25393, "亟待": 25394, "兴奋": 25395, "特质": 25396, "审视": 25397, "▁classification": 25398, "▁inflammatory": 25399, "▁differ": 25400, "thew": 25401, "▁Temple": 25402, "▁gases": 25403, "▁severity": 25404, "isition": 25405, "▁copper": 25406, "▁Representatives": 25407, "▁wings": 25408, ".;▁": 25409, "税制": 25410, "阵列": 25411, "探测器": 25412, "指导下": 25413, "力求": 25414, "针对性": 25415, "在学习": 25416, "View": 25417, "尚书": 25418, "关系到": 25419, "system": 25420, "Hy": 25421, "快乐": 25422, "那个": 25423, "Mor": 25424, "orted": 25425, "rium": 25426, "时钟": 25427, "岩石": 25428, "▁Hand": 25429, "加快建设": 25430, "规模化": 25431, "中进行": 25432, "破裂": 25433, "约占": 25434, "五是": 25435, "存货": 25436, "市政府": 25437, "与国际": 25438, "患儿": 25439, "我们认为": 25440, "阻力": 25441, "权利和": 25442, "如同": 25443, "眼睛": 25444, "平原": 25445, "▁illnesses": 25446, "▁infant": 25447, "inea": 25448, "Det": 25449, "加利": 25450, "高层": 25451, "▁reporting": 25452, "irtual": 25453, "▁underground": 25454, "▁humanity": 25455, "bound": 25456, "allenges": 25457, "坚持和发展": 25458, "管理办法": 25459, "事后": 25460, "老百姓": 25461, "奴隶": 25462, "焦虑": 25463, "Draw": 25464, "引起了": 25465, "和大": 25466, "▁eru": 25467, "▁factory": 25468, "named": 25469, "▁gest": 25470, "venile": 25471, "Enter": 25472, "pow": 25473, "多为": 25474, "进度": 25475, "适时": 25476, "div": 25477, "王国": 25478, "再度": 25479, "▁provider": 25480, "▁metals": 25481, "▁opposed": 25482, "▁planting": 25483, "提及": 25484, "ben": 25485, "职业道德": 25486, "户籍": 25487, "积极探索": 25488, "改革发展": 25489, "Work": 25490, "Ann": 25491, "▁Protection": 25492, "▁Iran": 25493, "▁universal": 25494, "▁defeated": 25495, "▁seemingly": 25496, "擁有": 25497, "▁chemistry": 25498, "agan": 25499, "自立": 25500, "Given": 25501, "▁movies": 25502, "▁infants": 25503, "▁peers": 25504, "▁Korean": 25505, "亿吨": 25506, "独立性": 25507, "君子": 25508, "enter": 25509, "数组": 25510, "六个": 25511, "Historical": 25512, "▁practition": 25513, "▁investigated": 25514, "▁minister": 25515, "加州": 25516, "ennes": 25517, "當地": 25518, "oded": 25519, "▁Constitution": 25520, "healthy": 25521, "Bur": 25522, "九年": 25523, "中西": 25524, "互助": 25525, "人性": 25526, "oca": 25527, "mouth": 25528, "▁combining": 25529, "Henry": 25530, "要求学生": 25531, "战术": 25532, "是否存在": 25533, "▁irrit": 25534, "书籍": 25535, "紀錄": 25536, "BE": 25537, "inth": 25538, "▁Senate": 25539, "▁programme": 25540, "正常的": 25541, "无力": 25542, "经验的": 25543, "级的": 25544, "计数": 25545, "衰老": 25546, "▁embry": 25547, "▁Pur": 25548, "lock": 25549, "▁poet": 25550, "▁hunting": 25551, "人民生活": 25552, "新能源汽车": 25553, "有机结合": 25554, "教育与": 25555, "新时期": 25556, "技术等": 25557, "毒素": 25558, "議會": 25559, "坚守": 25560, "书院": 25561, "电场": 25562, "錦標": 25563, "cellular": 25564, "▁considerable": 25565, "失去了": 25566, "ureau": 25567, "▁Word": 25568, "▁Heb": 25569, "▁retire": 25570, "▁chicken": 25571, "▁consistently": 25572, "▁surgical": 25573, "和支持": 25574, "流传": 25575, "规范的": 25576, "的性能": 25577, "一座": 25578, "ked": 25579, "▁bacterial": 25580, "▁clubs": 25581, "▁distances": 25582, "▁essays": 25583, "赔偿责任": 25584, "中去": 25585, "刑事责任": 25586, "课程体系": 25587, "执行的": 25588, "▁chlor": 25589, "狭义": 25590, "因为它": 25591, "East": 25592, "strial": 25593, "▁spatial": 25594, "▁antibiotics": 25595, "▁flavors": 25596, "▁viewed": 25597, "ifier": 25598, "口腔": 25599, "已有的": 25600, "卷积": 25601, "hea": 25602, "老人": 25603, "▁Corporation": 25604, "cha": 25605, "▁unw": 25606, "claimed": 25607, "行政诉讼": 25608, "和精神": 25609, "葡萄糖": 25610, "肺癌": 25611, "oler": 25612, "forest": 25613, "▁essentially": 25614, "病毒感染": 25615, "▁...": 25616, "via": 25617, "▁Arm": 25618, "▁Safety": 25619, "▁orders": 25620, "hu": 25621, "▁demonstrates": 25622, "▁unless": 25623, "像素": 25624, "社会主义建设": 25625, "经营权": 25626, "▁antibodies": 25627, "imb": 25628, "Whether": 25629, "▁exhaust": 25630, "mers": 25631, "路易": 25632, "图中": 25633, "刑罚": 25634, "zech": 25635, "▁metabolism": 25636, "死亡率": 25637, "额外": 25638, "Linux": 25639, "▁Pennsylvania": 25640, "pack": 25641, "Show": 25642, "monary": 25643, "Perhaps": 25644, "▁Back": 25645, "教学目标": 25646, "全国人民代表大会": 25647, "民主政治": 25648, "知情": 25649, "就在于": 25650, "理解为": 25651, "基因的": 25652, "显着": 25653, "特有的": 25654, "LD": 25655, "irk": 25656, "points": 25657, "▁fet": 25658, "incial": 25659, "▁antioxid": 25660, "Joseph": 25661, "FP": 25662, "此种": 25663, "骨折": 25664, "Mont": 25665, "syn": 25666, "▁Poland": 25667, "PO": 25668, "实质性": 25669, "日内": 25670, "依存": 25671, "局长": 25672, "场合": 25673, "etition": 25674, "已在": 25675, "▁Our": 25676, "FT": 25677, "▁basketball": 25678, "▁concluded": 25679, "▁drama": 25680, "▁honey": 25681, "(\"": 25682, "▁grad": 25683, "eph": 25684, "aternal": 25685, "的手段": 25686, "叙事": 25687, "▁adverse": 25688, "句子": 25689, "▁photographs": 25690, "的实现": 25691, "國立": 25692, "▁Berlin": 25693, "efficient": 25694, "两条": 25695, "消防": 25696, "源性": 25697, "南海": 25698, "年夏季奧林匹克運動會": 25699, "good": 25700, "▁pandemic": 25701, "▁brains": 25702, "▁farms": 25703, "▁mistakes": 25704, "▁recycling": 25705, "吸烟": 25706, "riday": 25707, "招聘": 25708, "需要对": 25709, "段的": 25710, "note": 25711, "▁rarely": 25712, "▁pin": 25713, "associ": 25714, "兩個": 25715, "罚款": 25716, "污染防治": 25717, "电容": 25718, "市场竞争": 25719, "可将": 25720, "张力": 25721, "非遗": 25722, "混淆": 25723, "▁volunteers": 25724, "坦克": 25725, "apor": 25726, "nia": 25727, "NH": 25728, "不对称": 25729, "形成一个": 25730, "光源": 25731, "▁manufacturers": 25732, "▁】": 25733, "▁influential": 25734, "▁gravity": 25735, "ifer": 25736, "▁Unit": 25737, "Ohio": 25738, "\u0005\u0005": 25739, "不懈": 25740, "意识的": 25741, "弊端": 25742, "[[@": 25743, "北美": 25744, "一道": 25745, "存活": 25746, "的水平": 25747, "溃疡": 25748, "▁Master": 25749, "▁processed": 25750, "▁strategic": 25751, "▁parish": 25752, "Olymp": 25753, "栽培": 25754, "马来": 25755, "▁none": 25756, "▁Hung": 25757, "▁auto": 25758, "▁Plant": 25759, "▁Polish": 25760, "▁alumni": 25761, "wid": 25762, "▁achieving": 25763, "▁decay": 25764, "您的": 25765, "八年": 25766, "抗生素": 25767, "紫外": 25768, "社会化": 25769, "Big": 25770, "波兰": 25771, "umatic": 25772, "Exploring": 25773, "▁orb": 25774, "Tele": 25775, "Tr": 25776, "ensis": 25777, "▁occas": 25778, "▁Victoria": 25779, "▁transformed": 25780, "转换为": 25781, "▁Chief": 25782, "tains": 25783, "▁aggressive": 25784, "▁trains": 25785, "值为": 25786, "西哥": 25787, "pton": 25788, "▁driven": 25789, "▁retired": 25790, "更加注重": 25791, "促进学生": 25792, "调查研究": 25793, "过高": 25794, "的内涵": 25795, "全市": 25796, "这在": 25797, "首先是": 25798, "应付": 25799, "中国政府": 25800, "來源": 25801, "Bu": 25802, "HIV": 25803, "IO": 25804, "的城市": 25805, ".'": 25806, "▁ham": 25807, "▁implementing": 25808, "▁seam": 25809, "价的": 25810, "少量": 25811, "别人": 25812, "让我们": 25813, "▁administrative": 25814, "TCP": 25815, "▁Dam": 25816, "▁Alzheimer": 25817, "MM": 25818, "多重": 25819, "▁Sports": 25820, "▁productivity": 25821, "shire": 25822, "▁anywhere": 25823, "▁Vietnam": 25824, "▁Van": 25825, "理学": 25826, "选择的": 25827, "确诊": 25828, "都将": 25829, "图案": 25830, "star": 25831, "prise": 25832, "该项": 25833, "微波": 25834, "当选": 25835, "巨噬": 25836, "同事": 25837, "无机": 25838, "精密": 25839, "▁spin": 25840, "唱片": 25841, "compared": 25842, "三类": 25843, "会计准则": 25844, "整体的": 25845, "伪造": 25846, "规则的": 25847, "主编": 25848, "business": 25849, "海域": 25850, "只需": 25851, "England": 25852, "▁lifetime": 25853, "的一個": 25854, "原文": 25855, "▁charged": 25856, "Roman": 25857, "为民": 25858, "的特殊": 25859, "所能": 25860, "RFID": 25861, "range": 25862, "▁bought": 25863, "▁circulation": 25864, "正处于": 25865, "照射": 25866, "能力的培养": 25867, "自主创新": 25868, "紧缩": 25869, "在北京": 25870, "在使用": 25871, "ologically": 25872, "▁reverse": 25873, "istent": 25874, "不清": 25875, "科学家们": 25876, "icon": 25877, "▁aster": 25878, "▁bags": 25879, "ongue": 25880, "▁backgrounds": 25881, "▁fibers": 25882, "▁wider": 25883, "elta": 25884, "三者": 25885, "不可或缺": 25886, "优于": 25887, "仪式": 25888, "ti": 25889, "可靠的": 25890, "▁promotes": 25891, "▁mine": 25892, "羽毛球": 25893, "▁riding": 25894, "▁wondered": 25895, "同行": 25896, "司马": 25897, "万个": 25898, "契机": 25899, "主要内容": 25900, "▁initiative": 25901, "太子": 25902, "▁encountered": 25903, "▁partnership": 25904, "▁Gar": 25905, "▁logic": 25906, "near": 25907, "快速增长": 25908, "营商环境": 25909, "完美": 25910, "成本和": 25911, "一个重要": 25912, "资金的": 25913, "评价体系": 25914, "▁NO": 25915, "哪个": 25916, "ashes": 25917, "▁independently": 25918, "AK": 25919, "▁compens": 25920, "就在": 25921, "海量": 25922, "总线": 25923, "投放": 25924, "管理模式": 25925, "vit": 25926, "篇文章": 25927, "与环境": 25928, "始于": 25929, "天体": 25930, "Thanks": 25931, "▁celeb": 25932, "Sun": 25933, "紀念": 25934, "ustainable": 25935, "▁preced": 25936, "较强": 25937, "和发展的": 25938, "apore": 25939, "传说": 25940, "iterranean": 25941, "Stand": 25942, "amma": 25943, "▁Effect": 25944, "WS": 25945, "▁Century": 25946, "▁Climate": 25947, "强调了": 25948, "conscious": 25949, "▁clar": 25950, "的程序": 25951, "高雄": 25952, "▁labels": 25953, "plus": 25954, "alem": 25955, "reading": 25956, "oop": 25957, "发展阶段": 25958, "可使": 25959, "山东省": 25960, "筹资": 25961, "真实的": 25962, "▁dies": 25963, "▁strike": 25964, ",\"": 25965, "对这些": 25966, "切换": 25967, "▁proof": 25968, "▁whatever": 25969, "称作": 25970, "很好地": 25971, "sil": 25972, "ibbean": 25973, "分校": 25974, "之时": 25975, "数目": 25976, "的趋势": 25977, "不多": 25978, "apel": 25979, "uate": 25980, "向上": 25981, "正规": 25982, "zo": 25983, "行动计划": 25984, "初级阶段": 25985, "各领域": 25986, "作用下": 25987, "清洁能源": 25988, "助推": 25989, "湾区": 25990, "▁maxim": 25991, "alks": 25992, "准确的": 25993, "▁sampl": 25994, "主演": 25995, "▁Li": 25996, "▁fires": 25997, "▁pointed": 25998, "的高度": 25999, "把它": 26000, "预先": 26001, "造就": 26002, "描写": 26003, "Career": 26004, "html": 26005, "site": 26006, "seud": 26007, "▁tone": 26008, "gov": 26009, "▁residential": 26010, "▁apps": 26011, "▁urine": 26012, "公证": 26013, "嘉靖": 26014, "Ess": 26015, "不一致": 26016, "偏好": 26017, "这条": 26018, "奇迹": 26019, "亦有": 26020, "▁Uk": 26021, "位一体": 26022, "備註": 26023, "Others": 26024, "BV": 26025, "prim": 26026, "是用": 26027, "转发": 26028, "骨骼": 26029, "mil": 26030, "rums": 26031, "onial": 26032, "▁summary": 26033, "▁loud": 26034, "▁managers": 26035, "▁▁《": 26036, "思维能力": 26037, "可以使": 26038, "为由": 26039, "而来": 26040, "牵引": 26041, "▁THE": 26042, "一般的": 26043, "指针": 26044, "华北": 26045, "▁Lincoln": 26046, "▁invasion": 26047, "▁Fund": 26048, "cler": 26049, "▁Building": 26050, "全國": 26051, "西部地区": 26052, "要通过": 26053, "中日": 26054, "Low": 26055, "▁genu": 26056, "不充分": 26057, "降至": 26058, "违法行为": 26059, "趋向": 26060, "回避": 26061, "安置": 26062, "残留": 26063, "治理的": 26064, "iversary": 26065, "不必": 26066, "等特点": 26067, "不太": 26068, "▁sin": 26069, "莱茵": 26070, "▁Map": 26071, "▁judge": 26072, "eman": 26073, "▁fantastic": 26074, "Div": 26075, "▁Theatre": 26076, "下午": 26077, "生化": 26078, "职业学校": 26079, "试剂": 26080, "nds": 26081, "福祉": 26082, "success": 26083, "▁doubt": 26084, "▁bands": 26085, "▁references": 26086, "ACE": 26087, "多人": 26088, "对照组": 26089, "知识与": 26090, "重症": 26091, "增收": 26092, "筹划": 26093, "的地位": 26094, "aws": 26095, "▁codes": 26096, "▁meetings": 26097, "anga": 26098, "▁researcher": 26099, "▁accordingly": 26100, "Martin": 26101, "▁Fair": 26102, "婴儿": 26103, "灌溉": 26104, "如何在": 26105, "肥胖": 26106, "Beg": 26107, "likely": 26108, "▁exceed": 26109, "▁predicted": 26110, "rection": 26111, "Central": 26112, "动产": 26113, "新材料": 26114, "疫情防控": 26115, "死刑": 26116, "尤其是在": 26117, "▁glob": 26118, "ensed": 26119, "aded": 26120, "的心": 26121, "quarters": 26122, "Conf": 26123, "ompson": 26124, "▁officially": 26125, "▁prevalence": 26126, "ternoon": 26127, "faction": 26128, "湖泊": 26129, "花费": 26130, "急剧": 26131, "NK": 26132, "▁drought": 26133, "died": 26134, "▁legacy": 26135, "▁scored": 26136, "▁unity": 26137, "舉行": 26138, "▁metabolic": 26139, "%;": 26140, "全面建设社会主义现代化国家": 26141, "民意": 26142, "自我革命": 26143, "建设用地": 26144, "法律关系": 26145, "▁mutual": 26146, "、、": 26147, "常数": 26148, "靠近": 26149, "▁holiday": 26150, "▁grades": 26151, "▁mature": 26152, "names": 26153, "▁Islamic": 26154, "▁ecological": 26155, "却是": 26156, "双边": 26157, "ifts": 26158, "▁Ly": 26159, "在某些": 26160, "给出了": 26161, "病毒的": 26162, "▁candidates": 26163, "▁bite": 26164, "▁spoke": 26165, "▁Obs": 26166, "▁Prem": 26167, "世界大战": 26168, "外在": 26169, "主体地位": 26170, "医疗保险": 26171, "不具有": 26172, "盗窃": 26173, "较差": 26174, "放置": 26175, "任务的": 26176, "government": 26177, "▁addressed": 26178, "▁invasive": 26179, "相机": 26180, "risk": 26181, "▁mutations": 26182, "不好": 26183, "研究对象": 26184, "之以": 26185, "刚刚": 26186, "孟子": 26187, "hedral": 26188, "▁Environment": 26189, "高科技": 26190, "angers": 26191, "▁Maria": 26192, "acial": 26193, "Creating": 26194, "▁Arctic": 26195, "▁Beach": 26196, "▁powder": 26197, "墨西哥": 26198, "科研人员": 26199, "舉人": 26200, "结点": 26201, "工序": 26202, "导弹": 26203, "特色的": 26204, "系统工程": 26205, "▁numer": 26206, "▁broke": 26207, "▁counsel": 26208, "▁elsewhere": 26209, "成績": 26210, "▁tom": 26211, "石器": 26212, "Born": 26213, "▁conversion": 26214, "▁Prop": 26215, "▁preserved": 26216, "isely": 26217, "▁Polit": 26218, "iley": 26219, "国家和地区": 26220, "保管": 26221, "辩论": 26222, "▁castle": 26223, "▁ride": 26224, "▁educators": 26225, "▁seats": 26226, "值得注意的是": 26227, "妊娠": 26228, "查阅": 26229, "ichel": 26230, "單位": 26231, "▁cotton": 26232, "性是": 26233, "课件": 26234, "浸润": 26235, "阻断": 26236, "流向": 26237, "不合理": 26238, "energy": 26239, "越多": 26240, "热爱": 26241, "je": 26242, "▁sensor": 26243, "▁biodiversity": 26244, "clusions": 26245, "▁borrow": 26246, "▁outdoor": 26247, "推断": 26248, "%-": 26249, "uclear": 26250, "▁lowest": 26251, "受害人": 26252, "各有": 26253, "创伤": 26254, "为我国": 26255, "rated": 26256, "agu": 26257, "amilton": 26258, "▁Hawai": 26259, "ceans": 26260, "▁fans": 26261, "uese": 26262, "▁zones": 26263, "NN": 26264, "lected": 26265, "ercury": 26266, "和实施": 26267, "阶段性": 26268, "阳光": 26269, "atile": 26270, "ipedia": 26271, "aping": 26272, "▁Kn": 26273, "▁libraries": 26274, "athers": 26275, "tein": 26276, "▁oblig": 26277, "▁consumed": 26278, "▁ease": 26279, "supp": 26280, "制度体系": 26281, "指导思想": 26282, "苏州": 26283, "真菌": 26284, "除此之外": 26285, "近年": 26286, "Techn": 26287, "oked": 26288, "▁competitive": 26289, "要注意": 26290, "这使得": 26291, "就是在": 26292, "因素的": 26293, "交通事故": 26294, "患有": 26295, "作的": 26296, "▁deficiency": 26297, "akh": 26298, "▁empower": 26299, "▁proud": 26300, "儿子": 26301, "eland": 26302, "CG": 26303, "社会主义市场经济体制": 26304, "党对": 26305, "犯罪嫌疑人": 26306, "制度创新": 26307, "至上": 26308, "血浆": 26309, "的一致": 26310, "rary": 26311, "▁spinal": 26312, "▁dramatic": 26313, "▁tale": 26314, "入学": 26315, "actly": 26316, "協會": 26317, "fol": 26318, "olished": 26319, "PH": 26320, "机制和": 26321, "并能": 26322, "支气管": 26323, "美好生活": 26324, "实验教学": 26325, "客观上": 26326, "带头": 26327, "折射": 26328, "契合": 26329, "住院": 26330, "统治者": 26331, "!!": 26332, "hero": 26333, "▁conference": 26334, "嵌入式": 26335, "▁Code": 26336, "▁illegal": 26337, "▁Mexican": 26338, "▁pace": 26339, "▁grounds": 26340, "▁accompanied": 26341, "▁fats": 26342, "path": 26343, "fred": 26344, "ocity": 26345, "休息": 26346, "▁scales": 26347, "▁enzyme": 26348, "▁assume": 26349, "jects": 26350, "▁embed": 26351, "放疗": 26352, "司法机关": 26353, "空调": 26354, "▁Ontario": 26355, "▁sodium": 26356, "Pal": 26357, "Upon": 26358, "漫畫": 26359, "回忆": 26360, "▁pH": 26361, "connected": 26362, "诠释": 26363, "放射性": 26364, "剖析": 26365, "▁Ak": 26366, "」、": 26367, "Source": 26368, "社会发展": 26369, "极化": 26370, "非常重要": 26371, "不满": 26372, "劳动者的": 26373, "不断扩大": 26374, "事业的": 26375, "构件": 26376, "建党": 26377, "重心": 26378, "Norm": 26379, "▁sale": 26380, "影视": 26381, "臺北": 26382, "▁Register": 26383, "▁hier": 26384, "▁arth": 26385, "Case": 26386, "無法": 26387, "▁borders": 26388, "如在": 26389, "高频": 26390, "如果不": 26391, "青海": 26392, "月底": 26393, "公開": 26394, "urable": 26395, "Day": 26396, "修建": 26397, "▁reflection": 26398, "ogens": 26399, "若干问题的": 26400, "应当在": 26401, "中国梦": 26402, "世纪的": 26403, "背后的": 26404, "体现出": 26405, "色谱": 26406, "进一步完善": 26407, "剧烈": 26408, "淋巴细胞": 26409, "人才的": 26410, "profit": 26411, "▁actor": 26412, "▁approached": 26413, "▁fuels": 26414, "种族": 26415, "▁Key": 26416, "▁▁-": 26417, "▁achievement": 26418, "的基本原理": 26419, "绝缘": 26420, "选修": 26421, "▁divine": 26422, "▁hospitals": 26423, "▁nice": 26424, "有许多": 26425, "結束": 26426, "首个": 26427, "中国共产党人": 26428, "队伍建设": 26429, "的民族": 26430, "表现形式": 26431, "强有力的": 26432, "与合作": 26433, "应有的": 26434, "互利": 26435, "▁ears": 26436, "教科书": 26437, "是根据": 26438, "▁Mill": 26439, "部落": 26440, "wich": 26441, "▁incidence": 26442, "▁shore": 26443, "▁haven": 26444, "研究方法": 26445, "的人工": 26446, "而又": 26447, "增生": 26448, "变性": 26449, "glas": 26450, "▁cha": 26451, "▁Gulf": 26452, "▁thoroughly": 26453, "▁mold": 26454, "角度看": 26455, "财政收入": 26456, "业务流程": 26457, "加息": 26458, "等同": 26459, "招标": 26460, "金融体系": 26461, "阻抗": 26462, "不敢": 26463, "机车": 26464, "县城": 26465, "▁synthesis": 26466, "onesia": 26467, "▁opposition": 26468, "中性": 26469, "fat": 26470, "beta": 26471, "lem": 26472, "ordan": 26473, "()▁": 26474, "AG": 26475, "领导下": 26476, "强迫": 26477, "▁bias": 26478, "Init": 26479, "的一次": 26480, "地名": 26481, "(-": 26482, "theastern": 26483, "Bal": 26484, "education": 26485, "▁equations": 26486, "▁vitamins": 26487, "责任感": 26488, "一件": 26489, "仓储": 26490, "南宋": 26491, "负有": 26492, "学期": 26493, "陆军": 26494, "但从": 26495, "三角形": 26496, "傳統": 26497, "▁hockey": 26498, "▁participated": 26499, "中央政府": 26500, "凋亡": 26501, "名誉": 26502, "在现代": 26503, "动荡": 26504, "的生物": 26505, "▁Reading": 26506, "今日": 26507, "ependence": 26508, "▁grasp": 26509, "Always": 26510, "▁determining": 26511, "efits": 26512, "▁tob": 26513, "phones": 26514, "▁hormones": 26515, "▁occasionally": 26516, "TM": 26517, "第五章": 26518, "三个代表": 26519, "务实": 26520, "市委": 26521, "和谐社会": 26522, "充实": 26523, "而已": 26524, "][": 26525, "▁Jean": 26526, "超过了": 26527, "长达": 26528, "▁Jr": 26529, "Lab": 26530, "▁Connect": 26531, "▁promise": 26532, "▁crown": 26533, "pop": 26534, "rophy": 26535, "层面的": 26536, "主力": 26537, "▁regulatory": 26538, "▁Spring": 26539, "Test": 26540, "▁paying": 26541, "▁Memorial": 26542, "olas": 26543, "过分": 26544, "国家治理体系和治理能力": 26545, "国家机关": 26546, "和行为": 26547, "不仅可以": 26548, "集成电路": 26549, "业的": 26550, "模型中": 26551, "的特性": 26552, "TD": 26553, "的资源": 26554, "Rh": 26555, "▁Kar": 26556, "▁paragraph": 26557, "警告": 26558, "▁golden": 26559, "▁perfectly": 26560, "▁removing": 26561, "una": 26562, "这种情况": 26563, "法等": 26564, "华为": 26565, "Wood": 26566, "around": 26567, "▁entities": 26568, "▁surrounded": 26569, "▁Band": 26570, "chi": 26571, "之一的": 26572, "创新性": 26573, "养老金": 26574, "生产方式": 26575, "矿物": 26576, "▁tot": 26577, "我们需要": 26578, "仍在": 26579, "eem": 26580, "Education": 26581, "▁relate": 26582, "Johnson": 26583, "▁Golden": 26584, "▁Commons": 26585, "和水": 26586, "主要用于": 26587, "动物的": 26588, "无线电": 26589, "阴阳": 26590, "▁Guard": 26591, "▁muc": 26592, "▁behavioral": 26593, "视图": 26594, "VE": 26595, "▁advances": 26596, "大道": 26597, "urring": 26598, "▁pupils": 26599, "▁Cost": 26600, "第五节": 26601, "理论创新": 26602, "出发点": 26603, "人类文明": 26604, "联想": 26605, "付出": 26606, "紧迫": 26607, "言论": 26608, "牢记": 26609, "具有重要的": 26610, "行動": 26611, "▁quantities": 26612, "Physical": 26613, "▁dispos": 26614, "▁doors": 26615, "没有任何": 26616, "▁duty": 26617, "公交": 26618, "经验和": 26619, "reshold": 26620, "▁attitudes": 26621, "▁exception": 26622, "▁Level": 26623, "cents": 26624, "气温": 26625, "父親": 26626, "ão": 26627, "产品和": 26628, "立德树": 26629, "财政政策": 26630, "提起诉讼": 26631, "价款": 26632, "两侧": 26633, "反映出": 26634, "▁Broad": 26635, "thens": 26636, "分析的": 26637, "迫使": 26638, "boards": 26639, "▁contents": 26640, "▁genre": 26641, "▁universities": 26642, "▁IS": 26643, "obb": 26644, "自发": 26645, "转为": 26646, "农场": 26647, "▁unders": 26648, "▁participating": 26649, "▁situated": 26650, "主义者": 26651, "ikipedia": 26652, "完工": 26653, "Between": 26654, "ruce": 26655, "Major": 26656, "生产者": 26657, "稿件": 26658, "高素质": 26659, "物体的": 26660, "姿态": 26661, "有一定": 26662, "不一定": 26663, "解决的": 26664, "主义和": 26665, "采取了": 26666, "蔓延": 26667, "▁brush": 26668, "▁meditation": 26669, "▁inch": 26670, "▁BBC": 26671, "不過": 26672, "▁fan": 26673, "▁boxes": 26674, "isa": 26675, "aa": 26676, "地上": 26677, "达峰": 26678, "▁thrive": 26679, "的女": 26680, "uits": 26681, "現在": 26682, "gebra": 26683, "但也": 26684, "实验中": 26685, "肿瘤细胞": 26686, "行政复议": 26687, "实际问题": 26688, "往来": 26689, "征税": 26690, "▁signaling": 26691, "等工作": 26692, "扭曲": 26693, "Australian": 26694, "insula": 26695, "bums": 26696, "▁tang": 26697, "Jack": 26698, "bas": 26699, "erick": 26700, "reative": 26701, "▁specified": 26702, "他是": 26703, "▁footballer": 26704, "会的": 26705, "注意到": 26706, "产值": 26707, "被害人": 26708, "板块": 26709, "副教授": 26710, "地表": 26711, "自然的": 26712, "发光": 26713, "raints": 26714, "iances": 26715, "APP": 26716, "▁although": 26717, "▁recipes": 26718, "fa": 26719, "痛苦": 26720, "收敛": 26721, "mia": 26722, "▁batteries": 26723, "Home": 26724, "click": 26725, "estock": 26726, "▁...▁": 26727, "▁altered": 26728, "▁rhythm": 26729, "?▁": 26730, "▁exhibition": 26731, "▁injured": 26732, "▁ca": 26733, "科技革命": 26734, "理政": 26735, "富强": 26736, "支持和": 26737, "限制了": 26738, "遗嘱": 26739, "度量": 26740, "▁Culture": 26741, "emor": 26742, "可以被": 26743, "▁statistical": 26744, "▁stakeholders": 26745, "▁Andrew": 26746, "减税": 26747, "除非": 26748, "bial": 26749, "圆形": 26750, "现存": 26751, "▁revers": 26752, "ainst": 26753, "年代初": 26754, "▁clouds": 26755, "▁existed": 26756, "▁Pop": 26757, "ementia": 26758, "国际上": 26759, "诸侯": 26760, "服务提供": 26761, "盆地": 26762, "電視台": 26763, "▁parl": 26764, "▁fo": 26765, "writer": 26766, "wall": 26767, "▁clay": 26768, "▁propag": 26769, "▁impressive": 26770, "▁tracking": 26771, "Studies": 26772, "▁carboh": 26773, "Lastly": 26774, "▁artwork": 26775, "▁streams": 26776, "效率的": 26777, "venth": 26778, "▁reveals": 26779, "▁sacred": 26780, "alpha": 26781, "method": 26782, "▁buff": 26783, "▁boundary": 26784, "平时": 26785, "理想的": 26786, "结构与": 26787, "指明了": 26788, "租金": 26789, "内心": 26790, "出行": 26791, "地利": 26792, "Internet": 26793, "▁Mult": 26794, "▁verb": 26795, "▁Greece": 26796, "▁joints": 26797, "bourne": 26798, "工作会议": 26799, "可以利用": 26800, "可为": 26801, "公示": 26802, "趣味": 26803, "▁Colorado": 26804, "▁entrance": 26805, "化为": 26806, "▁ranges": 26807, "deg": 26808, "section": 26809, "bris": 26810, "▁painted": 26811, "Dev": 26812, "克兰": 26813, "经济增长的": 26814, "迫切需要": 26815, "长三角": 26816, "环境影响": 26817, "sun": 26818, "okyo": 26819, "mediate": 26820, "hans": 26821, "性状": 26822, "raging": 26823, "axis": 26824, "▁pel": 26825, "▁committee": 26826, "▁locally": 26827, "▁utilize": 26828, "person": 26829, "ixed": 26830, "▁Corps": 26831, "小板": 26832, "或者说": 26833, "▁Governor": 26834, "同时也是": 26835, "概念的": 26836, "▁reflected": 26837, "▁prohib": 26838, "▁advancements": 26839, "的分类": 26840, "Log": 26841, "▁sch": 26842, "呼吸道": 26843, "细分": 26844, "可作为": 26845, "解决的问题": 26846, "特权": 26847, "▁Mountains": 26848, "起始": 26849, "▁Set": 26850, "▁appearances": 26851, "▁enjoyed": 26852, "▁traveling": 26853, "stru": 26854, "▁ion": 26855, "Old": 26856, "▁Argent": 26857, "Professor": 26858, "▁proposal": 26859, "的先": 26860, "多方": 26861, "残疾人": 26862, "不知道": 26863, "▁femin": 26864, "▁LGBT": 26865, "▁contexts": 26866, "ilst": 26867, "▁Daniel": 26868, "▁distinctive": 26869, "▁▁▁▁▁▁▁▁▁": 26870, "Sports": 26871, "▁Early": 26872, "bone": 26873, "就需要": 26874, "抽样": 26875, "的直接": 26876, "听力": 26877, "在生产": 26878, "管理学": 26879, "ectors": 26880, "系的": 26881, "区和": 26882, "可以对": 26883, "中被": 26884, "▁kitchen": 26885, "是目前": 26886, "▁encouraging": 26887, "Results": 26888, "▁Sus": 26889, "determ": 26890, "▁peer": 26891, "ographer": 26892, "风险评估": 26893, "继承人": 26894, "berries": 26895, "parents": 26896, "▁Netherlands": 26897, "▁wash": 26898, "▁harmony": 26899, "alog": 26900, "情況": 26901, "quir": 26902, "rosis": 26903, "十条": 26904, "和价值": 26905, "通过的": 26906, "事业发展": 26907, "长期的": 26908, "子宫": 26909, "生活中的": 26910, "礼仪": 26911, "精品": 26912, "奉献": 26913, "期权": 26914, "grad": 26915, "▁Sab": 26916, "liter": 26917, "▁shoes": 26918, "深入研究": 26919, "概况": 26920, "Eventually": 26921, "▁cooperation": 26922, "▁Theory": 26923, "天文学": 26924, "▁Bon": 26925, "advant": 26926, "海軍": 26927, "Effect": 26928, "egu": 26929, "onder": 26930, "▁Secretary": 26931, "maybe": 26932, "▁breed": 26933, "▁landing": 26934, "▁mothers": 26935, "筛查": 26936, "rypt": 26937, "built": 26938, "▁autism": 26939, "▁manifest": 26940, "十大": 26941, "资产负债表": 26942, "发病率": 26943, "扭转": 26944, "缺口": 26945, "会被": 26946, "个体的": 26947, "anz": 26948, "▁Ha": 26949, "▁hat": 26950, "▁telesc": 26951, "esium": 26952, "bass": 26953, "▁bringing": 26954, "人以": 26955, "在网络": 26956, "汇总": 26957, "与否": 26958, "创始": 26959, "value": 26960, "▁elderly": 26961, "conduct": 26962, "local": 26963, "▁confront": 26964, "会影响": 26965, "损害的": 26966, "是一门": 26967, "历经": 26968, "培养目标": 26969, "电位": 26970, "再现": 26971, "往往是": 26972, "人脸": 26973, "前提下": 26974, "onday": 26975, "▁soul": 26976, "orship": 26977, "▁assembly": 26978, "fare": 26979, "Den": 26980, "▁identical": 26981, "▁extens": 26982, "▁atoms": 26983, "▁slaves": 26984, "青岛": 26985, "侵入": 26986, "推翻": 26987, "代数": 26988, "內容": 26989, "▁devast": 26990, "▁buying": 26991, "▁telling": 26992, "思考题": 26993, "公益诉讼": 26994, "但对": 26995, "受教育": 26996, "紧密结合": 26997, "联系的": 26998, "京津冀": 26999, "以满足": 27000, "青藏高原": 27001, "帮扶": 27002, "但这": 27003, "Hon": 27004, "雙打": 27005, "▁Est": 27006, "▁regulate": 27007, "▁vaccines": 27008, "▁promising": 27009, "▁tobacco": 27010, "beg": 27011, "项目管理": 27012, "血小板": 27013, "最具": 27014, "的区域": 27015, "市政": 27016, "prop": 27017, "▁Bern": 27018, "▁aside": 27019, "▁translated": 27020, "NR": 27021, "backs": 27022, "会计师": 27023, "这就要求": 27024, "质性": 27025, "位移": 27026, "寄存": 27027, "的最新": 27028, "amilies": 27029, "core": 27030, "玩家": 27031, "▁paths": 27032, "▁storytelling": 27033, "▁scr": 27034, "▁speakers": 27035, "等信息": 27036, "和法律": 27037, "有限责任": 27038, "▁adaptation": 27039, "▁Ess": 27040, "▁accomplish": 27041, "提高到": 27042, "中之": 27043, "新课": 27044, "义务的": 27045, "应注意": 27046, "表面的": 27047, "吸引力": 27048, "牵头": 27049, "和教育": 27050, "党章": 27051, "▁Sand": 27052, "▁chromos": 27053, "该方法": 27054, "▁nutrient": 27055, "▁beans": 27056, "▁graduate": 27057, "Found": 27058, "▁Chart": 27059, "home": 27060, "长沙": 27061, "](#": 27062, "较长": 27063, "emale": 27064, "iblical": 27065, "Opt": 27066, "▁gift": 27067, "▁socio": 27068, "▁Garden": 27069, "在未来": 27070, "金融科技": 27071, "情况的": 27072, "始终坚持": 27073, "敏感性": 27074, "专科": 27075, "全力": 27076, "中也": 27077, "Luc": 27078, "马斯": 27079, "Identify": 27080, "thet": 27081, "▁pets": 27082, "简单地": 27083, "西斯": 27084, "▁sew": 27085, "▁ancestors": 27086, "▁reign": 27087, "iously": 27088, "spring": 27089, "▁Ell": 27090, "计划经济": 27091, "早已": 27092, "▁Action": 27093, "▁collecting": 27094, "▁profit": 27095, "▁saved": 27096, "▁bees": 27097, "akespe": 27098, "变的": 27099, "located": 27100, "▁teachings": 27101, "IoT": 27102, "array": 27103, "深层": 27104, "共同体的": 27105, "和工作": 27106, "生命力": 27107, "不平等": 27108, "地位的": 27109, "积极作用": 27110, "畸形": 27111, "发热": 27112, "军的": 27113, "与非": 27114, "传达": 27115, "▁Ash": 27116, "▁compan": 27117, "微分": 27118, "Encourage": 27119, "Bro": 27120, "▁Three": 27121, "▁HT": 27122, "mega": 27123, "▁package": 27124, "下来的": 27125, "切入": 27126, "▁sympt": 27127, "▁customs": 27128, "plate": 27129, "Put": 27130, "▁gran": 27131, "web": 27132, "▁Antar": 27133, "球队": 27134, "Comb": 27135, "治国理政": 27136, "西方国家": 27137, "产学": 27138, "发票": 27139, "庞大的": 27140, "严肃": 27141, "结构化": 27142, "▁circul": 27143, "不属于": 27144, "Indeed": 27145, "▁evil": 27146, "▁orange": 27147, "▁reflects": 27148, "▁subtle": 27149, "▁tribut": 27150, "hk": 27151, "现在的": 27152, "火星": 27153, "itus": 27154, "语言的": 27155, "ashing": 27156, "年被": 27157, "aiwan": 27158, "attered": 27159, "▁Ba": 27160, "▁Stadium": 27161, "通信技术": 27162, "新冠肺炎疫情": 27163, "之间存在": 27164, "在不": 27165, "作詞": 27166, "反向": 27167, "ropolitan": 27168, "▁suicide": 27169, "▁containers": 27170, "万亿": 27171, "教学法": 27172, "各级政府": 27173, "承租": 27174, "情怀": 27175, "基站": 27176, "血栓": 27177, "走进": 27178, "纽带": 27179, "又能": 27180, "的局面": 27181, "▁adhere": 27182, "要素的": 27183, "成型": 27184, "需求和": 27185, "doi": 27186, "▁restore": 27187, "▁abandoned": 27188, "▁territories": 27189, "▁cran": 27190, "亚太": 27191, "共同的": 27192, "▁Log": 27193, "▁hybrid": 27194, "▁peripher": 27195, "tainment": 27196, "捕捉": 27197, "▁【": 27198, "phabet": 27199, "▁renamed": 27200, "岁的": 27201, "耐药": 27202, "变成了": 27203, "群落": 27204, "通俗": 27205, "宽带": 27206, "加之": 27207, "试行": 27208, "服务体系": 27209, "▁Wars": 27210, "》▁▁": 27211, "coll": 27212, "了一些": 27213, "Mex": 27214, "生殖": 27215, "▁Fig": 27216, "这是一种": 27217, "成为一个": 27218, "chant": 27219, "有多": 27220, "并将其": 27221, "Along": 27222, "Additional": 27223, "chester": 27224, "▁annually": 27225, "▁everywhere": 27226, "▁lemon": 27227, "▁AM": 27228, "十二五": 27229, "学时": 27230, "重点领域": 27231, "中指出": 27232, "询问": 27233, "酒精": 27234, "▁Support": 27235, "而生": 27236, "Indian": 27237, "flies": 27238, "▁Bell": 27239, "▁bottle": 27240, "▁tou": 27241, "loss": 27242, "oking": 27243, "▁Live": 27244, "副主席": 27245, "股市": 27246, "后世": 27247, "柏林": 27248, "北海": 27249, "▁expanding": 27250, "Timmy": 27251, "▁delicate": 27252, "▁spacecraft": 27253, "omot": 27254, "生态环境保护": 27255, "数字货币": 27256, "人工智能技术": 27257, "日元": 27258, "建制": 27259, "自然科学基金": 27260, "iga": 27261, "ognition": 27262, "Ma": 27263, "abama": 27264, "▁restoration": 27265, "▁specimens": 27266, "▁gathering": 27267, "▁struggling": 27268, "current": 27269, "Oxford": 27270, "长安": 27271, "任何一个": 27272, "不一": 27273, "eeds": 27274, "▁therapies": 27275, "三国": 27276, "▁Spirit": 27277, "▁Sav": 27278, "公允价值": 27279, "家具": 27280, "外部环境": 27281, "自然灾害": 27282, "审慎": 27283, "established": 27284, "affe": 27285, "十月": 27286, "衰减": 27287, "用了": 27288, "▁Pakistan": 27289, "overe": 27290, "Cast": 27291, "▁cub": 27292, "▁correlation": 27293, "▁delight": 27294, "▁nu": 27295, "▁delve": 27296, "▁integrity": 27297, "▁positively": 27298, "▁Toronto": 27299, "cond": 27300, "ownt": 27301, "▁▁.": 27302, "Name": 27303, "wer": 27304, "更换": 27305, "剥夺": 27306, "estone": 27307, "grams": 27308, "CAD": 27309, "techn": 27310, "演奏": 27311, "▁surviv": 27312, "▁worship": 27313, "unar": 27314, "ennessee": 27315, "粮食安全": 27316, "来确定": 27317, "而后": 27318, "弱势": 27319, "ст": 27320, "真的": 27321, "▁smoothly": 27322, "不等": 27323, "enza": 27324, "iberty": 27325, "elson": 27326, "inflammatory": 27327, "要求和": 27328, "得不到": 27329, "应激": 27330, "很可能": 27331, "▁resistant": 27332, "和中": 27333, "playing": 27334, "▁poems": 27335, "▁strengths": 27336, "()`▁": 27337, "▁comic": 27338, "ART": 27339, "▁AND": 27340, "▁overview": 27341, "▁optical": 27342, "▁institution": 27343, "icts": 27344, "发展为": 27345, "马克思主义的": 27346, "的证据": 27347, "年我国": 27348, "城市群": 27349, "迈向": 27350, "汲取": 27351, "肝炎": 27352, "aments": 27353, "平民": 27354, "×▁": 27355, "giene": 27356, "▁cow": 27357, "▁tailored": 27358, "伊朗": 27359, "akespeare": 27360, "▁ty": 27361, "對於": 27362, "umbers": 27363, "▁enhancing": 27364, "bral": 27365, "建国": 27366, "held": 27367, "▁earthquake": 27368, "的最后": 27369, "▁sheets": 27370, "▁dinner": 27371, "▁ranging": 27372, "Cong": 27373, "ilms": 27374, "Econom": 27375, "利于": 27376, "的运动": 27377, "在国内": 27378, "改革创新": 27379, "外语": 27380, "测绘": 27381, "▁striking": 27382, "子公司": 27383, "wealth": 27384, "▁soccer": 27385, "▁throat": 27386, "▁scheme": 27387, "Star": 27388, "chestra": 27389, "dependent": 27390, "tok": 27391, "Tor": 27392, "marks": 27393, "▁Laboratory": 27394, "erusalem": 27395, "sing": 27396, "深厚": 27397, "相结合的": 27398, "两方面": 27399, "投标": 27400, "测算": 27401, "与学生": 27402, "代表性的": 27403, "来解决": 27404, "这场": 27405, "余人": 27406, "方法论": 27407, "作文": 27408, "▁weekly": 27409, "▁columns": 27410, "结婚": 27411, ",▁'": 27412, "球员": 27413, "secut": 27414, "▁pod": 27415, "这表明": 27416, "建设项目": 27417, "反应的": 27418, "▁critically": 27419, "▁distant": 27420, "electric": 27421, "▁savings": 27422, "EST": 27423, "idelines": 27424, "▁politicians": 27425, "课程内容": 27426, "原则上": 27427, "交融": 27428, "军民": 27429, "同学们": 27430, "放松": 27431, "▁bowl": 27432, "▁cater": 27433, "▁acres": 27434, "▁calling": 27435, "▁invited": 27436, "iph": 27437, "effective": 27438, "神秘": 27439, "asia": 27440, "▁ending": 27441, "▁faculty": 27442, "▁Gre": 27443, "世纪末": 27444, "在不同的": 27445, "维埃": 27446, "向往": 27447, "祖父": 27448, "可扩展": 27449, "葡萄牙": 27450, "▁Place": 27451, "ovak": 27452, "唯一的": 27453, "▁Oxford": 27454, "living": 27455, "ante": 27456, "▁mi": 27457, "vi": 27458, "法令": 27459, "▁harsh": 27460, "following": 27461, "▁Hebrew": 27462, "▁spray": 27463, "新华社": 27464, "生机": 27465, "小微": 27466, "知识产权保护": 27467, "事关": 27468, "基础和": 27469, "磁盘": 27470, "风景": 27471, "临床上": 27472, "保证了": 27473, "转运": 27474, "知縣": 27475, "畢業": 27476, "▁plain": 27477, "inton": 27478, "ooked": 27479, "▁robots": 27480, "▁believes": 27481, "▁intention": 27482, "▁pestic": 27483, "▁plates": 27484, "▁sunny": 27485, "chain": 27486, "▁Bol": 27487, "的抗": 27488, "负面影响": 27489, "means": 27490, "▁Farm": 27491, "非线性": 27492, "Fore": 27493, "det": 27494, "cop": 27495, "overning": 27496, "▁confusion": 27497, "▁preservation": 27498, "Cr": 27499, "▁vig": 27500, "核电": 27501, "免疫系统": 27502, "充分考虑": 27503, "必须是": 27504, "的义务": 27505, "总体上": 27506, "参观": 27507, "当家": 27508, "ni": 27509, "登录": 27510, "aton": 27511, "▁spreading": 27512, "▁accidents": 27513, "▁gear": 27514, "▁representative": 27515, "\"}": 27516, "私营": 27517, "任职": 27518, "一天": 27519, "东京": 27520, "▁Municip": 27521, "和相关": 27522, "▁Dun": 27523, "區域": 27524, "小時": 27525, "編曲": 27526, "init": 27527, "与经济": 27528, "收回": 27529, "万美元": 27530, "游客": 27531, "游击": 27532, "红细胞": 27533, "原生": 27534, "重叠": 27535, "人所": 27536, "aga": 27537, "▁lig": 27538, "kh": 27539, "anner": 27540, "▁Java": 27541, "的转变": 27542, "作出的": 27543, "议员": 27544, "必须要": 27545, "内地": 27546, "Sen": 27547, "自旋": 27548, "地主": 27549, "在他": 27550, "恰恰": 27551, "▁phenomena": 27552, "▁rainf": 27553, "▁wars": 27554, "篇章": 27555, "课程教学": 27556, "政府对": 27557, "▁Univers": 27558, "第十三": 27559, "长城": 27560, "raham": 27561, "▁cattle": 27562, "▁Prevention": 27563, "▁inequality": 27564, "▁Indians": 27565, "▁returning": 27566, "treated": 27567, "▁debris": 27568, "部份": 27569, "Space": 27570, "▁ID": 27571, "gae": 27572, "在高": 27573, "尔省": 27574, "angel": 27575, "▁churches": 27576, "▁comprehension": 27577, "▁reserved": 27578, "▁Republican": 27579, "技术进步": 27580, "激励机制": 27581, "再审": 27582, "通风": 27583, "协议的": 27584, "尔德": 27585, "ritic": 27586, "推测": 27587, "Run": 27588, "▁Resp": 27589, "▁quantity": 27590, "▁valley": 27591, "▁update": 27592, "▁strains": 27593, "IST": 27594, "▁axis": 27595, "▁afternoon": 27596, "▁saving": 27597, "一段时间": 27598, "造血": 27599, "蒸发": 27600, "演讲": 27601, "域网": 27602, "rigation": 27603, "▁spons": 27604, "CV": 27605, "forcing": 27606, "相较": 27607, "Notable": 27608, "▁Os": 27609, "人民群众的": 27610, "涉及的": 27611, "的依据": 27612, "老龄化": 27613, "变压": 27614, "这部分": 27615, "同样的": 27616, "舆情": 27617, "强劲": 27618, "财税": 27619, "以人为本": 27620, "的内在": 27621, "立方米": 27622, "假定": 27623, "大阪": 27624, "▁restrictions": 27625, "▁worlds": 27626, "▁Digital": 27627, "Different": 27628, "单词": 27629, "Eth": 27630, "igm": 27631, "Western": 27632, "Taxonomy": 27633, "人是": 27634, "保卫": 27635, "对外贸易": 27636, "前途": 27637, "▁mystery": 27638, "SU": 27639, "年版": 27640, "▁Rod": 27641, "evin": 27642, "pan": 27643, "unctions": 27644, "这项研究": 27645, "诉讼时效": 27646, "全国各族人民": 27647, "案件中": 27648, "放缓": 27649, "关怀": 27650, "▁comparing": 27651, "很小": 27652, "▁descent": 27653, "▁alpha": 27654, "▁communications": 27655, "彼得": 27656, "▁desert": 27657, "isticated": 27658, "一门": 27659, "不出": 27660, "osaur": 27661, "hetic": 27662, "▁bleeding": 27663, "▁intersection": 27664, "丈夫": 27665, "▁sequences": 27666, "<0x9F>": 31021, "different": 31022, "帝國": 31023, "党的政治": 31024, "两者的": 31025, "内战": 31026, "叶片": 31027, "细胞因子": 31028, "ée": 31029, "▁Rose": 31030, "樂團": 31031, "gium": 31032, "producing": 31033, "accessed": 31034, "阿根廷": 31035, "▁decreases": 31036, "▁encounters": 31037, "▁pupp": 31038, "▁intr": 31039, "True": 31040, "és": 31041, "王子": 31042, "antry": 31043, "会计信息": 31044, "据统计": 31045, "所具有": 31046, "劳动合同法": 31047, "常态化": 31048, "担负": 31049, "智能合约": 31050, "自觉地": 31051, "先天性": 31052, "医务": 31053, "构建人类命运共同体": 31054, "简要": 31055, "它将": 31056, "惠及": 31057, "监管部门": 31058, "的临床": 31059, "ilib": 31060, "Proper": 31061, "▁symmet": 31062, "itime": 31063, "晚上": 31064, "珊瑚": 31065, "role": 31066, "Ur": 31067, "▁divisions": 31068, "Exp": 31069, "▁organism": 31070, "▁allergies": 31071, "▁genuine": 31072, "▁watched": 31073, "▁Cra": 31074, "▁bless": 31075, "Sou": 31076, "▁coh": 31077, "而导致": 31078, "和改进": 31079, "罪犯": 31080, "永恒": 31081, "的发展趋势": 31082, "ergarten": 31083, "▁Matt": 31084, "英格蘭": 31085, "的现代化": 31086, "全面深化": 31087, "后再": 31088, "市场在": 31089, "中的重要": 31090, "解决好": 31091, "出具": 31092, "具有较强的": 31093, "文化交流": 31094, "尤为重要": 31095, "接受的": 31096, "或服务": 31097, "一种新的": 31098, "企业与": 31099, "区位": 31100, "奠定了基础": 31101, "服用": 31102, "事务所": 31103, "职称": 31104, "危险因素": 31105, "收入差距": 31106, "nea": 31107, "群众的": 31108, "直辖市": 31109, "entieth": 31110, "發表": 31111, "▁aggreg": 31112, "▁license": 31113, "▁peaceful": 31114, "▁atmospheric": 31115, "ulent": 31116, "▁drops": 31117, "AST": 31118, "▁Francis": 31119, "▁expedition": 31120, "▁contamination": 31121, "▁convin": 31122, "▁prone": 31123, "▁straw": 31124, "▁Relations": 31125, "stitutional": 31126, "▁Alliance": 31127, "acking": 31128, "大类": 31129, "或多": 31130, "最多的": 31131, "Ter": 31132, "光合": 31133, "▁hypertension": 31134, "orrect": 31135, "▁germ": 31136, "ugg": 31137, "▁dough": 31138, "▁pond": 31139, "ytic": 31140, "associated": 31141, "发生率": 31142, "研讨会": 31143, "变压器": 31144, "促进社会": 31145, "工程建设": 31146, "学生们": 31147, "抽取": 31148, "联络": 31149, "毛泽东思想": 31150, "致富": 31151, "外延": 31152, "个国家": 31153, "feeding": 31154, "Engine": 31155, "主人": 31156, "▁Computer": 31157, "▁Raj": 31158, "▁restaurant": 31159, "▁breathe": 31160, "▁counterparts": 31161, "▁tunnel": 31162, "▁hotel": 31163, "──": 31164, "分发": 31165, "▁PR": 31166, "站点": 31167, "\":": 31168, "▁beer": 31169, "生命的": 31170, "莱茵省": 31171, "向下": 31172, "中将": 31173, "基本概念": 31174, "同位": 31175, "上午": 31176, "观的": 31177, "pdf": 31178, "oard": 31179, "▁Integ": 31180, "興建": 31181, "ationally": 31182, "▁Guinea": 31183, "毕业后": 31184, "▁counts": 31185, "▁flowing": 31186, "▁screens": 31187, "其他的": 31188, ".\"\"": 31189, "erness": 31190, "所说": 31191, "的历史性": 31192, "和保障": 31193, "学前教育": 31194, "的基本理论": 31195, "突破口": 31196, "但对于": 31197, "原发性": 31198, "电化学": 31199, "Fire": 31200, "▁bust": 31201, "▁recycled": 31202, "ermat": 31203, "▁incidents": 31204, "▁pushing": 31205, "南非": 31206, "老化": 31207, "▁Village": 31208, "▁Ide": 31209, "局的": 31210, "过大": 31211, "矛盾的": 31212, "鲜明的": 31213, "▁aquatic": 31214, "路上": 31215, "的正": 31216, "▁bark": 31217, "华东": 31218, "透露": 31219, ",「": 31220, "enez": 31221, "▁cer": 31222, "sharing": 31223, "▁evolutionary": 31224, "▁formats": 31225, "其次是": 31226, "开辟了": 31227, "的良好": 31228, "十六条": 31229, "利用效率": 31230, "油气": 31231, "不允许": 31232, "最高人民法院关于": 31233, "可实现": 31234, "的重要因素": 31235, "领导小组": 31236, "恐惧": 31237, "终点": 31238, "夫妻共同": 31239, "相辅相": 31240, "brain": 31241, "▁heated": 31242, "▁qualified": 31243, ",▁‘": 31244, "甲烷": 31245, "eval": 31246, "金牌": 31247, "早年": 31248, "AE": 31249, "mans": 31250, "▁ber": 31251, "▁scan": 31252, "avirus": 31253, "▁frozen": 31254, "▁heroes": 31255, "▁neighboring": 31256, "▁rod": 31257, "人道": 31258, "这为": 31259, "治愈": 31260, "semble": 31261, "▁concert": 31262, "inely": 31263, "▁innovations": 31264, "serving": 31265, "廣東": 31266, "内陆": 31267, "切割": 31268, "他还": 31269, "醫院": 31270, "範圍": 31271, "Pass": 31272, "商店": 31273, "描述了": 31274, "Associ": 31275, "KD": 31276, "▁puts": 31277, "raid": 31278, "表現": 31279, "▁allev": 31280, "肢体": 31281, "环境监测": 31282, "的人格": 31283, "土地使用权": 31284, "新鲜": 31285, "综合考虑": 31286, "特殊性": 31287, "的数字": 31288, "▁resolve": 31289, "相似的": 31290, "model": 31291, "Present": 31292, "▁Gil": 31293, "Blood": 31294, "▁Athlet": 31295, "abitat": 31296, "▁Chile": 31297, "▁recall": 31298, "▁challenged": 31299, "▁emit": 31300, "▁stimulate": 31301, "通过将": 31302, "隐私保护": 31303, "并向": 31304, "水和": 31305, "earl": 31306, "cepts": 31307, "▁Miller": 31308, "▁coin": 31309, "engu": 31310, "▁legit": 31311, "▁executed": 31312, "▁empire": 31313, "▁Assessment": 31314, "▁belt": 31315, "▁electoral": 31316, "▁highlighted": 31317, "进士": 31318, "分担": 31319, "四中全会": 31320, "进一步发展": 31321, "不服": 31322, "内阁": 31323, "心力": 31324, "融资租赁": 31325, "暂行": 31326, "美好生活的": 31327, "第一步": 31328, "通则": 31329, "▁Drug": 31330, "orf": 31331, "在上海": 31332, "遗迹": 31333, "学士": 31334, "次年": 31335, "opathy": 31336, "Ra": 31337, "mid": 31338, "'.": 31339, "special": 31340, "Pay": 31341, "▁mistake": 31342, "▁pulmonary": 31343, "▁sampling": 31344, "mother": 31345, "▁steep": 31346, "▁transactions": 31347, ")|": 31348, "Geography": 31349, "▁portions": 31350, "滤波器": 31351, "影响力的": 31352, "宪政": 31353, "仍然存在": 31354, "既能": 31355, "工作和": 31356, "其三": 31357, "如果你": 31358, "▁Non": 31359, "▁voting": 31360, "Fort": 31361, "▁accounting": 31362, "▁baseline": 31363, "▁collapse": 31364, "國王": 31365, "▁reasoning": 31366, "source": 31367, "\u0006\b": 31368, "各方面的": 31369, "的主导": 31370, "处处": 31371, "领悟": 31372, "抵制": 31373, "好奇": 31374, "宏伟": 31375, "特别行政区": 31376, "减灾": 31377, "遗传学": 31378, "轮廓": 31379, "仅仅是": 31380, "文件的": 31381, "参加了": 31382, "山大": 31383, "Ms": 31384, "itched": 31385, "always": 31386, "有以下": 31387, "▁Core": 31388, "▁operator": 31389, "▁vow": 31390, "stable": 31391, "Hey": 31392, "lab": 31393, "offs": 31394, "▁nucleus": 31395, "creat": 31396, "▁burned": 31397, "▁eaten": 31398, "▁navigating": 31399, "▁Pract": 31400, "在许多": 31401, "为基本": 31402, "宽度": 31403, "北斗": 31404, "ilateral": 31405, "unciation": 31406, "news": 31407, "迄今为止": 31408, "ilty": 31409, "模态": 31410, "Jeff": 31411, "网页": 31412, "▁segments": 31413, "▁alphabet": 31414, "▁dying": 31415, "▁poorly": 31416, "▁treats": 31417, "▁hesit": 31418, "anol": 31419, "oots": 31420, "损失的": 31421, "网络中": 31422, "循环经济": 31423, "马克思列宁": 31424, "纤维素": 31425, "学校教育": 31426, "等诸多": 31427, "风俗": 31428, "肾小": 31429, "并举": 31430, "计算的": 31431, "欺骗": 31432, "▁Dal": 31433, "联合会": 31434, "▁trigg": 31435, "▁occupation": 31436, "▁artifacts": 31437, "▁brave": 31438, "▁declined": 31439, "▁safegu": 31440, "Jesus": 31441, "北大": 31442, "technology": 31443, "在过去": 31444, "升华": 31445, "权衡": 31446, "珍贵": 31447, "引人": 31448, "先导": 31449, "izoph": 31450, "製造": 31451, "▁resident": 31452, "OW": 31453, "▁perf": 31454, "▁attitude": 31455, "▁contest": 31456, "▁partnerships": 31457, "维亚": 31458, "▁Quebec": 31459, "▁departments": 31460, "ancies": 31461, "shape": 31462, "▁differentiation": 31463, "▁Baseball": 31464, "的认知": 31465, "企业对": 31466, "十五条": 31467, "能够实现": 31468, "%,": 31469, "积极推动": 31470, "四个方面": 31471, "水准": 31472, "之分": 31473, "纵深": 31474, "要约": 31475, "这种方式": 31476, "的探索": 31477, "道光": 31478, "一般情况下": 31479, "▁Deb": 31480, "暗示": 31481, "氏族": 31482, "於是": 31483, "衰落": 31484, "fight": 31485, "這種": 31486, "托管": 31487, "▁chains": 31488, "▁Appro": 31489, "lied": 31490, "Pot": 31491, "kal": 31492, "出去": 31493, "的基础设施": 31494, "的大型": 31495, "杂质": 31496, "或者是": 31497, "篡改": 31498, "metic": 31499, "Treat": 31500, "▁Franklin": 31501, "Group": 31502, "discuss": 31503, "▁Hal": 31504, "▁Elementary": 31505, "ppers": 31506, "Team": 31507, "▁acquire": 31508, "▁prevalent": 31509, "▁religions": 31510, "▁Hu": 31511, "▁Census": 31512, "为前提": 31513, "权利义务": 31514, "线粒": 31515, "矿产": 31516, "缺损": 31517, "运行机制": 31518, "防疫": 31519, "研究领域": 31520, "名录": 31521, "keys": 31522, "oxide": 31523, "▁cann": 31524, "▁alert": 31525, "▁persistent": 31526, "colspan": 31527, "▁crust": 31528, "▁resem": 31529, "初始化": 31530, "▁Local": 31531, "▁Leon": 31532, "▁Dead": 31533, "▁Czech": 31534, "提供了新的": 31535, "史记": 31536, "筹集": 31537, "将从": 31538, "所以在": 31539, "▁Wind": 31540, "▁patch": 31541, "Franc": 31542, "Official": 31543, "▁Nation": 31544, "▁enrich": 31545, "▁academ": 31546, "pace": 31547, "▁Ing": 31548, "娛樂": 31549, "最初的": 31550, "全生命周期": 31551, "环境质量": 31552, "劳动生产率": 31553, "这不仅": 31554, "掌控": 31555, "教学资源": 31556, "下调": 31557, "警惕": 31558, "红线": 31559, "▁coordination": 31560, "▁substr": 31561, "袭击": 31562, "的分子": 31563, "见图": 31564, "▁cytok": 31565, "主办": 31566, "阈值": 31567, "Hence": 31568, "rots": 31569, "陸軍": 31570, "NI": 31571, "orse": 31572, "izophren": 31573, "▁Railroad": 31574, "他们对": 31575, "该技术": 31576, "听证": 31577, "侦察": 31578, "厦门": 31579, "必须有": 31580, "上网": 31581, "exual": 31582, "青铜": 31583, "上映": 31584, "▁Role": 31585, "▁counting": 31586, "SARS": 31587, "▁Military": 31588, "enda": 31589, "Recogn": 31590, "▁scheduled": 31591, "▁shouldn": 31592, "▁Monday": 31593, "Kent": 31594, "▁chip": 31595, "ateur": 31596, "pract": 31597, "量为": 31598, "技术手段": 31599, "应当承担": 31600, "主要是指": 31601, "投资和": 31602, "改革开放和": 31603, "集资": 31604, "抗辩": 31605, "云端": 31606, "信用卡": 31607, "应急管理": 31608, "摄像头": 31609, "本位": 31610, "信息资源": 31611, "总体规划": 31612, "较多的": 31613, "为了实现": 31614, "应收账款": 31615, "萨斯": 31616, "闭环": 31617, "毛细": 31618, "物权法": 31619, "的长": 31620, "交替": 31621, "引发的": 31622, "在校": 31623, "▁hits": 31624, "是位於": 31625, "Maria": 31626, "▁Bah": 31627, "來的": 31628, "媒體": 31629, "generation": 31630, "▁graduated": 31631, "是全球": 31632, "病原体": 31633, "隐蔽": 31634, "游离": 31635, "aire": 31636, "Line": 31637, "acerb": 31638, "▁Wisconsin": 31639, "▁conclusions": 31640, "andra": 31641, "该公司": 31642, "ylon": 31643, "▁knock": 31644, "▁aloud": 31645, "▁connects": 31646, "▁enjoying": 31647, "lings": 31648, "一片": 31649, "terns": 31650, "Util": 31651, "▁Cell": 31652, "合唱": 31653, "商業": 31654, "研究小组": 31655, "时期内": 31656, "工业生产": 31657, "既可以": 31658, "配额": 31659, "我省": 31660, "蓬勃发展": 31661, "备课": 31662, "口语": 31663, "联通": 31664, "二号": 31665, "依法行政": 31666, "先进性": 31667, "企业所得税": 31668, "降低成本": 31669, "▁pharmac": 31670, "▁closest": 31671, "勋章": 31672, "昆虫": 31673, "Photo": 31674, "▁Ancient": 31675, "%▁▁": 31676, "指揮": 31677, "棒球": 31678, "Help": 31679, "▁PDF": 31680, "▁hearts": 31681, "clean": 31682, "▁extraction": 31683, "▁с": 31684, "▁physicians": 31685, "HER": 31686, "而这些": 31687, "九龍": 31688, "复旦": 31689, "两点": 31690, "▁LGBTQ": 31691, "▁dismiss": 31692, "▁feas": 31693, "▁walked": 31694, "人有": 31695, "其为": 31696, "▁soy": 31697, "ificate": 31698, "▁icon": 31699, "rost": 31700, "▁Lie": 31701, "▁bull": 31702, "▁storms": 31703, "letal": 31704, "icated": 31705, "block": 31706, "▁strip": 31707, "结构中": 31708, "孙中山": 31709, "地方的": 31710, "屋顶": 31711, "新阶段": 31712, "的主观": 31713, "集中于": 31714, "之于": 31715, "如果我们": 31716, "留置": 31717, "社保": 31718, "周知": 31719, "的业务": 31720, "vocals": 31721, "ombia": 31722, "▁mindfulness": 31723, "▁reinforce": 31724, "▁upset": 31725, "▁pine": 31726, "▁pride": 31727, "▁span": 31728, "和资源": 31729, "率领": 31730, "平安": 31731, "controlled": 31732, "Obs": 31733, "▁Les": 31734, "irs": 31735, "德尔": 31736, "▁enabled": 31737, "▁ethics": 31738, "arians": 31739, "dale": 31740, "guitar": 31741, "MHz": 31742, "急救": 31743, "进行分类": 31744, "Video": 31745, "erald": 31746, "?▁(": 31747, "▁Stephen": 31748, "▁MRI": 31749, "Online": 31750, "grim": 31751, "OF": 31752, "Illinois": 31753, "▁complement": 31754, "▁tab": 31755, "▁deleg": 31756, "▁Luther": 31757, "Mur": 31758, "acting": 31759, "embered": 31760, "Firstly": 31761, "强调的是": 31762, "政策措施": 31763, "成员的": 31764, "要将": 31765, "共同发展": 31766, "具体而言": 31767, "回升": 31768, "攻击者": 31769, "区域性": 31770, "落脚": 31771, "而没有": 31772, "论语": 31773, "沿革": 31774, "众所": 31775, "▁enhances": 31776, "一日": 31777, "Clear": 31778, "nie": 31779, "odge": 31780, "illo": 31781, "▁Captain": 31782, "odd": 31783, "▁gifts": 31784, "vo": 31785, "▁disagre": 31786, "▁reserve": 31787, "introdu": 31788, "基础的": 31789, "免疫反应": 31790, "免除": 31791, "业界": 31792, "isol": 31793, "受限": 31794, "完毕": 31795, "Psych": 31796, "urgical": 31797, "ircle": 31798, "▁polymer": 31799, "▁Tower": 31800, "▁divers": 31801, "verages": 31802, "▁illustrated": 31803, "olding": 31804, "▁bills": 31805, "▁welcome": 31806, "中国传统": 31807, "更强": 31808, "反腐": 31809, "活力的": 31810, "副院长": 31811, "只需要": 31812, "知府": 31813, "势必": 31814, "一审": 31815, "合同中": 31816, "整改": 31817, "党领导": 31818, "不同类型": 31819, "eur": 31820, "▁Offic": 31821, "ontin": 31822, "pi": 31823, "Final": 31824, "▁organizing": 31825, "ervatory": 31826, "▁smile": 31827, "▁consequence": 31828, "▁genres": 31829, "編號": 31830, "rative": 31831, "▁Own": 31832, "纠缠": 31833, "听觉": 31834, "行走": 31835, "西域": 31836, "行之": 31837, "▁Help": 31838, "的低": 31839, "了许多": 31840, "garet": 31841, "▁scal": 31842, "▁timing": 31843, "Pers": 31844, "▁chips": 31845, "▁seeks": 31846, "▁crowd": 31847, "▁plug": 31848, "▁worried": 31849, "经济利益": 31850, "药物治疗": 31851, "体现为": 31852, "相差": 31853, "货币的": 31854, "体征": 31855, "国家在": 31856, "现行的": 31857, "等领域的": 31858, "我们应该": 31859, "西欧": 31860, "仍处于": 31861, "因素的影响": 31862, "无序": 31863, "惩戒": 31864, "股权转让": 31865, "直接的": 31866, "古今": 31867, "quiry": 31868, "河道": 31869, "行為": 31870, "當中": 31871, "cancer": 31872, "▁Need": 31873, "收录": 31874, "▁Biology": 31875, "▁rival": 31876, "▁Path": 31877, "▁rocket": 31878, "▁aspir": 31879, "Episode": 31880, "▁MS": 31881, "大中": 31882, "文化与": 31883, "一对": 31884, "中存在": 31885, "完成后": 31886, "rasound": 31887, "動物": 31888, "▁Lu": 31889, "▁agreements": 31890, "Introdu": 31891, "paper": 31892, "▁snake": 31893, "became": 31894, "▁irregular": 31895, "▁washing": 31896, "urated": 31897, "▁Mot": 31898, "▁Sac": 31899, "ococc": 31900, "国家治理体系和治理能力现代化": 31901, "系统集成": 31902, "教师应": 31903, "以至": 31904, "水果": 31905, "政策性": 31906, "相互关系": 31907, "洗钱": 31908, "不同类型的": 31909, "事宜": 31910, "北极": 31911, "杀伤": 31912, "偏低": 31913, "可持续性": 31914, "人民当家作主": 31915, "浮动": 31916, "股价": 31917, "的案件": 31918, "副书记": 31919, "aptist": 31920, "▁Brad": 31921, "诺贝尔": 31922, "算法的": 31923, "后来的": 31924, "acity": 31925, "直觉": 31926, "形容": 31927, "cht": 31928, "Dav": 31929, "irical": 31930, "▁ger": 31931, "weed": 31932, "▁rescue": 31933, "▁Therapy": 31934, "developed": 31935, "▁answered": 31936, "▁filters": 31937, "▁residence": 31938, "Eval": 31939, "数列": 31940, "间隙": 31941, "侧面": 31942, "科研机构": 31943, "十一年": 31944, "合併": 31945, "不相同": 31946, "方程式": 31947, "目的地": 31948, "ailand": 31949, "吻合": 31950, "Rest": 31951, "acon": 31952, "▁Ans": 31953, "Python": 31954, "和建设": 31955, "并提出": 31956, "标准体系": 31957, "十一条": 31958, "第二百": 31959, "是不是": 31960, "帝王": 31961, "细则": 31962, "反动": 31963, "简便": 31964, "获利": 31965, "长效机制": 31966, "关乎": 31967, "议程": 31968, "台阶": 31969, "增设": 31970, "核实": 31971, "筑牢": 31972, "数据挖掘": 31973, "淡水": 31974, "所用": 31975, "总和": 31976, "赞同": 31977, "uct": 31978, "▁Prom": 31979, "属性的": 31980, "快捷": 31981, "▁Dark": 31982, "▁permit": 31983, "▁Mun": 31984, "took": 31985, "行政法": 31986, "bian": 31987, ":▁▁": 31988, "feel": 31989, "gets": 31990, "▁Hart": 31991, "这三个": 31992, "同胞": 31993, "不起": 31994, "大连": 31995, "研究方向": 31996, "人民共和國": 31997, "必須": 31998, "—▁—▁": 31999, "▁sour": 32000, "saying": 32001, "▁juvenile": 32002, "▁productive": 32003, "▁pept": 32004, "▁Hills": 32005, "教学设计": 32006, "外商投资": 32007, "马克思主义理论": 32008, "优惠政策": 32009, "由政府": 32010, "这就需要": 32011, "势头": 32012, "也成为": 32013, "职业病": 32014, "西周": 32015, "洛阳": 32016, "指标的": 32017, "回落": 32018, "并用": 32019, "即使是": 32020, "▁Queens": 32021, "Microsoft": 32022, "mostly": 32023, "▁databases": 32024, "articles": 32025, "rod": 32026, "▁ul": 32027, "戰鬥": 32028, "▁crash": 32029, "定居": 32030, "Full": 32031, "▁bridges": 32032, "并重": 32033, "家人": 32034, "话语权": 32035, "\\_": 32036, "的原": 32037, "生死": 32038, "▁dynasty": 32039, "Prim": 32040, "▁Aqu": 32041, "▁integrate": 32042, "▁interpretations": 32043, "▁viewers": 32044, "▁rolling": 32045, "金的": 32046, "▁Opp": 32047, "oberts": 32048, "htm": 32049, "▁WW": 32050, "image": 32051, "inator": 32052, "clerosis": 32053, "人口普查": 32054, "科学性": 32055, "异化": 32056, "的挑战": 32057, "能为": 32058, "诉讼请求": 32059, "变频": 32060, "电子邮件": 32061, "集权": 32062, "盛行": 32063, "富集": 32064, "成交": 32065, "摩尔": 32066, "查明": 32067, "北魏": 32068, "绿色金融": 32069, "做大": 32070, "▁continent": 32071, "行列": 32072, "Aust": 32073, "director": 32074, "▁pathogens": 32075, "▁kick": 32076, "▁embrace": 32077, "▁romantic": 32078, "▁salmon": 32079, "▁swelling": 32080, "hr": 32081, "▁economics": 32082, "inian": 32083, "iotic": 32084, "▁Si": 32085, "停滞": 32086, "合法的": 32087, "uerto": 32088, "('": 32089, "RCEP": 32090, "先前": 32091, "—▁▁—▁▁—▁▁—▁▁": 32092, "▁bottles": 32093, "▁chapters": 32094, "▁murd": 32095, "▁monthly": 32096, "osé": 32097, "英語": 32098, "▁static": 32099, "▁Territ": 32100, "▁shadow": 32101, "复合物": 32102, "▁Ni": 32103, "***": 32104, "▁meteor": 32105, "▁Premier": 32106, "rokes": 32107, "十三条": 32108, "风险挑战": 32109, "突破了": 32110, "杠杆率": 32111, "了一条": 32112, "财产权": 32113, "各种各": 32114, "而来的": 32115, "评议": 32116, "买方": 32117, "共存": 32118, "工人阶级": 32119, "涂层": 32120, "创造条件": 32121, "顺差": 32122, "信息基础设施": 32123, "大湾区": 32124, "中的地位": 32125, "研究工作": 32126, "加快构建": 32127, "什么样": 32128, "身份认证": 32129, "▁anten": 32130, "元宇宙": 32131, "inic": 32132, "oche": 32133, "itan": 32134, "untary": 32135, "graph": 32136, "eu": 32137, "▁jet": 32138, "▁Bishop": 32139, "▁cheap": 32140, "▁captain": 32141, "书的": 32142, "可能在": 32143, "是当前": 32144, "中具有": 32145, "断层": 32146, "未被": 32147, "每种": 32148, "▁stuck": 32149, "▁survivors": 32150, "▁yields": 32151, "简洁": 32152, "扩增": 32153, "一台": 32154, "▁Last": 32155, "烏克蘭": 32156, "●▁": 32157, "sound": 32158, "▁Mission": 32159, "rosc": 32160, "▁geometry": 32161, "▁Authority": 32162, "朝鮮": 32163, "▁Brook": 32164, "▁commands": 32165, "▁governance": 32166, "会计核算": 32167, "发达地区": 32168, "全面提升": 32169, "国土空间": 32170, "树脂": 32171, "选择了": 32172, "功利": 32173, "硬盘": 32174, "风貌": 32175, "廉政": 32176, "奋进": 32177, "组长": 32178, "▁ded": 32179, "▁cong": 32180, "▁chaos": 32181, "▁rituals": 32182, "第十五": 32183, "▁Tal": 32184, "ooth": 32185, "電腦": 32186, "相當": 32187, "anded": 32188, "si": 32189, "bey": 32190, "posure": 32191, "▁FC": 32192, "oping": 32193, "▁Six": 32194, "▁accord": 32195, "listed": 32196, "▁accomplished": 32197, "▁champion": 32198, "▁prolonged": 32199, ";(": 32200, "欠缺": 32201, "则为": 32202, "中亚": 32203, "▁Moh": 32204, "Cultural": 32205, "▁Youth": 32206, "ulative": 32207, "uncture": 32208, "▁Record": 32209, "▁Grade": 32210, "▁counties": 32211, "▁decomp": 32212, "▁floating": 32213, "Usually": 32214, "▁glac": 32215, "▁correlated": 32216, "▁marginalized": 32217, "土地利用": 32218, "则在": 32219, "到一个": 32220, "控制在": 32221, "发达国家的": 32222, "往往会": 32223, "的基本要求": 32224, "以下几点": 32225, "信息服务": 32226, "提高学生": 32227, "公信": 32228, "的研究成果": 32229, "举行的": 32230, "一般为": 32231, "opath": 32232, "▁Cro": 32233, "ims": 32234, "▁shield": 32235, "▁Khan": 32236, "integr": 32237, "▁wed": 32238, "▁unc": 32239, "▁Maryland": 32240, "▁eco": 32241, "boriginal": 32242, "▁sheep": 32243, "▁supportive": 32244, "▁Kal": 32245, "▁arc": 32246, "布拉": 32247, "aron": 32248, "弟子": 32249, "甲骨": 32250, "公众号": 32251, "反过来": 32252, "敏捷": 32253, "来完成": 32254, "疱疹": 32255, "ко": 32256, "在其他": 32257, "▁finance": 32258, "Working": 32259, "▁Ice": 32260, "举报": 32261, "開放": 32262, "version": 32263, "▁polym": 32264, "▁deer": 32265, "▁coding": 32266, "▁priest": 32267, "Applying": 32268, "▁consecut": 32269, "▁dangers": 32270, "achelor": 32271, "▁jaw": 32272, "教育工作": 32273, "协同创新": 32274, "资料的": 32275, "和学习": 32276, "哲学的": 32277, "座谈会": 32278, "开启了": 32279, "突发事件": 32280, "主要集中在": 32281, "共产国际": 32282, "生产关系": 32283, "的人生": 32284, "通气": 32285, "是我们党": 32286, "并由": 32287, "开发了": 32288, "限额": 32289, "这些都": 32290, "最重要": 32291, "▁Writing": 32292, "▁Tokyo": 32293, "▁Imperial": 32294, "MF": 32295, "Hung": 32296, "尔兰": 32297, "▁opens": 32298, "▁checking": 32299, "▁Today": 32300, "用法": 32301, "cery": 32302, "lighting": 32303, "▁distinguished": 32304, "▁navigation": 32305, "unes": 32306, "學習": 32307, "▁newspapers": 32308, "Suppose": 32309, "▁median": 32310, "▁locate": 32311, "印尼": 32312, "idel": 32313, "性等": 32314, "学院教授": 32315, "卵巢": 32316, "多样的": 32317, "占总": 32318, "plane": 32319, "音频": 32320, "▁Notes": 32321, "▁antibody": 32322, "▁leak": 32323, "▁sup": 32324, "▁skull": 32325, "▁cluster": 32326, "泰国": 32327, "▁collaborate": 32328, "▁guests": 32329, "▁Kansas": 32330, "经济制度": 32331, "不成": 32332, "变法": 32333, "对人类": 32334, "方向和": 32335, "人与人": 32336, "劳工": 32337, "声誉": 32338, "大赛": 32339, "制止": 32340, "层层": 32341, "税费": 32342, "不分": 32343, "近几年": 32344, "Traditional": 32345, "以下是": 32346, "《》": 32347, "Sources": 32348, "▁traditionally": 32349, ".),▁": 32350, "story": 32351, "自由的": 32352, "笔记": 32353, "走上": 32354, "兵力": 32355, "上而": 32356, "打算": 32357, "Edward": 32358, "▁Table": 32359, "德的": 32360, "相较于": 32361, "暂停": 32362, "】▁": 32363, "ographers": 32364, "▁vaccination": 32365, "Taking": 32366, "▁vulnerability": 32367, "rights": 32368, "路口": 32369, "esteem": 32370, "▁drew": 32371, "▁exceptional": 32372, "▁olive": 32373, "fostering": 32374, "▁fluids": 32375, "▁prevented": 32376, "协同发展": 32377, "国资": 32378, "在当前": 32379, "的一方": 32380, "抵押权": 32381, "核心竞争力": 32382, "非公有制": 32383, "恶性肿瘤": 32384, "边区": 32385, "基数": 32386, "和监督": 32387, "之所": 32388, "▁info": 32389, "开发人员": 32390, "优化的": 32391, "生理学": 32392, "▁variant": 32393, "online": 32394, "Ren": 32395, "平台上": 32396, "▁imperial": 32397, "ERS": 32398, ".).▁": 32399, "Generally": 32400, "▁palm": 32401, "▁breakfast": 32402, "▁harness": 32403, "▁regime": 32404, "rup": 32405, "▁impairment": 32406, "Athlet": 32407, "并从": 32408, "路由器": 32409, "及以上": 32410, "丰富了": 32411, "提供服务": 32412, "行人": 32413, "的条件下": 32414, "▁dataset": 32415, "Spain": 32416, "▁analog": 32417, "iblings": 32418, "▁historians": 32419, "▁evaluating": 32420, "英格兰": 32421, "是一位": 32422, "aer": 32423, "社会和": 32424, "配电": 32425, "强国的": 32426, "课程设置": 32427, "法律和": 32428, "规模和": 32429, "变得更加": 32430, "道教": 32431, "勘探": 32432, "在现实": 32433, "膳食": 32434, "访谈": 32435, "并不意味着": 32436, "十四年": 32437, "着力点": 32438, "lades": 32439, "innish": 32440, "开了": 32441, "该系统": 32442, "ipation": 32443, "oths": 32444, "vely": 32445, "▁histories": 32446, "powered": 32447, "®▁": 32448, "▁cerv": 32449, "▁mast": 32450, "▁keyboard": 32451, "▁musician": 32452, "inda": 32453, "自動": 32454, "▁FDA": 32455, "UD": 32456, "而无": 32457, "活泼": 32458, "大会上": 32459, "较弱": 32460, "中发现": 32461, "先锋": 32462, "imeter": 32463, "leveland": 32464, "資訊": 32465, "▁Blood": 32466, "rehend": 32467, "▁critics": 32468, "酰胺": 32469, "Soc": 32470, "▁MP": 32471, "準決賽": 32472, "▁Defense": 32473, "▁Import": 32474, "▁Ow": 32475, "nest": 32476, "的社会主义": 32477, "技术应用": 32478, "和关键": 32479, "机组": 32480, "治疗方法": 32481, "等行业": 32482, "坚持以人民为中心": 32483, "病虫": 32484, "一九": 32485, "单片": 32486, "放宽": 32487, "李某": 32488, "排出": 32489, "思想道德": 32490, "节日": 32491, "注意事项": 32492, "案例分析": 32493, "第二大": 32494, "▁strings": 32495, "▁Round": 32496, "▁Hen": 32497, "anese": 32498, "▁occurrence": 32499, "prising": 32500, "▁Win": 32501, "ousing": 32502, "▁citizen": 32503, "agger": 32504, "thetics": 32505, "oba": 32506, "▁gland": 32507, "电视剧": 32508, "识别和": 32509, "▁Chair": 32510, "▁Neg": 32511, "▁cues": 32512, "▁packed": 32513, "▁presenting": 32514, "▁raises": 32515, "▁·": 32516, "inburgh": 32517, "Appro": 32518, "anding": 32519, "mix": 32520, "地理学": 32521, "工业企业": 32522, "至关重要的": 32523, "肝癌": 32524, "双方的": 32525, "发现和": 32526, "驳回": 32527, "主体性": 32528, "人大代表": 32529, "多维": 32530, "基特": 32531, "图示": 32532, "众所周知": 32533, "number": 32534, "lay": 32535, "剂的": 32536, "在研究": 32537, "eating": 32538, "▁composer": 32539, "▁investigations": 32540, "结局": 32541, "扩充": 32542, "▁accommodate": 32543, "▁assignments": 32544, "▁missed": 32545, "Exactly": 32546, "屏蔽": 32547, "/-▁": 32548, "novation": 32549, "ulu": 32550, "大理": 32551, "全国人大常委会": 32552, "二百": 32553, "太多": 32554, "表达的": 32555, "Writing": 32556, "▁genetics": 32557, "格拉": 32558, "inders": 32559, "可能与": 32560, "之和": 32561, "通讯作者": 32562, "国家自然科学基金": 32563, "▁distinction": 32564, "Project": 32565, "Resp": 32566, "▁Case": 32567, "建築物": 32568, "analysis": 32569, "▁oste": 32570, "約翰": 32571, "危险性": 32572, "而成的": 32573, "落后的": 32574, "产生影响": 32575, "巧妙": 32576, "禀赋": 32577, "能量的": 32578, "微课": 32579, "载荷": 32580, "进入新时代": 32581, "闲置": 32582, "大运河": 32583, "旅游业": 32584, "归根": 32585, "情况进行": 32586, "民族团结": 32587, "绿水": 32588, "上半年": 32589, "和能力": 32590, "above": 32591, "affeine": 32592, "人類": 32593, "的唯一": 32594, "▁cavity": 32595, "▁colleges": 32596, "▁superhero": 32597, "▁altitude": 32598, "▁attacked": 32599, "▁sorts": 32600, "类比": 32601, "Russian": 32602, "atable": 32603, "video": 32604, "編劇": 32605, "odynam": 32606, "north": 32607, "▁galaxy": 32608, "年由": 32609, "user": 32610, "▁adhes": 32611, "穿透": 32612, "上去": 32613, "换言之": 32614, "天人": 32615, "▁belongs": 32616, "▁caps": 32617, "Gal": 32618, "LV": 32619, "鱼类": 32620, "Author": 32621, "Israel": 32622, "▁Impact": 32623, "create": 32624, "济南": 32625, "ader": 32626, "是一個": 32627, "▁Materials": 32628, "足球運動員": 32629, "omo": 32630, "contribut": 32631, "▁Junior": 32632, "Explore": 32633, "▁glue": 32634, "▁Mes": 32635, "公共管理": 32636, "法律规范": 32637, "适用法律": 32638, "世界一流": 32639, "受众": 32640, "宋朝": 32641, "等原因": 32642, "决策部署": 32643, "地缘": 32644, "不完善": 32645, "精神文明": 32646, "质量控制": 32647, "Should": 32648, "▁fears": 32649, "▁satellites": 32650, "▁piv": 32651, "▁sixth": 32652, "人或": 32653, "开发出": 32654, "大学教授": 32655, "如果在": 32656, "液态": 32657, "Cell": 32658, "曾經": 32659, "擊敗": 32660, "still": 32661, "学报": 32662, "太郎": 32663, "omat": 32664, "▁anymore": 32665, "▁submit": 32666, "elli": 32667, "▁chairman": 32668, "▁progn": 32669, "▁pests": 32670, "▁tactics": 32671, "拉伸": 32672, "不法": 32673, "医科": 32674, "共產黨": 32675, "ienna": 32676, "inology": 32677, "之一是": 32678, "蛋白的": 32679, "电平": 32680, "▁renal": 32681, "▁Ty": 32682, "Types": 32683, "▁quantitative": 32684, "inos": 32685, "中国制造": 32686, "党和国家事业": 32687, "矢量": 32688, "以适应": 32689, "持续时间": 32690, "驰名": 32691, "走廊": 32692, "郑州": 32693, "电离": 32694, "总体布局": 32695, "波段": 32696, "成果的": 32697, "理論": 32698, "各个领域": 32699, "锂离子": 32700, "化学品": 32701, "无缝": 32702, "山的": 32703, "在第": 32704, "而出": 32705, "renal": 32706, "奥地利": 32707, "chemical": 32708, "▁Title": 32709, "▁constituency": 32710, "▁copyright": 32711, "专辑": 32712, "水解": 32713, "Hg": 32714, "Cross": 32715, "%▁(": 32716, "▁allergy": 32717, "▁coronary": 32718, "▁graphics": 32719, "▁suspected": 32720, "▁journals": 32721, "▁medalists": 32722, "獎項": 32723, "phy": 32724, "本科生": 32725, "填写": 32726, "通报": 32727, "主要表现为": 32728, "hang": 32729, "!)▁": 32730, "▁exclusive": 32731, "lad": 32732, "Would": 32733, "Word": 32734, "cells": 32735, "▁abundance": 32736, "▁cited": 32737, "▁commissioned": 32738, "▁disappear": 32739, "▁grapp": 32740, "▁scattered": 32741, "▁automatic": 32742, "浏览器": 32743, "国际组织": 32744, "保护主义": 32745, "和农村": 32746, "心血管疾病": 32747, "粗放": 32748, "困惑": 32749, "模范": 32750, "新生儿": 32751, "凝血": 32752, "引发了": 32753, "一国两制": 32754, "呕吐": 32755, "刑事诉讼法": 32756, "大势": 32757, "明知": 32758, "Plan": 32759, "▁Pas": 32760, "持续的": 32761, "必定": 32762, "▁Circ": 32763, "rik": 32764, "▁variants": 32765, "▁Kit": 32766, "分為": 32767, "<|endoftext|>": 0, "<|im_start|>": 1, "<|im_end|>": 2, "<|pad|>": 3, "<|reserved_0|>": 4, "<|reserved_1|>": 5, "<|reserved_2|>": 6, "<|reserved_3|>": 7, "<|reserved_4|>": 8, "<|reserved_5|>": 9, "<|reserved_6|>": 10, "<|reserved_7|>": 11, "<|reserved_8|>": 12, "<|reserved_9|>": 13, "<|reserved_10|>": 14, "<|reserved_11|>": 15, "<|reserved_12|>": 16, "<|reserved_13|>": 17, "<|reserved_14|>": 18, "<|reserved_15|>": 19, "<|reserved_16|>": 20, "<|reserved_17|>": 21, "<|reserved_18|>": 22, "<|reserved_19|>": 23, "<|reserved_20|>": 24, "<|reserved_21|>": 25, "<|reserved_22|>": 26, "<|reserved_23|>": 27, "<|reserved_24|>": 28, "<|reserved_25|>": 29, "<|reserved_26|>": 30, "<|reserved_27|>": 31, "<|reserved_28|>": 32, "<|reserved_29|>": 33, "<|reserved_30|>": 34, "<|reserved_31|>": 35, "<|reserved_32|>": 36, "<|reserved_33|>": 37, "<|reserved_34|>": 38, "<|reserved_35|>": 39, "<|reserved_36|>": 40, "<|reserved_37|>": 41, "<|reserved_38|>": 42, "<|reserved_39|>": 43, "<|reserved_40|>": 44, "<|reserved_41|>": 45, "<|reserved_42|>": 46, "<|reserved_43|>": 47, "<|reserved_44|>": 48, "<|reserved_45|>": 49, "<|reserved_46|>": 50, "<|reserved_47|>": 51, "<|reserved_48|>": 52, "<|reserved_49|>": 53, "<|reserved_50|>": 54, "<|reserved_51|>": 55, "<|reserved_52|>": 56, "<|reserved_53|>": 57, "<|reserved_54|>": 58, "<|reserved_55|>": 59, "<|reserved_56|>": 60, "<|reserved_57|>": 61, "<|reserved_58|>": 62, "<|reserved_59|>": 63}, "merges": [["▁", "t"], ["i", "n"], ["h", "e"], ["▁", "a"], ["r", "e"], ["o", "n"], ["e", "r"], ["a", "t"], [",", "▁"], ["▁t", "he"], ["o", "r"], ["▁", "s"], ["a", "n"], ["e", "n"], ["e", "s"], ["▁", "c"], ["▁", "o"], ["a", "l"], ["i", "t"], ["i", "s"], ["in", "g"], ["e", "d"], ["▁", "w"], ["▁", "p"], [".", "▁"], ["a", "r"], ["▁", "f"], ["o", "u"], ["▁o", "f"], ["▁", "b"], ["▁", "in"], ["n", "d"], ["i", "c"], ["i", "on"], ["▁", "m"], ["▁t", "o"], ["▁", "d"], ["l", "e"], ["a", "s"], ["r", "o"], ["▁a", "nd"], ["en", "t"], ["c", "t"], ["▁", "h"], ["i", "l"], ["o", "m"], ["▁", "e"], ["s", "t"], ["▁t", "h"], ["▁", "re"], ["e", "l"], ["▁", "l"], ["e", "t"], ["o", "l"], ["\n", "\n"], ["▁", "n"], ["at", "ion"], ["i", "v"], ["an", "d"], ["i", "m"], ["i", "d"], ["u", "s"], ["r", "a"], ["l", "y"], ["c", "h"], ["u", "r"], ["i", "g"], ["o", "w"], ["▁", "g"], ["c", "e"], ["o", "t"], ["u", "t"], ["▁", "is"], ["a", "m"], ["i", "r"], ["▁", "▁"], ["▁s", "t"], ["▁b", "e"], ["T", "he"], ["er", "s"], ["▁f", "or"], ["u", "l"], ["at", "e"], ["▁", "S"], ["t", "he"], ["a", "y"], ["▁", "C"], ["▁", "on"], ["a", "d"], ["it", "h"], ["▁", "("], ["s", "e"], ["t", "h"], ["▁", "y"], ["u", "n"], ["▁th", "at"], ["v", "e"], ["▁", "A"], ["i", "f"], ["v", "er"], ["t", "er"], ["▁c", "on"], ["▁a", "s"], ["▁p", "ro"], ["▁w", "ith"], ["a", "g"], ["is", "t"], ["o", "d"], ["u", "m"], ["e", "m"], ["▁a", "n"], ["i", "es"], ["o", "p"], ["▁", "M"], ["re", "s"], ["▁a", "l"], ["ou", "r"], ["a", "b"], ["es", "s"], ["▁a", "re"], ["发", "展"], ["▁", "he"], ["e", "ct"], ["a", "c"], ["e", "re"], ["▁e", "x"], ["▁", "P"], ["it", "y"], ["▁", "v"], ["o", "s"], ["▁", "or"], ["▁c", "om"], ["il", "l"], ["or", "y"], ["t", "s"], ["e", "c"], ["o", "re"], ["o", "c"], ["▁", "it"], ["ro", "m"], ["q", "u"], ["m", "ent"], ["a", "in"], ["-", "-"], ["ig", "h"], ["k", "e"], ["p", "p"], ["▁", "B"], ["es", "t"], ["iv", "e"], ["u", "d"], ["▁b", "y"], [":", "▁"], ["▁w", "as"], ["▁w", "h"], ["i", "al"], ["l", "d"], ["▁a", "t"], ["中", "国"], ["▁c", "h"], ["u", "re"], ["▁", "R"], ["社", "会"], ["r", "i"], ["▁d", "e"], ["al", "l"], ["▁f", "rom"], ["an", "t"], ["r", "ou"], ["▁", "D"], ["▁", "I"], ["▁", "us"], ["▁s", "u"], ["ic", "al"], ["-", "▁"], ["o", "g"], ["经", "济"], [")", "▁"], ["ar", "t"], ["n", "t"], ["▁", "T"], ["or", "t"], ["▁c", "an"], ["e", "w"], ["▁", "le"], ["▁", "r"], ["he", "r"], ["ate", "g"], ["▁", "E"], ["▁", "H"], ["研", "究"], ["ion", "s"], ["▁", "L"], ["a", "p"], ["▁", "en"], ["▁h", "a"], ["in", "e"], ["▁", "G"], ["▁s", "p"], ["el", "l"], ["▁", "F"], ["ar", "d"], ["技", "术"], ["g", "e"], ["ateg", "ory"], ["▁s", "h"], ["g", "h"], ["▁y", "ou"], ["▁", "N"], ["e", "ar"], ["p", "l"], ["C", "ategory"], ["at", "ed"], ["▁p", "l"], ["a", "re"], ["igh", "t"], ["可", "以"], ["the", "r"], ["d", "u"], ["▁", "W"], ["▁", "u"], ["▁s", "e"], ["▁a", "b"], ["ic", "h"], ["a", "k"], ["a", "ct"], ["p", "er"], ["进", "行"], ["▁in", "t"], ["i", "z"], ["om", "e"], ["ou", "t"], ["f", "f"], ["▁w", "or"], ["an", "s"], ["一", "个"], ["企", "业"], ["i", "p"], ["▁", "im"], ["as", "t"], ["o", "st"], ["u", "st"], ["▁the", "ir"], ["on", "g"], ["ou", "s"], ["数", "据"], ["管", "理"], ["p", "t"], ["i", "a"], ["I", "n"], ["en", "d"], ["学", "生"], ["▁ha", "ve"], ["国", "家"], ["ation", "s"], ["问", "题"], ["T", "h"], ["id", "e"], ["i", "b"], ["ou", "ld"], ["▁y", "our"], ["▁n", "ot"], ["ar", "y"], ["▁th", "is"], ["s", "o"], ["k", "s"], ["ag", "e"], ["教", "育"], ["通", "过"], ["or", "m"], ["▁com", "p"], ["r", "u"], ["系", "统"], ["▁a", "d"], ["c", "l"], ["he", "n"], ["▁", "k"], ["ent", "s"], ["e", "p"], ["▁", "J"], ["▁con", "t"], ["▁d", "is"], ["▁re", "s"], ["v", "el"], ["ul", "t"], ["o", "od"], ["a", "v"], ["信", "息"], ["an", "ce"], ["c", "c"], ["ig", "n"], ["b", "er"], ["i", "re"], ["▁w", "e"], ["at", "er"], ["in", "d"], ["c", "es"], ["u", "al"], ["主", "义"], ["a", "ch"], ["--", "--"], ["r", "y"], ["w", "h"], ["工", "作"], ["as", "s"], ["▁", "un"], ["重", "要"], ["▁c", "l"], ["w", "e"], ["ab", "le"], ["▁n", "e"], ["res", "s"], ["▁", "U"], ["il", "d"], ["on", "e"], ["en", "ce"], ["o", "o"], ["建", "设"], ["▁t", "e"], ["ic", "e"], ["ct", "ion"], ["an", "g"], ["主", "要"], ["▁al", "l"], ["or", "d"], ["▁", "O"], ["u", "e"], ["is", "h"], ["re", "at"], ["it", "ion"], ["人", "民"], ["or", "s"], ["▁m", "ore"], ["en", "s"], ["u", "b"], ["▁o", "ther"], ["▁al", "so"], ["▁m", "e"], ["方", "面"], ["ac", "k"], ["▁the", "y"], ["am", "e"], ["实", "现"], ["as", "e"], ["i", "an"], ["基", "础"], ["p", "h"], ["过", "程"], ["▁h", "as"], ["服", "务"], ["▁w", "ill"], ["i", "le"], ["市", "场"], ["▁w", "ere"], ["b", "ut"], ["f", "ere"], ["▁im", "p"], ["el", "y"], ["r", "ic"], ["▁d", "o"], ["▁ab", "out"], ["im", "e"], ["能", "力"], ["i", "e"], ["文", "化"], ["安", "全"], ["▁p", "er"], ["需", "要"], ["▁S", "t"], ["r", "it"], ["▁a", "r"], ["我", "们"], ["a", "ce"], ["▁▁", "▁▁"], ["▁a", "pp"], ["▁", "j"], ["使", "用"], ["a", "ke"], ["\"", "▁"], ["方", "法"], ["f", "orm"], ["i", "ke"], ["m", "er"], ["▁m", "an"], ["▁p", "re"], ["教", "学"], ["ou", "nd"], ["▁", "K"], ["▁o", "ut"], [";", "▁"], ["Th", "is"], ["ow", "n"], ["▁h", "is"], ["中", "的"], ["I", "t"], ["ing", "s"], ["▁", "\""], ["不", "同"], ["o", "se"], ["生", "产"], ["▁the", "m"], ["ou", "nt"], ["ver", "y"], ["nd", "er"], ["ter", "n"], ["▁st", "ud"], ["环", "境"], ["t", "e"], ["a", "us"], ["科", "学"], ["具", "有"], ["分", "析"], ["制", "度"], ["▁e", "v"], ["学", "习"], ["影", "响"], ["我", "国"], ["应", "用"], ["提", "供"], ["on", "s"], ["ol", "og"], ["rou", "gh"], ["政", "府"], ["创", "新"], ["▁s", "c"], ["e", "op"], ["组", "织"], ["▁on", "e"], [")", ",▁"], ["er", "v"], ["▁int", "o"], ["▁it", "s"], ["on", "d"], ["▁s", "y"], ["▁u", "p"], ["▁com", "m"], ["网", "络"], ["it", "e"], ["▁t", "ra"], ["a", "il"], ["re", "e"], ["▁", "ro"], ["l", "ow"], ["o", "v"], ["at", "es"], ["eop", "le"], ["it", "ies"], ["作", "用"], ["–", "▁"], ["理", "论"], ["he", "re"], ["ay", "s"], ["关", "系"], ["▁p", "art"], ["公", "司"], ["if", "ic"], ["基", "本"], ["以", "及"], ["体", "系"], ["k", "ing"], ["要", "求"], ["可", "能"], ["cl", "ud"], ["le", "ct"], ["▁re", "c"], ["n", "e"], ["▁C", "h"], ["▁", "qu"], ["o", "b"], ["▁b", "et"], ["ur", "ing"], ["结", "构"], ["y", "s"], ["▁be", "c"], ["资", "源"], ["o", "ve"], ["l", "es"], ["设", "计"], ["ir", "st"], ["▁c", "ol"], ["i", "ous"], ["产", "业"], ["方", "式"], ["▁", "V"], ["at", "ing"], ["re", "n"], ["提", "高"], ["ou", "gh"], ["rou", "nd"], ["m", "s"], ["知", "识"], ["▁the", "se"], ["作", "为"], ["▁d", "if"], ["al", "ly"], ["改", "革"], ["世", "界"], ["▁t", "r"], ["▁a", "ct"], ["包", "括"], ["▁u", "nder"], ["▁k", "n"], ["n", "ing"], ["p", "le"], ["形", "成"], ["▁s", "o"], ["ro", "w"], ["o", "ol"], ["▁o", "ver"], ["▁y", "ear"], ["▁t", "ime"], ["▁m", "ay"], ["▁a", "g"], ["同", "时"], ["历", "史"], ["▁th", "an"], ["▁", "–▁"], ["一", "种"], ["l", "p"], ["国", "际"], ["at", "h"], ["wh", "ich"], ["y", "p"], ["法", "律"], ["ul", "ar"], ["▁wh", "o"], ["he", "d"], ["▁w", "hen"], ["c", "ed"], ["相", "关"], ["▁s", "ome"], ["▁d", "es"], ["这", "些"], ["l", "ic"], ["re", "d"], ["ation", "al"], ["ic", "s"], ["存", "在"], ["f", "ter"], ["▁p", "eople"], ["*", "*"], ["ar", "k"], ["规", "定"], ["部", "分"], ["o", "ver"], ["▁", "ra"], ["al", "th"], ["内", "容"], ["l", "l"], ["▁n", "ew"], ["细", "胞"], ["行", "为"], ["保", "护"], ["al", "s"], ["▁t", "w"], ["in", "t"], ["u", "res"], ["j", "ect"], ["▁l", "ike"], ["因", "此"], ["▁o", "ur"], ["▁he", "lp"], ["活", "动"], ["as", "ed"], ["et", "h"], ["金", "融"], ["e", "x"], ["▁th", "rough"], ["▁con", "s"], ["▁in", "c"], ["▁be", "en"], ["▁", "-▁"], ["没", "有"], ["产", "品"], ["ot", "h"], ["vel", "op"], ["政", "治"], ["▁f", "e"], ["其", "他"], ["成", "为"], ["n", "g"], ["▁h", "ow"], ["建", "立"], ["▁sp", "ec"], ["标", "准"], ["f", "ul"], ["现", "代"], ["就", "是"], ["政", "策"], ["ment", "s"], ["st", "em"], ["ol", "d"], ["ff", "ect"], ["i", "ent"], ["提", "出"], ["▁us", "e"], ["实", "践"], ["u", "c"], ["f", "t"], ["▁re", "l"], ["▁wh", "ich"], ["oo", "k"], ["思", "想"], ["▁a", "cc"], ["目", "标"], ["aus", "e"], ["控", "制"], ["W", "h"], ["利", "用"], ["▁h", "ad"], ["▁b", "l"], ["▁g", "en"], ["▁f", "irst"], ["is", "s"], ["价", "值"], ["at", "ive"], ["a", "w"], ["u", "ch"], ["计", "算"], ["发", "生"], ["▁in", "d"], ["▁ne", "ed"], ["情", "况"], ["▁re", "p"], ["iv", "ers"], ["▁dif", "fere"], ["er", "m"], ["we", "en"], ["时", "间"], ["▁ex", "p"], ["▁wor", "k"], ["▁e", "m"], ["▁a", "m"], ["▁re", "g"], ["之", "间"], ["处", "理"], ["ra", "ct"], ["领", "域"], ["风", "险"], ["i", "ed"], ["第", "一"], ["t", "o"], ["▁us", "ed"], ["l", "and"], ["根", "据"], ["质", "量"], ["▁p", "r"], ["对", "于"], ["▁of", "f"], ["il", "ity"], ["数", "字"], ["▁U", "n"], ["有", "效"], ["ro", "p"], ["▁as", "s"], ["▁in", "v"], ["人", "的"], ["▁p", "h"], ["必", "须"], ["产", "生"], ["▁tw", "o"], ["社会", "主义"], ["H", "e"], ["----", "----"], [")", ".▁"], ["▁a", "c"], ["这", "种"], ["功", "能"], ["is", "e"], ["▁pro", "du"], ["▁w", "ould"], ["水", "平"], ["s", "s"], ["▁bet", "ween"], ["if", "e"], ["it", "s"], [".", "\""], ["t", "ain"], ["解", "决"], ["生", "活"], ["e", "f"], ["i", "et"], ["▁d", "ec"], ["▁s", "ur"], ["t", "ing"], ["os", "s"], ["”", "▁"], ["▁pro", "v"], ["▁de", "velop"], ["劳", "动"], ["ra", "m"], ["传", "统"], ["▁wh", "at"], ["▁ch", "ild"], ["S", "t"], ["c", "y"], ["智", "能"], ["全", "面"], ["▁he", "r"], ["ch", "ool"], ["机", "制"], ["in", "s"], ["模", "式"], ["▁an", "y"], ["d", "ition"], ["g", "an"], ["il", "y"], ["ic", "t"], ["不", "断"], ["on", "t"], ["?", "▁"], ["项", "目"], ["专", "业"], ["ic", "k"], ["认", "为"], ["▁m", "ost"], ["由", "于"], ["投", "资"], ["it", "ed"], ["w", "n"], ["▁s", "a"], ["ad", "e"], ["o", "y"], ["▁re", "m"], ["ow", "er"], ["id", "ent"], ["he", "s"], ["in", "es"], ["e", "ver"], ["美", "国"], ["e", "g"], ["ch", "n"], ["▁s", "m"], ["条", "件"], ["中", "心"], ["▁f", "l"], ["工", "程"], ["人", "员"], ["▁sy", "stem"], ["mer", "ic"], ["▁", "Y"], ["机", "构"], ["an", "ge"], ["变", "化"], ["▁ex", "am"], ["。", "▁"], ["▁b", "u"], ["g", "et"], ["c", "ess"], ["教", "师"], ["▁su", "ch"], ["▁o", "b"], ["ur", "al"], ["城", "市"], ["▁in", "f"], ["民", "族"], ["ib", "le"], ["c", "om"], ["ere", "d"], ["如", "果"], ["课", "程"], ["▁in", "clud"], ["能", "够"], ["实", "施"], ["▁tr", "ans"], ["t", "en"], ["c", "er"], ["行", "政"], ["自", "己"], ["ak", "ing"], ["▁in", "st"], ["b", "le"], ["▁su", "b"], ["性", "的"], ["H", "ow"], ["i", "o"], ["实", "验"], ["▁at", "t"], ["el", "f"], ["▁I", "n"], ["时", "代"], ["发展", "的"], ["这", "一"], ["ist", "s"], ["ar", "ch"], ["培", "养"], ["实", "际"], ["▁c", "ould"], ["大", "学"], ["▁on", "ly"], ["推", "动"], ["定", "的"], ["▁n", "o"], ["▁s", "ign"], ["地", "区"], ["ot", "her"], ["科", "技"], ["上", "的"], ["w", "ard"], ["所", "有"], ["第", "二"], ["at", "a"], ["h", "ip"], ["ur", "n"], ["需", "求"], ["全", "球"], ["发", "现"], ["▁le", "ar"], ["出", "现"], ["▁v", "ar"], ["▁differe", "nt"], ["▁p", "at"], ["▁pl", "ay"], ["大", "的"], ["at", "ure"], ["▁", "if"], ["▁in", "ter"], ["结", "合"], ["u", "es"], ["A", "s"], ["iv", "es"], ["olog", "y"], ["an", "y"], ["或", "者"], ["in", "k"], ["▁d", "uring"], ["生", "态"], ["f", "ore"], ["▁p", "ers"], ["▁p", "ol"], ["▁man", "y"], [".", "."], ["▁the", "re"], ["v", "ent"], ["推", "进"], ["生", "物"], [")", "."], ["一", "些"], ["▁", "“"], ["▁ex", "per"], ["res", "ent"], ["▁su", "pp"], ["▁m", "od"], ["i", "ence"], ["▁c", "re"], ["s", "p"], ["代", "表"], ["合", "作"], ["促", "进"], ["▁p", "o"], ["增", "加"], ["他", "们"], ["ect", "ion"], ["不", "能"], ["责", "任"], ["p", "s"], ["▁n", "um"], ["共", "同"], ["▁dis", "c"], ["▁l", "oc"], ["▁w", "ell"], ["an", "ts"], ["▁for", "m"], ["的", "发展"], ["▁h", "igh"], ["▁g", "o"], ["增", "长"], ["▁w", "ater"], ["n", "ess"], ["支", "持"], ["▁s", "im"], ["|", "▁"], ["ol", "low"], ["工", "业"], ["e", "v"], ["or", "n"], ["精", "神"], ["战", "略"], ["▁year", "s"], ["▁e", "ar"], ["中", "央"], ["▁f", "ound"], ["自", "然"], ["阶", "段"], ["i", "qu"], ["▁he", "alth"], ["W", "e"], ["st", "and"], ["农", "业"], ["开", "发"], ["The", "y"], ["一", "步"], ["核", "心"], ["加", "强"], ["ar", "m"], ["c", "ent"], ["新", "的"], ["is", "m"], ["▁e", "very"], ["提", "升"], ["F", "or"], ["!", "▁"], ["结", "果"], ["or", "k"], ["the", "y"], ["le", "t"], ["A", "l"], ["▁imp", "ort"], ["\"", ","], ["▁m", "ed"], ["i", "x"], ["形", "式"], ["部", "门"], ["o", "f"], ["成", "本"], ["ag", "es"], ["▁a", "fter"], ["▁res", "p"], ["资", "本"], ["▁c", "all"], ["im", "es"], ["ru", "ct"], ["C", "h"], ["▁comm", "un"], ["ical", "ly"], ["党", "的"], ["▁c", "ent"], ["d", "s"], ["ic", "es"], ["▁c", "ar"], ["c", "k"], ["er", "g"], ["的", "是"], ["▁g", "et"], ["▁d", "et"], ["空", "间"], ["已", "经"], ["目", "前"], ["iz", "ed"], ["▁t", "yp"], ["关", "键"], ["▁kn", "ow"], ["ual", "ly"], ["个", "人"], ["设", "备"], ["选", "择"], ["▁c", "o"], ["▁d", "ist"], ["坚", "持"], ["ent", "ial"], ["这", "个"], ["i", "ew"], ["化", "的"], ["iz", "e"], ["▁e", "ach"], ["▁", "ke"], ["▁f", "am"], ["原", "则"], ["i", "k"], ["▁re", "se"], ["▁e", "ffect"], ["的", "一"], ["en", "g"], ["in", "al"], ["直", "接"], ["r", "an"], ["因", "素"], ["过程", "中"], ["综", "合"], ["c", "on"], ["其", "中"], ["▁ex", "pl"], ["ce", "pt"], ["▁s", "et"], ["导", "致"], ["u", "g"], ["▁te", "chn"], ["▁A", "meric"], ["保", "障"], ["▁st", "r"], ["持", "续"], ["单", "位"], ["人", "才"], ["的", "重要"], ["a", "x"], ["第", "三"], ["▁s", "k"], ["合", "同"], ["运", "动"], ["▁ar", "t"], ["▁us", "ing"], ["l", "ed"], ["ra", "ph"], ["om", "m"], ["进", "一步"], ["o", "h"], ["▁s", "ec"], ["u", "p"], ["al", "e"], ["人", "类"], ["全", "国"], ["积", "极"], ["▁pro", "g"], ["form", "ation"], ["▁c", "ell"], ["模", "型"], ["也", "是"], ["▁w", "here"], ["具", "体"], ["▁l", "ong"], ["▁l", "ar"], ["t", "le"], ["ou", "n"], ["i", "en"], ["主", "体"], ["r", "al"], ["I", "f"], ["平", "台"], ["不", "是"], ["▁b", "el"], ["i", "el"], ["e", "e"], ["开", "放"], ["如", "何"], ["▁th", "ose"], ["*", "▁"], ["范", "围"], ["▁m", "ake"], ["▁h", "um"], ["治", "理"], [")", ","], ["ion", "al"], ["领", "导"], ["The", "se"], ["at", "her"], ["▁inc", "re"], ["▁ex", "t"], ["r", "on"], ["as", "es"], ["▁", "ed"], ["i", "er"], ["特", "色"], ["获", "得"], ["材", "料"], ["”", ","], ["iv", "id"], ["中", "华"], ["▁", "ent"], ["一", "般"], ["fere", "n"], ["▁wor", "ld"], ["▁m", "em"], ["参", "与"], ["得", "到"], ["有", "关"], ["A", "n"], ["▁pro", "cess"], ["明", "确"], ["意", "义"], ["▁g", "rou"], ["ir", "on"], ["a", "ir"], ["联", "网"], ["▁", "The"], ["▁sh", "ould"], ["评", "价"], ["从", "而"], ["制", "造"], ["oc", "k"], ["▁b", "ack"], ["程", "序"], ["od", "y"], ["▁b", "ut"], ["完", "善"], ["资", "产"], ["▁ev", "en"], ["▁l", "ife"], ["消", "费"], ["能", "源"], ["▁gen", "er"], ["w", "ay"], ["▁c", "ount"], ["因", "为"], ["ub", "lic"], ["▁w", "ay"], ["各", "种"], ["e", "ad"], ["治", "疗"], ["▁f", "act"], ["▁sh", "ow"], ["采", "用"], ["▁v", "al"], ["▁s", "oc"], ["▁s", "erv"], ["▁f", "ollow"], ["▁f", "un"], ["发", "挥"], ["b", "e"], ["ar", "s"], ["表", "现"], ["▁j", "ust"], ["a", "h"], ["开", "始"], ["▁o", "wn"], ["学", "校"], ["▁le", "ad"], ["w", "ith"], ["a", "ve"], ["▁be", "ing"], ["x", "t"], ["▁stud", "y"], ["c", "ri"], ["▁h", "ist"], ["▁p", "op"], ["▁ch", "ar"], ["ivers", "ity"], ["▁f", "ind"], ["is", "hed"], ["利", "益"], ["al", "ity"], ["▁se", "e"], ["in", "ce"], ["任", "务"], ["▁act", "iv"], ["▁le", "vel"], ["f", "or"], ["▁a", "round"], ["▁m", "in"], ["特", "征"], ["▁re", "f"], ["ur", "y"], ["充", "分"], ["ri", "but"], ["The", "re"], ["开", "展"], ["▁s", "chool"], ["ra", "in"], ["公", "共"], ["el", "s"], ["iv", "ing"], ["行", "业"], ["▁be", "fore"], ["经", "营"], ["患", "者"], ["▁m", "on"], ["但", "是"], ["us", "s"], ["▁m", "ain"], ["不", "仅"], ["▁b", "oth"], ["ut", "ion"], ["ol", "v"], ["革", "命"], ["▁g", "row"], ["▁m", "ade"], ["什", "么"], ["p", "r"], ["are", "d"], ["▁A", "r"], ["ro", "ss"], ["基", "于"], ["随", "着"], ["地", "方"], ["▁c", "ur"], ["▁en", "d"], ["统", "一"], ["u", "nd"], ["▁de", "f"], ["%", "▁"], ["▁des", "ign"], ["重", "点"], ["ou", "th"], ["▁re", "ad"], ["N", "A"], ["▁re", "qu"], ["计", "划"], ["is", "ion"], ["确", "定"], ["E", "x"], ["应", "当"], ["▁p", "ar"], ["re", "ad"], ["▁d", "ata"], ["t", "y"], ["er", "ing"], ["ak", "es"], ["▁child", "ren"], ["▁s", "om"], ["p", "ro"], ["▁a", "ut"], ["规", "划"], ["▁pers", "on"], ["健", "康"], ["竞", "争"], ["and", "s"], ["▁ad", "d"], ["▁import", "ant"], ["规", "模"], ["▁c", "are"], ["he", "m"], ["为", "了"], ["'", "▁"], ["程", "度"], ["两", "个"], ["W", "hen"], ["用", "于"], ["▁ag", "ain"], ["银", "行"], ["B", "ut"], ["执", "行"], ["关", "于"], ["g", "g"], ["区", "域"], ["▁sm", "all"], ["职", "业"], ["农", "村"], ["o", "k"], ["来", "的"], ["ul", "ation"], ["y", "ou"], ["t", "ed"], ["▁w", "rit"], ["b", "y"], ["时", "期"], ["▁de", "p"], ["▁with", "in"], ["▁the", "n"], ["—", "—"], ["日", "本"], ["构", "建"], ["ro", "l"], ["in", "ed"], ["达", "到"], ["m", "an"], ["▁under", "stand"], ["▁part", "ic"], ["v", "iron"], ["完", "成"], ["iv", "er"], ["创", "造"], ["▁bec", "ause"], ["ire", "ct"], ["例", "如"], ["a", "u"], ["▁g", "l"], ["▁exam", "ple"], ["=", "▁"], ["比", "较"], ["▁m", "ight"], ["操", "作"], ["▁m", "y"], ["▁s", "he"], ["▁d", "own"], ["as", "h"], ["重", "大"], ["业", "务"], ["O", "n"], ["▁m", "us"], ["概", "念"], ["▁P", "ro"], ["um", "b"], ["▁c", "ap"], ["特", "点"], ["d", "e"], ["▁f", "ood"], ["a", "z"], ["▁in", "formation"], ["电", "子"], ["意", "识"], ["认", "识"], ["▁d", "ay"], ["oc", "i"], ["▁s", "er"], ["收", "入"], ["ou", "se"], ["这", "样"], ["it", "al"], ["基", "因"], ["am", "p"], ["理", "解"], ["over", "n"], ["it", "ions"], ["l", "ish"], ["方", "向"], ["▁stud", "ents"], ["p", "ect"], ["Y", "ou"], ["▁do", "es"], ["em", "ent"], ["▁call", "ed"], ["▁", "very"], ["决", "定"], ["et", "s"], ["id", "es"], ["规", "范"], ["之间", "的"], ["所", "以"], ["交", "易"], ["p", "or"], ["▁wh", "ile"], ["▁pro", "t"], ["▁m", "uch"], ["表", "示"], ["▁", "est"], ["▁a", "v"], ["le", "x"], ["▁in", "s"], ["T", "o"], ["om", "en"], ["c", "ing"], ["方", "案"], ["▁bu", "ild"], ["建", "筑"], ["特", "别"], ["性", "和"], ["i", "um"], ["是", "否"], ["▁th", "ree"], ["的", "人"], ["降", "低"], ["▁b", "r"], ["权", "利"], ["造", "成"], ["Wh", "at"], ["ivid", "ual"], ["稳", "定"], ["▁cl", "ass"], ["▁g", "u"], ["d", "er"], ["a", "j"], ["指", "导"], ["取", "得"], ["act", "er"], ["▁s", "ame"], ["世", "纪"], ["▁of", "ten"], ["R", "e"], ["How", "ever"], ["ire", "d"], ["i", "ents"], [")", ","], ["▁p", "ract"], ["▁e", "lect"], ["效", "率"], ["p", "en"], ["▁ad", "v"], ["之", "一"], ["▁N", "ew"], ["am", "es"], ["her", "s"], ["s", "h"], ["t", "on"], ["▁st", "art"], ["量", "的"], ["▁h", "im"], ["b", "ers"], ["减", "少"], ["▁or", "gan"], ["马", "克"], ["▁num", "ber"], ["▁dis", "e"], ["学", "科"], ["or", "ies"], ["目", "的"], ["体", "现"], ["▁▁▁▁", "▁▁▁▁"], ["优", "势"], ["”", "。"], ["or", "th"], ["▁t", "reat"], ["▁s", "ol"], ["进", "入"], ["▁r", "is"], ["货", "币"], ["▁d", "i"], ["igh", "ts"], ["▁g", "ra"], ["▁l", "ess"], ["in", "c"], ["▁l", "it"], ["的", "基本"], ["▁m", "at"], ["erg", "y"], ["o", "ot"], ["▁pro", "ble"], ["og", "raph"], ["自", "由"], ["viron", "ment"], ["ang", "u"], ["re", "en"], ["g", "en"], ["ul", "l"], ["措", "施"], ["▁kn", "own"], ["国", "内"], ["法", "院"], ["▁p", "ower"], ["▁▁", "▁"], ["iet", "y"], ["这", "是"], ["报", "告"], ["▁m", "et"], ["更", "加"], ["人", "们"], ["d", "ay"], ["了", "解"], ["好", "的"], ["as", "on"], ["马克", "思"], ["以", "下"], ["艺", "术"], ["p", "ar"], ["成", "果"], ["有", "的"], ["in", "clud"], ["▁o", "cc"], ["共", "产"], ["v", "en"], ["▁lear", "n"], ["运", "行"], ["&", "▁"], ["反", "应"], ["民", "主"], ["经", "验"], ["状", "态"], ["学生", "的"], ["ff", "ic"], ["保", "险"], ["长", "期"], ["物", "质"], ["t", "il"], ["▁all", "ow"], ["▁", "ident"], ["用", "户"], ["▁g", "ood"], ["▁v", "is"], ["e", "an"], ["e", "b"], ["▁en", "g"], ["ain", "s"], ["\"", "."], ["▁cont", "in"], ["而", "且"], ["iv", "ely"], ["re", "t"], ["our", "ces"], ["的", "研究"], ["p", "ort"], ["▁e", "qu"], ["l", "ine"], ["的", "基础"], ["▁d", "r"], ["增", "强"], ["an", "n"], ["▁p", "ot"], ["▁t", "ake"], ["▁b", "ody"], ["ul", "ts"], ["复", "杂"], ["iz", "ation"], ["▁ind", "ividual"], ["▁c", "ult"], ["B", "y"], ["合", "理"], ["▁re", "t"], ["贸", "易"], ["▁con", "st"], ["▁re", "du"], ["及", "其"], ["▁rese", "arch"], ["st", "r"], ["原", "因"], ["iv", "ed"], ["语", "言"], ["▁supp", "ort"], ["er", "n"], ["一", "定"], ["不同", "的"], ["at", "ely"], ["o", "x"], ["iel", "d"], ["委", "员"], ["▁comm", "on"], ["是", "在"], ["ater", "ial"], ["▁p", "oss"], ["体", "制"], ["re", "nt"], ["资", "金"], ["人", "口"], ["ri", "end"], ["includ", "ing"], ["体", "的"], ["评", "估"], ["id", "er"], ["▁con", "f"], ["文", "明"], ["at", "s"], ["if", "y"], ["g", "er"], ["i", "or"], ["组", "成"], ["▁d", "id"], ["▁be", "h"], ["任", "何"], ["b", "s"], ["▁S", "c"], ["掌", "握"], ["强", "调"], ["▁", "=▁"], ["▁e", "le"], ["▁f", "il"], ["只", "有"], ["改", "变"], ["是", "指"], ["eth", "od"], ["▁sign", "ific"], ["▁p", "os"], ["in", "ing"], ["y", "m"], ["▁I", "nd"], ["相", "互"], ["it", "ive"], ["▁c", "or"], ["in", "ation"], ["▁c", "le"], ["未", "来"], ["w", "here"], ["调", "整"], ["ent", "ly"], ["es", "p"], ["▁hum", "an"], ["ab", "ility"], ["▁sa", "id"], ["id", "s"], ["许", "多"], ["n", "ect"], ["ial", "ly"], ["的", "问题"], ["制", "定"], ["▁are", "a"], ["feren", "ces"], ["指", "出"], ["▁app", "ro"], ["il", "ar"], ["ag", "n"], ["or", "ts"], ["the", "re"], ["严", "重"], ["设", "施"], ["年", "的"], ["ra", "p"], ["ord", "ing"], ["▁st", "ate"], ["▁per", "form"], ["土", "地"], ["价", "格"], ["以", "来"], ["按", "照"], ["重要", "的"], ["l", "ing"], ["em", "ber"], ["▁p", "res"], ["▁pro", "f"], ["os", "ed"], ["针", "对"], ["受", "到"], ["现代", "化"], ["更", "多"], ["ere", "st"], ["▁", "&▁"], ["ill", "s"], ["都", "是"], ["v", "es"], ["O", "ne"], ["优", "化"], ["s", "c"], ["l", "u"], ["中国", "特色"], ["at", "ic"], ["运", "用"], ["参", "考"], ["应", "该"], ["融", "合"], ["▁n", "ow"], ["in", "a"], ["cc", "ess"], ["监", "督"], ["▁ch", "ang"], ["om", "s"], ["in", "ess"], ["化", "学"], ["▁includ", "e"], ["探", "索"], ["自己", "的"], ["▁A", "l"], ["l", "ished"], ["对", "象"], ["根", "本"], ["通", "常"], ["保", "证"], ["手", "段"], ["▁a", "ir"], ["考", "虑"], ["内", "部"], ["n", "er"], ["的", "新"], ["ver", "al"], ["▁qu", "est"], ["er", "al"], ["神", "经"], ["iv", "en"], ["才", "能"], ["互", "联网"], ["▁w", "ant"], ["▁E", "ng"], ["蛋", "白"], ["l", "ess"], ["地", "位"], ["|", "|"], ["机", "关"], ["分", "子"], ["▁an", "al"], ["系", "列"], ["▁S", "p"], ["决", "策"], ["商", "业"], ["▁pro", "m"], ["独", "立"], ["思", "维"], ["t", "t"], ["i", "od"], ["的", "影响"], ["。", "”"], ["相", "对"], ["▁p", "ass"], ["明", "显"], ["▁Americ", "an"], ["ro", "du"], ["广", "泛"], ["▁t", "est"], ["A", "nd"], ["人", "工"], ["▁pl", "an"], ["非", "常"], ["▁T", "h"], ["ar", "c"], ["a", "pp"], ["▁var", "ious"], ["▁is", "s"], ["r", "ation"], ["现", "实"], ["▁im", "m"], ["▁e", "as"], ["以", "上"], ["▁grou", "p"], ["▁pl", "ace"], ["i", "ans"], ["pl", "es"], ["eth", "ing"], ["▁b", "re"], ["首", "先"], ["会", "计"], ["▁Un", "iversity"], ["成", "立"], ["联", "系"], ["▁d", "em"], ["ut", "e"], ["--------", "--------"], ["om", "p"], ["提供", "了"], ["ress", "ion"], ["类", "型"], ["医", "疗"], ["▁", "ide"], ["n", "s"], ["ent", "al"], ["▁imp", "ro"], ["c", "ial"], ["心", "理"], ["ard", "s"], ["▁t", "em"], ["检", "测"], ["加", "快"], ["▁m", "aterial"], ["oc", "us"], ["现", "象"], ["is", "c"], ["A", "d"], ["▁re", "al"], ["近", "平"], ["n", "ot"], ["▁cell", "s"], ["pt", "ion"], [",", "\"▁"], ["▁re", "le"], ["物", "理"], ["信", "号"], ["监", "管"], ["当", "前"], ["iqu", "e"], ["▁c", "reat"], ["习", "近平"], ["群", "众"], ["v", "ers"], ["保", "持"], ["v", "ing"], ["or", "ld"], ["s", "uch"], ["▁st", "ill"], ["olog", "ical"], ["▁bet", "ter"], ["▁fam", "ily"], ["▁sy", "m"], ["事", "件"], ["一", "方面"], ["an", "ces"], ["▁s", "it"], ["▁again", "st"], ["▁S", "h"], ["▁", "ess"], ["的", "主要"], ["满", "足"], ["un", "e"], ["▁p", "resent"], ["维", "护"], ["▁h", "and"], ["▁ed", "uc"], ["▁an", "other"], ["法", "治"], ["S", "o"], [",▁", "\""], ["▁pro", "ject"], ["力", "的"], [".▁", "▁"], ["测", "试"], ["引", "导"], ["完", "全"], ["自", "身"], ["无", "法"], ["北", "京"], ["资", "料"], ["▁d", "ue"], ["r", "ies"], ["工", "具"], ["▁th", "ough"], ["▁se", "veral"], ["它", "们"], ["▁signific", "ant"], ["▁d", "irect"], ["甚", "至"], ["不", "可"], ["▁ch", "ange"], ["an", "k"], ["适", "应"], ["▁develop", "ment"], ["en", "se"], ["疾", "病"], ["理", "念"], ["者", "的"], ["农", "民"], ["交", "通"], ["dition", "al"], ["力", "量"], ["效", "果"], ["诉", "讼"], ["ur", "ther"], [".", ",▁"], ["▁o", "per"], ["▁f", "ac"], ["▁en", "vironment"], ["▁g", "overn"], ["▁an", "t"], ["▁c", "our"], ["▁Un", "ited"], ["▁h", "ome"], ["▁p", "ur"], ["y", "n"], ["▁C", "ol"], ["▁m", "ust"], ["财", "政"], ["▁cre", "ate"], ["软", "件"], ["关", "注"], ["▁ear", "ly"], ["▁fe", "el"], ["I", "I"], ["r", "ist"], ["angu", "age"], ["深", "入"], ["▁b", "ir"], ["th", "s"], ["og", "n"], ["c", "le"], ["▁p", "ain"], ["构", "成"], ["系统", "的"], ["▁o", "pp"], [")", "。"], ["年", "代"], ["w", "ays"], ["▁p", "ublic"], ["o", "le"], ["▁an", "im"], ["▁sec", "ond"], ["▁o", "pen"], ["▁ha", "pp"], ["规", "律"], ["正", "确"], ["▁n", "ear"], ["数", "学"], ["▁I", "s"], ["if", "ied"], ["▁b", "en"], ["▁dise", "ase"], ["▁s", "l"], ["▁with", "out"], ["▁b", "ased"], ["▁en", "ergy"], ["采", "取"], ["▁d", "el"], ["引", "起"], ["▁me", "as"], ["成", "功"], ["▁m", "ethod"], ["re", "m"], ["▁b", "as"], ["▁to", "p"], ["表", "明"], ["快", "速"], ["外", "部"], ["▁lar", "ge"], ["▁r", "ight"], ["▁int", "erest"], ["表", "达"], ["计算", "机"], ["od", "e"], ["#", "#"], ["id", "ed"], ["的", "最"], ["▁bec", "ome"], ["s", "elf"], ["帮", "助"], ["▁ph", "ys"], ["限", "制"], ["▁cont", "rol"], ["aj", "or"], ["▁g", "reat"], ["的", "大"], ["▁lear", "ning"], ["y", "l"], ["at", "ural"], ["▁sa", "f"], ["▁other", "s"], ["b", "r"], ["▁", "Z"], ["▁te", "am"], ["作", "品"], ["属", "于"], ["N", "ow"], ["▁C", "l"], ["get", "her"], ["▁to", "gether"], ["tern", "al"], ["▁res", "ult"], ["分", "布"], ["▁f", "in"], ["▁n", "ame"], ["▁m", "ar"], ["▁c", "aus"], ["▁or", "ig"], ["性", "能"], ["商", "品"], ["指", "标"], ["绿", "色"], ["w", "are"], ["▁m", "ove"], ["共产", "党"], ["▁l", "ook"], ["▁produ", "ct"], ["ent", "ion"], ["iss", "ion"], ["要", "素"], ["整", "体"], ["▁ass", "oci"], ["W", "ith"], ["年", "来"], ["香", "港"], ["e", "ed"], ["▁un", "til"], ["称", "为"], ["中国特色", "社会主义"], ["临", "床"], ["▁l", "ist"], ["集", "中"], ["▁st", "and"], ["▁St", "ates"], ["▁som", "ething"], ["S", "A"], ["▁to", "o"], ["自", "动"], ["▁ch", "all"], ["▁inv", "olv"], ["技", "能"], ["解", "释"], ["▁o", "ld"], ["w", "as"], ["虽", "然"], ["▁f", "riend"], ["I", "m"], ["g", "in"], ["分", "配"], ["▁d", "on"], ["▁ris", "k"], ["▁bel", "ie"], ["b", "all"], ["此", "外"], ["▁m", "ark"], ["情况", "下"], ["依", "据"], ["at", "or"], ["就", "业"], ["▁hist", "ory"], ["接", "受"], ["▁loc", "al"], ["协", "议"], ["会", "议"], ["▁am", "ong"], ["▁l", "ight"], ["显", "示"], ["▁s", "ing"], ["h", "or"], ["物", "的"], ["速", "度"], ["A", "fter"], ["分", "为"], ["马克思", "主义"], ["涉", "及"], ["符", "合"], ["ward", "s"], ["事", "业"], ["U", "n"], ["联", "合"], ["乡", "村"], ["是", "一个"], ["a", "ut"], ["m", "in"], ["ot", "s"], ["书", "记"], ["司", "法"], ["▁fun", "ction"], ["▁g", "r"], ["▁S", "e"], ["er", "t"], ["Th", "at"], ["▁", "'"], ["▁pro", "per"], ["▁f", "ew"], ["▁spec", "ies"], ["污", "染"], ["al", "k"], ["le", "y"], ["▁ke", "ep"], ["▁m", "ult"], ["注", "意"], ["l", "ike"], ["▁re", "st"], ["委员", "会"], ["v", "iew"], ["ra", "g"], ["wh", "ile"], ["wh", "o"], ["▁man", "ag"], ["ab", "or"], ["im", "ate"], ["规", "则"], ["调", "查"], ["道", "德"], ["u", "rop"], ["丰", "富"], ["协", "调"], ["on", "es"], ["m", "ber"], ["并", "且"], ["▁b", "est"], ["▁prog", "ram"], ["是", "一"], ["函", "数"], ["犯", "罪"], ["A", "t"], ["▁st", "ruct"], ["th", "at"], ["▁D", "e"], ["超", "过"], ["▁", "ve"], ["自", "主"], ["oo", "ks"], ["分", "别"], ["▁le", "g"], ["▁follow", "ing"], ["定", "义"], ["▁de", "v"], ["确", "保"], ["o", "id"], ["S", "ome"], ["▁", "Q"], ["or", "ing"], ["ap", "e"], ["通", "信"], ["er", "tain"], ["▁l", "ater"], ["课", "堂"], ["▁pot", "ential"], ["▁th", "ings"], ["高", "度"], ["反", "映"], ["r", "is"], ["方面", "的"], ["▁bl", "ood"], ["▁b", "us"], ["▁f", "ocus"], ["▁prov", "ide"], ["交", "流"], ["供", "应"], ["▁w", "omen"], ["▁", "$"], ["ac", "es"], ["oh", "n"], ["—", "▁"], ["▁are", "as"], ["智", "慧"], ["▁C", "on"], ["h", "ow"], ["学", "院"], ["整", "个"], ["a", "f"], ["企业", "的"], ["义", "务"], ["▁f", "our"], ["v", "ed"], ["th", "is"], ["d", "itions"], ["ill", "ion"], ["▁soc", "ial"], ["ric", "t"], ["’", "▁"], ["▁pat", "ients"], ["挑", "战"], ["an", "e"], [",", "\""], ["病", "毒"], ["ac", "c"], ["as", "ter"], ["▁c", "al"], ["上", "海"], ["ot", "e"], ["i", "am"], ["▁spec", "ific"], ["▁r", "un"], ["问题", "的"], ["转", "型"], ["算", "法"], ["是", "一种"], ["▁c", "he"], ["con", "om"], ["▁con", "nect"], ["▁ro", "le"], ["▁t", "re"], ["文", "件"], ["▁P", "l"], ["▁a", "ffect"], ["▁l", "aw"], ["之", "后"], ["▁me", "ans"], ["o", "ad"], ["om", "et"], ["▁rec", "ord"], ["▁b", "ro"], ["▁f", "re"], ["统", "计"], ["▁f", "ore"], ["有", "利"], ["ic", "ation"], ["经", "过"], ["▁acc", "ess"], ["▁occ", "ur"], ["差", "异"], ["ra", "y"], ["ap", "er"], ["▁m", "ov"], ["扩", "大"], ["os", "p"], ["▁rep", "ort"], ["our", "ce"], ["财", "产"], ["un", "g"], ["最", "终"], ["p", "x"], ["m", "y"], ["id", "ence"], ["▁ac", "ross"], ["end", "ing"], ["▁level", "s"], ["t", "al"], ["▁al", "ong"], ["起", "来"], ["动", "力"], ["分", "类"], ["▁in", "du"], ["us", "e"], ["▁C", "an"], ["▁bec", "ame"], ["在", "于"], ["▁des", "cri"], ["数", "量"], [",", "”▁"], ["▁t", "er"], ["▁en", "c"], ["▁per", "iod"], ["生", "命"], ["三", "个"], ["▁b", "o"], ["▁t", "imes"], ["in", "ks"], ["▁he", "ad"], ["end", "ed"], ["性", "质"], ["还", "是"], ["承", "担"], ["▁su", "ccess"], ["I", "S"], ["a", "id"], ["必", "要"], ["at", "ory"], ["al", "es"], ["▁me", "an"], ["矛", "盾"], ["C", "on"], ["w", "ork"], ["▁e", "l"], ["面", "临"], ["免", "疫"], ["然", "而"], ["▁n", "on"], ["ag", "ine"], ["r", "ight"], ["机", "器"], ["▁C", "omm"], ["ain", "ed"], ["`", "`"], ["有", "限"], ["o", "int"], ["ear", "ch"], ["▁spec", "ial"], ["转", "变"], ["▁de", "ath"], ["▁h", "ig"], ["证", "明"], ["原", "理"], ["行", "动"], ["tern", "ational"], ["▁m", "ajor"], ["_", "_"], ["人工", "智能"], ["▁t", "urn"], ["家", "庭"], ["继", "续"], ["▁re", "ce"], ["改", "善"], ["多", "种"], ["▁est", "ab"], ["▁av", "ail"], ["文", "献"], ["作", "出"], ["▁C", "ent"], [":", "\""], ["ort", "un"], ["▁c", "rit"], ["▁R", "e"], ["来", "说"], ["道", "路"], ["is", "ed"], ["s", "he"], ["▁l", "ow"], ["趋", "势"], ["▁l", "ine"], ["▁l", "and"], ["识", "别"], ["作", "者"], ["n", "ow"], ["很", "多"], ["训", "练"], ["配", "置"], ["重", "视"], ["检", "查"], ["at", "ch"], ["ra", "w"], ["C", "A"], ["▁m", "il"], ["事", "实"], ["th", "ough"], ["▁H", "e"], ["策", "略"], ["来", "源"], ["er", "y"], ["了", "一"], ["▁N", "ational"], ["▁cur", "rent"], ["相", "应"], ["id", "d"], ["▁l", "ast"], ["大", "量"], ["ic", "ro"], ["共", "和"], ["c", "ul"], ["th", "umb"], ["re", "l"], ["观", "察"], ["团", "队"], ["▁E", "x"], ["|", "|▁"], ["s", "el"], ["▁w", "ar"], ["▁char", "acter"], ["使", "得"], ["y", "d"], ["▁imp", "act"], ["▁sim", "ilar"], ["▁ob", "ject"], ["▁ben", "ef"], ["▁p", "ress"], ["环", "节"], ["意", "见"], ["▁wor", "ks"], ["简", "单"], ["传", "播"], ["▁b", "i"], ["建", "议"], ["权", "的"], ["显", "著"], ["▁l", "im"], ["▁b", "ook"], ["S", "he"], ["r", "ing"], ["▁a", "ge"], ["ore", "d"], ["特", "殊"], ["▁en", "s"], ["▁po", "int"], ["债", "务"], ["o", "ber"], ["▁typ", "e"], ["iv", "ity"], ["案", "件"], ["pl", "oy"], ["op", "h"], ["法", "规"], ["强", "化"], ["形", "态"], ["ri", "ed"], ["共", "享"], ["教", "授"], ["▁c", "ause"], ["负", "责"], ["il", "t"], ["▁we", "e"], ["▁dif", "f"], ["国", "民"], ["新", "时代"], ["r", "ans"], ["支", "付"], ["re", "g"], ["▁pl", "ant"], ["的", "数据"], ["一", "是"], ["位", "置"], ["ot", "t"], ["循", "环"], ["背", "景"], ["第", "四"], ["at", "ures"], ["s", "ide"], ["▁W", "orld"], ["▁com", "b"], ["高", "校"], ["f", "ace"], ["避", "免"], ["下", "的"], ["每", "个"], ["后", "的"], ["Re", "ferences"], ["高", "的"], ["▁th", "ink"], [".", "("], ["▁A", "n"], ["技术", "的"], ["▁p", "ost"], ["a", "i"], ["财", "务"], ["um", "ent"], ["am", "m"], ["哲", "学"], ["m", "ost"], ["试", "验"], ["立", "法"], ["it", "ing"], ["▁app", "ear"], ["突", "出"], ["数字", "化"], ["am", "ed"], ["▁comp", "ut"], ["监", "测"], ["▁inv", "est"], ["i", "pp"], ["肿", "瘤"], ["下", "降"], ["▁f", "low"], ["▁p", "e"], ["i", "ation"], ["▁l", "anguage"], ["il", "ities"], ["iz", "ing"], ["a", "e"], ["主", "动"], ["▁poss", "ible"], ["比", "如"], ["ure", "d"], ["氧", "化"], ["b", "ed"], ["处", "于"], ["op", "e"], ["期", "间"], ["us", "h"], ["▁prot", "ect"], ["▁commun", "ity"], ["P", "ro"], ["our", "s"], ["▁W", "ar"], ["▁pre", "vent"], ["尤", "其"], ["f", "ric"], ["自", "我"], ["观", "点"], ["而", "言"], ["▁you", "ng"], ["▁s", "w"], ["ol", "s"], ["深", "化"], [".▁", "("], [".", "”"], ["平", "衡"], ["▁m", "en"], ["角", "度"], ["er", "c"], ["层", "次"], [":", "“"], ["存", "储"], ["u", "ed"], ["培", "训"], ["出", "版"], ["准", "确"], ["A", "r"], ["有", "机"], ["申", "请"], ["及", "时"], ["转", "移"], ["s", "y"], ["S", "p"], ["▁det", "erm"], ["实", "行"], ["当", "事"], ["▁P", "h"], ["平", "均"], ["▁system", "s"], ["▁sh", "ort"], ["说", "明"], ["进", "程"], ["的", "方法"], ["伟", "大"], ["▁str", "ong"], ["at", "ors"], ["▁cont", "ribut"], ["两", "种"], ["Wh", "ile"], ["▁T", "e"], ["ar", "ing"], ["▁resp", "ons"], ["ien", "ces"], ["▁pol", "it"], ["▁treat", "ment"], ["▁L", "e"], ["真", "正"], ["at", "t"], ["介", "绍"], ["二", "是"], ["逐", "步"], ["逻", "辑"], ["es", "ts"], ["▁s", "ince"], ["▁res", "ults"], ["s", "erv"], ["ys", "is"], ["ut", "ure"], ["流", "动"], [",", "“"], ["st", "it"], ["▁avail", "able"], ["▁A", "d"], ["战", "争"], ["ther", "n"], ["iv", "al"], ["那", "么"], ["▁c", "ertain"], ["往", "往"], ["▁n", "atural"], ["▁he", "re"], ["正", "常"], ["▁n", "ec"], ["不", "足"], ["▁rep", "resent"], ["en", "n"], ["▁c", "ir"], ["西", "方"], ["▁ab", "le"], ["设", "置"], ["em", "s"], ["为", "主"], ["讨", "论"], ["+", "▁"], ["▁wh", "y"], ["支", "撑"], ["as", "ing"], ["▁h", "ard"], ["中国", "共产党"], ["▁e", "y"], ["带", "来"], ["▁govern", "ment"], ["ol", "ution"], ["▁can", "cer"], ["▁disc", "uss"], ["落", "实"], ["并", "不"], ["▁comp", "lex"], ["the", "n"], ["▁st", "ory"], ["et", "ic"], ["▁rel", "ations"], ["p", "ut"], ["经济", "发展"], ["▁or", "der"], ["提出", "了"], ["发", "布"], ["▁E", "urop"], ["成", "员"], ["▁com", "e"], ["▁ra", "d"], ["学", "术"], ["▁B", "l"], ["先", "进"], ["E", "R"], ["相", "同"], ["▁per", "cent"], ["汽", "车"], ["卫", "生"], ["缺", "乏"], ["▁inf", "lu"], ["▁o", "pt"], ["S", "h"], ["居", "民"], ["du", "ct"], ["p", "art"], ["ab", "les"], ["▁prof", "ess"], ["f", "rom"], ["用", "的"], ["预", "测"], ["v", "al"], ["▁sp", "ace"], ["▁w", "he"], ["▁beh", "av"], ["ist", "ic"], ["投", "入"], ["▁l", "ik"], ["ol", "l"], ["素", "质"], ["e", "y"], ["到", "了"], ["ap", "s"], ["▁ke", "y"], ["v", "ious"], ["▁wor", "ds"], ["c", "hes"], ["om", "es"], ["ib", "r"], ["而", "是"], ["▁c", "ost"], ["le", "ction"], ["ne", "y"], ["多", "数"], ["re", "am"], ["药", "物"], ["感", "染"], ["连", "接"], ["▁R", "es"], ["进行", "了"], ["z", "e"], ["▁sc", "ient"], ["特别", "是"], ["现", "在"], ["美", "元"], ["led", "ge"], ["P", "l"], ["in", "ts"], ["▁C", "ount"], ["▁v", "iew"], ["具", "备"], ["上", "述"], ["m", "ed"], ["▁su", "gg"], ["测", "量"], ["▁v", "ol"], ["et", "er"], ["观", "念"], ["p", "os"], ["▁e", "conom"], ["逐", "渐"], [".▁", "\""], ["C", "l"], ["▁chang", "es"], ["ic", "ult"], ["文", "学"], ["om", "an"], ["le", "ment"], ["ir", "d"], ["信", "用"], ["包", "含"], ["m", "on"], ["%", ","], ["N", "ew"], ["s", "w"], ["融", "资"], ["▁", "ill"], ["▁pop", "ulation"], ["突", "破"], ["▁count", "ry"], ["av", "es"], ["en", "cy"], ["id", "ing"], ["的", "一个"], ["our", "n"], ["▁w", "ays"], ["c", "he"], ["▁B", "rit"], ["转", "化"], ["供", "给"], ["产", "权"], ["as", "k"], ["▁chall", "eng"], ["f", "er"], ["▁mus", "ic"], ["证", "据"], ["▁v", "ir"], ["▁con", "ditions"], ["th", "ing"], ["▁le", "ft"], ["内", "的"], ["表", "面"], ["多", "个"], ["ic", "le"], ["总", "体"], ["最", "高"], ["▁ess", "ential"], ["▁st", "ep"], ["w", "hen"], ["中华", "民族"], ["除", "了"], ["▁d", "ays"], ["sel", "ves"], ["最", "大"], ["努", "力"], ["流", "程"], ["▁t", "ry"], ["au", "gh"], ["▁le", "t"], ["然", "后"], ["ex", "t"], ["审", "计"], ["▁cent", "ury"], ["效", "应"], ["▁c", "ase"], ["▁s", "ound"], ["m", "p"], ["▁mem", "bers"], ["依", "法"], ["are", "n"], ["▁sk", "ills"], ["周", "期"], ["ru", "ction"], ["▁f", "oot"], ["有利", "于"], ["科", "研"], ["专", "家"], ["的", "方式"], ["▁proble", "ms"], ["▁v", "ers"], ["▁b", "rain"], ["▁s", "ay"], ["ab", "ly"], ["w", "w"], ["▁typ", "es"], ["医", "学"], ["▁pr", "im"], ["ap", "t"], ["▁A", "fric"], ["en", "ed"], ["▁a", "way"], ["▁associ", "ated"], ["普", "遍"], ["状", "况"], ["判", "断"], ["▁p", "ast"], ["▁tem", "per"], ["b", "um"], ["r", "im"], ["m", "it"], ["难", "以"], ["履", "行"], ["完", "整"], ["思", "考"], ["进", "步"], ["本", "身"], ["当", "时"], ["协", "同"], ["还", "有"], ["》", ","], ["教", "材"], ["ra", "d"], ["▁C", "ar"], ["▁g", "re"], ["▁c", "ity"], ["ip", "le"], ["▁he", "art"], ["正", "在"], ["来", "自"], ["客", "观"], ["it", "her"], ["y", "le"], ["ograph", "y"], ["高", "质量"], ["物", "流"], ["▁l", "inks"], ["一", "致"], ["▁exper", "ience"], ["损", "害"], ["I", "D"], ["▁in", "it"], ["S", "c"], ["o", "on"], ["▁wor", "king"], ["▁d", "am"], ["▁S", "chool"], ["▁res", "ources"], ["▁bus", "iness"], ["公", "平"], ["温", "度"], ["ur", "ch"], ["▁techn", "ology"], ["基础", "设施"], ["ove", "red"], ["发", "表"], ["▁lit", "tle"], ["动", "态"], ["记", "录"], ["容", "易"], ["hip", "s"], ["h", "ib"], ["▁s", "ide"], ["▁understand", "ing"], ["ra", "ft"], ["▁m", "ot"], ["ep", "end"], ["损", "失"], ["高", "等"], ["应", "对"], ["多", "样"], ["深", "度"], ["▁O", "r"], ["国", "有"], ["深", "刻"], ["高", "效"], ["▁grou", "ps"], ["一", "定的"], ["地", "理"], ["▁partic", "ular"], ["os", "is"], ["▁s", "ens"], ["比", "例"], ["来", "越"], ["▁activ", "ities"], ["▁through", "out"], ["总", "书记"], ["来", "看"], ["▁proble", "m"], ["▁", "—▁"], ["▁ne", "xt"], ["客", "户"], ["o", "es"], ["L", "et"], ["越", "来越"], ["最", "后"], ["儿", "童"], ["▁c", "y"], ["ch", "ie"], ["A", "ll"], ["▁Y", "ork"], ["▁sing", "le"], ["ar", "th"], ["▁build", "ing"], ["ell", "ing"], ["ach", "ing"], ["▁ex", "ist"], [")", "、"], ["ill", "ed"], ["▁p", "ut"], ["的", "历史"], ["▁n", "orm"], ["▁con", "cer"], ["英", "国"], ["ru", "g"], ["压", "力"], ["▁pre", "d"], ["as", "c"], ["▁stud", "ies"], ["不", "得"], ["A", "R"], ["▁f", "ar"], ["本", "质"], ["▁", "er"], ["one", "y"], ["▁impro", "ve"], ["当事", "人"], ["▁Ch", "rist"], ["研", "发"], ["g", "ed"], ["经济", "学"], ["▁en", "ough"], ["pl", "ay"], ["st", "er"], ["▁un", "ique"], ["危", "机"], ["▁f", "ree"], ["注", "重"], ["也", "有"], ["in", "king"], ["大", "数据"], ["ict", "ion"], [")", "、"], ["的", "关系"], ["▁educ", "ation"], ["/", "▁"], ["之", "前"], ["▁m", "akes"], ["u", "ation"], ["出", "的"], ["ap", "an"], ["g", "es"], ["仍", "然"], ["▁M", "ed"], ["▁f", "uture"], ["al", "f"], ["▁hig", "her"], ["▁ha", "ving"], ["i", "res"], ["▁pat", "tern"], ["正", "式"], ["E", "S"], ["把", "握"], ["at", "ives"], ["层", "面"], ["ly", "ing"], [".", "\"▁"], ["▁iss", "ues"], ["▁cre", "ated"], ["▁f", "urther"], ["▁b", "ig"], ["cl", "us"], ["传", "输"], ["▁n", "et"], ["的", "作用"], ["案", "例"], ["b", "o"], ["b", "l"], ["▁g", "iven"], ["▁grow", "th"], ["诊", "断"], ["▁to", "day"], ["▁differe", "n"], ["▁effect", "s"], ["ect", "ed"], ["]", "▁"], ["一", "直"], ["ib", "ility"], ["▁E", "n"], ["的", "社会"], ["se", "qu"], ["▁g", "round"], ["A", "C"], ["▁al", "ways"], ["in", "ter"], ["▁ser", "ies"], ["▁pl", "ants"], ["ag", "ing"], ["av", "ing"], ["▁k", "ind"], ["▁app", "lic"], ["▁Eng", "lish"], ["ust", "ral"], ["贡", "献"], ["共和", "国"], ["▁ev", "ent"], ["中", "小"], ["▁M", "ar"], ["▁fact", "ors"], ["ific", "ation"], ["基", "金"], ["▁need", "s"], ["一", "次"], ["ac", "y"], ["出", "口"], ["全", "部"], ["▁hist", "or"], ["an", "u"], ["▁t", "erm"], ["相", "比"], ["植", "物"], ["传", "感"], ["il", "s"], ["▁te", "ac"], ["▁m", "aking"], ["ec", "ially"], ["▁ex", "c"], ["▁s", "elf"], ["m", "a"], ["各", "个"], ["可", "持续"], ["加", "工"], ["对", "外"], ["▁col", "lect"], ["ist", "ory"], ["▁p", "ub"], ["二", "十"], ["▁main", "tain"], ["▁activ", "ity"], ["适", "用"], ["c", "o"], ["更", "好"], ["和", "发展"], ["真", "实"], ["严", "格"], ["旅", "游"], ["▁individual", "s"], ["▁partic", "ip"], ["ow", "s"], ["参", "数"], ["j", "ust"], ["▁be", "gin"], ["▁pro", "te"], ["l", "ight"], ["ad", "a"], ["▁str", "ateg"], ["中国", "的"], ["m", "ore"], ["▁mod", "el"], ["pt", "oms"], ["▁as", "k"], ["al", "t"], ["▁d", "ig"], ["和", "社会"], ["a", "im"], ["es", "e"], ["iqu", "es"], ["is", "ing"], ["海", "洋"], ["ip", "s"], ["鼓", "励"], ["▁cons", "id"], ["论", "文"], ["▁nec", "ess"], ["ro", "ll"], ["▁to", "wn"], ["人民", "法院"], ["▁p", "ath"], ["贷", "款"], ["双", "方"], ["▁cons", "um"], ["收", "益"], ["的", "能力"], ["oo", "king"], ["▁int", "rodu"], ["C", "D"], ["▁g", "ive"], ["▁incre", "ase"], ["参", "加"], ["ch", "an"], ["▁e", "p"], ["必", "然"], ["▁col", "l"], ["▁s", "um"], ["▁", "‘"], ["▁f", "ull"], ["▁help", "s"], ["他", "的"], ["描", "述"], ["出", "了"], ["▁r", "ange"], ["集", "体"], ["升", "级"], ["总", "结"], ["▁diff", "icult"], ["不", "会"], ["法", "的"], ["▁m", "illion"], ["l", "or"], ["食", "品"], ["工", "艺"], ["pl", "ic"], ["媒", "体"], ["esp", "ecially"], ["ob", "al"], ["▁S", "outh"], ["ers", "on"], ["▁aut", "hor"], ["an", "ced"], ["▁ret", "urn"], ["ol", "ic"], ["A", "P"], ["获", "取"], ["e", "or"], ["▁cour", "se"], ["▁", "z"], ["》", "、"], ["is", "ter"], ["▁rec", "ogn"], ["▁some", "one"], ["P", "h"], ["en", "e"], ["健", "全"], ["▁M", "ay"], ["各", "类"], ["▁e", "ff"], ["工作", "的"], ["c", "an"], ["b", "ased"], ["▁off", "ic"], ["ra", "ms"], ["变", "革"], ["it", "es"], ["arc", "hers"], ["▁h", "ouse"], ["ak", "en"], ["新", "型"], ["ac", "ed"], ["▁t", "ru"], ["ful", "ly"], ["C", "O"], ["▁st", "at"], ["A", "T"], ["ec", "ause"], ["抑", "制"], ["途", "径"], ["恢", "复"], ["权", "益"], ["▁lik", "ely"], ["▁f", "ield"], ["▁opp", "ortun"], ["▁cont", "ain"], ["电", "池"], ["▁requ", "ire"], ["▁ob", "serv"], ["re", "c"], ["阶", "级"], ["▁cle", "ar"], ["r", "ig"], ["普", "通"], ["一", "起"], ["#", "▁"], ["量", "子"], ["排", "放"], ["社", "区"], ["uc", "k"], ["▁", "||▁"], ["欧", "洲"], ["le", "ge"], ["动", "物"], ["▁us", "ually"], ["产生", "的"], ["依", "赖"], ["▁count", "ries"], ["音", "乐"], ["▁val", "ue"], ["\"", ",▁"], ["中", "共"], ["▁N", "orth"], ["困", "难"], ["▁p", "aper"], ["血", "管"], ["▁produ", "ction"], ["▁be", "gan"], ["f", "act"], ["拥", "有"], ["认", "知"], ["机", "械"], ["▁cons", "ider"], ["定", "位"], ["▁an", "n"], ["国家", "的"], ["改革", "开放"], ["权", "力"], ["各", "国"], ["▁l", "ay"], ["民", "事"], ["en", "ces"], ["▁Count", "y"], ["面", "积"], ["um", "p"], ["▁pract", "ice"], ["▁pop", "ular"], ["气", "候"], ["y", "th"], ["m", "ing"], ["s", "u"], ["=", "="], ["▁c", "hem"], ["利", "率"], ["▁G", "erm"], ["en", "ing"], ["▁add", "ress"], ["时", "候"], ["的基础", "上"], ["▁t", "ri"], ["I", "P"], ["▁ph", "ot"], ["▁m", "ind"], ["标", "志"], ["b", "on"], ["▁", "["], ["A", "S"], ["▁s", "un"], ["▁material", "s"], ["▁l", "ower"], ["▁s", "ure"], ["▁up", "on"], ["销", "售"], ["▁", "X"], ["驱", "动"], ["▁quest", "ions"], ["经济", "的"], ["第", "十"], ["C", "P"], ["整", "合"], ["费", "用"], ["生", "成"], ["▁l", "ive"], ["重", "新"], ["▁M", "an"], ["g", "est"], ["row", "n"], ["早", "期"], ["ab", "it"], ["集", "团"], ["▁to", "wards"], ["一", "体"], ["▁sur", "face"], ["框", "架"], ["典", "型"], ["某", "些"], ["十", "分"], ["▁incre", "ased"], ["特", "性"], ["in", "n"], ["▁l", "oss"], ["度", "的"], ["g", "round"], ["▁G", "u"], ["从", "事"], ["另", "外"], ["▁se", "ason"], ["e", "le"], ["▁know", "ledge"], ["▁sub", "ject"], ["g", "o"], ["o", "res"], ["物", "联网"], ["et", "y"], ["▁f", "ive"], ["D", "P"], ["y", "stem"], ["制造", "业"], ["▁s", "ite"], ["集", "成"], ["税", "收"], ["r", "ont"], ["feren", "ce"], ["▁phys", "ical"], ["错", "误"], ["调", "节"], ["▁sim", "ple"], ["青", "年"], ["始", "终"], ["格", "局"], ["▁a", "chie"], ["阅", "读"], ["al", "ing"], ["助", "于"], ["实", "体"], ["运", "营"], ["ar", "r"], ["▁em", "ploy"], ["另", "一方面"], ["▁ev", "ents"], ["大", "会"], ["I", "T"], ["过", "去"], ["ur", "b"], ["覆", "盖"], ["▁g", "ame"], ["▁c", "ases"], ["德", "国"], ["尽", "管"], ["相关", "的"], ["es", "tern"], ["▁h", "old"], ["安", "排"], ["准", "备"], ["理", "想"], ["图", "像"], ["▁l", "iving"], ["▁inter", "act"], ["的", "主"], ["er", "ve"], ["军", "事"], ["学", "者"], ["传感", "器"], ["解", "放"], ["is", "on"], ["▁qu", "ick"], ["▁w", "ind"], ["▁anim", "als"], ["in", "ary"], ["▁com", "es"], ["A", "meric"], ["▁ne", "g"], ["▁fre", "qu"], ["S", "ee"], ["所", "谓"], ["▁person", "al"], ["▁te", "xt"], ["ail", "s"], ["可", "靠"], ["转", "换"], ["习近平", "总书记"], ["sy", "ch"], ["ac", "ks"], ["▁friend", "s"], ["特", "定"], ["ar", "get"], ["文", "章"], ["▁comp", "any"], ["效", "益"], ["il", "le"], ["▁the", "rap"], ["▁fam", "il"], ["▁mod", "ern"], ["ar", "l"], ["相", "当"], ["上", "升"], ["end", "er"], ["oo", "se"], ["行", "的"], ["教育", "的"], ["m", "b"], ["是", "由"], ["平", "等"], ["▁comp", "et"], ["▁fil", "m"], ["前", "提"], ["▁me", "et"], ["▁eng", "ine"], ["障", "碍"], ["城", "乡"], ["a", "ff"], ["社会", "的"], ["▁p", "ort"], ["发", "达"], ["D", "uring"], ["▁re", "pl"], ["身", "份"], ["▁s", "ong"], ["吸", "收"], ["ug", "ust"], ["城", "镇"], ["等", "方面"], ["▁gener", "al"], ["St", "ep"], ["▁par", "ts"], ["m", "e"], ["ide", "o"], ["i", "ate"], ["本", "文"], ["ev", "en"], ["▁c", "ame"], ["场", "景"], ["c", "hed"], ["▁ind", "ic"], ["m", "aking"], ["▁press", "ure"], ["合", "法"], ["▁them", "selves"], ["▁ab", "ove"], ["or", "por"], ["▁sym", "ptoms"], ["公", "民"], ["▁ar", "r"], ["领域", "的"], ["请", "求"], ["▁quest", "ion"], ["▁wor", "d"], ["ic", "ip"], ["ffic", "ient"], ["▁re", "d"], ["on", "y"], ["S", "ection"], ["id", "ge"], ["/", "/"], ["A", "cc"], ["ul", "es"], ["追", "求"], ["R", "es"], ["ar", "ies"], ["▁de", "g"], ["意", "味"], ["aren", "ts"], ["▁to", "ok"], ["人", "物"], ["干", "部"], ["how", "ever"], ["一", "样"], ["▁B", "e"], ["▁al", "bum"], ["同", "样"], ["A", "N"], ["▁col", "or"], ["实验", "室"], ["d", "om"], ["i", "ol"], ["H", "is"], ["创", "业"], ["▁su", "per"], ["or", "ks"], ["▁U", "S"], ["▁ad", "dition"], ["它", "的"], ["▁bu", "ilt"], ["▁e", "mer"], ["M", "any"], ["虚", "拟"], ["op", "s"], ["o", "or"], ["ut", "ions"], ["收", "集"], ["▁sc", "ience"], ["▁le", "ast"], ["ad", "em"], ["▁cl", "os"], ["ur", "s"], ["t", "ers"], ["am", "b"], ["M", "ore"], ["in", "o"], ["le", "ep"], ["p", "ts"], ["▁ar", "ch"], ["▁m", "icro"], ["▁s", "ent"], ["er", "ation"], ["多", "元"], ["只", "能"], ["I", "nd"], ["▁lit", "er"], ["股", "东"], ["ast", "ic"], ["部", "署"], ["on", "str"], ["c", "ol"], ["▁f", "und"], ["▁develop", "ed"], ["▁qu", "ality"], ["卫", "星"], ["债", "权"], ["无", "论"], ["u", "ly"], ["的", "过程"], ["▁f", "all"], ["只", "是"], ["▁need", "ed"], ["路", "径"], ["▁n", "amed"], ["的", "高"], ["和", "谐"], ["re", "ct"], ["▁A", "s"], ["▁as", "pect"], ["u", "le"], ["\"", "▁("], ["移", "动"], ["中华", "人民"], ["也", "可以"], ["▁j", "o"], ["▁sugg", "est"], ["▁pol", "ic"], ["美", "國"], ["it", "ud"], ["o", "ff"], ["ag", "ue"], ["iv", "il"], ["▁em", "ot"], ["▁Americ", "a"], ["布", "局"], ["m", "ar"], ["▁so", "ft"], ["▁commun", "ities"], ["▁n", "ational"], ["专", "利"], ["的", "关键"], ["I", "N"], ["体", "育"], ["land", "s"], ["验", "证"], ["he", "l"], ["交", "换"], ["H", "ere"], ["死", "亡"], ["w", "o"], ["距", "离"], ["▁whe", "ther"], ["▁b", "ar"], ["▁R", "ep"], ["预", "防"], ["设", "立"], ["网络", "安全"], ["▁comp", "let"], ["运", "输"], ["▁anal", "ysis"], ["的", "信息"], ["元", "素"], ["十", "八"], ["▁se", "en"], ["er", "ous"], ["o", "ice"], ["▁St", "ate"], ["▁s", "ize"], ["组", "合"], ["面", "对"], ["ut", "es"], ["ren", "ch"], ["▁A", "ss"], ["▁though", "t"], ["▁c", "ut"], ["的", "工作"], ["▁sh", "are"], ["连", "续"], ["ren", "g"], ["▁f", "ig"], ["▁G", "od"], ["f", "l"], ["首", "次"], ["▁fl", "u"], ["▁on", "line"], ["传统", "的"], ["read", "y"], ["生", "长"], ["▁n", "ature"], ["在", "此"], ["Im", "agine"], ["yp", "e"], ["优", "秀"], ["b", "or"], ["N", "o"], ["ct", "or"], ["g", "ing"], ["赔", "偿"], ["r", "um"], ["▁e", "ver"], ["都", "有"], ["..", "."], ["▁st", "ories"], ["是", "对"], ["ac", "hes"], ["激", "发"], ["anu", "ary"], ["固", "定"], ["国", "务"], ["u", "k"], ["▁de", "ep"], ["▁d", "oc"], ["it", "or"], ["▁on", "ce"], ["▁method", "s"], ["希", "望"], ["角", "色"], ["ic", "les"], ["迅", "速"], ["ist", "ance"], ["ver", "age"], ["ourn", "al"], ["认", "定"], ["▁pre", "vious"], ["▁serv", "ices"], ["an", "a"], ["on", "se"], ["▁ne", "ver"], ["输", "入"], ["E", "n"], ["▁am", "ount"], ["呈", "现"], ["机", "会"], ["u", "el"], ["近", "年来"], ["▁start", "ed"], ["f", "ect"], ["▁product", "s"], ["就", "会"], ["P", "S"], ["宏", "观"], ["I", "V"], ["以", "后"], ["▁reg", "ular"], ["▁go", "ing"], ["ud", "d"], ["▁n", "ut"], ["的", "要求"], ["pt", "ember"], ["end", "s"], ["▁cir", "c"], ["l", "er"], ["pr", "il"], ["加", "大"], ["▁ent", "ire"], ["e", "ak"], ["▁st", "ress"], ["自", "治"], ["防", "止"], ["ail", "y"], ["办", "法"], ["引", "领"], ["n", "own"], ["▁r", "ate"], ["▁techn", "iques"], ["▁wee", "k"], ["公", "开"], ["n", "a"], ["▁c", "r"], ["am", "in"], ["数据", "库"], ["▁bre", "ak"], ["▁wh", "ite"], ["ul", "ations"], ["um", "e"], ["the", "se"], ["▁Brit", "ish"], ["类", "似"], ["太", "阳"], ["左", "右"], [".▁", "“"], ["▁design", "ed"], ["h", "ood"], ["idd", "le"], ["▁redu", "ce"], ["el", "t"], ["h", "old"], ["常", "见"], ["▁every", "one"], ["▁ens", "ure"], ["员", "工"], ["is", "es"], ["▁tra", "ditional"], ["访", "问"], ["疫", "情"], ["预", "算"], ["加", "速"], ["▁J", "ohn"], ["良", "好的"], ["ol", "es"], ["S", "e"], ["C", "R"], ["位", "于"], ["公", "众"], ["▁ab", "s"], ["▁l", "ab"], ["▁ass", "ess"], ["ill", "iam"], ["▁reg", "ion"], ["破", "坏"], ["有效", "的"], ["▁d", "om"], ["证", "券"], ["模", "拟"], ["规定", "的"], ["im", "ent"], ["学", "的"], ["主要", "是"], ["加", "入"], ["▁C", "al"], ["it", "ary"], ["金", "属"], ["▁", "-"], ["职", "能"], ["知", "道"], ["数据", "的"], ["ed", "s"], ["M", "S"], ["让", "学生"], ["▁allow", "s"], ["几", "个"], ["▁consid", "ered"], ["意味", "着"], ["▁orig", "inal"], ["》、", "《"], ["出", "发"], ["le", "v"], ["le", "ar"], ["兴", "趣"], ["▁s", "ix"], ["模", "块"], ["第", "五"], ["审", "查"], ["▁med", "ical"], ["min", "ist"], ["im", "ately"], ["国务", "院"], ["日", "益"], ["av", "or"], ["地", "球"], ["運", "動"], ["▁me", "chan"], ["▁sk", "in"], ["▁pro", "p"], ["▁m", "ass"], ["b", "orn"], ["D", "e"], ["▁manag", "ement"], ["ivers", "e"], ["in", "ally"], ["▁ev", "idence"], ["▁ex", "erc"], ["中华人民", "共和国"], ["奋", "斗"], ["ur", "ity"], ["能", "量"], ["实", "时"], ["活", "性"], ["N", "ot"], ["O", "S"], ["内", "涵"], ["am", "ple"], ["▁K", "ing"], ["优", "先"], ["培", "育"], ["亿", "元"], ["▁C", "ity"], ["ist", "ics"], ["A", "I"], ["体", "验"], ["相", "结合"], ["围", "绕"], ["B", "e"], ["其", "次"], ["▁an", "c"], ["如", "此"], ["消费", "者"], ["art", "ment"], ["基", "地"], ["▁an", "sw"], ["Americ", "an"], ["▁bel", "ow"], ["▁prov", "ides"], ["▁I", "I"], ["▁d", "rug"], ["F", "rom"], ["b", "ack"], ["主", "张"], ["利", "润"], ["刑", "事"], ["▁h", "arm"], ["▁b", "al"], ["的", "经济"], ["=", "\""], ["如", "下"], ["▁comp", "on"], ["▁S", "oc"], ["C", "an"], ["有", "所"], ["▁A", "ustral"], ["改", "造"], ["▁sur", "v"], ["统", "筹"], ["成", "熟"], ["B", "C"], ["由", "此"], ["▁rel", "ated"], ["改", "进"], ["▁ide", "a"], ["▁enc", "ou"], ["▁int", "eg"], ["at", "ter"], ["三", "是"], ["I", "s"], ["节", "点"], ["▁health", "y"], ["▁involv", "ed"], ["p", "re"], ["en", "c"], ["的", "内容"], ["ct", "ober"], ["▁ab", "ility"], ["复", "兴"], ["▁includ", "ed"], ["▁C", "omp"], ["▁pub", "lished"], ["▁l", "ives"], ["尤其", "是"], ["▁re", "act"], ["%", ","], ["▁m", "ix"], ["Al", "though"], [":", "//"], ["ar", "i"], ["▁st", "ation"], ["▁play", "ers"], ["▁", "ver"], ["▁exp", "ress"], ["英", "语"], ["▁t", "arget"], ["C", "T"], ["ir", "l"], ["大", "多数"], ["▁rel", "ig"], ["▁ref", "er"], ["▁show", "s"], ["▁read", "ing"], ["le", "te"], ["文", "字"], ["电", "力"], ["it", "ation"], ["▁", "`"], ["ur", "g"], ["▁meas", "ure"], ["中国", "人民"], ["信息", "化"], ["医", "院"], ["g", "ar"], ["看", "到"], ["法", "国"], ["▁mult", "iple"], ["▁al", "ready"], ["ron", "ic"], ["分", "离"], ["▁stud", "ent"], ["有", "助于"], ["一", "切"], ["症", "状"], ["子", "的"], ["新", "闻"], ["▁cl", "imate"], ["更", "为"], ["j", "oy"], ["▁ins", "ide"], ["▁to", "tal"], ["相应", "的"], ["▁mon", "ths"], ["▁E", "arth"], ["继", "承"], ["▁w", "on"], ["电", "路"], ["个人", "信息"], ["參", "考"], ["▁inst", "ance"], ["ac", "hed"], ["▁var", "i"], ["▁cult", "ure"], ["▁pr", "inc"], ["▁c", "oun"], ["▁we", "bs"], ["at", "tle"], ["▁ident", "ify"], ["进", "而"], ["▁rese", "archers"], ["▁comput", "er"], ["异", "常"], ["▁reg", "ard"], ["实践", "中"], ["Acc", "ording"], ["▁t", "ell"], ["和", "平"], ["攻", "击"], ["▁P", "r"], ["a", "un"], ["▁exper", "iences"], ["的", "教学"], ["输", "出"], ["宣", "传"], ["购", "买"], ["允", "许"], ["re", "w"], ["架", "构"], ["▁se", "em"], ["U", "s"], ["混", "合"], ["▁bl", "ack"], ["▁re", "ally"], ["▁J", "apan"], ["▁estab", "lished"], ["创", "建"], ["也", "就是"], ["实际", "上"], ["课", "题"], ["av", "y"], ["公", "里"], ["▁fe", "atures"], ["专", "门"], ["因", "而"], ["▁mark", "et"], ["if", "t"], ["群", "体"], ["▁in", "sp"], ["的", "规定"], ["Ex", "ternal"], ["▁f", "em"], ["基", "层"], ["▁in", "j"], ["▁expl", "ore"], ["ord", "er"], ["▁a", "im"], ["▁R", "iver"], ["▁d", "iet"], ["ce", "mber"], ["▁di", "agn"], ["▁g", "reen"], ["的", "变化"], ["▁to", "ols"], ["▁requ", "ired"], ["研究", "人员"], ["▁challeng", "es"], ["▁c", "over"], ["▁d", "est"], ["▁ele", "ments"], ["个", "体"], ["▁p", "ict"], ["ord", "s"], ["▁h", "ours"], ["n", "o"], ["▁a", "ction"], ["ve", "y"], ["▁M", "arch"], [")", "。"], ["du", "c"], ["▁pos", "ition"], ["ct", "ions"], ["作", "业"], ["▁e", "ither"], ["▁rem", "ain"], ["人", "力"], ["ell", "ow"], ["的", "行为"], ["▁necess", "ary"], ["推", "广"], ["▁effect", "ive"], ["四", "个"], ["调", "控"], ["贯", "彻"], ["▁h", "alf"], ["形成", "了"], ["st", "ead"], ["▁c", "ust"], ["形", "势"], ["认", "证"], ["▁", "rou"], ["事", "务"], ["▁re", "view"], ["▁se", "par"], ["▁m", "oney"], ["▁l", "ed"], ["▁s", "ource"], ["这", "里"], ["扩", "展"], ["登", "记"], ["、", "\""], ["▁struct", "ure"], ["▁cons", "ist"], ["n", "ov"], ["▁f", "ail"], ["生态", "环境"], ["▁includ", "es"], ["▁con", "duct"], ["▁dem", "onstr"], ["an", "c"], ["面", "向"], ["▁m", "or"], ["文化", "的"], ["商", "标"], ["a", "ul"], ["▁p", "ay"], ["▁b", "ooks"], ["w", "ater"], ["ove", "mber"], ["▁l", "ove"], ["▁c", "ru"], ["ag", "ed"], ["▁m", "ach"], ["ov", "ed"], ["ens", "ive"], ["▁school", "s"], ["O", "ther"], ["▁r", "ights"], ["宪", "法"], ["同", "一"], ["单", "元"], ["▁serv", "ice"], ["▁s", "qu"], ["生", "存"], ["经济", "社会"], ["是", "以"], ["s", "aid"], ["C", "C"], ["▁us", "es"], ["u", "ra"], ["c", "ont"], ["B", "l"], ["区", "别"], ["▁t", "aken"], ["一", "系列"], ["▁l", "ate"], ["ve", "re"], ["的", "同时"], ["实现", "了"], ["做", "到"], ["经济", "增长"], ["确", "认"], ["▁W", "h"], ["▁pro", "b"], ["这样", "的"], ["素", "养"], ["f", "ord"], ["▁produ", "ce"], ["are", "nt"], ["▁s", "at"], ["(", ")"], ["▁cle", "an"], ["ric", "k"], ["▁som", "et"], ["ist", "or"], ["p", "ly"], ["研究", "的"], ["▁v", "ill"], ["▁cap", "t"], ["▁st", "e"], ["iv", "ate"], ["毕", "业"], ["t", "ime"], ["十", "二"], ["▁e", "t"], ["产品", "的"], ["管理", "的"], ["▁we", "ight"], ["▁act", "ually"], ["探", "究"], ["进", "展"], ["▁appro", "ach"], ["▁J", "une"], ["▁writ", "ing"], ["斗", "争"], ["c", "ons"], ["▁att", "ention"], ["。", "《"], ["▁b", "ur"], ["等", "等"], ["毛", "泽"], ["▁", "|▁"], ["S", "im"], ["▁st", "reng"], ["▁rec", "omm"], ["条件", "下"], ["频", "率"], ["毛泽", "东"], ["…", "…"], ["I", "nt"], ["很", "大"], ["▁P", "ol"], ["游", "戏"], ["▁tra", "ining"], ["幼", "儿"], ["主", "任"], ["▁invest", "ig"], ["▁sm", "o"], ["h", "am"], ["经", "历"], ["危", "险"], ["遗", "产"], ["A", "m"], ["器", "的"], ["▁f", "ish"], ["劳动", "者"], ["▁resp", "onse"], ["▁pos", "itive"], ["监", "控"], ["r", "ast"], ["▁tra", "vel"], ["▁j", "ob"], ["▁polit", "ical"], ["O", "ur"], ["考", "试"], ["O", "r"], ["刺", "激"], ["约", "束"], ["he", "ad"], ["检", "验"], ["▁", "/▁"], ["▁d", "one"], ["▁A", "ugust"], ["s", "ome"], ["▁se", "lect"], ["拓", "展"], ["▁c", "amp"], ["多", "的"], ["▁loc", "ated"], ["古", "代"], ["▁inst", "ead"], ["强", "的"], ["▁", "ut"], ["▁behav", "ior"], ["▁gl", "obal"], ["A", "M"], ["▁pre", "c"], ["大", "力"], ["铁", "路"], ["▁med", "ic"], ["▁cl", "ose"], ["D", "NA"], ["r", "s"], ["遗", "传"], ["建设", "的"], ["it", "ch"], ["▁ar", "g"], ["▁ext", "ra"], ["ust", "r"], ["▁s", "ays"], ["▁perform", "ance"], ["%", "."], ["ar", "a"], ["可能", "会"], ["▁d", "iv"], ["▁f", "ace"], ["▁somet", "imes"], [")", "▁("], ["eng", "th"], ["展", "示"], ["ol", "ve"], ["修", "改"], ["▁P", "ark"], ["引", "入"], ["土", "壤"], ["宗", "教"], ["▁l", "ot"], ["成", "就"], ["小", "组"], ["is", "ions"], ["rop", "ri"], ["ap", "ter"], ["做", "好"], ["op", "y"], ["离", "子"], ["制度", "的"], ["也", "不"], ["ri", "or"], ["打", "造"], ["巨", "大"], ["▁sur", "round"], ["▁st", "ar"], ["预", "期"], ["化", "和"], ["``", "`"], ["同", "志"], ["S", "T"], ["s", "et"], ["T", "e"], ["if", "orn"], ["▁no", "vel"], ["。", "“"], ["生", "的"], ["re", "et"], ["▁off", "er"], ["各", "级"], ["情", "感"], ["▁W", "est"], ["A", "D"], ["▁re", "ason"], ["▁who", "le"], ["合", "成"], ["确", "立"], ["实", "质"], ["▁He", "alth"], ["▁temper", "ature"], ["t", "ra"], ["▁J", "uly"], ["博", "士"], ["▁for", "ms"], ["▁play", "ed"], ["▁acc", "ount"], ["▁val", "ues"], ["主", "题"], ["激", "励"], ["▁C", "o"], ["ke", "y"], ["k", "nown"], ["c", "ks"], ["思", "路"], ["的", "一种"], ["▁g", "e"], ["▁em", "b"], ["当", "地"], ["可", "见"], ["的", "应用"], ["密", "切"], ["▁caus", "ed"], ["▁out", "side"], ["精", "准"], ["om", "b"], ["▁prog", "rams"], ["d", "o"], ["给", "予"], ["▁on", "es"], ["▁G", "en"], ["y", "t"], ["▁norm", "al"], ["▁pattern", "s"], ["科学", "家"], ["st", "ry"], ["▁writ", "ten"], ["im", "al"], ["▁t", "it"], ["的", "技术"], ["▁m", "ess"], ["的", "不"], [")", ","], ["\"", "\""], ["r", "ance"], ["▁po", "ints"], ["c", "il"], ["all", "ow"], ["的", "情况下"], ["▁A", "ct"], ["▁prim", "ary"], ["erv", "ation"], ["▁so", "il"], ["▁S", "u"], ["形", "象"], ["建", "成"], [",▁", "“"], ["互", "动"], ["▁con", "dition"], ["▁beh", "ind"], ["▁s", "ense"], ["f", "ort"], ["▁dist", "ribut"], ["▁f", "ire"], ["▁r", "ather"], ["▁o", "il"], ["ad", "es"], ["▁J", "anuary"], ["l", "in"], [")", "▁"], ["▁d", "raw"], ["秩", "序"], ["国", "的"], ["探", "讨"], ["供应", "链"], ["信息", "技术"], ["结", "论"], ["▁en", "joy"], ["un", "ction"], ["▁crit", "ical"], ["▁mem", "ber"], ["发", "行"], ["▁num", "bers"], ["▁he", "at"], ["▁s", "ources"], ["▁environment", "al"], ["▁t", "aking"], ["知识", "产权"], ["▁F", "ran"], ["争", "议"], ["人民", "币"], ["▁cl", "in"], ["▁p", "arents"], ["ef", "ore"], ["、", "“"], ["O", "ver"], ["▁resp", "ect"], ["iforn", "ia"], ["▁comp", "ared"], ["ie", "f"], ["▁f", "at"], ["J", "ust"], ["代", "理"], [":", "**"], ["it", "er"], ["金融", "机构"], ["E", "ach"], ["▁m", "om"], ["is", "ms"], ["▁R", "eg"], ["▁su", "ff"], ["▁do", "ing"], ["之", "外"], ["p", "e"], ["导", "向"], ["广", "大"], ["资源", "的"], ["an", "ies"], ["人", "大"], ["▁im", "age"], ["注", "册"], ["所", "在"], ["▁produ", "ced"], ["om", "ing"], ["▁g", "as"], ["▁B", "ar"], ["属", "性"], ["统", "治"], ["的", "理论"], ["纳", "入"], ["▁a", "verage"], ["▁Se", "ptember"], ["ens", "ion"], ["▁sp", "read"], ["中", "國"], ["eb", "ru"], ["法", "定"], ["h", "ing"], ["成", "长"], ["情", "形"], ["检", "察"], ["▁A", "ll"], ["ra", "ge"], ["百", "年"], ["日", "常"], ["ebru", "ary"], ["▁br", "ing"], ["的", "概念"], ["关", "联"], ["生产", "力"], ["▁benef", "its"], ["潜", "在"], ["▁its", "elf"], ["iz", "ations"], ["的", "时间"], ["各", "地"], ["所", "得"], ["▁fe", "ed"], ["振", "兴"], ["ial", "s"], ["▁v", "ideo"], ["u", "ild"], ["》", "("], ["M", "ost"], ["cl", "es"], ["▁d", "aily"], ["ar", "ily"], ["▁P", "art"], ["▁t", "akes"], ["▁incre", "asing"], ["▁st", "ates"], ["▁bro", "ad"], ["ud", "ents"], ["▁", "《"], ["▁soc", "iety"], ["当", "代"], ["▁ind", "epend"], ["▁ter", "ms"], ["▁A", "pril"], ["。", "\""], ["▁l", "ink"], ["市场", "经济"], ["omet", "imes"], ["E", "T"], ["高", "速"], ["事", "故"], ["能力", "的"], ["E", "D"], ["▁t", "iss"], ["com", "p"], ["ab", "et"], ["▁th", "reat"], ["▁ev", "al"], ["it", "ect"], ["Wh", "y"], ["▁prom", "ot"], ["▁over", "all"], ["航", "空"], ["▁w", "arm"], ["▁s", "low"], ["▁c", "ard"], ["强", "度"], ["▁be", "aut"], ["的", "法律"], ["▁long", "er"], ["即", "使"], ["od", "ies"], ["F", "irst"], ["▁c", "ool"], ["态", "度"], ["▁s", "ou"], ["in", "ct"], ["公司", "的"], ["故", "事"], ["有", "些"], ["`", "▁"], ["▁", ",▁"], ["▁foot", "ball"], ["d", "es"], ["▁your", "self"], ["可以", "通过"], ["范围", "内"], ["ic", "a"], ["▁he", "ld"], ["▁s", "leep"], ["▁dam", "age"], ["▁prote", "in"], ["▁a", "ud"], ["贫", "困"], ["有", "着"], ["stit", "ute"], ["适", "当"], ["存在", "的"], ["on", "om"], ["▁quick", "ly"], ["较", "大"], ["▁w", "ild"], ["在", "中国"], ["▁fore", "st"], ["am", "ples"], ["职", "责"], ["▁c", "ross"], ["▁pract", "ices"], ["▁f", "ru"], ["ig", "en"], ["U", "S"], ["ric", "ult"], ["▁serv", "ed"], ["▁saf", "ety"], ["他", "人"], ["On", "ce"], ["o", "e"], ["E", "ng"], ["哪", "些"], ["展", "开"], ["▁R", "ec"], ["人才", "培养"], ["研究", "所"], ["▁d", "og"], ["ing", "ton"], ["而", "不是"], ["积", "累"], ["r", "and"], ["担", "保"], ["▁stand", "ard"], ["all", "s"], ["▁al", "tern"], ["m", "m"], ["沟", "通"], ["▁se", "x"], ["An", "other"], ["▁chem", "ical"], ["ir", "it"], ["遵", "循"], ["▁H", "ar"], ["▁prov", "ided"], ["▁ear", "l"], ["J", "ohn"], ["出", "来"], ["当", "然"], ["▁st", "op"], ["约", "定"], ["威", "胁"], ["▁con", "cept"], ["更", "新"], ["stand", "ing"], ["较", "为"], ["▁mat", "ter"], ["▁en", "h"], ["▁O", "ctober"], ["▁f", "arm"], ["▁re", "ve"], ["I", "C"], ["再", "次"], ["维", "持"], ["▁rele", "ased"], ["por", "ary"], [",", "▁"], ["参考", "文献"], ["养", "老"], ["他们", "的"], ["▁exp", "ression"], ["补", "偿"], ["民", "间"], ["大", "利"], ["内", "在"], ["▁k", "ids"], ["ers", "hip"], ["▁pat", "ient"], ["我们", "的"], ["到", "的"], ["▁st", "ru"], ["▁c", "at"], ["绩", "效"], ["ed", "eral"], ["▁cont", "ent"], ["▁", "("], ["act", "ers"], ["另", "一"], ["h", "a"], ["创", "作"], ["▁p", "sych"], ["团", "结"], ["的", "核心"], ["▁y", "et"], ["▁E", "d"], ["▁ref", "lect"], ["▁cult", "ural"], ["o", "very"], ["all", "ed"], ["危", "害"], ["us", "ic"], ["商", "务"], [" ", " "], ["新", "兴"], ["▁hum", "ans"], ["▁A", "b"], ["▁sub", "st"], ["R", "NA"], ["##", "#▁"], ["ond", "on"], ["大", "部分"], ["▁add", "ed"], ["l", "ife"], ["之", "中"], ["价值", "观"], ["am", "a"], ["市场", "的"], ["▁saf", "e"], ["▁l", "og"], ["▁med", "ia"], ["▁l", "ines"], ["施", "工"], ["用", "人"], ["▁f", "inal"], ["n", "ew"], ["▁P", "ar"], ["力", "度"], ["并", "在"], ["▁caus", "es"], ["强", "制"], ["制", "作"], ["理", "性"], ["▁w", "ood"], ["O", "R"], ["将", "其"], ["u", "ro"], ["rough", "t"], ["ibr", "ary"], ["各", "项"], ["▁ro", "ad"], ["es", "c"], ["密", "度"], ["▁o", "x"], ["▁g", "ames"], ["缺", "陷"], ["os", "ing"], ["依", "靠"], ["最", "佳"], ["对", "应"], ["▁sh", "own"], ["变", "量"], ["ou", "d"], ["▁re", "v"], ["▁M", "in"], ["上", "市"], ["那", "些"], ["▁av", "oid"], ["▁su", "st"], ["转", "让"], ["▁h", "abit"], ["▁st", "ay"], ["渠", "道"], ["电", "流"], ["as", "ons"], ["▁A", "m"], ["▁F", "rench"], ["▁th", "ird"], ["冲", "突"], ["补", "充"], ["考", "核"], ["示", "范"], ["▁rec", "ent"], ["非", "法"], ["O", "N"], ["E", "P"], ["而", "不"], ["us", "ed"], ["if", "f"], ["\"", ".▁"], ["▁gre", "ater"], ["B", "ob"], ["▁does", "n"], ["▁ex", "act"], ["u", "nder"], ["接", "触"], ["党", "中央"], ["D", "r"], ["▁eas", "y"], ["引", "发"], ["pp", "er"], ["dition", "ally"], ["▁t", "ree"], ["形成", "的"], ["os", "ition"], ["协", "商"], ["▁import", "ance"], ["se", "e"], ["支", "出"], ["▁includ", "ing"], ["▁t", "alk"], ["og", "en"], ["i", "us"], ["▁imp", "lement"], ["ro", "om"], ["纤", "维"], ["尊", "重"], ["违", "法"], ["r", "or"], ["L", "e"], ["%", "。"], ["加", "以"], ["tern", "et"], ["an", "ks"], ["P", "eople"], ["ear", "s"], ["为", "什么"], ["坚", "定"], ["替", "代"], ["or", "thern"], ["▁De", "cember"], ["om", "a"], ["其", "它"], ["▁move", "ment"], ["经", "常"], ["▁vis", "ual"], ["▁D", "r"], ["ib", "er"], ["》", ","], ["A", "pp"], ["▁D", "ep"], ["反", "对"], ["▁ide", "as"], ["程度", "上"], ["人民", "群众"], ["t", "ies"], ["ic", "o"], ["、", "▁"], ["ie", "ce"], ["合", "物"], ["正", "是"], ["▁a", "ff"], ["干", "扰"], ["▁estab", "lish"], ["资本", "主义"], ["▁elect", "ric"], ["ro", "te"], ["▁w", "a"], ["▁sy", "n"], ["▁Europ", "e"], ["习", "惯"], ["▁n", "ight"], ["al", "king"], ["▁m", "ag"], ["▁s", "old"], ["响", "应"], ["因", "子"], ["▁", "."], ["空", "气"], ["▁significant", "ly"], ["ad", "d"], ["有", "了"], ["vent", "ion"], ["p", "ose"], ["▁H", "igh"], ["▁d", "ied"], ["走", "向"], ["▁histor", "ical"], ["▁prog", "ress"], ["主", "席"], ["最", "大的"], ["▁s", "il"], ["an", "cial"], ["几", "乎"], ["面", "的"], ["行", "使"], ["▁care", "er"], ["著", "作"], ["院", "校"], [".", "”▁"], ["只", "要"], ["的", "安全"], ["▁indu", "stry"], ["▁for", "mer"], ["更好", "地"], ["at", "ively"], ["▁can", "not"], ["▁E", "l"], ["某", "种"], ["ound", "s"], ["▁In", "ternational"], ["▁develop", "ing"], ["od", "es"], ["res", "h"], ["g", "l"], ["平", "方"], ["做", "出"], ["an", "cy"], ["带", "来的"], ["予", "以"], ["▁ext", "rem"], ["▁rece", "ived"], ["資", "料"], ["营", "养"], ["olog", "ies"], ["▁l", "ands"], ["今", "天"], ["十", "四"], ["▁Q", "u"], ["足", "球"], ["▁h", "y"], ["u", "fact"], ["h", "tt"], ["▁N", "ovember"], ["i", "ers"], ["▁h", "ost"], ["▁c", "ode"], ["活动", "的"], ["关系", "的"], ["时", "的"], ["▁n", "orth"], ["手", "术"], ["▁in", "ternational"], ["损", "伤"], ["传", "递"], ["▁cust", "om"], ["▁A", "nd"], ["可以", "在"], ["但", "在"], ["esp", "ite"], ["基础", "上"], ["R", "ec"], ["十", "九"], ["k", "y"], ["▁cl", "aim"], ["产业", "链"], ["il", "es"], ["芯", "片"], ["吸", "引"], ["释", "放"], [")", ":"], ["▁commun", "ication"], ["汇", "率"], ["▁H", "ouse"], ["b", "it"], [")", ":▁"], ["▁tru", "e"], ["•", "▁"], ["少", "数"], ["Th", "rough"], ["指", "数"], ["▁anim", "al"], ["不", "再"], ["▁lar", "ger"], ["▁Europ", "ean"], ["高", "级"], ["al", "so"], ["良", "好"], ["网", "站"], ["改革", "的"], ["重", "复"], ["▁a", "ware"], ["▁min", "utes"], ["人", "与"], ["▁grow", "ing"], ["i", "ra"], ["的", "思想"], ["初", "步"], ["▁fe", "ature"], [",", "《"], ["▁famil", "ies"], ["ter", "m"], ["路", "线"], ["▁determ", "ine"], ["▁iss", "ue"], ["itud", "e"], [".▁", "**"], ["对", "其"], ["in", "ated"], ["C", "ol"], ["▁contin", "ue"], ["i", "os"], ["u", "ff"], ["边", "缘"], ["ir", "ing"], ["步", "骤"], ["▁m", "ental"], ["ree", "k"], ["E", "M"], ["av", "id"], ["▁Cent", "er"], ["股", "权"], ["代", "谢"], ["a", "fter"], ["大", "學"], ["▁econom", "ic"], ["大", "型"], ["c", "ome"], ["学", "家"], ["▁al", "most"], ["和", "其他"], ["▁webs", "ite"], ["品", "牌"], ["▁dec", "re"], ["体系", "的"], ["▁p", "age"], ["队", "伍"], ["▁C", "ont"], ["揭", "示"], ["▁w", "ent"], ["个", "性"], ["流", "通"], ["▁comp", "lete"], ["自", "觉"], ["服务", "器"], ["▁b", "and"], ["启", "动"], ["原", "子"], ["ien", "cy"], ["▁con", "cent"], ["▁m", "agn"], ["▁var", "iety"], ["粮", "食"], ["▁b", "acter"], ["n", "ed"], ["采", "集"], ["大", "规模"], ["▁sym", "b"], ["为", "核心"], ["▁act", "ive"], ["▁art", "icle"], ["思", "政"], ["▁mean", "ing"], ["孩", "子"], ["职业", "教育"], ["oun", "ts"], ["命", "运"], ["in", "y"], ["党", "员"], ["▁cont", "act"], ["适", "合"], ["ous", "ly"], ["b", "es"], ["▁▁▁▁▁▁▁▁", "▁▁▁▁▁▁▁▁"], ["更多", "的"], ["P", "P"], ["h", "as"], ["▁report", "ed"], ["C", "S"], ["e", "al"], ["i", "ot"], ["人", "在"], ["唯", "一"], ["为", "基础"], ["W", "ell"], ["▁bas", "ic"], ["▁im", "ages"], ["▁Y", "ou"], ["▁b", "ase"], ["结", "束"], ["G", "DP"], ["▁strateg", "ies"], ["台", "灣"], ["侵", "权"], ["ul", "a"], ["▁sp", "eed"], ["的", "结果"], ["▁sh", "ap"], ["▁ac", "cept"], ["▁S", "w"], ["oc", "al"], ["▁G", "l"], ["同", "步"], ["服务", "的"], ["ur", "ies"], ["被", "告"], ["▁pl", "aces"], ["▁fe", "et"], ["ut", "h"], ["充分", "发挥"], ["大", "量的"], ["D", "o"], ["表现", "为"], ["▁disc", "overed"], ["▁opportun", "ities"], ["en", "ge"], ["▁s", "n"], ["条", "款"], ["科技", "创新"], ["应", "急"], ["S", "ince"], ["at", "form"], ["力", "和"], ["▁belie", "ve"], ["▁creat", "ing"], ["的", "学习"], ["不", "少"], ["U", "nder"], ["▁D", "ist"], ["高质量", "发展"], ["an", "ish"], ["▁process", "es"], ["▁ask", "ed"], ["y", "ing"], ["大", "小"], ["▁food", "s"], ["原", "始"], ["▁ad", "ditional"], ["▁cor", "rect"], ["批", "准"], ["ul", "ate"], ["了", "一个"], ["Al", "ice"], ["ag", "ement"], ["▁app", "l"], ["年", "度"], ["▁net", "work"], ["▁M", "e"], ["c", "are"], ["ul", "ated"], ["iz", "es"], ["▁dise", "ases"], ["**", ":▁"], ["res", "ident"], ["▁achie", "ve"], ["▁eas", "ily"], ["▁e", "th"], ["ild", "ren"], ["▁v", "ia"], ["浙", "江"], ["▁ey", "e"], ["▁contin", "ued"], ["▁l", "if"], ["ro", "ad"], ["间", "的"], ["▁app", "ropri"], ["▁cru", "cial"], ["接", "收"], ["授", "权"], ["辐", "射"], ["▁h", "or"], ["主", "导"], ["▁every", "thing"], ["A", "b"], ["iss", "ions"], ["每", "年"], ["▁St", "ud"], ["C", "omp"], ["独", "特"], ["et", "her"], ["装", "置"], [">", "▁"], ["▁coll", "abor"], ["差", "距"], ["▁sh", "ape"], ["▁att", "em"], ["▁Ar", "t"], ["om", "as"], ["▁pr", "int"], ["灵", "活"], ["u", "able"], ["s", "on"], ["劳动", "合同"], ["▁v", "iol"], ["▁l", "o"], ["敏", "感"], ["▁ve", "get"], ["▁S", "ec"], ["相", "似"], ["|", "-"], ["▁tre", "es"], ["▁pre", "p"], ["使用", "的"], ["▁e", "at"], ["▁c", "ele"], ["之", "路"], ["id", "ents"], ["有限", "公司"], ["▁vir", "us"], ["le", "ad"], ["The", "n"], ["纳", "米"], ["▁go", "al"], ["事", "项"], ["f", "ess"], ["v", "est"], ["▁vis", "it"], ["▁anal", "y"], ["▁sim", "ply"], ["re", "st"], ["▁doc", "ument"], ["工", "资"], ["▁st", "ri"], ["▁aspect", "s"], ["▁m", "ole"], ["▁get", "ting"], ["蛋白", "质"], ["修", "复"], ["ect", "ions"], ["電", "影"], ["大", "幅"], ["C", "o"], ["▁influ", "ence"], ["iel", "ds"], ["通", "道"], ["▁rem", "ains"], ["ro", "s"], ["▁s", "outh"], ["G", "en"], ["▁car", "bon"], ["▁man", "ufact"], ["▁e", "c"], ["▁bec", "omes"], ["i", "ar"], ["的", "特点"], ["▁ey", "es"], ["▁char", "acters"], ["ce", "an"], ["现", "有"], ["yth", "on"], ["A", "L"], ["▁an", "g"], ["不", "过"], ["视", "频"], ["r", "id"], ["▁F", "or"], ["▁b", "reat"], ["▁h", "ands"], ["▁eff", "orts"], ["od", "ay"], ["期", "限"], ["B", "S"], ["▁vers", "ion"], ["i", "pl"], ["一", "代"], ["▁", "x"], ["b", "re"], ["ord", "ers"], ["老", "师"], ["用人", "单位"], ["e", "qu"], ["召", "开"], ["se", "c"], ["al", "d"], ["许", "可"], ["y", "ond"], ["链", "接"], ["▁m", "other"], ["ign", "ed"], ["F", "urther"], ["▁h", "ot"], ["M", "ar"], ["文", "物"], ["▁struct", "ures"], ["辅", "助"], ["浓", "度"], ["▁R", "uss"], ["▁comm", "it"], ["外", "的"], ["投资", "者"], ["自动", "化"], ["rou", "p"], ["岗", "位"], ["债", "券"], ["▁Can", "ada"], ["ed", "i"], ["E", "ven"], ["代", "码"], ["年", "人"], ["▁th", "ing"], ["党", "和"], ["十", "一"], ["考", "察"], ["制", "约"], ["仲", "裁"], ["ce", "ed"], ["试", "点"], ["职", "工"], ["纠", "纷"], ["▁gu", "id"], ["大", "大"], ["ist", "ry"], ["外", "交"], ["电", "压"], ["電", "視"], ["详", "细"], ["▁che", "ck"], ["▁trans", "port"], ["▁t", "ax"], ["均", "衡"], ["紧", "密"], ["ain", "t"], ["通", "知"], ["成", "分"], ["▁f", "ram"], ["这", "就"], ["▁f", "avor"], ["im", "um"], ["▁relations", "hip"], ["的", "风险"], ["▁se", "a"], ["▁Afric", "a"], ["▁ne", "igh"], ["C", "ont"], [":▁", "\""], ["组成", "部分"], ["w", "ide"], ["随", "机"], ["▁l", "ost"], ["▁cal", "cul"], ["m", "any"], ["if", "ul"], ["智能", "化"], ["▁w", "ond"], ["抵", "押"], ["组织", "的"], ["ill", "ing"], ["ol", "it"], ["a", "ur"], ["气", "体"], ["yd", "ro"], ["▁st", "age"], ["▁h", "yp"], ["ph", "as"], ["编", "制"], ["w", "ere"], ["▁T", "ra"], ["i", "ec"], ["os", "ure"], ["十", "三"], ["▁pol", "l"], ["十", "年"], ["信息", "的"], ["▁Sc", "ience"], ["▁Germ", "an"], ["▁anc", "ient"], ["▁Col", "lege"], ["有", "一"], ["E", "N"], ["w", "rit"], ["为", "中心"], ["▁sh", "ared"], ["▁A", "c"], ["学", "会"], ["伦", "理"], ["▁f", "ront"], ["▁b", "ab"], ["罗", "斯"], ["▁cent", "ral"], ["▁g", "ard"], ["▁F", "ebruary"], ["at", "in"], ["▁r", "ules"], ["微", "生物"], ["oc", "r"], ["地", "产"], ["融", "入"], ["军", "队"], ["m", "en"], ["编", "码"], ["▁Afric", "an"], ["航", "天"], ["董", "事"], ["I", "L"], ["也", "会"], ["et", "c"], ["c", "raft"], ["u", "x"], ["D", "on"], ["值", "得"], ["少", "年"], ["▁dec", "ided"], ["et", "t"], ["▁d", "er"], ["第一", "次"], ["qu", "e"], ["▁dec", "ision"], ["▁comp", "anies"], ["▁t", "um"], ["机器", "人"], ["采", "购"], ["res", "p"], ["▁em", "p"], ["le", "ft"], ["环", "保"], ["▁l", "ooking"], ["op", "t"], ["▁In", "stitute"], ["办", "公"], ["地区", "的"], ["P", "C"], ["若", "干"], ["▁p", "ack"], ["ch", "ol"], ["um", "an"], ["大", "学生"], ["发", "电"], ["▁descri", "bed"], ["ra", "b"], ["印", "度"], ["The", "ir"], ["▁is", "n"], ["eor", "ge"], ["在", "线"], ["▁con", "vers"], ["▁b", "orn"], ["▁trans", "l"], ["▁el", "se"], ["方", "程"], ["▁Ass", "oci"], ["ines", "e"], ["▁be", "yond"], ["高", "中"], ["▁l", "ength"], ["▁A", "ir"], [" ", " "], ["g", "n"], ["▁E", "ast"], ["▁sit", "u"], ["▁for", "ce"], ["发生", "的"], ["M", "y"], ["▁set", "t"], ["并", "非"], ["使", "命"], ["单", "一"], ["cept", "ion"], ["▁se", "vere"], ["一", "旦"], ["进", "口"], ["▁P", "er"], ["▁M", "c"], ["u", "ge"], ["接", "口"], ["v", "ant"], ["▁D", "ay"], ["区", "块"], ["配", "合"], ["节", "能"], ["局", "部"], ["电", "影"], ["▁ac", "id"], ["C", "ons"], ["解决", "方案"], ["今", "年"], ["▁s", "us"], ["i", "ples"], ["duc", "ation"], ["▁project", "s"], ["m", "ission"], ["\"", "。"], ["▁att", "ack"], ["传", "承"], ["▁th", "inking"], ["▁m", "ount"], ["上", "下"], ["▁differen", "ce"], ["视", "觉"], ["▁A", "pp"], ["▁f", "ul"], ["装", "备"], ["▁J", "ew"], ["▁dev", "ices"], ["C", "omm"], ["体现", "了"], ["us", "ing"], ["▁sc", "reen"], ["▁ro", "ck"], ["股", "票"], ["发", "育"], ["轨", "道"], ["it", "ar"], ["共同", "体"], ["▁f", "ight"], ["执", "法"], ["z", "z"], ["p", "id"], ["硬", "件"], ["▁A", "ng"], ["▁s", "al"], ["▁object", "s"], ["▁dig", "ital"], ["国家", "安全"], ["假", "设"], ["至", "少"], ["clus", "ion"], ["方", "针"], ["绝", "对"], ["的", "形式"], ["▁H", "istory"], ["ip", "ment"], ["b", "ecause"], ["记", "忆"], ["▁mod", "els"], ["P", "D"], ["使", "学生"], ["▁pro", "ced"], ["▁re", "ach"], ["er", "a"], ["▁w", "id"], ["▁step", "s"], ["西", "部"], ["um", "ents"], ["▁respons", "ible"], ["un", "icip"], ["短", "期"], ["接", "近"], ["▁success", "ful"], ["▁scient", "ists"], ["台", "湾"], ["▁s", "on"], ["▁l", "ack"], ["编", "辑"], ["现", "状"], ["▁A", "t"], ["l", "im"], [":**", "▁"], ["S", "S"], ["条", "例"], ["▁ag", "re"], ["还", "要"], ["▁val", "uable"], ["股", "份"], ["E", "C"], ["▁differen", "ces"], ["▁involv", "es"], ["yn", "am"], ["▁bir", "th"], ["▁pers", "pect"], ["▁cent", "er"], ["违", "反"], ["▁Res", "earch"], ["ir", "m"], ["ur", "rent"], ["著", "名"], ["审", "判"], ["▁ro", "om"], ["cl", "ass"], ["近", "代"], ["w", "ood"], ["M", "ay"], ["▁ad", "minist"], ["▁ear", "th"], ["or", "g"], ["着", "力"], ["abet", "es"], ["y", "ear"], ["▁compon", "ents"], ["▁qu", "ant"], ["air", "s"], ["ur", "t"], ["不", "到"], ["c", "re"], ["▁R", "ev"], ["同", "意"], ["m", "et"], ["的", "教育"], ["扩", "张"], ["▁de", "b"], ["活", "力"], ["▁S", "erv"], ["胜", "利"], ["宇", "宙"], ["▁", "ing"], ["um", "n"], ["则", "是"], ["▁stru", "gg"], ["出", "台"], ["S", "u"], ["osp", "ital"], ["▁inf", "l"], ["清", "楚"], ["挖", "掘"], ["▁sust", "ain"], ["▁work", "ed"], ["g", "u"], ["ash", "ington"], ["er", "o"], ["▁therap", "y"], ["发", "射"], ["ww", "w"], ["▁profess", "ional"], ["提出", "的"], ["__", "__"], ["第", "六"], ["b", "al"], ["▁inst", "it"], ["an", "cing"], ["▁a", "st"], ["oc", "ks"], ["▁cont", "ains"], ["事", "物"], ["再", "生"], ["电", "视"], ["▁so", "on"], ["▁rele", "ase"], ["观", "测"], ["红", "色"], ["身", "体"], ["▁s", "aw"], ["▁m", "ale"], ["▁direct", "ly"], ["▁inf", "ection"], ["▁o", "p"], ["明", "朝"], ["le", "g"], ["▁B", "o"], ["消", "除"], ["▁c", "ou"], ["amp", "ions"], ["▁ve", "h"], ["怎", "样"], ["▁inc", "orpor"], ["新", "技术"], ["”", "、“"], ["竞争", "力"], ["▁", "ice"], ["▁exp", "ect"], ["R", "em"], ["▁Eng", "land"], ["▁power", "ful"], ["切", "实"], ["l", "oad"], ["学习", "的"], ["em", "porary"], ["▁soft", "ware"], ["▁Ind", "ia"], ["or", "ation"], ["▁M", "on"], ["▁tra", "ck"], ["条", "规定"], ["cent", "ury"], ["所", "需"], ["ad", "ian"], ["记", "者"], ["▁Ind", "ian"], ["sp", "ec"], ["年", "龄"], ["if", "ically"], ["▁d", "ry"], ["▁po", "or"], ["指", "挥"], ["wh", "at"], ["it", "is"], ["感", "知"], ["ough", "t"], ["▁d", "ang"], ["iec", "es"], ["d", "is"], ["▁wee", "ks"], ["功", "率"], ["▁in", "nov"], ["▁ad", "ults"], ["gen", "cy"], ["天", "然"], ["故", "障"], ["▁est", "im"], ["第", "一个"], ["找", "到"], ["us", "ion"], ["教学", "中"], ["品", "种"], ["▁S", "ystem"], ["是", "中国"], ["小", "时"], ["执", "政"], ["▁h", "ar"], ["大", "气"], ["▁r", "ates"], ["全", "会"], ["得", "以"], ["咨", "询"], ["”", "“"], ["财", "富"], ["强", "国"], ["▁earl", "ier"], ["人", "为"], ["▁ro", "b"], ["it", "iz"], ["而", "在"], ["情", "境"], ["ly", "mp"], ["▁the", "ory"], ["的", "原则"], ["▁s", "earch"], ["报", "道"], ["样", "本"], ["一", "带"], ["划", "分"], ["▁d", "ou"], ["▁v", "it"], ["抽", "象"], ["呼", "吸"], ["▁d", "iverse"], ["augh", "t"], ["▁to", "ol"], ["▁sp", "eak"], ["\"", "、\""], ["垄", "断"], ["▁pred", "ict"], ["▁requ", "ires"], ["树", "立"], ["序", "列"], ["▁vill", "age"], ["▁relations", "hips"], ["ic", "ular"], ["p", "at"], ["▁con", "ce"], ["▁f", "a"], ["▁u", "nd"], ["准", "则"], ["▁play", "ing"], ["i", "as"], ["▁h", "on"], ["▁writ", "e"], ["万", "元"], ["语", "文"], ["南", "京"], ["al", "y"], ["劳动", "力"], ["c", "ast"], ["▁ag", "o"], ["▁c", "am"], ["▁le", "aves"], ["视", "为"], ["▁", "ir"], ["c", "ell"], ["▁show", "ed"], ["负", "债"], ["av", "ig"], ["高", "于"], ["复杂", "的"], ["▁def", "in"], ["机", "遇"], ["等", "级"], ["▁loc", "ation"], ["ver", "t"], ["i", "j"], ["以", "前"], ["人", "文"], ["▁W", "illiam"], ["多", "次"], ["▁try", "ing"], ["▁v", "acc"], ["渗", "透"], ["能力", "和"], ["v", "is"], ["bo", "ard"], ["▁acc", "ording"], ["▁mov", "ed"], ["and", "er"], ["公", "路"], ["▁lim", "ited"], ["巨", "大的"], ["经", "典"], ["我们", "党"], ["出现", "了"], ["巩", "固"], ["s", "m"], ["突", "变"], ["干", "预"], ["oy", "al"], ["▁g", "ain"], ["n", "ection"], ["▁s", "ection"], ["▁f", "it"], ["合", "并"], ["▁Ch", "urch"], ["民", "法"], ["可持续", "发展"], ["▁ser", "ious"], ["▁encou", "rag"], ["它", "是"], ["的", "时候"], ["▁t", "able"], ["的", "情况"], ["il", "os"], ["人", "体"], ["▁V", "al"], ["成", "了"], ["g", "ram"], ["▁find", "ings"], ["取得", "了"], ["冲", "击"], ["带", "动"], ["使", "其"], ["家", "族"], ["动", "机"], ["am", "ent"], ["P", "re"], ["▁gra", "du"], ["▁it", "ems"], ["得到", "了"], ["M", "P"], ["in", "ating"], ["▁exper", "ien"], ["▁c", "ivil"], ["▁", "+▁"], ["数字", "经济"], ["ens", "ity"], ["个", "月"], ["结构", "的"], ["▁qu", "ite"], ["r", "as"], ["疫", "苗"], ["五", "年"], ["▁mon", "th"], ["g", "y"], ["Ad", "ditionally"], ["▁d", "ark"], ["▁col", "on"], ["▁scient", "ific"], ["▁dev", "ice"], ["z", "h"], ["应用", "于"], ["▁b", "ra"], ["线", "性"], ["发", "病"], ["适", "用于"], ["中", "间"], ["▁p", "rior"], ["▁gener", "ally"], ["it", "able"], ["ed", "ic"], ["▁conf", "lic"], ["n", "ers"], ["的", "政治"], ["清", "晰"], ["含", "量"], ["▁exerc", "ise"], ["▁small", "er"], ["a", "el"], ["用", "来"], ["不", "良"], ["处", "罚"], ["c", "oh"], ["的", "目标"], ["货币", "政策"], ["低", "于"], ["▁bal", "ance"], ["激", "活"], ["激", "光"], ["尚", "未"], ["防", "治"], ["现", "场"], ["▁learn", "ed"], ["对", "此"], ["▁exam", "ples"], ["成", "绩"], ["房", "地产"], ["▁m", "ut"], ["▁se", "qu"], ["对", "比"], ["▁mem", "ory"], ["自", "信"], ["有效", "地"], ["n", "y"], ["▁pl", "atform"], ["区", "的"], ["鉴", "定"], ["b", "ook"], ["H", "er"], ["▁w", "ide"], ["行为", "的"], ["▁ch", "o"], ["ch", "ange"], ["▁per", "fect"], ["是", "不"], ["中", "有"], ["form", "ed"], ["▁m", "id"], [";", "("], ["▁p", "iece"], ["use", "um"], ["资", "格"], ["▁const", "ruct"], ["办", "理"], ["▁or", "d"], ["▁col", "lection"], ["▁cont", "ext"], ["林", "匹"], ["知识", "的"], ["▁cl", "ub"], ["所", "示"], ["▁g", "ot"], ["》", "("], ["st", "e"], ["lev", "ision"], ["富", "裕"], ["s", "k"], ["▁Y", "our"], ["工", "人"], ["hem", "at"], ["*▁", "**"], ["be", "ing"], ["▁lar", "gest"], ["▁th", "ous"], ["比", "重"], ["解", "除"], ["▁st", "yle"], ["al", "ities"], ["v", "ille"], ["▁applic", "ations"], ["探", "测"], ["安", "装"], ["▁Le", "ague"], ["T", "ra"], ["▁teac", "hers"], ["▁ob", "tain"], ["▁fin", "ancial"], ["▁e", "gg"], ["▁p", "an"], ["大", "家"], ["▁car", "ry"], ["▁off", "ers"], ["更", "高"], ["秘", "密"], ["蒙", "古"], ["复", "合"], ["h", "aps"], ["▁clin", "ical"], ["三", "角"], ["承", "包"], ["▁f", "ast"], ["较", "低"], ["东", "北"], ["▁go", "als"], ["D", "A"], ["x", "imately"], ["▁t", "end"], ["S", "P"], ["各", "自"], ["林匹", "克"], ["hen", "s"], ["▁arch", "itect"], ["品", "质"], ["▁did", "n"], ["法", "官"], ["▁form", "ed"], ["生", "理"], ["提高", "了"], ["的", "国家"], ["Y", "our"], ["保", "留"], ["低", "碳"], ["背景", "下"], ["公", "正"], ["有", "力"], ["I", "ts"], ["》", "。"], ["▁Ch", "ina"], ["▁dis", "play"], ["▁fam", "ous"], ["▁resp", "ond"], ["ig", "r"], ["▁m", "ention"], ["▁I", "m"], ["▁high", "ly"], ["▁mil", "itary"], ["P", "r"], ["苏", "联"], ["交", "互"], ["▁contribut", "e"], ["▁", "ult"], ["▁regard", "ing"], ["农", "产品"], ["ch", "ar"], ["的", "管理"], ["东", "西"], ["w", "ise"], ["▁f", "ather"], ["载", "体"], ["id", "a"], ["▁Te", "chn"], ["t", "a"], ["反", "馈"], ["▁neg", "ative"], ["稳定", "性"], ["▁const", "ruction"], ["▁C", "O"], ["▁eval", "u"], ["后", "来"], ["▁b", "ad"], ["区块", "链"], ["P", "er"], ["▁t", "en"], ["▁S", "m"], ["无", "线"], ["▁h", "ous"], ["▁integ", "r"], ["▁H", "ol"], ["h", "ors"], ["的", "功能"], ["▁rem", "ember"], ["▁sum", "mer"], ["▁h", "om"], ["rel", "ated"], ["委", "托"], ["▁C", "ons"], ["的", "原因"], ["▁A", "nt"], ["通过", "对"], ["三", "年"], ["地", "址"], ["▁appropri", "ate"], ["▁C", "oun"], ["f", "ield"], ["放", "在"], ["的", "科学"], ["▁fact", "or"], ["封", "建"], ["的", "目的"], ["▁indu", "str"], ["和", "管理"], ["ft", "en"], ["一", "项"], ["名", "称"], ["i", "ated"], ["公共", "服务"], ["天", "下"], ["转化", "为"], ["运动", "员"], ["▁bl", "ock"], ["in", "ate"], ["▁interest", "ing"], ["隐", "私"], ["▁b", "it"], ["▁te", "aching"], ["有", "序"], ["意", "志"], ["▁b", "ox"], ["评", "论"], ["▁lead", "ing"], ["政府", "的"], ["ra", "z"], ["Us", "ing"], ["一体", "化"], ["膨", "胀"], ["▁cap", "ac"], ["t", "rans"], ["r", "ong"], ["本", "书"], ["▁behav", "i"], ["的", "价值"], ["ro", "ph"], ["▁S", "an"], ["▁Comm", "un"], ["w", "orks"], ["签", "订"], ["一", "路"], ["▁for", "ces"], ["档", "案"], ["▁relig", "ious"], ["变", "得"], ["其", "实"], ["国", "外"], ["版", "本"], ["▁un", "it"], ["▁", "round"], ["▁typ", "ically"], ["▁prot", "ection"], ["并", "没有"], ["▁I", "tal"], ["多", "年"], ["▁b", "ound"], ["▁c", "red"], ["▁ac", "qu"], ["伟大", "复兴"], ["o", "ch"], ["外", "国"], ["全", "体"], ["▁n", "uc"], ["▁const", "it"], ["符", "号"], ["al", "ed"], ["▁", ":▁"], ["▁perform", "ed"], ["a", "res"], ["d", "ing"], ["▁Is", "land"], ["▁sit", "es"], ["M", "L"], ["的", "需求"], ["分", "工"], ["▁tiss", "ue"], ["▁was", "te"], ["▁m", "iss"], ["t", "ic"], ["至", "今"], ["▁Cal", "ifornia"], ["三", "种"], ["的", "过程中"], ["▁f", "air"], ["▁g", "old"], ["as", "ks"], ["▁answ", "er"], ["定", "了"], ["区", "分"], ["ing", "u"], ["倾", "向"], ["--", "▁"], ["▁pur", "pose"], ["▁teac", "her"], ["▁sit", "uation"], ["公", "布"], ["分", "解"], ["▁belie", "f"], ["▁b", "all"], ["▁new", "s"], ["▁det", "ail"], ["▁sp", "irit"], ["。", "("], ["借", "鉴"], ["▁P", "ress"], ["▁exp", "osure"], ["局", "限"], ["▁m", "is"], ["▁r", "at"], ["先", "后"], ["一", "年"], ["小", "学"], ["▁Austral", "ia"], ["细", "菌"], ["点", "的"], ["制", "的"], ["▁polic", "y"], ["ic", "ate"], ["urb", "an"], ["▁ch", "oose"], ["▁t", "ests"], ["动", "脉"], ["av", "a"], ["A", "ct"], ["▁G", "reat"], ["成", "為"], ["C", "al"], ["▁c", "and"], ["▁tr", "ust"], ["im", "ens"], ["B", "ecause"], ["at", "ur"], ["▁ra", "pid"], ["有", "可能"], ["▁Associ", "ation"], ["Al", "so"], ["病", "人"], ["f", "e"], [")", ";"], ["▁aut", "om"], ["P", "R"], ["▁ser", "ve"], ["笔", "者"], ["▁Dist", "rict"], ["服务", "业"], ["式", "的"], ["▁do", "ctor"], ["▁T", "r"], ["連", "結"], ["op", "er"], ["传统", "文化"], ["ic", "ian"], ["▁v", "ict"], ["und", "red"], ["▁j", "ud"], ["velop", "ment"], ["車", "站"], ["angu", "ages"], ["▁R", "ed"], ["▁Christ", "ian"], ["居", "住"], ["▁ex", "hib"], ["出版", "社"], ["百", "分"], ["▁old", "er"], ["▁j", "our"], ["边", "界"], ["▁inv", "olve"], ["olv", "ing"], ["S", "m"], ["▁b", "rought"], ["em", "ic"], ["▁proper", "ties"], ["I", "M"], ["发展", "和"], ["流", "行"], ["▁death", "s"], ["提", "取"], ["就", "可以"], ["增", "速"], ["▁Soc", "iety"], ["▁F", "l"], ["▁exact", "ly"], ["T", "C"], ["▁pr", "ivate"], ["ast", "e"], ["▁b", "ott"], ["广", "东"], ["▁play", "er"], ["▁act", "ions"], ["转", "向"], ["宣", "布"], ["oc", "ial"], ["▁sc", "en"], ["极", "大"], ["三", "大"], ["技术", "和"], ["较", "高"], ["▁chall", "enge"], ["十", "六"], ["曲", "线"], ["简", "称"], ["is", "l"], ["▁w", "rote"], ["▁opt", "ions"], ["c", "ular"], ["at", "ers"], ["▁bir", "ths"], ["还", "可以"], ["▁w", "in"], ["地", "的"], ["文", "本"], ["Q", "u"], ["m", "osp"], ["很", "难"], ["▁affect", "ed"], ["▁dist", "inct"], ["ub", "e"], ["P", "A"], ["▁det", "ails"], ["行", "星"], ["el", "ines"], ["h", "ave"], ["alth", "ough"], ["▁fun", "ctions"], ["re", "es"], ["催", "化"], ["延", "伸"], ["欧", "盟"], ["D", "es"], ["▁f", "resh"], ["▁N", "o"], ["U", "se"], ["com", "es"], ["ag", "o"], ["▁st", "ra"], ["▁sp", "orts"], ["▁equ", "ipment"], ["am", "il"], ["▁applic", "ation"], ["▁ident", "ified"], ["or", "gan"], ["纳", "税"], ["S", "D"], ["r", "ical"], ["h", "ouse"], ["这", "项"], ["▁cele", "br"], ["S", "C"], ["借", "助"], ["▁trans", "fer"], ["大", "陆"], ["社会主义", "现代化"], ["▁p", "ieces"], ["▁him", "self"], ["re", "f"], ["r", "ition"], ["▁num", "erous"], ["方", "的"], ["▁e", "fficient"], ["▁A", "g"], ["acc", "ording"], ["b", "oth"], ["ell", "ig"], ["等", "问题"], ["中共", "中央"], ["▁beaut", "iful"], ["m", "ark"], ["os", "es"], ["第二", "节"], ["周", "围"], ["▁fem", "ale"], ["▁sol", "ution"], ["房", "屋"], ["乡村", "振兴"], ["诸", "多"], ["禁", "止"], ["▁we", "ather"], ["细胞", "的"], ["ou", "ch"], ["负", "担"], ["信", "贷"], ["k", "en"], ["抗", "体"], ["合理", "的"], ["igen", "ous"], ["▁surround", "ing"], ["▁Ch", "ar"], ["▁l", "abor"], ["建立", "了"], ["流", "量"], ["e", "per"], ["外", "汇"], ["▁want", "ed"], ["▁g", "irl"], ["认", "真"], ["科学", "院"], ["▁use", "ful"], ["举", "措"], ["我国", "的"], ["rom", "e"], ["▁I", "nt"], ["▁stat", "us"], ["▁redu", "ced"], ["▁supp", "ly"], ["ober", "t"], ["▁sol", "ar"], ["▁ch", "urch"], ["ac", "ing"], ["▁on", "to"], ["i", "i"], ["发", "明"], ["运", "作"], ["▁meas", "ures"], ["▁m", "ill"], ["ec", "ut"], ["认", "同"], ["▁te", "ach"], ["审", "美"], ["ang", "ing"], ["共", "识"], ["人", "群"], ["pl", "ace"], ["ro", "y"], ["▁pur", "ch"], ["▁L", "ondon"], ["第一", "节"], ["▁Part", "y"], ["▁connect", "ions"], ["▁ad", "apt"], ["▁Un", "ion"], ["强", "烈"], ["▁exp", "and"], ["▁S", "er"], ["种", "类"], ["▁pl", "aced"], ["▁app", "e"], ["核", "算"], ["▁expl", "ain"], ["翻", "译"], ["P", "art"], ["森", "林"], ["▁n", "ation"], ["淋", "巴"], ["斯", "特"], ["w", "ell"], ["▁rece", "ive"], ["概", "括"], ["▁us", "ers"], ["ant", "ly"], ["判", "决"], ["添", "加"], ["发达", "国家"], ["al", "ign"], ["y", "a"], ["的", "精神"], ["在", "一起"], ["产生", "了"], ["▁g", "raph"], ["ify", "ing"], ["▁for", "ward"], ["▁ra", "re"], ["plic", "ations"], ["▁co", "ast"], ["▁E", "m"], ["另", "一个"], ["▁te", "eth"], ["防", "范"], ["交", "叉"], ["并", "不是"], ["担", "任"], ["的", "具体"], ["ar", "ly"], ["▁begin", "ning"], ["▁T", "rans"], ["pp", "ed"], ["▁cont", "roll"], ["▁R", "oman"], ["▁D", "NA"], ["工", "厂"], ["▁organ", "izations"], ["全", "局"], ["am", "ily"], ["▁current", "ly"], ["▁r", "ich"], ["in", "f"], ["D", "espite"], ["▁adv", "ant"], ["联", "邦"], ["为", "例"], ["p", "ret"], ["二", "氧化"], ["容", "量"], ["是", "什么"], ["心", "脏"], ["」", ","], ["的", "不同"], ["▁ant", "i"], ["▁cost", "s"], ["▁allow", "ed"], ["overn", "ment"], ["某", "一"], ["he", "st"], ["▁contin", "u"], ["c", "ar"], ["加", "密"], ["▁det", "ect"], ["俄", "罗斯"], ["K", "e"], ["直", "到"], ["的", "文化"], ["回", "答"], ["R", "et"], ["▁app", "rec"], ["扶", "贫"], ["More", "over"], ["▁dist", "rict"], ["中国", "家"], ["ur", "ning"], ["國", "家"], ["含", "义"], ["▁th", "r"], ["▁f", "ile"], ["亿", "美元"], ["E", "d"], ["的", "小"], ["女", "性"], ["▁r", "iver"], ["世界", "上"], ["▁liter", "ature"], ["a", "ign"], ["▁sec", "urity"], ["In", "stead"], ["的", "设计"], ["coh", "ol"], ["▁C", "om"], ["ress", "ive"], ["m", "un"], ["为", "此"], ["依", "然"], ["ost", "er"], ["▁test", "ing"], ["成", "效"], ["▁occur", "s"], ["ic", "ed"], ["精", "度"], ["st", "ate"], ["▁proper", "ty"], ["▁ag", "ricult"], ["▁pict", "ure"], ["A", "B"], ["理论", "和"], ["定", "期"], ["ri", "ev"], ["波", "动"], ["▁Dep", "artment"], ["普", "及"], ["▁dec", "l"], ["福", "利"], ["▁init", "ial"], ["▁benef", "it"], ["分", "散"], ["ab", "ilities"], ["权", "威"], ["所有", "的"], ["enc", "ies"], ["每", "一个"], ["透", "明"], ["▁back", "ground"], ["(", "),"], ["op", "p"], ["▁C", "ong"], ["▁attem", "pt"], ["山", "东"], ["M", "e"], ["推", "荐"], ["正确", "的"], ["▁con", "sequ"], ["▁st", "im"], ["整", "理"], ["▁d", "at"], ["命", "令"], ["olv", "ed"], ["小", "的"], ["▁n", "arr"], ["▁w", "ear"], ["匹", "配"], ["水平", "的"], ["生活", "的"], ["▁ra", "il"], ["R", "I"], ["可能", "是"], ["估", "计"], ["et", "ers"], ["ath", "y"], ["论", "述"], ["▁M", "od"], ["慢", "性"], ["▁prob", "ably"], ["建", "构"], ["▁bacter", "ia"], ["▁pres", "ence"], ["消", "耗"], ["增", "值"], ["▁W", "e"], ["se", "ct"], ["中", "全会"], ["▁us", "er"], ["reat", "ing"], ["稳", "定的"], ["附", "近"], ["十八", "大"], ["效", "力"], ["▁work", "ers"], ["外部", "連結"], ["全球", "化"], ["也", "可"], ["p", "eople"], ["ight", "ly"], ["方", "便"], ["un", "t"], ["风", "格"], ["▁su", "gar"], ["▁b", "ul"], ["A", "A"], ["位", "於"], ["增加", "了"], ["v", "an"], ["新", "发展"], ["\t", "\t"], ["保", "存"], ["博", "物"], ["一", "条"], ["变", "动"], ["▁com", "mer"], ["▁▁▁▁", "▁"], ["il", "it"], ["b", "ing"], ["on", "ic"], ["▁acc", "ur"], ["b", "ec"], ["都", "会"], ["达", "成"], ["G", "B"], ["中华民族", "伟大复兴"], ["足", "够"], ["▁col", "d"], ["方", "位"], ["概", "率"], ["m", "at"], ["的", "权利"], ["将", "会"], ["人", "士"], ["▁organ", "ization"], ["▁m", "ax"], ["z", "a"], ["g", "ra"], ["T", "oday"], ["委", "会"], ["糖", "尿"], ["==", "=="], ["相互", "作用"], ["▁mom", "ent"], ["图", "书"], ["▁", ".▁"], ["协", "作"], ["▁m", "iddle"], ["尝", "试"], ["▁Ch", "inese"], ["▁n", "ames"], ["▁go", "es"], ["l", "ong"], ["目", "的是"], ["▁l", "aun"], ["ire", "ction"], ["ru", "pt"], ["l", "am"], ["▁gen", "e"], ["最", "近"], ["▁E", "ducation"], ["不", "利"], ["▁fig", "ure"], ["的", "使用"], ["▁Bl", "ack"], ["出", "生"], ["引导", "学生"], ["▁imm", "une"], ["▁st", "ore"], ["协", "会"], ["必要", "的"], ["批", "判"], ["标准", "化"], ["寻", "找"], ["▁res", "istance"], ["▁d", "ate"], ["▁e", "ight"], ["后", "果"], ["▁part", "y"], ["S", "ec"], ["的", "有效"], ["有", "人"], ["▁f", "illed"], ["男", "子"], ["ed", "ia"], ["▁cap", "ital"], ["已", "成为"], ["e", "es"], ["ri", "ef"], ["▁", "i"], ["联合", "国"], ["$", "▁"], ["存在", "着"], ["▁B", "r"], ["▁M", "ex"], ["产", "物"], ["est", "ic"], ["ib", "ly"], ["信", "仰"], ["▁s", "we"], ["配", "套"], ["▁pl", "ays"], ["住", "房"], ["ant", "ic"], ["am", "s"], ["ot", "hes"], ["精", "确"], ["▁build", "ings"], ["ger", "y"], ["▁m", "ap"], ["车", "辆"], ["聚", "焦"], ["▁rou", "t"], ["Sim", "ilar"], ["顺", "序"], ["▁concer", "ns"], ["R", "eg"], ["总", "量"], ["研究", "院"], ["▁gen", "etic"], ["写", "作"], ["于", "是"], ["生态", "文明"], ["▁al", "one"], ["\"", "("], ["▁em", "phas"], ["ra", "el"], ["繁", "荣"], ["▁cont", "ract"], ["知识", "和"], ["失", "去"], ["it", "z"], ["概", "述"], ["adem", "ic"], ["G", "u"], ["ov", "ers"], ["▁ass", "ist"], ["▁mov", "ing"], ["▁reg", "ions"], ["▁ident", "ity"], ["▁bir", "ds"], ["▁N", "e"], ["发", "送"], ["人民", "的"], ["难", "题"], ["▁p", "ow"], ["E", "L"], ["i", "ology"], ["课堂", "教学"], ["▁M", "useum"], ["oun", "ced"], ["▁P", "re"], ["此", "时"], ["被", "称为"], ["相", "反"], ["营", "销"], ["享", "有"], ["▁G", "o"], ["ond", "s"], ["▁ill", "ustr"], ["▁observ", "ed"], ["G", "o"], ["C", "om"], ["糖尿", "病"], ["平", "面"], ["g", "or"], ["ee", "ch"], ["▁any", "thing"], ["om", "y"], ["仪", "器"], ["augh", "ter"], ["国内", "外"], ["万", "人"], ["▁M", "ount"], ["▁ant", "ib"], ["▁C", "our"], ["▁mil", "es"], ["旨", "在"], ["》", "▁"], ["动", "作"], ["▁dem", "and"], ["管理", "和"], ["▁disc", "over"], [""", ","], ["▁exp", "ected"], ["B", "oth"], ["大", "脑"], ["依", "托"], ["以", "上的"], ["T", "O"], ["指", "南"], ["▁dec", "isions"], ["▁b", "odies"], ["云", "计算"], ["已", "有"], ["or", "ial"], ["潜", "力"], ["做", "法"], ["批", "评"], ["ber", "g"], ["赋", "予"], ["刑", "法"], ["▁exist", "ing"], ["▁prom", "ote"], ["病", "变"], ["allow", "ing"], ["▁we", "b"], ["立", "场"], ["y", "our"], ["▁princ", "iples"], ["▁Coun", "cil"], ["有", "时"], ["的", "多"], ["h", "is"], ["存", "款"], ["G", "F"], ["▁off", "ice"], ["小", "康"], ["幸", "福"], ["▁sound", "s"], ["▁chang", "ed"], ["▁sign", "s"], ["美", "术"], ["食", "物"], ["▁help", "ed"], ["民", "生"], ["高等", "教育"], ["B", "efore"], ["▁plan", "et"], ["数据", "中心"], ["患者", "的"], ["▁conce", "pts"], ["st", "ruct"], ["▁event", "ually"], ["▁re", "asons"], ["▁equ", "al"], ["▁leg", "al"], ["前", "沿"], ["证", "书"], ["▁bo", "ard"], ["科学", "技术"], ["▁gu", "ide"], ["▁gl", "ass"], ["的", "认识"], ["中小", "企业"], ["pro", "v"], ["官", "方"], ["远", "程"], ["地", "震"], ["视", "角"], ["地", "區"], ["the", "s"], ["▁Rep", "ublic"], ["▁mach", "ine"], ["▁introdu", "ced"], ["k", "a"], ["打", "破"], ["▁vir", "t"], ["间", "接"], ["一", "批"], ["理", "由"], ["M", "A"], ["计", "量"], ["▁tra", "de"], ["as", "tern"], ["意", "思"], ["测", "定"], ["re", "hens"], ["ograph", "ic"], ["失", "败"], ["▁lim", "it"], ["初", "期"], ["以", "便"], ["主", "观"], ["颗", "粒"], ["▁D", "es"], ["▁com", "fort"], ["血", "液"], ["引起", "的"], ["▁t", "our"], ["癌", "症"], ["E", "very"], ["取", "决"], ["ir", "gin"], ["多样", "性"], ["se", "mb"], ["▁P", "al"], ["II", "I"], ["▁record", "s"], ["▁W", "estern"], ["也", "要"], ["侵", "犯"], ["立", "足"], ["▁g", "ives"], ["H", "istory"], ["腐", "败"], ["▁c", "itiz"], ["驾", "驶"], ["ex", "as"], ["i", "ance"], ["遵", "守"], ["ind", "ing"], ["中", "学"], ["》", "《"], ["▁m", "outh"], ["与", "其他"], ["产", "量"], ["仅", "仅"], ["价值", "的"], ["排", "名"], ["停", "止"], ["▁P", "ort"], ["▁law", "s"], ["专", "项"], ["R", "ead"], ["与", "此"], ["▁sol", "utions"], ["能", "否"], ["也", "在"], ["ing", "er"], ["大", "于"], ["▁col", "ors"], ["n", "am"], ["▁e", "ating"], ["▁f", "elt"], ["器", "官"], ["四", "川"], ["有", "一个"], ["的", "市场"], ["▁turn", "ed"], ["y", "gen"], ["▁tit", "le"], ["▁f", "uel"], ["回", "归"], ["通", "用"], ["▁rec", "ently"], ["本", "科"], ["主义", "的"], ["▁ut", "il"], ["更", "是"], ["d", "ef"], ["E", "l"], ["可能", "性"], ["实", "用"], ["i", "ant"], ["▁exper", "im"], ["▁connect", "ed"], ["作", "物"], ["大", "国"], ["▁c", "orn"], ["提供", "的"], ["for", "ce"], ["▁jour", "ney"], ["▁pre", "gn"], ["医", "药"], ["▁C", "D"], ["▁att", "ract"], ["发生", "了"], ["优", "质"], ["法", "人"], ["公", "益"], ["I", "F"], ["as", "ts"], ["查", "询"], ["▁d", "ynam"], ["▁l", "ived"], ["d", "ed"], ["取决", "于"], ["前", "景"], ["▁dist", "ance"], ["特", "定的"], ["r", "ich"], ["參考", "資料"], ["ent", "y"], ["夏", "季"], ["m", "od"], ["强", "大"], ["变", "更"], ["▁near", "ly"], ["▁rad", "io"], ["所有", "权"], ["斯", "坦"], ["uild", "ing"], ["阐", "述"], ["不", "可能"], ["og", "ether"], ["le", "ase"], ["的", "环境"], ["系", "数"], ["a", "ud"], ["▁h", "undred"], ["选", "举"], ["ich", "ael"], ["▁U", "K"], ["E", "m"], ["▁ris", "ks"], ["▁a", "p"], ["▁H", "er"], ["两", "者"], ["▁w", "oman"], ["地", "下"], ["un", "k"], ["无", "效"], ["▁be", "g"], ["▁eff", "ort"], ["练", "习"], ["▁deg", "ree"], ["in", "du"], ["▁St", "reet"], ["过程", "的"], ["地", "面"], ["▁happ", "ens"], ["▁le", "ave"], ["..", ".▁"], ["最", "早"], ["▁ess", "ay"], ["▁Ph", "il"], ["▁t", "im"], ["西", "北"], ["取", "代"], ["▁di", "abetes"], ["超", "越"], ["对", "称"], ["联", "盟"], ["年", "前"], ["▁b", "ran"], ["▁effect", "ively"], ["复", "制"], ["依", "照"], ["▁pass", "ed"], ["以", "此"], ["石", "油"], ["▁lands", "c"], ["cri", "ption"], ["电", "网"], ["▁c", "ore"], ["▁opportun", "ity"], ["▁get", "s"], ["灾", "害"], ["▁con", "nection"], ["鲜", "明"], ["丰富", "的"], ["▁r", "ise"], ["▁prov", "iding"], ["熟", "悉"], ["▁C", "or"], ["现", "金"], ["借", "款"], ["了", "中国"], ["爆", "发"], ["进行", "的"], ["▁eas", "ier"], ["▁to", "ld"], ["▁w", "atch"], [")", ";▁"], ["▁", "ur"], ["the", "ir"], ["國", "際"], ["女", "子"], ["▁altern", "ative"], ["▁record", "ed"], ["正", "义"], ["音", "樂"], ["▁L", "aw"], ["局", "面"], ["▁p", "et"], ["▁ha", "ir"], ["▁c", "op"], ["▁c", "rop"], ["返", "回"], ["不", "够"], ["货", "物"], ["▁Japan", "ese"], ["▁at", "mosp"], ["as", "ion"], ["分", "享"], ["▁w", "inter"], ["急", "性"], ["ct", "ors"], ["▁ro", "ot"], ["帝", "国"], ["共", "有"], ["国", "防"], ["培养", "学生"], ["参考", "资料"], ["体现", "在"], ["至", "关"], ["消", "息"], ["cri", "pt"], ["▁stand", "ards"], ["可", "用"], ["衔", "接"], ["w", "est"], ["亚", "洲"], ["抗", "日"], ["z", "ing"], ["x", "iety"], ["▁D", "iv"], ["辩", "证"], ["▁ill", "ness"], ["▁oper", "ations"], ["的", "发生"], ["的", "中国"], ["一带", "一路"], ["基因", "组"], ["积极", "性"], ["i", "able"], ["▁O", "lymp"], ["開", "始"], ["历史", "上"], ["R", "ep"], ["es", "us"], ["]", "."], ["意识", "形态"], ["▁d", "ivid"], ["▁app", "oint"], ["▁D", "em"], ["代表", "大会"], ["▁pl", "ans"], ["icular", "ly"], ["te", "xt"], ["▁art", "ists"], ["re", "se"], ["税", "务"], ["债权", "人"], ["▁capac", "ity"], ["ogn", "itive"], ["E", "E"], ["部", "队"], ["th", "let"], ["运", "算"], ["▁ful", "ly"], ["第", "七"], ["主", "管"], ["器", "件"], ["▁e", "ffic"], ["主", "持"], ["pect", "ed"], ["ak", "er"], ["▁In", "ter"], ["▁F", "rance"], ["▁S", "ou"], ["n", "el"], ["or", "age"], ["Further", "more"], ["武", "器"], ["▁belie", "ved"], ["无", "人"], ["集", "群"], ["ic", "ians"], ["ac", "he"], ["一", "方"], ["交", "往"], ["违", "约"], ["造成", "的"], ["储", "备"], ["m", "ay"], ["iven", "ess"], ["事", "情"], ["▁m", "ission"], ["自身", "的"], ["mit", "ted"], ["大", "多"], ["al", "le"], ["▁de", "ad"], ["▁c", "ities"], ["▁R", "oad"], ["▁distribut", "ion"], ["展", "现"], ["▁infl", "amm"], ["▁sur", "pr"], ["编", "写"], ["最", "为"], ["T", "V"], ["有", "权"], ["▁drug", "s"], ["前", "进"], ["分析", "和"], ["▁f", "ix"], ["气", "象"], ["▁dep", "end"], ["▁in", "hib"], ["▁he", "avy"], ["▁l", "anguages"], ["m", "ean"], ["系统", "中"], ["公", "式"], ["▁common", "ly"], ["er", "ate"], ["ed", "om"], ["人力", "资源"], ["日", "期"], ["▁p", "hen"], ["范", "畴"], ["res", "ents"], ["思想", "政治"], ["法律", "法规"], ["演", "变"], ["▁run", "ning"], ["过程", "中的"], ["▁plan", "ning"], ["▁n", "avig"], ["类型", "的"], ["▁te", "levision"], ["\b", "\b"], ["ad", "o"], ["▁sec", "ret"], ["S", "O"], ["ar", "ian"], ["染", "色"], ["要", "在"], ["人", "格"], ["▁Americ", "ans"], ["b", "et"], ["▁techn", "ique"], ["▁he", "ard"], ["F", "inally"], ["▁pop", "ulations"], ["ou", "is"], ["忽", "视"], ["新", "能源"], ["力", "学"], ["▁feel", "ings"], ["过", "度"], ["感", "觉"], ["情", "绪"], ["▁ep", "is"], ["▁abs", "or"], ["环境", "的"], ["P", "L"], ["▁bas", "is"], ["创造", "性"], ["▁adv", "anced"], ["▁M", "y"], ["▁return", "ed"], ["?", "\""], ["长", "的"], ["▁m", "o"], ["终", "端"], ["命", "名"], ["反", "思"], ["▁st", "aff"], ["iam", "ent"], ["▁situ", "ations"], ["他", "在"], ["条件", "的"], ["p", "ress"], ["场", "所"], ["▁h", "ope"], ["▁f", "ederal"], ["最", "初"], ["科学", "的"], ["脱", "贫"], ["▁O", "n"], ["杂", "志"], ["医", "生"], ["地方", "政府"], ["编", "程"], ["▁f", "asc"], [".", "《"], ["排", "除"], ["▁c", "ry"], ["怎", "么"], ["on", "ly"], ["▁bl", "ue"], ["▁ing", "red"], ["▁open", "ed"], ["学生", "在"], ["这", "类"], ["▁P", "resident"], ["▁s", "ess"], ["C", "H"], ["▁complet", "ed"], ["▁follow", "ed"], ["视", "野"], ["ri", "an"], ["想", "象"], ["w", "in"], ["ed", "ing"], ["ies", "t"], ["▁ele", "ment"], ["▁m", "el"], ["p", "o"], ["▁l", "iqu"], ["可靠", "性"], ["的", "结构"], ["应用", "程序"], ["▁to", "ward"], ["现代", "化的"], ["减", "轻"], ["起", "源"], ["误", "差"], ["新时代", "中国特色社会主义"], ["ro", "g"], ["不", "变"], ["以", "往"], ["▁appro", "ximately"], ["cent", "er"], ["ri", "a"], ["ew", "ork"], ["▁sh", "ip"], ["it", "ors"], ["通", "讯"], ["▁bel", "ong"], ["..", ".."], ["▁sh", "aring"], ["▁separ", "ate"], ["认", "可"], ["ber", "t"], ["S", "ometimes"], ["攻", "坚"], ["▁k", "ing"], ["▁l", "oad"], ["加", "上"], ["」", "。"], ["歌", "曲"], ["缓", "解"], [".", ")"], ["商业", "银行"], ["▁t", "asks"], ["▁appl", "ied"], ["提", "交"], ["▁j", "ournal"], ["人民", "政府"], ["统一", "的"], ["▁complet", "ely"], ["强", "大的"], ["udd", "en"], ["▁c", "ook"], ["推", "出"], ["ot", "es"], ["▁l", "ung"], ["▁mat", "ch"], ["lead", "ing"], ["el", "ine"], ["▁de", "al"], ["f", "unction"], ["▁ad", "ult"], ["▁n", "ative"], ["▁frequ", "ently"], ["▁se", "ems"], ["R", "S"], ["▁c", "ast"], ["▁f", "ol"], ["ar", "io"], ["▁inst", "ruct"], ["▁ad", "just"], ["ob", "ile"], ["St", "udents"], ["▁ent", "er"], ["租", "赁"], ["▁techn", "ologies"], ["T", "P"], ["L", "ear"], ["s", "ays"], ["st", "on"], ["图", "形"], ["干", "细胞"], ["显", "然"], ["te", "e"], ["part", "icularly"], ["遗", "址"], ["无论", "是"], ["▁bre", "ast"], ["og", "le"], ["燃", "料"], ["▁less", "ons"], ["▁m", "unicip"], ["不", "确定"], ["e", "ach"], ["▁se", "ven"], ["民", "众"], ["▁p", "ark"], ["row", "s"], ["的", "生产"], ["处", "置"], ["y", "cl"], ["生物", "学"], ["先", "生"], ["的", "国际"], ["▁to", "x"], ["▁im", "ag"], ["▁ex", "cess"], ["国有", "企业"], ["▁W", "ashington"], ["▁set", "ting"], ["感", "受"], ["▁D", "is"], ["撤", "销"], ["河", "南"], ["▁occ", "up"], ["d", "own"], ["自", "行"], ["▁imm", "un"], ["便", "利"], ["园", "区"], ["▁pe", "ace"], ["审", "理"], ["it", "tle"], ["的", "根本"], ["h", "igh"], ["▁aut", "hors"], ["反", "射"], ["分布", "式"], ["出", "来的"], ["▁profess", "ion"], ["发展", "中国家"], ["d", "ent"], ["▁previous", "ly"], ["记", "载"], ["d", "isc"], ["S", "w"], ["▁is", "land"], ["▁h", "ydro"], ["数", "的"], ["未", "成"], ["ish", "ing"], ["新", "冠"], ["N", "F"], ["▁fru", "it"], ["信", "任"], ["▁app", "ly"], ["▁sp", "ect"], ["▁inj", "ury"], ["ol", "id"], ["en", "ry"], ["▁in", "put"], ["▁nut", "ri"], ["▁though", "ts"], ["彻", "底"], ["第三", "节"], ["▁h", "it"], ["r", "d"], ["C", "L"], ["▁cour", "t"], ["in", "i"], ["gor", "ith"], ["发", "性"], ["ag", "er"], ["婚", "姻"], ["T", "rans"], ["▁g", "ave"], ["坚", "决"], ["▁mus", "cle"], ["地", "域"], ["指", "令"], ["的", "中"], ["部", "位"], ["▁rep", "e"], ["▁out", "comes"], ["工业", "化"], ["实", "例"], ["os", "en"], ["经", "理"], ["ilos", "oph"], ["▁Ar", "ch"], ["▁r", "h"], ["公", "园"], ["产业", "发展"], ["▁S", "ur"], ["▁b", "one"], ["▁bab", "y"], ["即", "可"], ["go", "ing"], ["占", "有"], ["十", "五"], ["▁comp", "ar"], ["每", "一"], ["性", "与"], ["团", "体"], ["研究", "员"], ["\n", "\t"], ["rodu", "ction"], ["▁com", "ing"], ["内容", "的"], ["世界", "的"], ["H", "z"], ["▁met", "al"], ["▁sc", "ale"], ["al", "a"], ["众", "多"], ["清", "洁"], ["构", "造"], ["▁del", "iver"], ["重要", "作用"], ["气候", "变化"], ["▁dis", "orders"], ["▁sa", "ve"], ["分", "割"], ["政", "权"], ["▁g", "ender"], ["▁v", "ary"], ["u", "it"], ["臺", "灣"], ["的", "企业"], ["这", "就是"], ["k", "now"], ["il", "m"], ["儒", "家"], ["样", "品"], ["▁r", "ule"], ["大", "众"], ["互", "相"], ["▁ele", "ction"], ["▁find", "ing"], ["例", "子"], ["C", "I"], ["az", "ing"], ["▁d", "irection"], ["关", "节"], ["▁d", "en"], ["▁ra", "ce"], ["ol", "ar"], ["▁", "urban"], ["皇", "帝"], ["▁pl", "astic"], ["成", "像"], ["asc", "ular"], ["特", "异"], ["▁streng", "th"], ["谈", "判"], ["(", ")"], ["的", "角度"], ["拒", "绝"], ["▁recomm", "end"], ["▁G", "reen"], ["流", "域"], ["▁mention", "ed"], ["维", "度"], ["▁subject", "s"], ["主要", "包括"], ["承", "诺"], ["時", "間"], ["凝", "聚"], ["olog", "ist"], ["单", "独"], ["o", "ke"], ["克", "服"], ["▁d", "ram"], ["·", "▁"], ["▁L", "ake"], ["▁sp", "ot"], ["▁sp", "ent"], ["M", "D"], ["否", "则"], ["▁v", "ess"], ["▁appear", "s"], ["um", "ber"], ["爱", "国"], ["▁cult", "ures"], ["▁lay", "er"], ["等", "方面的"], ["H", "ave"], ["葡", "萄"], ["▁rele", "vant"], ["简单", "的"], ["▁C", "up"], ["ir", "t"], ["▁he", "av"], ["▁top", "ics"], ["严重", "的"], ["por", "ts"], ["▁de", "eper"], ["心理", "学"], ["活动", "中"], ["扫", "描"], ["日", "起"], ["▁exper", "iment"], ["▁", "esc"], ["b", "urg"], ["▁independ", "ent"], ["常", "规"], ["事实", "上"], ["▁", ","], ["▁gard", "en"], ["ap", "ers"], ["不", "要"], ["▁f", "ields"], ["育", "人"], ["取", "消"], ["诱", "导"], ["pl", "ant"], ["通", "货"], ["▁ref", "ers"], ["声", "明"], ["N", "e"], ["htt", "p"], ["▁f", "ib"], ["▁he", "ar"], ["oc", "ol"], ["移", "植"], ["修", "正"], ["C", "ar"], ["之", "下"], ["歷", "史"], ["os", "h"], ["治理", "体系"], ["作", "战"], ["当", "今"], ["律", "师"], ["也", "就"], ["▁P", "at"], ["营", "造"], ["▁present", "ed"], ["ul", "s"], ["侵", "害"], ["▁Q", "ue"], ["ul", "um"], ["k", "i"], ["▁fil", "ms"], ["▁start", "ing"], ["常见", "的"], ["▁offic", "ial"], ["方法", "的"], ["▁ter", "rit"], ["在", "我国"], ["相同", "的"], ["分", "泌"], ["西", "南"], ["未", "来的"], ["d", "ep"], ["目标", "的"], ["▁cont", "rast"], ["公", "安"], ["共同", "富裕"], ["并", "发"], ["手", "机"], ["种", "植"], ["ruct", "ure"], ["Th", "ink"], ["▁h", "omes"], ["得", "主"], ["▁B", "ay"], ["▁up", "d"], ["▁let", "ter"], ["p", "resent"], ["的", "形成"], ["▁p", "en"], ["▁coun", "ter"], ["▁v", "oc"], ["▁", "--▁"], ["O", "f"], ["主要", "有"], ["▁temper", "atures"], ["▁col", "lege"], ["▁", "#"], ["▁pre", "par"], ["n", "orm"], ["▁are", "n"], ["T", "wo"], ["▁character", "istics"], ["▁tr", "ig"], ["▁favor", "ite"], ["物", "体"], ["明显", "的"], ["▁sol", "id"], ["▁S", "ch"], ["▁", "<"], ["具体", "的"], ["▁focus", "ed"], ["▁M", "or"], ["难", "度"], ["l", "a"], ["证", "实"], ["▁art", "icles"], ["▁J", "ames"], ["党的", "领导"], ["垃", "圾"], ["▁thous", "ands"], ["举", "办"], ["碳", "排放"], ["\u0007", "\u0007"], ["ot", "a"], ["yp", "es"], ["体制", "改革"], ["pp", "ort"], ["oth", "ing"], ["重", "建"], ["得", "出"], ["差", "别"], ["版", "权"], ["▁emot", "ional"], ["深", "圳"], ["▁rec", "ip"], ["▁pres", "ident"], ["校", "园"], ["il", "ed"], ["d", "en"], ["Ex", "pl"], ["ect", "or"], ["▁Sp", "anish"], ["▁incre", "ases"], ["al", "ong"], ["▁emot", "ions"], ["and", "om"], ["l", "ar"], ["飞", "行"], ["▁Ch", "ampions"], ["B", "N"], ["▁stud", "ied"], ["▁read", "ers"], ["起", "到"], ["列", "表"], ["M", "an"], ["D", "isc"], ["的一", "部分"], ["▁ro", "les"], ["▁t", "ask"], ["防", "护"], ["过", "渡"], ["市", "镇"], ["▁l", "at"], ["信", "念"], ["如", "图"], ["引", "进"], ["▁happ", "en"], ["含", "有"], ["节", "约"], ["推", "行"], ["riev", "ed"], ["進", "行"], ["本", "地"], ["助", "力"], ["初", "始"], ["管", "辖"], ["▁lead", "ers"], ["▁N", "or"], ["实", "习"], ["国家", "和"], ["安全", "性"], ["提", "示"], ["年", "至"], ["ra", "c"], ["▁re", "cept"], ["▁soc", "iet"], ["▁happ", "ened"], ["办", "学"], ["同时", "也"], [")▁", "–▁"], ["党的", "十八大"], ["促", "使"], ["化", "合物"], ["em", "ents"], ["职", "务"], ["l", "i"], ["O", "T"], ["政策", "的"], ["▁medic", "ine"], ["是", "我国"], ["▁min", "or"], ["年", "间"], ["粒", "子"], ["在", "这"], ["▁res", "ource"], ["中国", "经济"], ["ens", "us"], ["天", "津"], ["分", "化"], ["▁appro", "aches"], ["en", "a"], ["依", "法治"], ["▁not", "es"], ["▁w", "rong"], ["考", "古"], ["人", "和"], ["的", "知识"], ["K", "ey"], ["▁lead", "s"], ["▁gen", "es"], ["▁st", "ream"], ["常", "用"], ["者", "和"], ["▁consum", "ption"], ["我们", "可以"], ["▁near", "by"], ["包", "装"], ["更", "大"], ["随", "后"], ["▁major", "ity"], ["▁T", "V"], ["长", "江"], ["专", "题"], ["的", "相关"], ["和", "服务"], ["▁m", "aster"], ["▁experien", "ced"], ["ul", "ner"], ["太", "空"], ["▁educ", "ational"], ["▁hig", "hest"], ["就", "能"], ["物", "权"], ["小", "平"], ["▁le", "tt"], ["多", "少"], ["ang", "es"], ["▁Gen", "eral"], ["f", "ound"], ["▁camp", "aign"], ["调", "解"], ["顺", "利"], ["▁adv", "ance"], ["[", "@"], ["州", "市"], ["国", "情"], ["集", "合"], ["设备", "的"], ["c", "a"], ["▁Germ", "any"], ["k", "m"], ["▁c", "ere"], ["ient", "ists"], ["Ch", "ar"], ["▁s", "and"], ["后", "者"], ["最", "低"], ["师", "生"], ["反", "复"], ["—", "▁▁"], ["ri", "x"], ["▁al", "t"], ["审", "批"], ["标", "记"], ["▁aware", "ness"], ["▁w", "alk"], ["实", "力"], ["s", "ub"], ["ag", "s"], ["承", "认"], ["os", "a"], ["▁ro", "t"], ["gy", "pt"], ["是", "通过"], ["分", "辨"], ["为核心", "的"], ["中", "所"], ["作", "家"], ["olog", "ists"], ["一", "部分"], ["▁ch", "oice"], ["城镇", "化"], ["线", "的"], ["ul", "f"], ["l", "o"], ["和", "技术"], ["未", "能"], ["en", "ced"], ["ot", "al"], ["▁clos", "ely"], ["t", "wo"], ["▁M", "al"], ["ann", "el"], ["▁appe", "ared"], ["▁Cent", "ral"], ["和", "完善"], ["▁S", "un"], ["球", "員"], ["nd", "rome"], ["跟", "踪"], ["▁form", "ation"], ["重", "组"], ["sequ", "ently"], ["▁bec", "oming"], ["结构", "性"], ["色", "彩"], ["福", "建"], ["n", "ame"], ["il", "ing"], ["的", "光"], ["▁tre", "ated"], ["ot", "ic"], ["项目", "的"], ["▁man", "age"], ["it", "oring"], ["▁class", "room"], ["并", "将"], ["R", "ed"], ["p", "ed"], ["▁bro", "ther"], ["唯", "物"], ["优", "点"], ["在", "其"], ["内", "存"], ["H", "D"], ["b", "i"], ["c", "ious"], ["▁supp", "l"], ["下", "列"], ["调", "动"], ["古", "典"], ["江", "苏"], ["成", "的"], ["层", "的"], ["预", "警"], ["ur", "ation"], ["▁polic", "ies"], ["的", "前提"], ["电子", "商务"], ["历", "程"], ["带来", "了"], ["人", "均"], ["百", "姓"], ["▁expl", "ained"], ["▁s", "chol"], ["▁feel", "ing"], ["ind", "ows"], ["Th", "us"], ["意", "大利"], ["▁Cong", "ress"], ["▁in", "h"], ["▁rem", "ained"], ["带", "领"], ["经济社会", "发展"], ["全", "过程"], ["指", "定"], ["ov", "ing"], ["▁particip", "ants"], ["▁p", "ick"], ["实", "训"], ["研", "制"], ["大", "约"], ["期", "的"], ["主体", "的"], ["e", "very"], ["肺", "炎"], ["▁tre", "nd"], ["act", "ive"], ["M", "od"], ["ol", "f"], ["▁repl", "ace"], ["I", "R"], ["下", "来"], ["演", "員"], ["▁commer", "cial"], ["某", "个"], ["地", "质"], ["▁cy", "cle"], ["ars", "h"], ["▁v", "ital"], ["▁concent", "r"], ["新", "中国"], ["▁S", "um"], ["分", "钟"], ["ag", "on"], ["▁un", "its"], ["提", "起"], ["修", "订"], ["r", "m"], ["的", "重大"], ["破", "产"], ["升", "高"], ["▁f", "er"], ["话", "语"], ["法", "制"], ["us", "iness"], ["c", "el"], ["▁w", "est"], ["▁▁", "("], ["在", "一定"], ["部", "的"], ["rap", "y"], ["的", "需要"], ["▁chang", "ing"], ["erson", "al"], ["也就是", "说"], ["▁p", "al"], ["▁A", "ut"], ["rop", "ical"], ["▁d", "ial"], ["中", "華"], ["市场", "化"], ["防", "控"], ["生", "动"], ["电", "源"], ["N", "ational"], ["为", "代表"], ["s", "ur"], ["▁cont", "emporary"], ["海", "外"], ["▁", "\\"], ["c", "alled"], ["n", "ic"], ["▁b", "ed"], ["▁A", "lex"], ["▁we", "ak"], ["C", "E"], ["ann", "ed"], ["样", "的"], ["▁s", "em"], ["erv", "ed"], ["▁not", "e"], ["数字化", "转型"], ["L", "ike"], ["▁sex", "ual"], ["▁care", "fully"], ["▁S", "am"], ["▁e", "ast"], ["▁g", "ather"], ["}", "-"], ["▁comp", "rehens"], ["都", "要"], ["▁impro", "ved"], ["r", "ish"], ["▁imm", "edi"], ["at", "o"], ["lor", "ida"], ["▁re", "ached"], ["s", "ince"], ["G", "l"], ["可以", "说"], ["U", "N"], ["k", "in"], ["▁al", "cohol"], ["目", "录"], ["失", "业"], ["小", "鼠"], ["f", "ollow"], ["▁smo", "oth"], ["反映", "了"], ["ac", "ific"], ["▁cre", "ation"], ["佛", "教"], ["小", "说"], ["ict", "or"], ["经", "费"], ["正", "当"], ["ent", "h"], ["▁ch", "ronic"], ["▁def", "ined"], ["w", "ill"], ["调", "研"], ["等", "人"], ["一", "個"], ["衡", "量"], ["党", "委"], ["idd", "en"], ["re", "qu"], ["与", "社会"], ["is", "her"], ["打", "击"], ["▁em", "issions"], ["是", "最"], ["▁ins", "ights"], ["总", "统"], ["▁conduct", "ed"], ["与", "发展"], ["账", "户"], [".", ")▁"], ["▁prop", "osed"], ["io", "x"], ["在", "国际"], ["和", "方法"], ["前", "的"], ["学", "位"], ["▁ox", "ygen"], ["h", "and"], ["▁ele", "v"], ["H", "ar"], ["▁d", "u"], ["所得", "税"], ["ult", "ural"], ["美", "好"], ["的", "可"], ["举", "行"], ["青", "少年"], ["ich", "ard"], ["回", "收"], ["▁sp", "ring"], ["▁dis", "order"], ["e", "aking"], ["无", "疑"], ["部", "件"], ["▁G", "eorge"], ["C", "he"], ["▁s", "ample"], ["太", "平"], ["▁p", "u"], ["出现", "的"], ["▁act", "ual"], ["as", "p"], ["格", "式"], ["▁b", "illion"], ["There", "fore"], ["之", "所以"], ["▁hy", "per"], ["ell", "a"], ["▁v", "oice"], ["fess", "or"], ["▁deg", "rees"], ["师", "范"], ["变", "成"], ["第二", "次"], ["完整", "的"], ["▁M", "us"], ["▁immedi", "ately"], ["▁Is", "rael"], ["讲", "话"], ["b", "our"], ["影", "像"], ["n", "et"], ["Rem", "ember"], ["在", "这个"], ["G", "erm"], ["炎", "症"], ["解", "读"], ["ak", "ers"], ["▁sugg", "ests"], ["一", "段"], ["对", "照"], ["▁expl", "oring"], ["确", "定的"], ["▁require", "ments"], ["et", "ry"], ["图", "片"], ["▁is", "ol"], ["▁v", "ision"], ["仿", "真"], ["转", "载"], ["▁any", "one"], ["on", "a"], ["导", "体"], ["h", "ad"], ["与", "其"], ["杠", "杆"], ["战", "斗"], ["▁P", "ublic"], ["民", "营"], ["▁D", "avid"], ["▁wh", "ose"], ["飾", "演"], ["f", "low"], ["▁inter", "pret"], ["央", "行"], ["D", "ef"], ["ath", "olic"], ["较", "高的"], ["是", "从"], ["年", "底"], ["金", "额"], ["材料", "的"], ["▁mot", "or"], ["抓", "住"], ["▁world", "wide"], ["噪", "声"], ["▁ad", "vent"], ["Similar", "ly"], ["线", "上"], [")", ":"], ["▁s", "amples"], ["y", "e"], ["t", "ype"], ["▁jo", "ined"], ["▁", "iron"], ["ol", "a"], ["十", "七"], ["我们", "要"], ["▁c", "overed"], ["▁bott", "om"], ["信", "心"], ["湖", "南"], ["▁challeng", "ing"], ["▁card", "i"], ["O", "M"], ["▁A", "re"], ["的", "特征"], ["教育", "部"], ["乃", "至"], ["▁w", "all"], ["l", "ist"], ["▁ch", "ance"], ["ec", "k"], ["irgin", "ia"], ["edic", "ated"], ["or", "al"], ["邓", "小平"], ["试", "图"], ["分", "裂"], ["▁econom", "y"], ["抗", "原"], ["披", "露"], ["皮", "肤"], ["▁wond", "er"], ["▁re", "ality"], ["▁electric", "ity"], ["os", "c"], ["同", "年"], ["▁business", "es"], ["信", "托"], ["迁", "移"], ["▁vol", "ume"], ["▁M", "art"], ["an", "o"], ["▁prote", "ins"], ["ur", "d"], ["ellig", "ence"], ["P", "at"], ["▁lab", "el"], ["▁Med", "ic"], ["▁pain", "t"], ["政", "党"], ["id", "ers"], ["▁comm", "and"], ["容", "器"], ["之间的", "关系"], ["看", "出"], ["▁Serv", "ice"], ["立", "即"], ["▁mat", "hemat"], ["暴", "露"], ["▁citiz", "ens"], ["▁look", "ed"], ["几", "何"], ["h", "t"], ["▁L", "ife"], ["受", "体"], ["or", "ough"], ["非", "洲"], ["運動", "員"], ["▁W", "eb"], ["e", "lect"], ["Sp", "ec"], ["ym", "ph"], ["妇", "女"], ["▁fac", "ed"], ["▁P", "aul"], ["很", "大的"], ["viron", "ments"], ["三", "维"], ["形式", "的"], ["尺", "寸"], ["两", "大"], ["▁process", "ing"], ["R", "A"], ["▁bu", "y"], ["▁mil", "k"], ["▁exper", "t"], ["的", "生活"], ["resp", "ond"], ["▁un", "f"], ["▁L", "a"], ["W", "rit"], ["ra", "ction"], ["密", "集"], ["飞", "机"], ["▁sur", "gery"], ["(", ","], ["都", "在"], ["▁Car", "ol"], ["互", "联"], ["▁habit", "at"], ["丧", "失"], ["全国", "人大"], ["▁pre", "fer"], ["le", "vel"], ["企业", "在"], ["占", "比"], ["um", "s"], ["▁inc", "ome"], ["▁Pl", "an"], ["▁min", "im"], ["▁init", "i"], ["加", "拿"], ["Ke", "ep"], ["▁G", "reek"], ["L", "ist"], ["ed", "y"], ["寿", "命"], ["的", "组织"], [":", "("], ["放", "大"], ["ic", "ks"], ["F", "ollow"], ["较", "大的"], ["p", "ython"], ["▁M", "et"], ["M", "ed"], ["速", "率"], ["文化", "遗产"], ["▁u", "pper"], ["等", "领域"], ["▁rep", "resents"], ["s", "hip"], ["理论", "的"], ["血", "压"], ["c", "ers"], ["神经", "元"], ["▁f", "ear"], ["▁appear", "ance"], ["界", "定"], ["▁t", "iny"], ["文", "艺"], ["标准", "的"], ["▁fig", "ures"], ["利", "息"], ["归", "纳"], ["▁class", "es"], ["▁th", "ick"], ["研究", "中"], ["政", "协"], ["▁sou", "thern"], ["運動", "會"], ["加强", "对"], ["S", "ub"], ["药", "品"], ["看", "来"], ["涵", "盖"], ["英", "國"], ["尽", "可能"], ["B", "M"], ["ocr", "atic"], ["条", "约"], ["发", "出"], ["▁mar", "ried"], ["▁rel", "atively"], ["父", "母"], ["▁Can", "adian"], ["数据", "安全"], ["▁comb", "ination"], ["▁al", "gorith"], ["M", "ake"], ["令", "人"], ["新", "疆"], ["▁H", "all"], ["▁meet", "ing"], ["▁F", "irst"], ["▁out", "put"], ["a", "it"], ["▁L", "eg"], ["▁in", "sect"], ["▁lett", "ers"], ["线", "程"], ["密", "码"], ["倡", "导"], ["r", "ant"], ["adem", "y"], ["资源", "配置"], ["牌", "得主"], ["▁fore", "ign"], ["os", "ystem"], ["▁Comp", "any"], ["传", "染"], ["真", "理"], ["殖", "民"], ["in", "ations"], ["fere", "d"], ["or", "king"], ["▁G", "roup"], ["b", "and"], ["▁im", "agine"], ["▁O", "ff"], [":", "▁"], ["ph", "a"], ["▁mess", "age"], ["▁poss", "ess"], ["vironment", "al"], ["解", "析"], ["同", "学"], ["ys", "ical"], ["ro", "ke"], ["王", "朝"], ["▁Pro", "t"], ["▁pr", "ice"], ["▁wid", "ely"], ["▁Cour", "t"], ["等", "的"], ["▁particular", "ly"], ["最", "新"], ["▁inst", "all"], ["的", "地方"], ["ic", "ial"], ["▁assess", "ment"], ["▁sl", "ightly"], ["而", "非"], ["电", "磁"], ["▁was", "n"], ["▁elect", "ed"], ["▁sp", "eech"], ["o", "ften"], ["Eng", "lish"], ["▁M", "usic"], ["▁ass", "um"], ["认识", "到"], ["▁mechan", "isms"], ["▁▁", "-▁"], ["▁c", "ra"], ["▁enh", "ance"], ["指", "示"], ["▁redu", "cing"], ["ex", "pl"], ["不", "受"], ["▁des", "p"], ["重要", "的是"], ["的最", "大"], ["▁v", "ent"], ["▁move", "ments"], ["工", "商"], ["\u0005", "\u0006"], ["沒", "有"], ["▁car", "ried"], ["环境", "保护"], ["博物", "馆"], ["▁tra", "in"], ["▁t", "rou"], ["▁F", "ound"], ["▁gener", "ation"], ["的", "制度"], ["▁to", "w"], ["暴", "力"], ["▁fail", "ure"], ["▁determ", "ined"], ["补", "贴"], ["行政", "机关"], ["研究", "生"], ["▁ar", "m"], ["Ar", "t"], ["▁F", "ore"], ["S", "outh"], ["▁a", "ward"], ["▁rem", "ove"], ["寻", "求"], ["热", "点"], ["ress", "ed"], ["之", "处"], ["截", "至"], ["an", "i"], ["等", "于"], ["t", "ical"], ["▁fl", "ood"], ["he", "alth"], ["at", "al"], ["f", "ree"], ["体", "内"], ["新时代中国特色社会主义", "思想"], ["要", "有"], ["▁set", "s"], ["▁R", "ail"], ["预", "计"], ["度", "和"], ["▁involv", "ing"], ["W", "illiam"], ["教师", "的"], ["合", "适"], ["▁song", "s"], ["ul", "in"], ["供应", "商"], ["▁qu", "al"], ["R", "E"], ["▁s", "ac"], ["▁rem", "oved"], ["F", "ran"], ["四", "是"], ["▁b", "atter"], ["未", "经"], ["在", "这种"], ["电", "气"], ["技术", "创新"], ["in", "ent"], ["▁house", "hold"], ["▁m", "ath"], ["生", "平"], ["并", "未"], [",", "《"], ["▁B", "el"], ["at", "ically"], ["Ch", "apter"], ["ortun", "ately"], ["光", "学"], ["▁consequ", "ences"], ["▁n", "orthern"], ["病", "理"], ["▁t", "ail"], ["▁h", "ospital"], ["常", "常"], ["▁fa", "ith"], ["在", "一个"], ["难", "点"], ["▁Ar", "my"], ["og", "ue"], ["环境", "中"], ["▁Jew", "ish"], ["▁ro", "ll"], ["ar", "ah"], ["▁G", "ra"], ["到", "达"], ["▁st", "ations"], ["等", "方式"], ["▁cand", "id"], ["s", "im"], ["F", "e"], ["▁m", "ist"], ["生", "素"], ["▁o", "cean"], ["▁dest", "roy"], ["可", "分为"], ["▁squ", "are"], ["os", "ph"], ["买", "卖"], ["▁prim", "arily"], ["▁k", "id"], ["▁L", "ist"], ["▁health", "care"], ["as", "ure"], ["▁maintain", "ing"], ["▁eng", "age"], ["生活", "中"], ["▁symb", "ol"], ["▁sur", "vey"], ["▁t", "ouch"], ["▁me", "ant"], ["ri", "age"], ["vers", "e"], ["ar", "n"], ["▁sign", "al"], ["”", "("], ["▁inst", "rum"], ["尼", "亚"], ["▁ac", "ademic"], ["▁At", "l"], ["▁ev", "olution"], ["ro", "id"], ["pos", "es"], ["▁v", "ulner"], ["▁study", "ing"], ["生产", "的"], ["▁in", "ternal"], ["漏", "洞"], ["▁en", "vironments"], ["▁spec", "ifically"], ["决定", "了"], ["T", "S"], ["前", "往"], ["pro", "du"], ["上", "涨"], ["护", "理"], ["▁Pro", "gram"], ["▁h", "orm"], ["创", "意"], ["中", "等"], ["th", "rough"], ["流动", "性"], ["人员", "的"], ["iv", "ation"], ["▁creat", "ive"], ["形", "状"], ["▁ag", "g"], ["▁j", "u"], ["弹", "性"], ["面临", "的"], ["更", "高的"], ["▁fac", "ilit"], ["ot", "he"], ["▁th", "us"], ["--", "-"], ["设计", "的"], ["ig", "ration"], ["▁to", "oth"], ["▁R", "oyal"], ["被", "认为"], ["▁M", "ont"], ["系统", "性"], ["用", "途"], ["▁M", "ark"], ["u", "a"], ["中", "和"], ["▁them", "es"], ["合", "格"], ["raz", "il"], ["防", "御"], ["▁read", "y"], ["▁he", "ight"], ["P", "M"], ["▁wor", "th"], ["ab", "ase"], ["▁exam", "ine"], ["▁Y", "ear"], ["▁b", "ow"], ["▁par", "am"], ["-", "{"], ["技", "巧"], ["um", "a"], ["充", "满"], ["合", "规"], ["建设", "和"], ["▁C", "ap"], ["▁stra", "ight"], ["er", "ia"], ["▁ann", "ual"], ["现", "行"], ["实体", "经济"], ["he", "ther"], ["▁M", "at"], ["ant", "a"], ["▁of", "fered"], ["康", "复"], ["al", "ysis"], ["we", "ight"], ["的", "学生"], ["▁bir", "d"], ["▁el", "im"], ["st", "ruction"], ["决", "议"], ["的", "标准"], ["内", "外"], ["▁J", "esus"], ["国民", "党"], ["社会", "保障"], ["组", "件"], ["▁st", "orage"], ["ipp", "ed"], ["▁gr", "and"], ["是", "有"], ["b", "el"], ["对", "话"], ["值", "的"], ["▁met", "ab"], ["ar", "ter"], ["is", "hes"], ["获得", "了"], ["▁p", "arent"], ["▁dec", "ades"], ["H", "L"], ["的", "水"], ["▁T", "ur"], ["广", "告"], ["比", "赛"], ["▁lead", "er"], ["太阳", "能"], ["▁re", "ference"], ["▁l", "a"], ["微", "观"], ["信息", "系统"], ["ric", "ulum"], ["▁se", "eds"], ["网络", "空间"], ["模式", "的"], ["私", "人"], ["制", "备"], ["放", "射"], ["est", "ival"], ["满", "意"], ["单", "纯"], ["纪", "律"], ["通货", "膨胀"], ["▁dr", "ive"], ["共", "建"], ["支", "配"], ["与此", "同时"], ["ut", "ch"], ["▁b", "attle"], ["▁K", "ore"], ["▁Cl", "ass"], ["时期", "的"], ["Under", "standing"], ["▁cons", "ervation"], ["?", "\"▁"], ["省", "级"], ["官", "员"], ["▁am", "ounts"], ["武", "装"], ["调", "用"], ["▁estim", "ated"], ["▁", "ri"], ["y", "les"], ["隔", "离"], ["▁G", "e"], ["y", "r"], ["pr", "int"], ["c", "aus"], ["通", "胀"], ["国民", "经济"], ["ab", "out"], ["▁rep", "orts"], ["▁egg", "s"], ["R", "F"], ["▁m", "ice"], ["▁ra", "in"], ["cer", "tain"], ["▁r", "ul"], ["▁f", "lex"], ["需要", "的"], ["ric", "s"], ["似", "乎"], ["un", "te"], ["总", "额"], ["促进", "了"], ["注", "入"], ["m", "l"], ["▁O", "ld"], ["全", "方位"], ["本", "网"], ["时代", "的"], ["伤", "害"], ["裁", "判"], ["▁M", "il"], ["▁sp", "l"], ["征", "收"], ["论", "证"], ["▁H", "istor"], ["如", "今"], ["b", "ran"], ["▁link", "ed"], ["▁", "*"], ["▁T", "ime"], [""", "."], ["审", "核"], ["▁De", "velopment"], ["St", "ud"], ["▁King", "dom"], ["▁M", "ary"], ["▁not", "hing"], ["▁M", "ac"], ["▁s", "av"], ["ou", "l"], ["c", "m"], ["▁p", "ul"], ["M", "on"], ["独立", "的"], ["H", "E"], ["更", "好的"], ["D", "C"], ["生态", "系统"], ["▁d", "rop"], ["坚", "实"], ["▁B", "ro"], ["▁proper", "ly"], ["and", "a"], ["新", "增"], ["d", "i"], ["▁sp", "aces"], ["公", "元"], ["答", "案"], ["声", "音"], ["▁col", "le"], ["对", "接"], ["N", "ext"], ["静", "脉"], ["▁S", "en"], ["▁cl", "osed"], ["▁exc", "ell"], ["委", "員"], ["▁less", "on"], ["▁ch", "apter"], ["▁S", "al"], ["研究", "中心"], ["▁con", "ver"], ["建", "造"], ["对", "方"], ["书", "面"], ["A", "ss"], ["贯", "穿"], ["的重要", "性"], ["纪", "念"], ["▁help", "ing"], ["▁ne", "uro"], ["▁inter", "view"], ["政", "务"], ["玻", "璃"], ["▁atmosp", "here"], ["▁B", "er"], ["re", "y"], ["▁there", "fore"], ["累", "计"], ["清", "朝"], ["南", "北"], ["一", "级"], ["出", "资"], ["▁surv", "ival"], ["▁p", "ages"], ["▁m", "it"], ["美国", "的"], ["a", "ult"], ["ill", "er"], ["▁h", "uge"], ["工程", "师"], ["▁gr", "ass"], ["▁not", "ice"], ["打", "印"], ["▁", "especially"], ["▁g", "iving"], ["N", "S"], ["表现", "出"], ["弘", "扬"], ["O", "h"], ["▁dep", "ression"], ["因", "為"], ["▁d", "edicated"], ["引", "用"], ["▁▁▁▁", "▁▁"], ["饮", "食"], ["山", "西"], ["后", "期"], ["vent", "ional"], ["物", "品"], ["▁exp", "osed"], ["▁co", "ord"], ["un", "ch"], ["B", "A"], ["相当", "于"], ["全", "党"], ["h", "ire"], ["物", "种"], ["▁fin", "ally"], ["w", "ar"], ["不断", "提高"], ["激", "素"], ["▁encou", "rage"], ["重", "庆"], ["▁engine", "ering"], ["s", "ometimes"], ["az", "ine"], ["不", "开"], ["app", "ing"], ["ic", "ago"], ["H", "igh"], ["▁pict", "ures"], ["运动", "会"], ["主", "权"], ["溶", "液"], ["缺", "失"], ["semb", "ly"], ["re", "land"], ["oh", "ns"], ["▁select", "ed"], ["▁N", "et"], ["出", "血"], ["终", "止"], ["名", "义"], ["▁con", "v"], ["ent", "ed"], ["c", "hers"], ["▁c", "ateg"], ["p", "oint"], ["u", "h"], ["d", "em"], ["com", "mun"], ["D", "ep"], ["外", "资"], ["赋", "能"], ["加拿", "大"], ["▁cons", "ists"], ["▁a", "part"], ["产", "能"], ["党和", "国家"], ["▁comb", "ined"], ["后", "续"], ["ar", "row"], ["起", "诉"], ["▁strateg", "y"], ["A", "v"], ["量", "化"], ["清", "单"], ["▁extrem", "ely"], ["▁l", "ooks"], ["毕业", "生"], ["▁C", "he"], ["▁contain", "ing"], ["▁trans", "form"], ["V", "ol"], ["颁", "布"], ["车", "站"], ["▁k", "illed"], ["A", "c"], ["生", "效"], ["人", "数"], ["▁tra", "ffic"], ["o", "z"], ["S", "M"], ["▁gra", "de"], ["▁L", "atin"], ["肌", "肉"], ["▁interest", "s"], ["▁l", "iver"], ["遇", "到"], ["▁w", "ife"], ["转", "录"], ["Un", "ited"], ["▁adv", "oc"], ["消", "失"], ["lic", "k"], ["功能", "的"], ["▁b", "rief"], ["▁form", "at"], ["党", "内"], ["化", "解"], ["hem", "ical"], ["朝", "鲜"], ["▁l", "ibrary"], ["路", "由"], ["ang", "ed"], ["脂", "肪"], ["sp", "ect"], ["▁P", "en"], ["享", "受"], ["O", "C"], ["▁ingred", "ients"], ["体", "积"], ["e", "k"], ["合法", "权益"], ["研究", "和"], ["▁orig", "in"], ["▁an", "xiety"], ["致", "力"], ["年", "夏季"], ["担", "当"], ["oot", "ball"], ["▁mo", "ist"], ["▁conflic", "t"], ["▁t", "al"], ["标", "的"], ["B", "rit"], ["带", "有"], ["爆", "炸"], ["▁circ", "um"], ["▁industr", "ial"], ["▁refer", "red"], ["的", "战略"], ["地", "图"], ["权", "限"], ["▁regular", "ly"], ["演", "化"], ["电", "话"], ["un", "ct"], ["▁Austral", "ian"], ["▁Mex", "ico"], ["P", "ar"], ["▁clos", "er"], ["▁recomm", "ended"], ["说", "的"], ["对外", "开放"], ["A", "g"], ["▁prep", "ared"], ["ian", "a"], ["st", "ream"], ["▁diagn", "osis"], ["▁top", "ic"], ["设", "定"], ["负", "载"], ["m", "as"], ["eor", "g"], ["▁contin", "ues"], ["us", "es"], ["在", "内的"], ["搭", "建"], ["in", "et"], ["或", "是"], ["▁pre", "t"], ["待", "遇"], ["的", "政策"], ["▁discuss", "ion"], ["更", "大的"], ["m", "ic"], ["▁flow", "ers"], ["债务", "人"], ["▁frequ", "ency"], ["媒", "介"], ["▁liqu", "id"], ["▁oper", "ation"], ["体制", "机制"], ["肯", "定"], ["增", "大"], ["冠", "軍"], ["▁T", "own"], ["既", "是"], ["的", "分析"], ["▁b", "urn"], ["ib", "ilities"], ["奠", "定了"], ["情", "节"], ["▁W", "ater"], ["▁in", "form"], ["▁h", "un"], ["搜", "索"], ["ist", "ant"], ["黄", "河"], ["塑", "造"], ["▁rad", "iation"], ["表", "演"], ["G", "e"], ["u", "an"], ["对", "中国"], ["▁gener", "ations"], ["▁mus", "cles"], ["▁Pro", "ject"], ["名", "为"], ["▁manufact", "ure"], ["▁v", "ast"], ["▁M", "ag"], ["▁guid", "elines"], ["模", "糊"], ["▁follow", "s"], ["公", "约"], ["公", "有"], ["动", "能"], ["▁descri", "be"], ["▁car", "s"], ["▁D", "o"], ["▁op", "in"], ["▁d", "ro"], ["▁D", "irect"], ["▁y", "ellow"], ["协", "助"], ["市", "民"], ["▁b", "ank"], ["相", "信"], ["F", "l"], ["b", "ur"], ["个", "别"], ["这一", "点"], ["'", ",▁"], ["工作", "中"], ["其", "中的"], ["▁A", "D"], ["高", "端"], ["▁G", "old"], ["ar", "p"], ["任", "意"], ["g", "ment"], ["▁direct", "or"], ["曾", "经"], ["信息", "安全"], ["告", "诉"], ["▁B", "en"], ["▁veget", "ables"], ["as", "y"], ["又", "称"], ["fere", "nt"], ["坚持", "以"], ["ur", "ance"], ["av", "al"], ["的", "前"], ["活", "跃"], ["▁ra", "ised"], ["▁team", "s"], ["协", "定"], ["l", "s"], ["主", "教"], ["▁exper", "ts"], ["人", "生"], ["▁st", "orm"], ["▁As", "ia"], ["▁indic", "ate"], ["标", "签"], ["▁set", "tle"], ["诈", "骗"], ["聚", "集"], ["R", "C"], ["V", "D"], ["民", "国"], ["历史", "的"], ["▁bar", "ri"], ["▁profession", "als"], ["之", "後"], ["期", "刊"], ["獲", "得"], ["▁r", "andom"], ["or", "a"], ["确", "实"], ["的", "患者"], ["▁cl", "im"], ["▁cho", "ices"], ["▁c", "ognitive"], ["▁o", "ption"], ["▁partic", "les"], ["考虑", "到"], ["▁belief", "s"], ["▁p", "ric"], ["ult", "ure"], ["氛", "围"], ["就是", "要"], ["科学", "发展"], ["东", "南"], ["is", "ation"], ["ir", "ation"], ["▁nut", "rition"], ["主", "流"], ["利益", "的"], ["▁wor", "ry"], ["▁accur", "ate"], ["ers", "e"], ["▁air", "craft"], ["▁collect", "ed"], ["▁l", "ies"], ["▁period", "s"], ["充分", "利用"], ["A", "nt"], ["用", "地"], ["党的十八大", "以来"], ["遊", "戲"], ["▁treat", "ments"], ["c", "king"], ["▁E", "gypt"], ["▁nuc", "lear"], ["▁M", "iss"], ["▁s", "ides"], ["减", "排"], ["\b", "\u0006"], ["机器", "学习"], ["ose", "ph"], ["▁L", "ab"], ["作为", "一种"], ["P", "E"], ["伙", "伴"], ["ak", "s"], ["▁sustain", "able"], ["▁H", "IV"], ["压", "缩"], ["不仅", "仅"], ["人", "身"], ["▁react", "ion"], ["研究", "成果"], ["负责", "人"], ["类", "的"], [":▁", "“"], ["经济", "发展的"], ["ic", "ing"], ["今", "后"], ["▁ro", "ots"], ["五", "个"], ["▁impact", "s"], ["什么", "是"], ["▁famil", "iar"], ["标", "识"], ["▁Fran", "c"], ["▁art", "ist"], ["d", "ec"], ["d", "uring"], ["▁dang", "erous"], ["有关", "的"], ["还", "需要"], ["它们", "的"], ["▁J", "ournal"], ["金融", "危机"], ["▁respons", "es"], ["N", "orth"], ["▁c", "opy"], ["善", "于"], ["河", "北"], ["▁c", "ris"], ["l", "ig"], ["▁I", "t"], ["c", "her"], ["▁Z", "eal"], ["结", "算"], ["引", "擎"], ["▁ex", "ecut"], ["▁L", "ear"], ["▁dis", "p"], ["模型", "的"], ["▁R", "ad"], ["pp", "ing"], ["扩", "散"], ["▁keep", "ing"], ["▁f", "aster"], ["病", "例"], ["产业", "结构"], ["it", "a"], ["is", "p"], ["J", "apan"], ["over", "ty"], ["el", "ess"], ["u", "ps"], ["订", "立"], ["▁un", "ivers"], ["理论", "与"], ["ul", "ating"], ["d", "r"], ["高", "职"], ["都", "可以"], ["▁cent", "uries"], ["▁instit", "utions"], ["▁pl", "ot"], ["▁C", "atholic"], ["▁inf", "ections"], ["开", "启"], ["▁tum", "or"], ["延", "长"], ["▁suggest", "ed"], ["▁p", "ip"], ["f", "riend"], ["ic", "an"], ["ob", "e"], ["定", "量"], ["工业", "互联网"], ["▁S", "ing"], ["几", "种"], ["被", "动"], ["▁increasing", "ly"], ["▁ann", "ounced"], ["算", "力"], ["正", "如"], ["▁not", "ed"], ["▁viol", "ence"], ["▁me", "at"], ["提", "前"], ["所", "述"], ["ren", "ce"], ["教学", "的"], ["了", "对"], ["▁state", "ment"], ["第", "八"], ["…", "▁"], ["▁am", "azing"], ["规", "章"], ["▁effic", "iency"], ["ing", "ly"], ["调", "度"], ["▁Ac", "ademy"], ["阿", "尔"], ["▁d", "iversity"], ["初", "级"], ["f", "aces"], ["z", "ym"], ["▁inc", "red"], ["f", "irst"], ["in", "stead"], ["变化", "的"], ["就", "要"], ["▁Pro", "v"], ["红", "军"], ["epend", "ent"], [")▁", "-▁"], ["日", "报"], ["et", "te"], ["的一", "项"], ["各", "方"], ["很", "少"], ["ir", "ds"], ["o", "om"], ["L", "E"], ["原", "料"], ["▁pre", "m"], ["推", "理"], ["認", "為"], ["▁he", "aring"], ["ex", "pected"], ["天", "文"], ["夫", "妻"], ["▁C", "ivil"], ["▁reg", "ional"], ["▁t", "aught"], ["Ch", "rist"], ["▁st", "em"], ["时", "空"], ["机", "理"], ["▁v", "s"], ["的", "性质"], ["▁M", "em"], ["▁neigh", "bor"], ["他", "們"], ["建", "模"], ["表", "述"], ["交", "付"], ["同", "比"], ["arl", "iament"], ["▁found", "ed"], ["作", "了"], ["朋", "友"], ["需求", "的"], ["▁poll", "ution"], ["▁creat", "es"], ["二", "者"], ["孔", "子"], ["的重要", "组成部分"], ["部", "长"], ["▁oper", "ating"], ["▁beg", "ins"], ["▁Rec", "ords"], ["Ad", "d"], ["▁st", "ars"], ["报", "表"], ["▁E", "mp"], ["▁leg", "isl"], ["界", "面"], ["▁ec", "osystem"], ["▁Zeal", "and"], ["▁a", "id"], ["天", "气"], ["研究", "者"], ["▁m", "ort"], ["f", "it"], ["西", "藏"], ["关", "心"], ["起", "点"], ["F", "C"], ["临", "时"], ["▁meas", "ured"], ["ol", "y"], ["▁Brit", "ain"], ["▁New", "s"], ["▁O", "ut"], ["家", "长"], ["不", "动"], ["中", "文"], ["ens", "es"], ["\",", "\""], ["已", "知"], ["第三", "方"], ["多元", "化"], ["s", "es"], ["主要", "的"], ["ov", "es"], ["疼", "痛"], ["删", "除"], ["家", "的"], ["态", "势"], ["▁m", "m"], ["火", "箭"], ["▁sy", "ndrome"], ["加", "剧"], ["既", "要"], ["g", "r"], ["读", "者"], ["▁ph", "ase"], ["受", "益"], ["企业", "和"], ["▁phen", "omen"], ["来", "实现"], ["▁net", "works"], ["智", "力"], ["监", "察"], ["开", "设"], ["▁h", "our"], ["op", "es"], ["周", "边"], ["▁st", "one"], ["H", "O"], ["▁Sp", "ec"], ["▁R", "el"], ["▁dis", "app"], ["最", "小"], ["故", "意"], ["发生", "在"], ["晶", "体"], ["▁pol", "y"], ["▁for", "t"], ["数", "值"], ["▁val", "id"], ["or", "ph"], ["▁mot", "ion"], ["Wh", "o"], ["▁signific", "ance"], ["对", "抗"], ["▁ad", "op"], ["▁compon", "ent"], ["创造", "了"], ["网", "上"], ["ic", "ious"], ["▁reve", "aled"], ["▁comp", "os"], ["诚", "信"], ["▁ro", "w"], ["村", "民"], ["既", "有"], ["跨", "境"], ["▁pr", "iv"], ["长", "度"], ["▁Re", "ferences"], ["不", "久"], ["k", "ins"], ["不", "但"], ["限", "度"], ["代", "替"], ["线", "路"], ["快速", "发展"], ["▁j", "oint"], ["h", "an"], ["ind", "er"], ["pt", "ions"], ["▁com", "pl"], ["落", "后"], ["P", "I"], ["▁real", "ized"], ["In", "ter"], ["程度", "的"], ["▁ch", "osen"], ["将", "在"], ["二", "次"], ["ot", "o"], ["ant", "ed"], ["期", "望"], ["or", "ter"], ["上", "是"], ["ist", "an"], ["▁dou", "ble"], ["ch", "ing"], ["ay", "ing"], ["和", "应用"], ["Ex", "ample"], ["网络", "的"], ["cul", "es"], ["建", "築"], ["街", "道"], ["▁profess", "or"], ["he", "lp"], ["▁divid", "ed"], ["n", "p"], ["▁f", "ine"], ["数", "额"], ["▁fru", "its"], ["的", "存在"], ["▁def", "ic"], ["▁associ", "ation"], ["S", "uch"], ["可", "再生"], ["▁dep", "ending"], ["I", "G"], ["领", "先"], ["落", "地"], ["▁b", "rown"], ["年", "轻"], ["颜", "色"], ["高", "温"], ["二氧化", "碳"], ["l", "oc"], ["ell", "s"], [":", "《"], ["F", "ig"], ["rast", "ructure"], ["习近平", "新时代中国特色社会主义思想"], ["M", "ean"], ["负", "面"], ["已经", "成为"], ["▁clear", "ly"], ["退", "出"], ["生", "涯"], ["方式", "的"], ["农业", "生产"], ["▁n", "erv"], ["▁fre", "edom"], ["老", "年"], ["▁T", "est"], ["矩", "阵"], ["的", "现象"], ["大", "致"], ["▁P", "acific"], ["极", "端"], ["▁re", "new"], ["的", "范围"], ["剩", "余"], ["tain", "ing"], ["变", "异"], ["院", "士"], ["库", "存"], ["▁", ","], ["rol", "og"], ["ic", "ations"], ["顾", "客"], ["光", "伏"], ["和", "实践"], ["在", "不同"], ["oc", "c"], ["▁veh", "icle"], ["▁occur", "red"], ["▁m", "al"], ["L", "iving"], ["▁L", "ibrary"], ["k", "es"], ["▁sec", "ure"], ["當", "時"], ["简", "介"], ["▁girl", "s"], ["▁dog", "s"], ["st", "yle"], ["指", "引"], ["兴", "起"], ["▁l", "oved"], ["缺", "少"], ["▁desp", "ite"], ["▁fil", "es"], ["典型", "的"], ["Res", "earch"], ["在", "新"], ["部门", "的"], ["首", "要"], ["the", "ast"], ["广", "州"], ["▁spirit", "ual"], ["境", "内"], ["g", "al"], ["▁chemical", "s"], ["的", "第一"], ["管", "制"], ["▁perspect", "ives"], ["▁fasc", "inating"], ["直", "观"], ["▁en", "able"], ["▁elect", "rical"], ["人", "对"], ["在", "全球"], ["意义", "上"], ["意", "图"], ["特异", "性"], ["▁mus", "e"], ["韩", "国"], ["子", "女"], ["单", "个"], ["很", "快"], ["▁Div", "ision"], ["▁repl", "aced"], ["▁ex", "ternal"], ["尽", "量"], ["res", "pect"], ["▁part", "ies"], ["外部", "链接"], ["▁re", "b"], ["分", "支"], ["▁star", "ts"], ["的", "所有"], ["▁sett", "ings"], ["發", "展"], ["est", "ed"], ["▁Cl", "ub"], ["I", "A"], ["n", "es"], ["开", "辟"], ["▁fl", "oor"], ["降低", "了"], ["▁kn", "ew"], ["型", "的"], ["▁d", "ra"], ["U", "p"], ["▁ext", "ract"], ["W", "orld"], ["▁br", "ight"], ["较", "少"], ["体系", "建设"], ["▁cal", "c"], ["▁O", "ne"], ["▁add", "ing"], ["▁res", "idents"], ["起", "来的"], ["▁T", "or"], ["化", "石"], ["iction", "ary"], ["联", "动"], ["疗", "法"], ["▁H", "ill"], ["类", "别"], ["▁dis", "s"], ["不", "需要"], ["▁Ang", "el"], ["深化", "改革"], ["北京", "市"], ["▁open", "ing"], ["▁recogn", "ize"], ["ific", "ial"], ["该", "研究"], ["此", "类"], ["之", "为"], ["我们", "在"], ["▁In", "ternet"], ["We", "b"], ["缩", "小"], ["Ret", "rieved"], ["cy", "cl"], ["▁w", "aters"], ["ov", "iet"], ["法", "学"], ["建立", "健全"], ["教学", "内容"], ["组成", "的"], ["工作", "者"], ["▁pract", "ical"], ["广", "阔"], ["最", "重要的"], ["▁sm", "art"], ["综合", "征"], ["不", "应"], ["的", "时代"], ["▁w", "estern"], ["百分", "点"], ["e", "ff"], ["专", "用"], ["ot", "ed"], ["民法", "典"], ["和", "分析"], ["if", "orm"], ["▁ke", "pt"], ["br", "idge"], ["还", "原"], ["so", "ft"], ["民", "國"], ["A", "re"], ["由", "於"], ["▁att", "ribut"], ["▁mor", "ning"], ["b", "ra"], ["▁manag", "ed"], ["▁G", "rand"], ["oun", "ter"], ["▁fac", "ilities"], ["▁organ", "ic"], ["▁just", "ice"], ["▁c", "raft"], ["能", "耗"], ["全", "社会"], ["▁Russ", "ian"], ["i", "ro"], ["▁compet", "ition"], ["▁P", "e"], ["▁proced", "ure"], ["并", "对"], ["社会主义", "核心"], ["t", "op"], ["依赖", "于"], ["▁perspect", "ive"], ["▁f", "irm"], ["分别", "为"], ["▁tra", "ditions"], ["上市", "公司"], ["半", "导体"], ["▁Wh", "ite"], ["季", "度"], ["▁run", "s"], ["▁ne", "ur"], ["英", "雄"], ["ush", "ing"], ["到", "底"], ["广泛", "的"], ["跨", "越"], ["▁disc", "overy"], ["电", "极"], ["产业", "的"], ["Un", "iversity"], ["能", "在"], ["▁s", "en"], ["▁er", "a"], ["▁represent", "ed"], ["T", "A"], ["▁R", "ock"], ["▁T", "exas"], ["英", "文"], ["云", "南"], ["ke", "ep"], ["变", "换"], ["常", "态"], ["▁ind", "ex"], ["▁Th", "omas"], ["进", "化"], ["▁nutri", "ents"], ["\u0007", "\u0006"], ["▁pur", "poses"], ["h", "av"], ["生", "育"], ["▁S", "he"], ["▁const", "ant"], ["奧", "林匹克"], ["G", "et"], ["学生的", "学习"], ["R", "el"], ["那", "样"], ["n", "ut"], ["▁program", "ming"], ["▁forest", "s"], ["el", "ing"], ["om", "in"], ["附", "加"], ["阻", "碍"], ["长", "远"], ["着", "眼"], ["这", "次"], ["▁Sp", "ace"], ["▁S", "l"], ["D", "S"], ["▁advant", "age"], ["零", "售"], ["▁Comm", "ission"], ["一", "轮"], ["结构", "和"], ["ab", "il"], ["受", "害"], ["▁high", "light"], ["希", "腊"], ["▁ex", "change"], ["规定", "了"], ["明", "了"], ["▁collabor", "ation"], ["▁st", "ages"], ["创新", "的"], ["▁char", "ge"], ["光", "谱"], ["可", "视"], ["B", "el"], ["垂", "直"], ["▁comput", "ers"], ["▁w", "alls"], ["et", "erm"], ["▁ph", "one"], ["ab", "its"], ["▁sp", "end"], ["放", "弃"], ["▁Se", "a"], ["▁b", "ud"], ["对", "立"], ["阶段", "的"], ["几", "年"], ["▁f", "ab"], ["行政", "区"], ["结合", "起来"], ["▁tox", "ic"], ["▁interact", "ions"], ["▁int", "ended"], ["接", "入"], ["广", "播"], ["劳", "务"], ["▁Man", "agement"], ["复", "习"], ["▁Carol", "ina"], ["风险", "的"], ["明确", "了"], ["▁re", "in"], ["▁affect", "s"], ["▁s", "now"], ["it", "t"], ["in", "ity"], ["至关", "重要"], ["d", "on"], ["▁part", "ners"], ["▁A", "ward"], ["方法", "和"], ["社", "會"], ["▁t", "alking"], ["▁respons", "ibility"], ["为", "主要"], ["中", "山"], ["资产", "阶级"], ["L", "S"], ["二", "年"], ["L", "ast"], ["▁cor", "respond"], ["演", "出"], ["▁lay", "ers"], ["人类", "社会"], ["▁good", "s"], ["r", "un"], ["肠", "道"], ["it", "ness"], ["收", "购"], ["▁Soc", "ial"], [",▁", "("], ["的", "外"], ["对", "学生"], ["级", "别"], ["▁inflamm", "ation"], ["▁G", "ames"], ["C", "N"], ["im", "a"], ["▁C", "ast"], ["▁jo", "in"], ["扎", "实"], ["小", "于"], ["▁disc", "rim"], ["▁interest", "ed"], ["▁s", "udden"], ["包", "容"], ["▁behavi", "ors"], ["征", "程"], ["▁M", "iddle"], ["简", "化"], ["剂", "量"], ["▁see", "k"], ["inc", "re"], ["机构", "的"], ["表现", "在"], ["对", "待"], ["v", "ol"], ["ad", "s"], ["▁opt", "im"], ["W", "here"], ["现", "有的"], ["▁mount", "ain"], ["D", "R"], ["plic", "ated"], ["▁T", "er"], ["r", "at"], ["ult", "ing"], ["彼", "此"], ["嵌", "入"], ["▁res", "il"], ["高", "达"], ["ig", "an"], ["总", "是"], ["▁main", "ly"], ["Y", "es"], ["▁d", "ream"], ["ig", "ital"], ["▁flu", "id"], ["启", "发"], ["个性", "化"], ["▁m", "er"], ["x", "ts"], ["效", "能"], ["▁g", "od"], ["C", "re"], ["vent", "ions"], ["人民", "代表大会"], ["▁T", "imes"], ["的", "理解"], ["取", "向"], ["当", "中"], ["re", "al"], ["u", "ke"], ["▁Sm", "ith"], ["▁support", "ed"], ["全", "民"], ["质量", "和"], ["创新", "能力"], ["种", "子"], ["电", "解"], ["ten", "ance"], ["下", "面"], ["▁most", "ly"], ["(", "▁"], ["并", "通过"], ["L", "ess"], ["u", "ing"], ["▁mon", "itoring"], ["▁sol", "ve"], ["了一", "系列"], ["▁I", "II"], ["时", "刻"], ["的", "定义"], ["▁max", "imum"], ["走", "出"], ["▁ph", "ilosoph"], ["▁med", "ium"], ["管理", "体系"], ["习近平", "同志"], ["Q", "L"], ["或", "其他"], ["擔", "任"], ["▁gener", "ate"], ["mean", "ing"], ["汉", "语"], ["检", "索"], ["A", "lex"], ["es", "is"], ["▁inj", "uries"], ["梳", "理"], ["困", "境"], ["建立", "在"], ["▁show", "ing"], ["▁S", "im"], ["▁S", "k"], ["▁s", "alt"], ["▁design", "s"], ["M", "c"], ["中", "断"], ["▁P", "an"], ["▁rel", "ax"], ["▁T", "o"], ["D", "avid"], ["▁A", "rab"], ["reat", "ment"], ["▁P", "arliament"], ["▁she", "l"], ["R", "T"], ["至", "于"], ["▁vict", "im"], ["▁B", "ook"], ["▁a", "x"], ["又", "是"], ["定", "律"], ["▁un", "expected"], ["ad", "y"], ["F", "S"], ["am", "ental"], ["M", "r"], ["cl", "aim"], ["住", "宅"], ["▁fact", "s"], ["▁tr", "uth"], ["▁su", "itable"], ["i", "at"], ["a", "o"], ["▁fl", "at"], ["第二", "个"], ["未成", "年人"], ["脉", "冲"], ["A", "ustral"], ["▁def", "e"], ["病", "的"], ["▁appoint", "ed"], ["学", "说"], ["离", "婚"], ["常", "委会"], ["舞", "蹈"], ["耕", "地"], ["个", "百分点"], ["吸", "附"], ["的", "位置"], ["atur", "ally"], ["▁harm", "ful"], ["aw", "a"], ["▁shap", "es"], ["Am", "ong"], ["C", "urrent"], ["创", "设"], ["率", "的"], ["▁rec", "on"], ["解决", "问题"], ["▁ch", "ain"], ["巴", "黎"], ["建筑", "物"], ["設", "計"], ["▁Found", "ation"], ["▁recogn", "ized"], ["▁se", "ed"], ["re", "du"], ["▁un", "known"], ["im", "agine"], ["V", "ID"], ["诞", "生"], ["clus", "ive"], ["▁could", "n"], ["超", "声"], ["转型", "升级"], ["▁our", "selves"], ["A", "ut"], ["om", "er"], ["▁excell", "ent"], ["▁we", "alth"], ["▁you", "th"], ["等", "多"], ["▁landsc", "ape"], ["▁job", "s"], ["▁kind", "s"], ["T", "ake"], ["b", "ody"], ["htt", "ps"], ["it", "ivity"], ["ish", "op"], ["致力", "于"], ["st", "one"], ["▁r", "ural"], ["act", "s"], ["▁d", "ie"], ["▁l", "ic"], ["等", "因素"], ["增", "多"], ["▁turn", "s"], ["开", "创"], ["S", "te"], ["學", "校"], ["▁N", "A"], ["知", "名"], ["▁th", "in"], ["▁f", "if"], ["ill", "a"], ["▁potential", "ly"], ["依法治", "国"], ["ris", "on"], ["系", "統"], ["可", "在"], ["P", "T"], ["传", "导"], ["命", "题"], ["if", "ferent"], ["ific", "ations"], ["▁proced", "ures"], ["▁Sc", "ott"], ["上", "看"], ["介", "质"], ["▁w", "aves"], ["脱", "离"], ["电", "阻"], ["▁C", "am"], ["年", "在"], ["▁ph", "r"], ["▁k", "il"], ["▁ass", "ign"], ["开", "关"], ["▁help", "ful"], ["ut", "y"], ["▁rel", "ative"], ["武", "汉"], ["静", "态"], ["▁promot", "ing"], ["ell", "ed"], ["文", "獻"], ["▁guid", "ance"], ["▁cap", "able"], ["期", "货"], ["迫", "切"], ["发现", "了"], ["▁ide", "al"], [":", "▁("], ["限", "于"], ["▁orig", "inally"], ["▁wa", "it"], ["us", "ually"], ["▁Ital", "ian"], ["製", "作"], ["▁D", "i"], ["以", "外"], ["回", "到"], ["德", "育"], ["r", "ors"], ["其", "在"], ["▁f", "rag"], ["优", "惠"], ["p", "et"], ["o", "ir"], ["▁Eng", "ine"], ["尺", "度"], ["if", "ies"], ["▁caus", "ing"], ["本", "站"], ["ast", "y"], ["▁redu", "ction"], ["am", "ing"], ["报", "酬"], ["舆", "论"], ["离", "不开"], ["时间", "的"], ["双", "重"], ["感", "到"], ["东", "方"], ["持", "有"], ["▁r", "an"], ["清", "算"], ["思想", "的"], ["中的", "应用"], ["不", "存在"], ["he", "im"], ["onom", "y"], ["参", "见"], ["班", "牙"], ["西", "班牙"], ["IS", "BN"], ["从", "严"], ["不仅", "是"], ["▁he", "ro"], ["浪", "费"], ["自然", "科学"], ["▁W", "ild"], ["▁l", "ots"], ["▁tru", "ly"], ["处", "分"], ["激", "烈"], ["▁ab", "ilities"], ["r", "ate"], ["專", "輯"], ["C", "ent"], ["▁serv", "es"], ["d", "f"], ["▁sat", "is"], ["▁se", "at"], ["!", "\""], ["g", "ely"], ["细", "化"], ["纠", "正"], ["▁sens", "itive"], ["延", "迟"], ["前", "者"], ["图书", "馆"], ["▁co", "al"], ["▁w", "et"], ["▁ob", "s"], ["▁aim", "ed"], ["w", "a"], ["B", "ar"], ["▁n", "or"], ["▁sc", "ore"], ["ro", "gen"], ["▁veh", "icles"], ["经济", "体"], ["se", "x"], ["▁sign", "ed"], ["幅", "度"], ["O", "L"], ["▁extrem", "e"], ["▁for", "ced"], ["奧林匹克", "運動會"], ["▁M", "ad"], ["f", "ig"], ["est", "ion"], ["▁concent", "ration"], ["f", "ish"], ["月", "球"], ["▁b", "an"], ["▁ne", "ut"], ["▁Comm", "it"], ["▁crit", "ic"], ["▁Col", "umb"], ["罗", "马"], ["开", "拓"], ["最高", "人民法院"], ["n", "on"], ["基", "准"], ["▁p", "il"], ["地", "点"], ["az", "z"], ["enn", "y"], ["▁per", "man"], ["\"", ","], ["l", "ines"], ["水", "利"], ["各", "方面"], ["陷", "入"], ["中", "介"], ["▁d", "ensity"], ["▁dr", "ink"], ["会", "导致"], ["便", "于"], ["命运", "共同体"], ["T", "ime"], ["▁test", "ed"], ["ap", "h"], ["凸", "显"], ["和", "经济"], ["不", "平衡"], ["高", "水平"], ["的", "实践"], ["可", "行"], ["燃", "烧"], ["▁S", "T"], ["ion", "e"], ["ap", "es"], ["J", "ames"], ["水", "的"], ["▁c", "atch"], ["▁t", "ips"], ["都", "能"], ["▁rou", "te"], ["▁Medic", "ine"], ["争", "取"], ["▁mark", "ed"], ["G", "A"], ["煤", "炭"], ["史", "上"], ["▁sat", "ell"], ["▁tr", "ial"], ["办公", "室"], ["安", "徽"], ["c", "ou"], ["▁R", "obert"], ["供给", "侧"], ["C", "M"], ["▁D", "on"], ["▁vit", "amin"], ["H", "T"], ["一", "名"], ["as", "ive"], ["ult", "ane"], ["较", "多"], ["此", "次"], ["▁strong", "er"], ["▁emer", "gency"], ["要", "把"], ["这", "也是"], ["he", "t"], ["se", "m"], ["锻", "炼"], ["▁", "ign"], ["l", "ers"], ["介绍", "了"], ["▁t", "un"], ["发展", "战略"], ["ans", "ion"], ["st", "ood"], ["液", "体"], ["ub", "lished"], ["▁B", "as"], ["le", "ts"], ["理", "事"], ["收", "缩"], ["制度", "和"], ["相", "适应"], ["耦", "合"], ["H", "S"], ["—▁▁", "—▁▁"], ["est", "yle"], ["▁G", "overnment"], ["营", "业"], ["申", "报"], ["在", "全国"], ["利", "亚"], ["等", "多种"], ["▁T", "re"], ["▁dep", "th"], ["▁along", "side"], ["R", "ef"], ["率", "先"], ["要求", "的"], ["▁obtain", "ed"], ["▁k", "m"], ["▁mix", "ed"], ["源", "于"], ["聚", "合"], ["情", "景"], ["定", "价"], ["▁writ", "ers"], ["法", "和"], ["▁St", "e"], ["p", "ass"], ["新", "生"], ["这", "两个"], ["初", "中"], ["▁T", "ri"], ["研究", "表明"], ["元", "件"], ["的", "实际"], ["电", "信"], ["▁w", "el"], ["▁or", "al"], ["▁impro", "ving"], ["▁new", "sp"], ["实现", "中华民族伟大复兴"], ["▁list", "ed"], ["▁see", "king"], ["▁Val", "ley"], ["▁remain", "ing"], ["个", "人的"], ["可再生", "能源"], ["▁wh", "om"], ["▁tra", "dition"], ["维", "修"], ["i", "h"], ["安全", "的"], ["▁under", "lying"], ["▁ex", "cept"], ["招", "生"], ["▁D", "an"], ["▁loc", "ations"], ["▁Is", "lam"], ["▁interact", "ion"], ["or", "i"], ["S", "et"], ["无", "限"], ["ste", "in"], ["▁R", "ead"], ["▁doc", "uments"], ["▁g", "ar"], ["▁su", "c"], ["▁hor", "se"], ["▁writ", "er"], ["st", "udents"], ["▁L", "and"], ["全面", "建成"], ["极", "为"], ["组织", "和"], ["雷", "达"], ["准", "入"], ["▁mus", "ical"], ["W", "est"], ["st", "ances"], ["光", "纤"], ["D", "ata"], ["▁c", "ards"], ["▁controll", "ed"], ["er", "ies"], ["院", "长"], ["智慧", "城市"], ["▁d", "aughter"], ["▁result", "ing"], ["新", "一代"], ["▁say", "ing"], ["▁", "||"], ["。", "("], ["▁sign", "als"], ["erv", "ing"], ["▁w", "alking"], ["警", "察"], ["▁ha", "z"], ["▁platform", "s"], ["ohns", "on"], ["t", "ure"], ["M", "ark"], ["行政", "管理"], ["揭示", "了"], ["▁re", "n"], ["▁ext", "ended"], ["▁demonstr", "ate"], ["充", "电"], ["沉", "积"], ["电", "脑"], ["▁vacc", "ine"], ["▁found", "ation"], ["行业", "的"], ["▁D", "el"], ["m", "ain"], ["是", "为了"], ["▁Techn", "ology"], ["▁p", "le"], ["▁subst", "ant"], ["▁sc", "ri"], ["j", "o"], ["▁acc", "omp"], ["▁di", "am"], ["过", "于"], ["L", "a"], ["党的", "十九"], ["lish", "ing"], ["同", "時"], ["治", "党"], ["数字", "技术"], ["更", "有"], ["舞", "台"], ["▁d", "oll"], ["▁S", "y"], ["im", "my"], ["el", "lect"], ["▁C", "amp"], ["▁introdu", "ction"], ["the", "tic"], ["意", "愿"], ["站", "在"], ["▁mach", "ines"], ["▁P", "ower"], ["M", "em"], ["▁H", "enry"], ["▁exerc", "ises"], ["本", "土"], ["▁Or", "gan"], ["▁E", "lect"], ["经营", "者"], ["rain", "ing"], ["遭", "受"], ["演", "唱"], ["校", "长"], ["深", "远"], ["▁Par", "is"], ["▁rapid", "ly"], ["司", "令"], ["▁concer", "n"], ["ear", "ing"], ["一", "流"], ["b", "ar"], ["el", "i"], ["美", "丽"], ["E", "F"], ["E", "arly"], ["中", "期"], ["▁I", "reland"], ["自治", "区"], ["▁te", "xts"], ["▁A", "I"], ["s", "ocial"], ["相", "对于"], ["▁Char", "les"], ["▁m", "ac"], ["c", "reating"], ["变", "迁"], ["▁St", "and"], ["▁gu", "itar"], ["ou", "ts"], ["本", "章"], ["▁Fran", "k"], ["▁dec", "ide"], ["D", "L"], ["延", "续"], ["血", "糖"], ["事业", "单位"], ["意义", "的"], ["um", "in"], ["c", "al"], ["▁dr", "inking"], ["▁f", "iction"], ["为", "止"], ["he", "nt"], ["▁ch", "art"], ["▁V", "ictor"], ["▁ar", "ms"], ["▁ed", "ge"], ["om", "pl"], ["▁anc", "est"], ["也", "将"], ["明确", "的"], ["率", "为"], ["纲", "要"], ["▁hous", "es"], ["学生", "对"], ["盈", "利"], ["▁o", "d"], ["研", "讨"], ["自然", "资源"], ["社会主义", "市场经济"], ["i", "ological"], ["stit", "ution"], ["▁br", "idge"], ["▁aud", "ience"], ["恶", "性"], ["Th", "ose"], ["上", "有"], ["加", "坡"], ["▁sw", "im"], ["从", "中"], ["▁hand", "le"], ["Cons", "ider"], ["ract", "ice"], ["▁fin", "ished"], ["ipp", "ing"], ["▁support", "ing"], ["▁D", "ef"], ["总", "之"], ["离", "开"], ["il", "ation"], ["承", "载"], ["实", "务"], ["回", "顾"], ["具有", "重要"], ["▁act", "s"], ["▁not", "iced"], ["w", "ord"], ["S", "am"], ["▁E", "v"], ["th", "us"], ["▁typ", "ical"], ["ed", "uc"], ["um", "es"], ["设计", "和"], ["▁f", "le"], ["▁bi", "ological"], ["▁D", "ec"], ["▁pl", "ate"], ["▁commun", "icate"], ["▁s", "ort"], ["农", "户"], ["小康", "社会"], ["硕", "士"], ["腺", "癌"], ["W", "ater"], ["的", "效果"], ["比", "特"], ["t", "ry"], ["▁experim", "ents"], ["▁tell", "s"], ["的", "本质"], ["的", "空间"], ["列", "入"], ["▁hyp", "othes"], ["▁consist", "ent"], ["的", "意义"], ["参", "照"], ["▁lead", "ership"], ["原", "本"], ["▁decre", "ase"], ["封", "闭"], ["欢", "迎"], ["▁port", "ion"], ["▁", "+"], ["转变", "为"], ["▁att", "acks"], ["r", "us"], ["b", "efore"], ["here", "d"], ["江", "西"], ["▁capt", "ure"], ["▁mess", "ages"], ["▁ar", "ray"], ["尽", "快"], ["彰", "显"], ["Brit", "ish"], ["用", "水"], ["節", "目"], ["▁Sc", "ot"], ["污", "水"], ["阿", "拉"], ["▁instrum", "ents"], ["▁fl", "ight"], ["过", "错"], ["F", "orm"], ["%", ")▁"], ["u", "ous"], ["生命", "周期"], ["▁F", "orm"], ["m", "es"], ["B", "en"], ["ot", "ing"], ["▁F", "in"], ["起", "义"], ["消", "化"], ["高", "原"], ["无", "关"], ["選", "舉"], ["ian", "o"], ["▁vis", "ible"], ["H", "istor"], ["▁insp", "ired"], ["▁dou", "b"], ["呈现", "出"], ["▁he", "rit"], [")", "▁▁"], ["▁con", "clud"], ["▁n", "ations"], ["oss", "ible"], ["on", "ia"], ["追", "究"], ["▁l", "ose"], ["指", "向"], ["大", "批"], ["书", "中"], ["消", "灭"], ["▁narr", "atives"], ["应用", "的"], ["中小", "学"], ["▁young", "er"], ["d", "ata"], ["▁c", "ert"], ["解决", "了"], ["▁L", "ord"], ["组", "建"], ["化", "工"], ["比", "賽"], ["▁f", "oss"], ["ag", "ues"], ["权", "和"], ["每", "天"], ["增长", "的"], ["解放", "军"], ["▁w", "ants"], ["四", "大"], ["血", "清"], ["污染", "物"], ["一", "位"], ["▁c", "m"], ["南", "方"], ["操作", "系统"], ["▁second", "ary"], ["s", "ug"], ["ct", "ic"], ["or", "row"], ["▁cred", "it"], ["▁am", "b"], ["n", "ight"], ["P", "aul"], ["r", "ust"], ["▁sk", "y"], ["▁t", "ried"], ["er", "b"], ["四", "年"], ["▁sub", "s"], ["▁com", "ment"], ["D", "M"], ["坐", "标"], ["▁rec", "overy"], ["践", "行"], ["大", "报告"], ["\b", "\u0005"], ["治", "国"], ["▁in", "ternet"], ["L", "A"], ["ise", "ase"], ["导", "航"], ["全面", "建设"], ["的", "各种"], ["▁grow", "n"], ["▁on", "going"], ["▁adv", "ice"], ["▁gre", "w"], ["l", "og"], ["▁g", "ained"], ["▁t", "aste"], ["on", "al"], ["普", "惠"], ["进行", "分析"], ["出", "于"], ["检察", "院"], ["▁c", "ooking"], ["h", "i"], ["caus", "ing"], ["▁arr", "ived"], ["扮", "演"], ["ven", "ue"], ["ib", "eral"], ["多", "媒体"], ["▁D", "ata"], ["▁g", "un"], ["▁mov", "ie"], ["▁c", "art"], ["o", "il"], ["金融", "市场"], ["▁U", "N"], ["赢", "得"], ["th", "rop"], ["降", "解"], ["深度", "融合"], ["的", "建设"], ["▁sh", "if"], ["变", "形"], ["$", "$"], ["年", "以来"], ["上海", "市"], ["ain", "e"], ["此", "后"], ["集", "聚"], ["合同", "的"], ["以", "为"], ["和", "非"], ["持", "久"], ["▁int", "elligence"], ["▁p", "air"], ["▁d", "ive"], ["遭", "到"], ["▁mole", "cules"], ["▁d", "im"], ["频", "繁"], ["中国", "科学院"], ["yl", "van"], ["工作", "人员"], ["终", "身"], ["生产", "经营"], ["B", "I"], ["igh", "ter"], ["本", "课程"], ["▁all", "erg"], ["缺", "点"], ["onom", "ic"], ["form", "er"], ["▁w", "is"], ["澳", "大利"], ["神经", "网络"], ["入", "侵"], ["▁m", "ere"], ["▁slow", "ly"], ["▁S", "ub"], ["缩", "短"], ["▁R", "ob"], ["▁der", "ived"], ["g", "ent"], ["▁function", "al"], ["▁N", "orthern"], ["学习", "和"], ["rem", "e"], ["▁sc", "ene"], ["▁h", "idden"], ["否", "定"], ["▁Min", "ister"], ["占", "据"], ["筛", "选"], ["性", "疾病"], ["▁st", "ret"], ["s", "en"], ["互", "通"], ["》", ":"], ["又", "有"], ["机", "的"], ["▁relig", "ion"], ["T", "R"], ["▁acc", "ompl"], ["但", "由于"], ["时间", "内"], ["▁pain", "ting"], ["▁album", "s"], ["g", "s"], ["小", "结"], ["▁techn", "ical"], ["常", "用的"], ["P", "U"], ["▁inter", "vention"], ["独特", "的"], ["注", "射"], ["ter", "y"], ["at", "uring"], ["前", "后"], ["Sec", "ond"], ["▁mem", "bran"], ["▁ens", "ures"], ["▁ed", "ition"], ["早", "在"], ["在", "经济"], ["h", "at"], ["E", "lect"], ["k", "et"], ["自", "愿"], ["am", "ine"], ["心", "肌"], ["▁ab", "use"], ["发", "起"], ["论", "坛"], ["IS", "O"], ["er", "als"], ["▁list", "en"], ["参与", "者"], ["产", "出"], ["章", "程"], ["▁a", "thlet"], ["▁happ", "y"], ["第", "九"], ["▁", "rough"], ["▁C", "are"], ["▁f", "ant"], ["L", "C"], ["z", "en"], ["泄", "露"], ["二", "级"], ["▁rec", "ycl"], ["步", "伐"], ["产业", "化"], ["的一", "般"], ["▁pregn", "ancy"], ["相", "關"], ["发", "的"], ["%", "、"], ["宗", "旨"], ["学", "派"], ["▁Su", "per"], ["逝", "世"], ["的", "部分"], ["▁mult", "i"], ["不同", "于"], ["兄", "弟"], ["十四", "五"], ["适当", "的"], ["N", "O"], ["ost", "ering"], ["讲", "解"], ["▁comp", "osition"], ["业", "态"], ["流", "转"], ["万", "吨"], ["金融", "服务"], ["▁T", "em"], ["▁ar", "ts"], ["对", "策"], ["v", "ision"], ["▁Emp", "ire"], ["ak", "ed"], ["Lear", "n"], ["才", "是"], ["美", "的"], ["▁mechan", "ism"], ["▁so", "le"], ["性", "地"], ["援", "助"], ["射", "线"], ["e", "ut"], ["▁vol", "unte"], ["诉讼", "法"], ["▁defin", "ition"], ["f", "ortunately"], ["▁st", "ick"], ["▁cur", "riculum"], ["▁wild", "life"], ["where", "as"], ["▁St", "ar"], ["c", "ut"], ["▁virt", "ual"], ["一", "下"], ["另", "一种"], ["id", "ae"], ["z", "ed"], ["综合", "性"], ["保", "密"], ["le", "an"], ["ro", "t"], ["▁tw", "ice"], ["创新", "创业"], ["的", "选择"], ["ut", "ional"], ["▁en", "zym"], ["▁Commit", "tee"], ["h", "op"], ["校", "友"], ["▁acc", "ident"], ["▁employ", "ed"], ["原", "告"], ["思政", "课"], ["北", "方"], ["面临", "着"], ["室", "内"], ["▁sw", "itch"], ["有", "力的"], ["教育", "教学"], ["诗", "歌"], ["▁wind", "ow"], ["▁U", "p"], ["▁Off", "ice"], ["D", "ec"], ["▁trans", "ition"], ["作", "為"], ["水", "稻"], ["▁In", "f"], ["al", "se"], ["isc", "o"], ["少数", "民族"], ["op", "ulation"], ["固", "体"], ["▁H", "el"], ["▁se", "lection"], ["忽", "略"], ["ld", "er"], ["塑", "料"], ["的", "总"], ["▁M", "r"], ["im", "p"], ["ash", "ion"], ["▁dr", "iving"], ["收", "到"], ["il", "i"], ["sp", "an"], ["成", "人"], ["d", "irect"], ["▁employ", "ees"], ["收", "支"], ["▁demonstr", "ated"], ["▁particip", "ate"], ["直", "至"], ["w", "an"], ["作", "曲"], ["顶", "层"], ["▁fund", "amental"], ["良", "性"], ["培养", "学生的"], ["▁child", "hood"], ["ap", "ed"], ["鉴", "别"], ["世界", "经济"], ["rese", "archers"], ["复", "苏"], ["高度", "重视"], ["的", "主体"], ["▁exist", "ence"], ["P", "s"], ["重", "的"], ["▁fl", "o"], ["▁V", "irginia"], ["▁g", "all"], ["留", "下"], ["V", "is"], ["M", "O"], ["▁prep", "are"], ["第四", "节"], ["治理", "能力"], ["均", "匀"], ["制", "定的"], ["以下", "几个"], ["▁S", "oviet"], ["社会", "科学"], ["sequ", "ent"], ["▁init", "ially"], ["全面", "发展"], ["n", "ce"], ["ic", "king"], ["H", "A"], ["▁innov", "ative"], ["▁not", "able"], ["▁Sou", "thern"], ["也", "为"], ["效率", "和"], ["r", "h"], ["d", "raw"], ["od", "ing"], ["af", "ety"], ["根本", "上"], ["短", "板"], ["的", "责任"], ["世界", "各国"], ["▁sp", "eaking"], ["Ch", "ildren"], ["ost", "ic"], ["in", "ux"], ["▁d", "in"], ["b", "an"], ["r", "ather"], ["chn", "ology"], ["平方", "公里"], ["景", "观"], ["▁Pl", "ay"], ["ri", "ze"], ["▁f", "ellow"], ["▁inc", "hes"], ["结果", "表明"], ["v", "oc"], ["▁s", "ick"], ["▁agricult", "ural"], ["▁inf", "ected"], ["▁vess", "els"], ["的", "话"], ["索", "引"], ["战略", "性"], ["陕", "西"], ["来源", "于"], ["▁creat", "ures"], ["成", "都"], ["▁ass", "istance"], ["▁instruct", "ions"], ["绘", "画"], ["作用", "的"], ["也", "能"], ["服", "務"], ["▁le", "af"], ["▁architect", "ure"], ["▁farm", "ers"], ["▁s", "end"], ["▁w", "ire"], ["▁gener", "ated"], ["▁w", "ave"], ["▁organ", "ized"], ["一", "家"], ["春", "秋"], ["源", "头"], ["发布", "的"], ["ric", "ts"], ["欧", "元"], ["ab", "ul"], ["ro", "vers"], ["▁miss", "ing"], ["境", "外"], ["资本", "市场"], ["动", "员"], ["ylvan", "ia"], ["H", "el"], ["Bl", "ack"], ["v", "ity"], ["愿", "意"], ["立", "体"], ["▁in", "ject"], ["D", "id"], ["es", "ter"], ["在此", "基础上"], ["万", "亿元"], ["]", "。"], ["▁eng", "aging"], [")", "("], ["▁pol", "ice"], ["▁ar", "my"], ["M", "R"], ["在", "美国"], ["▁un", "iversity"], ["▁sent", "ence"], ["越", "大"], ["▁per", "haps"], ["阻", "止"], ["▁p", "overty"], ["▁neighbor", "hood"], ["▁", "ic"], ["文", "书"], ["原", "有"], ["期", "待"], ["▁crop", "s"], ["▁bl", "ocks"], ["发", "动"], ["演", "进"], ["▁protect", "ed"], ["發", "現"], ["在", "对"], ["▁st", "yles"], ["之", "上"], ["▁the", "rm"], ["▁rat", "io"], ["缓", "慢"], ["▁", ":"], ["▁t", "all"], ["无", "需"], ["oles", "ter"], ["c", "hen"], ["▁P", "ost"], ["人们", "的"], ["排", "列"], ["省", "份"], ["心", "血管"], ["am", "ps"], ["导致", "的"], ["基本", "的"], ["成", "員"], ["]", "("], ["▁lar", "gely"], ["介", "入"], ["]", ",▁"], ["▁schol", "ars"], ["▁Olymp", "ics"], ["无", "形"], ["负", "荷"], ["真正", "的"], ["周", "年"], ["及", "其他"], ["▁over", "l"], ["界", "的"], ["▁recogn", "ition"], ["發", "行"], ["j", "i"], ["og", "rap"], ["▁breat", "h"], ["M", "in"], ["▁def", "ine"], ["or", "ous"], ["▁bound", "aries"], ["▁reg", "ulations"], ["▁elect", "ronic"], ["▁Cont", "rol"], ["▁pos", "itions"], ["▁dist", "ingu"], ["最", "多"], ["习", "题"], ["保", "健"], ["Cal", "ifornia"], ["▁sk", "ill"], ["ut", "er"], ["恶", "意"], ["前", "期"], ["对", "手"], ["▁c", "up"], ["所", "未"], ["薄", "弱"], ["每", "次"], ["奥", "林匹克"], ["as", "er"], ["抵", "抗"], ["病", "原"], ["▁express", "ed"], ["▁author", "ity"], ["▁inf", "rastructure"], ["▁administ", "ration"], ["▁every", "day"], ["基本", "上"], ["能够", "在"], ["获得", "的"], ["thes", "is"], ["sh", "ow"], ["农", "药"], ["▁agre", "ed"], ["Follow", "ing"], ["▁H", "uman"], ["ir", "us"], ["L", "ife"], ["▁sh", "ips"], ["荧", "光"], ["高", "考"], ["新", "加坡"], ["ost", "on"], ["▁herit", "age"], ["表", "征"], ["法律", "规定"], ["草", "案"], ["但", "其"], ["奖", "励"], ["严", "峻"], ["湖", "北"], ["com", "ing"], ["▁mat", "ters"], ["▁suc", "ceed"], ["老", "年人"], ["较", "强的"], ["▁pr", "ison"], ["▁detail", "ed"], ["弥", "补"], ["▁in", "ner"], ["▁pro", "port"], ["S", "ch"], ["经历", "了"], ["会", "上"], ["磁", "场"], ["黄", "金"], ["ad", "ium"], ["▁fac", "ing"], ["近", "期"], ["▁P", "o"], ["▁mass", "ive"], ["▁L", "ine"], ["本", "国"], ["党", "史"], ["两", "国"], ["▁F", "e"], ["▁feature", "d"], ["遥", "感"], ["ura", "cy"], ["at", "re"], ["国", "土"], ["储", "存"], ["▁custom", "ers"], ["th", "ose"], ["e", "ffect"], ["出", "售"], ["▁V", "ol"], ["▁div", "ision"], ["年", "起"], ["契", "约"], ["中国", "式"], ["▁cou", "ple"], ["ir", "al"], ["▁p", "ig"], ["D", "F"], ["▁p", "it"], ["台", "北"], ["流", "感"], ["资产", "的"], ["▁sequ", "ence"], ["▁view", "s"], ["在", "实际"], ["ra", "ce"], ["▁F", "ood"], ["特殊", "的"], ["oc", "yt"], ["▁t", "ro"], ["高", "压"], ["国际", "化"], ["ival", "ent"], ["▁entire", "ly"], ["广", "义"], ["▁ast", "ron"], ["cons", "ider"], ["完成", "了"], ["▁inst", "ruction"], ["▁h", "abits"], ["ffic", "ial"], ["永", "远"], ["D", "em"], ["残", "疾"], ["om", "ething"], ["建立", "起"], ["双", "向"], ["I", "dent"], ["偏", "差"], ["的", "条件"], ["作出", "了"], ["▁vari", "ables"], ["▁man", "ip"], ["▁strugg", "le"], ["h", "y"], ["专业", "的"], ["m", "ade"], ["ex", "p"], ["▁sold", "iers"], ["On", "ly"], ["随", "时"], ["元", "年"], ["g", "iving"], ["ide", "os"], ["打", "开"], ["美", "学"], ["▁n", "aturally"], ["▁administ", "r"], ["▁Ch", "icago"], ["称", "之为"], ["▁ind", "igenous"], ["草", "原"], ["▁dep", "artment"], ["▁s", "ell"], ["着", "重"], ["学生", "学习"], ["▁f", "ly"], ["科", "院"], ["h", "us"], ["oc", "ation"], ["In", "c"], ["an", "es"], ["▁we", "ap"], ["▁control", "s"], ["▁mole", "cular"], ["ip", "al"], ["▁b", "ones"], ["▁con", "ventional"], ["▁k", "it"], ["le", "ments"], ["▁n", "arrow"], ["智能", "制造"], ["▁B", "ank"], ["Th", "ough"], ["▁att", "end"], ["os", "ite"], ["工", "会"], ["战", "役"], ["关", "闭"], ["▁mill", "ions"], ["▁pric", "es"], ["很", "好"], ["▁f", "ell"], ["▁st", "reet"], ["语", "音"], ["基", "督"], ["是", "实现"], ["带", "宽"], ["本", "案"], ["突", "发"], ["要", "坚持"], ["IN", "G"], ["在", "这一"], ["▁int", "ers"], ["k", "g"], ["细", "节"], ["授", "予"], ["和", "数据"], ["提", "到"], ["▁call", "s"], ["▁Med", "ical"], ["▁W", "ith"], ["▁answ", "ers"], ["近", "日"], ["评", "审"], ["科学发展", "观"], ["水", "资源"], ["▁s", "ections"], ["▁M", "er"], ["保护", "的"], ["研究", "发现"], ["▁n", "urs"], ["B", "et"], ["▁a", "f"], ["C", "B"], ["重要的", "作用"], ["与", "之"], ["动力", "学"], ["人类", "的"], ["▁n", "ine"], ["合", "约"], ["资", "助"], ["An", "y"], ["ang", "er"], ["▁comprehens", "ive"], ["g", "ers"], ["是", "因为"], ["势", "力"], ["和", "创新"], ["教师", "在"], ["▁ac", "know"], ["is", "k"], ["▁sh", "ot"], ["▁apprec", "iate"], ["改变", "了"], ["▁invest", "ment"], ["▁draw", "ing"], ["初", "心"], ["会", "有"], ["做", "了"], ["en", "cing"], ["▁c", "overs"], ["k", "l"], ["▁des", "ired"], ["书", "法"], ["in", "ning"], ["月", "份"], ["C", "lick"], ["▁su", "fficient"], ["▁few", "er"], ["▁v", "ibr"], ["ot", "ype"], ["新", "华"], ["摘", "要"], ["第三", "人"], ["▁rev", "olution"], ["▁en", "em"], ["form", "ing"], ["▁W", "ork"], ["增值", "税"], ["▁cut", "ting"], ["ast", "ers"], ["O", "pen"], ["在", "一"], ["▁cons", "ult"], ["▁s", "ector"], ["要", "以"], ["与", "管理"], ["的", "网络"], ["▁feed", "back"], ["x", "ford"], ["▁seem", "ed"], ["▁serv", "ing"], ["col", "or"], ["志", "愿"], ["抗", "战"], ["▁tr", "ials"], ["▁conf", "ir"], ["Ex", "amples"], ["▁j", "ump"], ["▁J", "ud"], ["阶", "层"], ["君", "主"], ["▁circum", "stances"], ["▁int", "ake"], ["▁st", "ored"], ["v", "a"], ["ist", "ers"], ["所需", "的"], ["▁swe", "et"], ["R", "ev"], ["▁B", "udd"], ["▁gl", "uc"], ["f", "in"], ["▁represent", "ation"], ["r", "ument"], ["▁sim", "pl"], ["參考", "文獻"], ["▁r", "ub"], ["法律", "的"], ["改", "为"], ["▁convers", "ation"], ["产", "阶级"], ["▁m", "obile"], ["责任", "的"], ["热", "情"], ["结", "核"], ["和", "文化"], ["itud", "es"], ["▁dom", "in"], ["分辨", "率"], ["本", "人"], ["act", "ion"], ["▁B", "ill"], ["▁str", "ing"], ["▁Cent", "re"], ["▁sim", "ultane"], ["▁sc", "hem"], ["瓶", "颈"], ["▁k", "ill"], ["毫", "米"], ["▁success", "fully"], ["还", "能"], ["▁som", "ew"], ["t", "w"], ["全", "身"], ["发挥", "了"], ["▁inst", "rument"], ["▁st", "ands"], ["我", "的"], ["olester", "ol"], ["▁cent", "re"], ["▁f", "old"], ["▁b", "ond"], ["有", "益"], ["里", "的"], ["▁mon", "itor"], ["ind", "s"], ["▁me", "als"], ["进程", "中"], ["受", "理"], ["G", "eorge"], ["共产", "主义"], ["F", "L"], ["壮", "大"], ["变", "为"], ["▁p", "aid"], ["Mean", "while"], ["▁al", "ter"], ["格", "尔"], ["各", "族"], ["甲", "基"], ["已", "被"], ["对", "企业"], ["M", "arch"], ["▁surv", "ive"], ["▁ra", "ise"], ["影响", "的"], ["olit", "ical"], ["ac", "hers"], ["有", "望"], ["▁expl", "an"], ["鐵", "路"], ["al", "i"], ["实", "证"], ["极", "其"], ["Res", "ear"], ["▁evalu", "ate"], ["侦", "查"], ["过", "剩"], ["著作", "权"], ["V", "I"], ["▁co", "ff"], ["高等", "学校"], ["小", "行星"], ["▁lat", "est"], ["优", "良"], ["祖", "国"], ["运动", "的"], ["▁suff", "ering"], ["▁te", "en"], ["辅", "导"], ["紧", "张"], ["管理", "制度"], ["▁phot", "os"], ["映", "射"], ["▁v", "en"], ["▁transport", "ation"], ["\"▁", "|▁"], ["牺", "牲"], ["摩", "擦"], ["r", "ons"], ["▁eas", "tern"], ["om", "ic"], ["▁claim", "s"], ["超", "级"], ["▁reg", "ul"], ["▁b", "le"], ["▁m", "igr"], ["▁br", "ings"], ["稱", "為"], ["提", "倡"], ["▁prevent", "ion"], ["▁end", "ed"], ["重", "构"], ["ib", "l"], ["分", "组"], ["▁d", "ys"], ["M", "at"], ["u", "is"], ["较", "小"], ["▁m", "amm"], ["東", "京"], ["ns", "ylvania"], ["管理", "系统"], ["▁J", "ust"], ["▁en", "ds"], ["湿", "地"], ["基础设施", "建设"], ["▁t", "ur"], ["▁do", "or"], ["▁F", "lorida"], ["st", "ud"], ["▁no", "ise"], ["▁pers", "ist"], ["互", "补"], ["有关", "部门"], ["的", "世界"], ["▁b", "ill"], ["▁beaut", "y"], ["ich", "igan"], ["加", "深"], ["不确定", "性"], ["ro", "at"], ["涉及", "到"], ["中", "医"], ["的", "支持"], ["▁G", "ard"], ["te", "en"], ["Un", "fortunately"], ["接", "种"], ["▁ext", "ensive"], ["一", "套"], ["S", "ur"], ["▁pret", "ty"], ["▁B", "ig"], ["丝", "绸"], ["相", "继"], ["人们", "对"], ["术", "语"], ["签", "署"], ["实现", "的"], ["▁S", "qu"], ["▁s", "ed"], ["染色", "体"], ["▁us", "age"], ["发", "动机"], ["注意", "的是"], ["du", "e"], ["▁cl", "oud"], ["的", "观点"], ["还", "没有"], ["ellect", "ual"], ["最", "後"], ["旋", "转"], ["▁N", "ations"], ["it", "ative"], ["多样", "化"], ["所谓", "的"], ["▁expect", "ations"], ["▁B", "razil"], ["▁react", "ions"], ["就", "有"], ["并发", "症"], ["顺", "应"], ["F", "ind"], ["北", "部"], ["Comm", "un"], ["▁she", "ll"], ["▁agricult", "ure"], ["选", "取"], ["对象", "的"], ["w", "ould"], ["照", "片"], ["全面", "推进"], ["派", "遣"], ["ph", "one"], ["期", "間"], ["▁del", "iv"], ["零", "件"], ["▁I", "rish"], ["▁En", "ergy"], ["▁or", "g"], ["解决", "问题的"], ["境", "界"], ["b", "ox"], ["at", "us"], ["冷", "却"], ["是", "为"], ["▁pro", "pos"], ["▁hor", "iz"], ["▁br", "and"], ["con", "nect"], ["质", "的"], ["\"▁", "–▁"], ["▁p", "ray"], ["▁descri", "bes"], ["▁P", "eter"], ["管", "控"], ["f", "ts"], ["▁Sec", "ond"], ["▁(", "\""], ["▁rem", "ark"], ["代", "价"], ["革命", "的"], ["唯物", "主义"], ["公有", "制"], ["▁Ar", "ts"], [")", ";"], ["法", "庭"], ["发展的", "重要"], ["▁th", "orough"], ["l", "if"], ["iv", "ated"], ["▁l", "ymph"], ["O", "rig"], ["在", "该"], ["▁medic", "ations"], ["il", "ly"], ["国际", "贸易"], ["om", "ach"], ["▁M", "el"], ["摆", "脱"], ["▁b", "order"], ["▁focus", "es"], ["b", "a"], ["▁B", "ur"], ["建立", "的"], ["教育", "和"], ["阳", "性"], ["▁K", "e"], ["▁polit", "ics"], ["▁under", "stood"], ["这", "意味着"], ["▁hundred", "s"], ["l", "aw"], ["▁deep", "ly"], ["p", "age"], ["时", "效"], ["回", "应"], ["约", "为"], ["选", "用"], ["opp", "ing"], ["▁vers", "ions"], ["es", "h"], ["ul", "pt"], ["▁Russ", "ia"], ["▁achie", "ved"], ["作为", "一个"], ["▁St", "r"], ["▁H", "aw"], ["U", "R"], ["▁s", "od"], ["▁d", "ance"], ["去", "年"], ["uck", "y"], ["等", "技术"], ["iz", "er"], ["▁Bo", "ard"], ["▁Rev", "olution"], ["ri", "z"], ["ol", "i"], ["男", "性"], ["致", "使"], ["Ab", "out"], ["d", "a"], ["物", "价"], ["宏观", "经济"], ["ans", "as"], ["▁main", "tenance"], ["诸", "如"], ["迭", "代"], ["▁b", "ot"], ["▁man", "ner"], ["▁rep", "rodu"], ["体", "会"], ["不得", "不"], ["的", "非"], ["us", "ual"], ["▁conf", "idence"], ["E", "A"], ["▁A", "ust"], ["▁ad", "opt"], ["\"", ";"], ["qu", "ality"], [")", "("], ["t", "est"], ["的", "质量"], ["环境", "下"], ["温", "室"], ["巴", "士"], ["实", "物"], ["com", "fort"], ["ir", "atory"], ["平", "稳"], ["隧", "道"], ["救", "济"], ["本", "专业"], ["▁dom", "estic"], ["ios", "ity"], ["c", "in"], ["▁S", "aint"], ["▁W", "ood"], ["h", "aving"], ["电", "动"], ["所有", "制"], ["和", "企业"], ["优秀", "传统文化"], ["▁", "/"], ["东", "部"], ["积", "分"], ["世", "紀"], ["▁p", "ull"], ["et", "ts"], ["▁p", "ump"], ["ec", "ess"], ["▁par", "alle"], ["储", "能"], ["影响", "力"], ["▁supp", "orts"], ["世界", "大"], ["小", "型"], ["a", "ired"], ["决", "定的"], ["▁leg", "s"], ["先", "行"], ["B", "i"], ["▁m", "aps"], ["abul", "ary"], ["人", "心"], ["N", "D"], ["▁laun", "ched"], ["st", "ract"], ["▁O", "cean"], ["▁cam", "era"], ["M", "en"], ["存在", "于"], ["ó", "n"], ["私", "有"], ["▁n", "it"], ["退", "休"], ["cri", "bed"], ["▁dat", "abase"], ["▁ste", "el"], ["两", "次"], ["等", "地"], ["日", "在"], ["▁N", "ot"], ["实际", "情况"], ["▁trans", "mission"], ["▁st", "re"], ["▁L", "ove"], ["碰", "撞"], ["焦", "点"], ["创", "立"], ["海", "上"], ["随", "之"], ["红", "外"], ["奋斗", "目标"], ["ins", "on"], ["E", "urop"], ["▁m", "oon"], ["▁stand", "ing"], ["▁govern", "ments"], ["制", "订"], ["集中", "在"], ["桥", "梁"], ["B", "ack"], ["▁M", "ass"], ["▁ad", "equ"], ["▁fight", "ing"], ["▁re", "ly"], ["混", "凝"], ["分析", "了"], ["▁ab", "norm"], ["▁tiss", "ues"], ["因", "果"], ["▁down", "load"], ["ident", "ial"], ["ru", "e"], ["使", "之"], ["兼", "顾"], ["要", "点"], ["\u0007", "\u0005"], ["u", "ce"], ["为", "一"], ["著名", "的"], ["eorg", "ia"], ["▁sh", "ift"], ["”", ",▁"], ["G", "reen"], ["份", "额"], ["西", "安"], ["▁st", "ock"], ["▁disc", "ipl"], ["O", "ut"], ["多", "项"], ["▁em", "ail"], ["▁part", "ner"], ["op", "l"], ["名", "字"], ["事", "物的"], ["ar", "ant"], ["看", "法"], ["▁sur", "faces"], ["国家", "级"], ["▁ag", "es"], ["行为", "人"], ["管理", "者"], ["▁count", "y"], ["▁F", "ort"], ["▁but", "ter"], ["op", "ic"], ["▁fund", "ing"], ["沿", "海"], ["需要", "在"], ["▁enc", "ount"], ["氨", "基"], ["ab", "ling"], ["为代表", "的"], ["天", "地"], ["▁care", "ful"], ["▁subst", "ance"], ["▁rest", "rict"], ["我国", "经济"], ["是", "如何"], ["Resear", "chers"], ["滥", "用"], ["▁al", "ign"], ["客户", "端"], ["▁vari", "able"], ["理", "工"], ["ri", "e"], ["ual", "ity"], ["印", "刷"], ["▁improve", "ment"], ["中", "美"], ["▁cour", "ses"], ["▁aff", "ord"], ["恐", "怖"], ["显", "得"], ["专业", "化"], ["克", "斯"], ["AP", "I"], ["後", "來"], ["ov", "ascular"], ["”", ".▁"], ["▁do", "ctors"], ["隐", "患"], ["和", "新"], ["▁l", "es"], ["▁heav", "ily"], ["▁repe", "ated"], ["养", "殖"], ["玉", "米"], ["城市", "的"], ["▁per", "ce"], ["▁▁", "\""], ["▁E", "astern"], ["会", "在"], ["紧", "急"], ["b", "ury"], ["▁opt", "imal"], ["eng", "er"], ["乡", "镇"], ["滞", "后"], ["con", "f"], ["通", "路"], ["w", "orld"], ["▁elect", "ron"], ["b", "u"], ["▁discuss", "ions"], ["▁eng", "aged"], ["▁other", "wise"], ["健康", "发展"], ["历史", "性"], ["▁C", "ross"], ["L", "ater"], ["”", "▁("], ["with", "out"], ["为", "学生"], ["贯彻", "落实"], ["人与", "自然"], ["▁S", "il"], ["ee", "k"], ["Th", "omas"], ["必", "需"], ["▁analy", "ze"], ["▁f", "ill"], ["here", "nt"], ["性", "问题"], ["侧", "重"], ["将", "军"], ["下", "游"], ["审", "议"], ["职", "权"], ["旗", "帜"], ["电", "商"], ["理论", "上"], ["▁see", "ing"], ["▁t", "ropical"], ["erv", "ative"], ["标志", "着"], ["▁discuss", "ed"], ["纷", "纷"], ["▁prom", "inent"], ["意义", "上的"], ["疾病", "的"], ["活", "動"], ["▁bud", "get"], ["▁form", "al"], ["人", "权"], ["总", "理"], ["的新", "型"], ["▁as", "king"], ["投", "票"], ["▁breat", "hing"], ["孪", "生"], ["合", "金"], ["的", "创新"], ["▁p", "ool"], ["st", "ra"], ["ab", "eth"], ["ask", "a"], ["城市", "化"], ["韓", "國"], ["▁adop", "ted"], ["教", "科"], ["▁tri", "p"], ["]", ".▁"], ["▁ins", "ulin"], ["og", "s"], ["中", "药"], ["突", "然"], ["▁Con", "f"], ["▁manag", "ing"], ["易", "于"], ["pr", "ing"], ["有", "必要"], ["推动", "了"], ["固定", "资产"], ["海", "关"], ["中", "毒"], ["m", "ary"], ["▁comfort", "able"], ["am", "i"], ["cre", "te"], ["▁▁", "||▁"], ["人", "人"], ["▁Des", "ign"], ["▁great", "est"], ["▁pre", "val"], ["▁M", "ichael"], ["农民", "工"], ["义务", "教育"], ["衍", "生"], ["▁new", "ly"], ["追", "溯"], ["▁L", "abor"], ["▁Sum", "mer"], ["h", "ost"], ["▁dam", "aged"], ["et", "ing"], ["▁ext", "ent"], ["启", "示"], ["也", "没有"], ["▁a", "head"], ["▁categ", "ories"], ["ut", "en"], ["的", "保护"], ["长", "征"], ["的", "活动"], ["使用", "权"], ["资本", "的"], ["▁inv", "ent"], ["可以", "看出"], ["▁circ", "uit"], ["m", "ond"], ["▁ent", "ry"], ["之", "大"], ["是", "将"], ["科学", "研究"], ["▁c", "row"], ["sm", "all"], ["▁O", "b"], ["管理", "人员"], ["留", "在"], ["▁N", "avy"], ["▁s", "ales"], ["▁sus", "p"], ["▁ult", "imately"], ["很大", "程度上"], ["给", "出"], ["▁L", "ouis"], ["u", "ber"], ["首", "都"], ["R", "obert"], ["▁decre", "ased"], ["服", "装"], ["的", "因素"], ["大学", "的"], ["id", "ity"], ["▁st", "ated"], ["▁dec", "or"], ["唐", "朝"], ["的一个", "重要"], ["借", "贷"], ["养老", "保险"], ["平", "成"], ["學", "家"], ["并", "行"], ["可以", "将"], ["影", "響"], ["▁m", "ent"], ["▁agre", "ement"], ["▁s", "an"], ["s", "l"], ["处", "的"], ["是", "国家"], ["ar", "ia"], ["胰", "岛"], ["受", "损"], ["监督", "管理"], ["▁T", "om"], ["▁accept", "ed"], ["▁Lear", "ning"], ["注", "明"], ["加", "重"], ["从", "根本上"], ["商业", "秘密"], ["机", "动"], ["▁P", "ers"], ["▁histor", "ic"], ["▁arg", "ument"], ["▁n", "erve"], ["M", "et"], ["杆", "菌"], ["c", "ount"], ["党", "组织"], ["发", "掘"], ["▁gu", "ess"], ["二", "维"], ["保", "守"], ["▁acc", "ounts"], ["▁St", "ation"], ["%", ")"], ["s", "chool"], ["▁manufact", "uring"], ["劳动", "关系"], ["▁med", "ication"], ["C", "are"], ["ress", "ing"], ["▁", "="], ["▁in", "formed"], ["ov", "a"], ["p", "rom"], ["ak", "a"], ["的", "产品"], ["企业", "家"], ["他", "认为"], ["an", "other"], ["▁magn", "etic"], [",", """], ["G", "S"], ["ach", "us"], ["▁(", "▁"], ["▁them", "e"], ["ist", "ical"], ["eut", "ic"], ["感", "情"], ["▁sub", "sequent"], ["加", "热"], ["制", "品"], ["ab", "el"], ["N", "et"], ["%", ";"], ["共", "赢"], ["作", "风"], ["种", "种"], ["领导", "干部"], ["水平", "和"], ["▁address", "ing"], ["ok", "en"], ["ail", "ed"], ["无", "产阶级"], ["▁F", "re"], ["民", "俗"], ["生产", "要素"], ["文物", "保护"], ["政策", "和"], ["ens", "uring"], ["溶", "解"], ["ful", "ness"], ["Se", "lect"], ["▁list", "ening"], ["普", "查"], ["为", "其"], ["▁symb", "ols"], ["_", "{"], ["▁cor", "por"], ["o", "ices"], ["▁benef", "icial"], ["的", "可能性"], ["▁er", "ror"], ["▁B", "attle"], ["▁mar", "riage"], ["光", "子"], ["造", "型"], ["横", "向"], ["B", "ased"], ["▁c", "ort"], ["直", "线"], ["▁sp", "ort"], ["▁a", "w"], ["▁four", "th"], ["▁ad", "ap"], ["被告", "人"], ["脱贫", "攻坚"], ["▁g", "al"], ["▁Sc", "iences"], ["▁f", "ract"], ["▁emer", "ged"], ["中", "部"], ["A", "ccess"], ["Gen", "eral"], ["▁rh", "yth"], ["▁r", "ig"], ["▁im", "aging"], ["t", "aking"], ["▁hold", "s"], ["▁me", "al"], ["en", "h"], ["监", "视"], ["▁pass", "ion"], ["中", "最"], ["▁In", "formation"], ["先进", "的"], ["c", "over"], ["▁construct", "ed"], ["▁l", "ake"], ["科", "目"], ["复杂", "性"], ["的", "数量"], ["催化", "剂"], ["▁", "。"], ["便", "是"], ["定", "制"], ["疗", "效"], ["与", "应用"], ["▁M", "o"], ["排", "序"], ["D", "is"], ["▁for", "get"], ["T", "ogether"], ["扶", "持"], ["实", "事"], ["这", "时"], ["▁cor", "rel"], ["▁offic", "ials"], ["▁dynam", "ics"], ["▁eng", "agement"], ["ex", "per"], ["Y", "et"], ["▁my", "th"], ["c", "or"], ["泡", "沫"], ["业", "绩"], ["不断", "地"], ["社会主义核心", "价值观"], ["测", "序"], ["▁r", "ank"], ["▁", "{"], ["很", "好的"], ["▁bro", "ken"], ["范", "式"], ["▁B", "ible"], ["以", "其"], ["宝", "贵"], ["▁neigh", "b"], ["被认为", "是"], ["ro", "oms"], ["p", "ower"], ["天然", "气"], ["▁l", "atter"], ["聯", "盟"], ["▁epis", "ode"], ["rim", "inal"], [";", "▁"], ["界", "限"], ["N", "ote"], ["▁acc", "um"], ["▁phot", "ograph"], ["G", "ood"], ["L", "ondon"], ["ol", "k"], ["▁antib", "iot"], ["中", "原"], ["▁town", "s"], ["密", "钥"], ["▁un", "iverse"], ["▁dep", "ends"], ["战", "场"], ["row", "ing"], ["▁to", "ler"], ["er", "ry"], ["▁rail", "way"], ["▁trend", "s"], ["处", "在"], ["奥林匹克", "运动会"], ["est", "ab"], ["法", "國"], ["▁mar", "ine"], ["R", "uss"], ["晚", "期"], ["Con", "clusion"], ["im", "m"], ["考", "查"], ["p", "read"], ["▁sess", "ions"], ["▁Go", "ogle"], ["救", "助"], ["取得", "的"], ["p", "ost"], ["▁T", "w"], ["免", "费"], ["wh", "ose"], ["▁territ", "ory"], ["le", "aving"], ["man", "n"], ["▁en", "ables"], ["▁opp", "osite"], ["▁liter", "ary"], ["造成", "了"], [";", "("], ["▁elect", "ro"], ["控制", "的"], ["▁H", "ome"], ["▁hon", "or"], ["▁R", "ights"], ["就", "必须"], ["▁s", "ke"], ["叫", "做"], ["▁resil", "ience"], ["it", "le"], ["就", "像"], ["▁n", "om"], ["可视", "化"], ["越", "南"], ["▁d", "ental"], ["gen", "er"], ["ac", "ent"], ["af", "e"], ["谋", "划"], ["最大", "限度"], ["社会", "经济"], ["分", "级"], ["▁know", "s"], ["▁suppl", "ies"], ["成为", "了"], ["ot", "ion"], ["in", "v"], ["明确", "提出"], ["的", "培养"], ["实施", "的"], ["▁fail", "ed"], ["▁L", "ong"], ["▁in", "n"], ["ra", "ys"], ["ides", "pread"], ["S", "ever"], ["西", "亚"], ["前", "列"], ["鉴", "于"], ["议", "会"], ["▁diagn", "osed"], ["▁produ", "cing"], ["ect", "s"], ["▁har", "vest"], ["两", "类"], ["▁influ", "enced"], ["▁muse", "um"], ["▁U", "s"], ["出", "現"], ["st", "art"], ["指", "的是"], ["▁fram", "ework"], ["st", "s"], ["▁a", "er"], ["▁P", "eople"], ["ograph", "ical"], ["▁cent", "ers"], ["ac", "cess"], ["形", "的"], ["宣", "告"], ["从而", "使"], ["公", "务"], ["关", "税"], ["▁ob", "vious"], ["▁different", "ly"], ["T", "ry"], ["娱", "乐"], ["▁ch", "ief"], ["▁vulner", "able"], ["▁insect", "s"], ["不利", "于"], ["窗", "口"], ["ult", "y"], ["▁M", "ars"], ["票", "据"], ["为主", "的"], ["复", "议"], ["市场", "主体"], ["奥", "运"], ["等", "待"], ["spec", "ific"], ["▁de", "but"], ["▁observ", "ations"], ["▁fab", "ric"], ["ov", "al"], ["▁As", "ian"], ["▁deliver", "y"], ["sc", "ale"], ["▁b", "oy"], ["太平", "洋"], ["主管", "部门"], ["硬", "化"], ["w", "orking"], ["▁E", "nd"], ["▁att", "ached"], ["最", "优"], ["ic", "ide"], ["--------", "----"], ["▁independ", "ence"], ["▁h", "tt"], ["▁acc", "el"], ["▁cons", "cious"], ["▁cy", "cl"], ["a", "is"], ["▁B", "i"], ["竞", "赛"], ["完", "备"], ["帮助", "学生"], ["▁habit", "ats"], ["混凝", "土"], ["▁societ", "al"], ["▁cris", "is"], ["机", "体"], ["ip", "her"], ["导致", "了"], ["▁dec", "line"], ["▁pr", "on"], ["▁aim", "s"], ["▁det", "ection"], ["G", "E"], ["侵", "略"], ["的", "系统"], ["P", "lease"], ["很", "容易"], ["m", "g"], ["our", "se"], ["▁Stud", "y"], ["l", "ights"], ["▁w", "itness"], ["▁broad", "er"], ["▁eval", "uation"], ["and", "on"], ["▁NA", "SA"], ["w", "ing"], ["▁subst", "ances"], ["磷", "酸"], ["▁Is", "lands"], ["▁im", "plications"], ["根", "源"], ["的", "任务"], ["唐", "代"], ["方式", "和"], ["跨", "国"], ["▁-", "▁▁-▁"], ["▁ra", "w"], ["▁redu", "ces"], ["▁col", "umn"], ["▁min", "imum"], ["Can", "ada"], ["▁d", "ust"], ["理解", "和"], ["生产", "和"], ["▁An", "n"], ["的", "利益"], ["▁exp", "ensive"], ["拉", "斯"], ["S", "l"], ["极大", "地"], ["▁C", "a"], ["ol", "ism"], ["▁Sw", "ed"], ["achus", "etts"], ["这", "也"], ["反", "而"], ["实践", "活动"], ["Cl", "ass"], ["w", "orth"], ["▁int", "ric"], ["潮", "流"], ["▁Ad", "minist"], ["▁bo", "ost"], ["iv", "ating"], ["▁v", "ote"], ["物质", "的"], ["it", "ter"], ["南", "部"], ["还", "会"], ["▁Christ", "mas"], ["▁happ", "ening"], ["▁B", "est"], ["ino", "is"], ["书", "写"], ["N", "on"], ["任", "命"], ["即", "将"], ["物", "资"], ["原", "材料"], ["▁", "·▁"], ["▁z", "one"], ["喜", "欢"], ["E", "p"], ["un", "ning"], ["▁comp", "are"], ["I", "ON"], ["词", "汇"], ["▁implement", "ation"], ["阐", "释"], ["优", "越"], ["聯", "賽"], ["de", "velop"], ["向", "量"], ["▁off", "ering"], ["▁direct", "ed"], ["▁l", "ip"], ["出", "租"], ["博", "弈"], ["M", "ichael"], ["装", "饰"], ["▁D", "ev"], ["▁st", "ability"], ["▁M", "oon"], ["前", "所未"], ["C", "am"], [".", "["], ["▁ph", "osph"], ["em", "ia"], ["▁G", "al"], ["e", "en"], ["▁H", "ow"], ["多", "边"], ["崛", "起"], ["▁result", "ed"], ["iet", "ies"], ["組", "織"], ["amb", "ig"], ["实现", "对"], ["仍", "有"], ["端", "口"], ["es", "ity"], ["▁app", "arent"], ["澳", "門"], ["T", "ax"], ["数", "量的"], ["螺", "旋"], ["虚", "假"], ["实践", "的"], ["支", "柱"], ["适", "宜"], ["手", "续"], ["的", "速度"], ["可以", "从"], ["S", "R"], ["ra", "cy"], ["▁O", "per"], ["▁fl", "av"], ["prov", "iding"], ["不", "当"], ["自", "贸"], ["从", "业"], ["新中国", "成立"], ["▁Ital", "y"], ["▁y", "ield"], ["日", "至"], ["来", "讲"], ["可", "通过"], ["▁B", "re"], ["开发", "的"], ["不", "符合"], ["經", "濟"], ["风险", "管理"], ["合作", "社"], ["技术", "在"], ["数据", "集"], ["▁second", "s"], ["ch", "o"], ["▁res", "olution"], ["说", "法"], ["▁rem", "ote"], ["字", "母"], ["气", "管"], ["进", "攻"], ["O", "P"], ["▁sun", "light"], ["完整", "性"], ["氨", "酸"], ["▁present", "ation"], ["▁A", "v"], ["▁ag", "ency"], ["▁mov", "es"], ["术", "后"], ["网", "膜"], ["适", "度"], ["澳大利", "亚"], ["▁re", "tain"], ["平", "行"], ["滤", "波"], ["年", "均"], ["▁N", "ative"], ["▁Mus", "lim"], ["▁m", "ild"], ["oc", "key"], ["威", "廉"], ["ang", "le"], ["司法", "解释"], ["核心", "技术"], ["永", "久"], ["He", "alth"], ["的", "状态"], ["▁F", "ederal"], ["不", "论"], ["控制", "系统"], ["的人", "口"], ["▁G", "ood"], ["▁st", "rict"], ["充", "足"], ["▁un", "usual"], ["歌", "手"], ["b", "ro"], ["模", "仿"], ["要", "件"], ["▁L", "anguage"], ["不", "管"], ["辩", "护"], ["直接", "影响"], ["也", "不能"], ["p", "H"], ["▁comm", "ission"], ["▁con", "vey"], ["osp", "it"], ["的", "产生"], ["▁po", "em"], ["▁threat", "s"], ["物理", "学"], ["▁fl", "ag"], ["▁acqu", "ired"], ["的", "方向"], ["海", "军"], ["可以", "用"], ["ir", "th"], ["▁inst", "alled"], ["董事", "会"], ["回", "报"], ["课程", "标准"], ["Un", "like"], ["▁discrim", "ination"], ["应", "在"], ["▁Net", "work"], ["一", "点"], ["移", "民"], ["▁norm", "ally"], ["ie", "val"], ["L", "i"], ["▁res", "on"], ["厂", "商"], ["嫌", "疑"], ["關", "係"], ["▁f", "iber"], ["ple", "te"], ["▁perman", "ent"], ["▁f", "av"], ["▁indic", "ates"], ["ir", "ty"], ["ed", "iate"], ["储", "蓄"], ["不", "高"], ["t", "oo"], ["有", "害"], ["恒", "星"], ["贝", "尔"], ["政治", "人物"], ["▁B", "C"], ["▁S", "ir"], ["▁ch", "rom"], ["▁occ", "asion"], ["城", "区"], ["也", "可能"], ["g", "reen"], ["▁B", "y"], ["▁recept", "or"], ["▁pe", "ak"], ["直", "径"], ["和", "产业"], ["见", "的"], ["▁C", "ur"], ["▁R", "ome"], ["l", "ast"], ["ass", "ion"], ["届", "三"], ["积极", "参与"], ["倡", "议"], ["ribut", "ion"], ["P", "ost"], ["▁organ", "isms"], ["语", "句"], ["per", "ial"], ["名", "稱"], ["处理", "的"], ["f", "ast"], ["ain", "ing"], ["P", "ublic"], ["又", "要"], ["▁ent", "hus"], ["海", "南"], ["足够", "的"], ["是", "基于"], ["还", "包括"], ["秘", "书"], ["▁fe", "els"], ["O", "b"], ["为", "导向"], ["分", "成"], ["▁character", "ized"], ["t", "age"], ["iz", "abeth"], ["et", "ics"], ["羅", "斯"], ["▁I", "ll"], ["▁st", "able"], ["睡", "眠"], ["▁creat", "ivity"], ["▁Angel", "es"], ["lement", "ary"], ["规", "制"], ["入", "手"], ["经济", "效益"], ["中央", "银行"], ["人", "之"], ["▁enc", "ounter"], ["▁municip", "ality"], ["▁pl", "anned"], ["T", "E"], ["o", "T"], ["G", "ra"], ["▁ex", "ists"], ["起", "着"], ["的大", "小"], ["Cre", "ate"], ["运", "维"], ["尤", "为"], ["为", "主体"], ["定", "性"], ["▁own", "ed"], ["▁investig", "ate"], ["贵", "族"], [")", ")"], ["列", "宁"], ["c", "ies"], ["respect", "ively"], ["布", "置"], ["制度", "改革"], ["发展", "新"], ["▁tra", "ined"], ["F", "A"], ["▁descri", "ption"], ["▁encourag", "es"], ["某", "某"], ["稳", "步"], ["自由", "贸易"], ["生产", "总"], ["中", "外"], ["d", "ist"], ["▁fund", "s"], ["便", "捷"], ["病", "情"], ["an", "ning"], ["▁corn", "er"], ["为核心的", "党中央"], ["野", "生"], ["▁nuc", "le"], ["▁m", "g"], ["▁imm", "ediate"], ["b", "les"], ["教学", "方法"], ["是", "要"], ["和", "高"], ["社会", "学"], ["▁med", "al"], ["▁O", "f"], ["▁st", "ores"], ["▁perform", "ing"], ["ear", "ly"], ["▁Jew", "s"], ["L", "ong"], ["▁col", "our"], ["▁le", "aving"], ["▁bran", "ch"], ["P", "ol"], ["携", "带"], ["不", "易"], ["仓", "库"], ["L", "P"], ["有效", "性"], ["▁ch", "air"], ["园", "林"], ["▁sh", "all"], ["▁cur", "ren"], ["▁art", "ificial"], ["ar", "ks"], ["这", "两种"], ["达到", "了"], ["这个", "问题"], ["ate", "ver"], ["次", "数"], ["▁Columb", "ia"], ["▁n", "an"], ["体系", "中"], ["▁expl", "ains"], ["▁exam", "ination"], ["▁mat", "rix"], ["▁expl", "oration"], ["▁pu", "zz"], ["▁ch", "annel"], ["as", "ma"], ["明确", "规定"], ["交通", "运输"], ["▁det", "ected"], ["是一", "项"], ["▁tra", "cks"], ["▁ab", "und"], ["▁f", "oster"], ["▁hold", "ing"], ["▁ent", "ered"], ["▁E", "conom"], ["決", "賽"], ["▁comp", "ounds"], ["课程", "的"], ["▁friend", "ly"], ["A", "ugust"], ["攻", "关"], ["副", "主任"], ["收入", "分配"], ["修", "饰"], ["▁coff", "ee"], ["ust", "er"], ["▁industr", "ies"], ["▁suff", "er"], ["b", "ot"], ["富", "有"], ["un", "c"], ["▁p", "apers"], ["象", "征"], ["位", "的"], ["深度", "学习"], ["E", "st"], ["Sever", "al"], ["年", "中国"], ["平方", "米"], ["告", "知"], ["ar", "ity"], ["▁mom", "ents"], ["Pl", "ay"], ["利用", "率"], ["与", "技术"], ["高效", "的"], ["▁cry", "st"], ["德", "國"], ["▁hous", "ing"], ["▁p", "up"], ["▁acc", "uracy"], ["▁cl", "othing"], ["笔者", "认为"], ["原", "来"], ["增", "进"], ["蕴", "含"], ["的", "成本"], ["科技", "成果"], ["多", "年来"], ["\"", "、"], ["▁Rev", "iew"], ["年", "开始"], ["一定", "要"], ["▁S", "ol"], ["年", "级"], ["on", "ym"], ["▁prof", "ile"], ["▁t", "ub"], ["▁", "–"], ["▁v", "ac"], ["▁arr", "ang"], ["拉", "克"], ["▁cont", "rovers"], ["▁Ch", "ildren"], ["数字", "孪生"], ["一", "国"], ["异", "议"], ["杭", "州"], ["p", "y"], ["i", "y"], ["减少", "了"], ["▁she", "et"], ["res", "ulting"], ["▁ent", "ertain"], ["ick", "en"], ["绘", "制"], ["大", "使"], ["的", "对象"], ["▁manag", "er"], ["年", "份"], ["▁rec", "ording"], ["per", "or"], ["流", "入"], ["远", "远"], ["生产", "率"], ["▁reg", "ulation"], ["社", "交"], ["O", "D"], ["ou", "red"], ["▁introdu", "ce"], ["▁wor", "se"], ["▁rep", "air"], ["和", "对"], ["▁res", "erv"], ["G", "reat"], ["▁Sp", "ain"], ["我们", "将"], ["▁affect", "ing"], ["▁reve", "al"], ["▁colle", "agues"], ["M", "art"], ["▁author", "ities"], ["Comm", "on"], ["L", "ook"], [";", "▁("], ["w", "hether"], ["协调", "发展"], ["预", "后"], ["公共", "卫生"], ["质", "疑"], ["▁out", "come"], ["L", "ouis"], ["▁crit", "eria"], ["屬", "於"], ["是", "我们"], ["触", "发"], ["发现", "的"], ["▁Stud", "ies"], ["考", "生"], ["▁shap", "ing"], ["师范", "大学"], ["▁smo", "ke"], ["▁w", "idespread"], ["可能", "的"], ["▁ad", "j"], ["去", "除"], ["▁spl", "it"], ["Che", "ck"], ["▁ac", "ids"], ["▁polit", "ician"], ["▁ag", "ents"], ["▁a", "qu"], ["可", "控"], ["当", "下"], ["▁pow", "ers"], ["▁ro", "of"], ["Through", "out"], ["▁incred", "ible"], ["acks", "on"], ["時", "期"], ["对应", "的"], ["插", "入"], ["必", "将"], ["一", "百"], ["▁Commun", "ity"], ["art", "ers"], ["▁Co", "ast"], ["机", "床"], ["▁cere", "mon"], ["▁rece", "iving"], ["陶", "瓷"], ["的", "指导"], ["▁he", "aling"], ["ur", "ric"], ["B", "o"], ["M", "ary"], ["常", "务"], ["▁destroy", "ed"], ["▁cre", "am"], ["姓", "名"], ["B", "re"], ["▁Atl", "antic"], ["过", "的"], ["P", "V"], ["G", "C"], ["▁mor", "al"], ["ac", "les"], ["兼", "容"], ["局限", "性"], ["不", "在"], ["▁M", "a"], ["▁P", "et"], ["▁ass", "igned"], ["▁rout", "ine"], ["▁simultane", "ously"], ["失", "效"], ["清", "除"], ["wh", "ite"], ["H", "R"], ["▁h", "ole"], ["▁b", "read"], ["du", "le"], ["▁eth", "ical"], ["两", "年"], ["▁s", "ight"], ["蔬", "菜"], ["教", "训"], ["的", "表达"], ["▁sess", "ion"], ["▁aut", "hent"], ["▁sil", "ver"], ["▁labor", "atory"], ["振", "动"], ["处理", "器"], ["br", "id"], ["z", "y"], ["學", "院"], ["▁met", "ers"], ["wh", "y"], ["B", "P"], ["客", "体"], ["▁access", "ible"], ["S", "an"], ["▁po", "etry"], ["▁W", "ales"], ["Ph", "il"], ["▁dep", "os"], ["h", "ma"], ["幼儿", "园"], ["找", "出"], ["了", "一种"], ["▁W", "omen"], ["Sc", "ience"], ["可以", "根据"], ["大力", "发展"], ["▁un", "s"], ["显", "微"], ["▁s", "ought"], ["▁fram", "e"], ["与", "中国"], ["环境", "和"], ["宽", "松"], ["am", "pl"], ["▁C", "reek"], ["H", "C"], ["yd", "r"], ["明", "代"], ["的前提", "下"], ["▁dep", "art"], ["Act", "ivity"], ["▁M", "icro"], ["厚", "的"], ["会", "产生"], ["▁sh", "oot"], ["ann", "els"], ["▁exam", "ined"], ["伊", "斯"], ["句", "话"], ["t", "es"], ["河", "流"], ["▁barri", "ers"], ["维", "生素"], ["壁", "垒"], ["不断", "完善"], ["碳", "中和"], ["Less", "on"], ["电", "荷"], ["▁D", "ou"], ["▁B", "ra"], ["▁re", "form"], ["办", "事"], ["全", "省"], ["在", "社会"], ["新", "一轮"], ["ne", "e"], ["时间", "和"], ["的", "比例"], ["可", "用于"], ["问题", "是"], ["▁W", "orks"], ["▁or", "ient"], ["根", "據"], ["▁R", "h"], ["上", "级"], ["的", "出现"], ["新兴", "产业"], ["教学", "模式"], ["安全", "生产"], ["D", "ist"], ["▁exp", "ansion"], ["▁ag", "encies"], ["未", "知"], ["▁con", "c"], ["em", "ploy"], ["A", "ng"], ["以下", "简称"], ["in", "us"], ["▁expl", "o"], ["▁measure", "ments"], ["的", "重点"], ["!", "\"▁"], ["▁m", "erg"], ["rit", "is"], ["w", "hel"], ["▁param", "eters"], ["▁B", "rown"], ["都", "需要"], ["控", "股"], ["▁oper", "ate"], ["▁visit", "ors"], ["K", "ing"], ["aut", "hor"], ["▁phot", "o"], ["▁stat", "istics"], ["ock", "et"], ["特", "別"], ["▁behavi", "our"], ["am", "ber"], ["ec", "onomic"], ["以", "习近平同志"], ["▁innov", "ation"], ["ot", "ypes"], ["▁Rep", "resent"], ["in", "ical"], ["▁purch", "ase"], ["參", "與"], ["ab", "s"], ["▁mar", "g"], ["▁r", "ivers"], ["▁fem", "ales"], ["为", "中国"], ["修", "养"], ["国", "债"], ["徒", "刑"], ["▁advant", "ages"], ["▁l", "ights"], ["格", "斯"], ["不", "明"], ["St", "art"], ["严格", "的"], ["点", "和"], ["imens", "ional"], ["▁gluc", "ose"], ["它", "在"], ["M", "al"], ["▁b", "io"], ["裁", "定"], ["大", "纲"], ["的", "其他"], ["」", "("], ["在一定", "程度上"], ["目标", "是"], ["▁st", "omach"], ["价值", "链"], ["损害", "赔偿"], ["全面", "深化改革"], ["▁", ">▁"], ["厘", "米"], ["会", "员"], ["▁dra", "wn"], ["过", "滤"], ["ater", "n"], ["M", "ax"], ["多", "层次"], ["文化", "和"], ["▁fer", "til"], ["▁ag", "ree"], ["去", "世"], ["拓", "宽"], ["切", "除"], ["ers", "ey"], ["▁bran", "ches"], ["k", "o"], ["▁ob", "st"], ["合适", "的"], ["v", "ar"], ["ist", "ing"], ["▁cre", "w"], ["▁ad", "oles"], ["控制", "器"], ["k", "er"], ["▁te", "a"], ["▁h", "olid"], ["千", "米"], ["▁B", "ob"], ["nt", "ario"], ["▁prov", "ince"], ["用", "电"], ["精神", "的"], ["多", "年的"], ["at", "ial"], ["▁cl", "ick"], ["▁warm", "ing"], ["ig", "ious"], ["节", "奏"], ["em", "a"], ["资源", "和"], ["▁ep", "id"], ["▁O", "pen"], ["届三", "中全会"], ["中的", "作用"], ["i", "ability"], ["J", "une"], ["ict", "ed"], ["首先", "要"], ["合", "一"], ["下", "一"], ["的", "全"], ["▁he", "m"], ["之", "間"], ["▁D", "isc"], ["▁p", "un"], ["半", "年"], ["先", "天"], ["抑制", "剂"], ["对", "该"], ["▁lim", "its"], ["M", "icro"], ["▁com", "plications"], ["vent", "ually"], ["▁v", "an"], ["▁g", "ently"], ["奠", "定"], ["养", "成"], ["食品", "安全"], ["P", "ort"], ["▁her", "self"], ["▁special", "ized"], ["讲", "授"], ["越来越", "多"], ["求", "是"], ["都", "市"], ["想", "法"], ["it", "o"], ["▁trou", "ble"], ["Ch", "ina"], ["edi", "at"], ["并", "购"], ["文明", "的"], ["▁com", "plicated"], ["學", "生"], ["看", "作"], ["En", "cou"], ["区", "间"], ["石", "墨"], ["毒", "性"], ["全面", "的"], ["里", "斯"], ["的", "优势"], ["CP", "U"], ["▁R", "ichard"], ["ab", "led"], ["承", "受"], ["▁de", "aling"], ["omm", "od"], ["M", "T"], ["▁m", "ood"], ["▁o", "v"], ["与", "时"], ["管", "道"], ["▁cont", "ained"], ["id", "st"], ["▁Ser", "ies"], ["ogen", "ic"], ["▁||", "▁▁||▁"], ["▁z", "ero"], ["M", "I"], ["丝绸", "之路"], ["▁equ", "ivalent"], ["组", "的"], ["和", "使用"], ["▁E", "p"], ["函数", "的"], ["给", "学生"], ["意识", "和"], ["pos", "ition"], ["▁capt", "ured"], ["▁fl", "our"], ["▁lif", "estyle"], ["ac", "her"], ["发挥", "着"], ["▁bo", "ys"], ["▁g", "ro"], ["▁gen", "us"], ["―", "―"], ["▁percent", "age"], ["▁stim", "ul"], ["E", "v"], ["▁anal", "ys"], ["▁p", "ure"], ["十", "年代"], ["u", "gh"], ["▁ro", "cks"], ["敢", "于"], ["和", "控制"], ["▁form", "ula"], ["hold", "ers"], ["比", "率"], ["是", "人类"], ["伴", "随着"], ["特征", "的"], ["所有", "者"], ["▁Scot", "land"], ["▁A", "cc"], ["▁c", "os"], ["▁ins", "ight"], ["当", "年"], ["日常", "生活"], ["农业", "农村"], ["合", "力"], ["C", "ount"], ["▁ad", "vert"], ["ru", "it"], ["▁it", "em"], ["文", "中"], ["钢", "铁"], ["不断", "发展"], ["GB", "T"], ["印", "象"], ["出", "身"], ["▁advent", "ure"], ["▁D", "en"], ["绿色", "发展"], ["约", "定的"], ["在", "大"], ["的", "三"], ["▁S", "ee"], ["五", "大"], ["研究", "了"], ["N", "ever"], ["▁activ", "ation"], ["成功", "的"], ["S", "ocial"], ["▁rel", "ief"], ["indu", "ced"], ["▁comp", "osed"], ["▁scri", "pt"], [":", "「"], ["纺", "织"], ["▁mag", "azine"], ["▁big", "ger"], ["而", "上"], ["港", "口"], ["▁h", "us"], ["進", "士"], ["较", "好的"], ["其", "一"], ["▁neg", "ot"], ["it", "amin"], ["撰", "写"], ["▁", ")"], ["▁H", "or"], ["施", "行"], ["浙江", "省"], ["制定", "了"], ["将", "来"], ["慈", "善"], ["r", "in"], ["技术", "与"], ["血", "症"], ["衰", "竭"], ["体系", "和"], ["对", "我国"], ["最", "好"], ["▁imp", "ossible"], ["▁ens", "uring"], ["病", "因"], ["▁d", "rain"], ["▁mort", "ality"], ["▁award", "ed"], ["▁le", "ague"], ["▁St", "ep"], ["年", "初"], ["ic", "it"], ["or", "ado"], ["▁batter", "y"], ["▁the", "ore"], ["上", "世纪"], ["▁c", "aught"], ["▁big", "gest"], ["▁smo", "king"], ["at", "hered"], ["▁epis", "odes"], ["必须", "在"], ["出现", "在"], ["▁fix", "ed"], ["ot", "ton"], ["ad", "or"], ["透", "过"], ["信号", "的"], ["ocol", "ate"], ["D", "i"], ["at", "i"], ["▁c", "ategory"], ["▁pre", "v"], ["资产", "负债"], ["决定", "性"], ["▁", "rom"], ["▁influ", "ences"], ["Ar", "ch"], ["▁r", "ice"], ["▁dis", "h"], ["清", "代"], ["行政", "法规"], ["it", "i"], ["▁continu", "ous"], ["的", "专业"], ["▁Te", "am"], ["X", "X"], ["eop", "les"], ["a", "ver"], ["▁cr", "ime"], ["▁For", "ce"], ["▁foss", "il"], ["▁inh", "abit"], ["j", "a"], ["▁t", "ack"], ["▁cir", "cle"], ["less", "ly"], ["农", "田"], ["re", "present"], ["定", "理"], ["入", "口"], ["out", "e"], ["n", "atural"], ["▁n", "est"], ["▁Comm", "on"], ["贵", "州"], ["E", "nd"], ["J", "o"], ["ust", "ain"], ["▁tra", "uma"], ["委員", "會"], ["\b", "\u0007"], ["举", "证"], ["越", "高"], ["破", "解"], ["澳", "门"], ["▁Air", "port"], ["▁Ex", "ternal"], ["▁N", "ature"], ["oc", "racy"], ["▁produ", "ces"], ["两个", "方面"], ["甘", "肃"], ["um", "ps"], ["ch", "ildren"], ["ar", "g"], ["▁calc", "ium"], ["▁sp", "ending"], ["d", "oor"], ["ol", "n"], ["联", "储"], ["▁wis", "dom"], ["▁fac", "ility"], ["你", "的"], ["废", "水"], ["面", "前"], ["供", "电"], ["层", "级"], ["y", "cle"], ["的", "整体"], ["领导", "人"], ["灵", "魂"], ["m", "i"], ["▁W", "ay"], ["▁read", "er"], ["ambig", "uation"], ["ut", "ed"], ["▁E", "th"], ["on", "to"], ["▁D", "utch"], ["的", "一些"], ["▁mark", "ets"], ["▁dis", "hes"], ["▁expand", "ed"], ["ir", "c"], ["追", "踪"], ["税", "率"], ["柔", "性"], ["贬", "值"], ["人民", "检察院"], ["浏", "览"], ["othe", "rapy"], ["只有", "在"], ["▁H", "ospital"], ["史", "料"], ["清", "华"], ["▁compar", "ison"], ["▁m", "ouse"], ["对", "社会"], ["▁efficient", "ly"], ["的", "机会"], ["采用", "了"], ["▁te", "le"], ["▁Pro", "fessor"], ["的一", "系列"], ["ud", "e"], ["▁navig", "ate"], ["特别", "是在"], ["st", "ic"], ["W", "omen"], ["体", "外"], ["各", "民族"], ["长期", "以来"], ["策", "划"], ["山", "水"], ["宣", "言"], ["ov", "en"], ["原", "创"], ["▁sub", "t"], ["▁ch", "olesterol"], ["▁le", "ct"], ["▁confir", "med"], ["▁psych", "ological"], ["党的", "建设"], ["▁F", "ootball"], ["▁M", "ax"], ["°", "▁"], ["\"", ")▁"], ["▁candid", "ate"], ["pt", "y"], ["V", "al"], ["▁st", "roke"], ["▁vol", "can"], ["▁certain", "ly"], ["▁D", "isease"], ["S", "E"], ["▁mix", "ture"], ["好", "处"], ["和", "政治"], ["el", "a"], ["m", "em"], ["▁reg", "ist"], ["熟", "练"], ["电", "机"], ["不断", "提升"], ["动", "手"], ["全", "新的"], ["▁sens", "itivity"], ["日", "的"], ["oc", "king"], ["法", "案"], ["▁", "、"], ["影响", "了"], ["灵", "活性"], ["同", "期"], ["全", "世界"], ["▁p", "ush"], ["▁v", "ideos"], ["▁St", "at"], ["議", "員"], ["所", "致"], ["导", "师"], ["身", "心"], ["提升", "了"], ["M", "il"], ["▁S", "o"], ["y", "al"], ["▁re", "ject"], ["想", "要"], ["w", "ords"], ["s", "is"], ["g", "ian"], ["微", "信"], ["的", "传统"], ["均", "为"], ["▁B", "et"], ["roll", "ed"], ["求", "解"], ["▁m", "eth"], ["消", "极"], ["积极", "的"], ["”", "、"], ["▁requ", "est"], ["em", "pl"], ["t", "re"], ["p", "ot"], ["時", "代"], ["B", "L"], ["俄", "国"], ["英", "格"], ["進", "入"], ["国", "企"], ["教师", "要"], ["发", "放"], ["创新", "发展"], ["▁exam", "ining"], ["▁surpr", "ise"], ["立", "方"], ["b", "ooks"], ["极", "大的"], ["绝", "大多数"], ["新冠", "肺炎"], ["休", "闲"], ["m", "ake"], ["中華", "民國"], ["▁org", "ans"], ["▁p", "ra"], ["May", "be"], ["低", "温"], ["系统", "和"], ["发", "扬"], ["的", "实施"], ["▁constit", "u"], ["ple", "ment"], ["干", "涉"], ["▁is", "lands"], ["▁be", "ar"], ["f", "amily"], ["M", "usic"], ["M", "ac"], ["▁ang", "le"], ["▁Serv", "ices"], ["ad", "el"], ["▁bas", "ket"], ["▁eth", "nic"], ["ag", "ram"], ["▁allow", "ing"], ["最", "終"], ["冬", "季"], ["▁sc", "ulpt"], ["确定", "了"], ["较", "好"], ["cycl", "op"], ["▁convers", "ations"], ["政治", "局"], ["▁D", "av"], ["枢", "纽"], ["▁dynam", "ic"], ["單", "曲"], ["all", "ing"], ["▁b", "at"], ["omet", "ry"], ["In", "ternational"], ["构成", "了"], ["l", "ik"], ["准确", "性"], ["拓", "扑"], ["ag", "en"], ["更", "快"], ["eg", "a"], ["查", "看"], ["N", "T"], ["▁O", "h"], ["战", "国"], ["====", "===="], ["分", "数"], ["ong", "s"], ["▁rel", "iable"], ["▁dec", "ade"], ["内", "蒙古"], ["▁satell", "ite"], ["县", "级"], ["转", "基因"], ["或者", "其他"], ["保险", "公司"], ["Sc", "ientists"], ["▁return", "s"], ["▁facilit", "ate"], ["▁H", "ot"], ["不", "知"], ["air", "y"], ["意", "外"], ["遭", "遇"], ["ay", "lor"], ["▁Que", "en"], ["E", "V"], ["诉", "求"], ["以下", "几"], ["社会", "治理"], ["增", "殖"], ["▁prepar", "ation"], ["Pro", "v"], ["▁contribut", "ed"], ["an", "ic"], ["废", "弃"], ["救", "援"], ["高", "血压"], ["在", "这里"], ["机", "场"], ["it", "ory"], ["▁A", "tt"], ["▁f", "ing"], ["hem", "istry"], ["all", "eng"], ["应用", "场景"], ["近", "似"], ["▁contribut", "ions"], ["ne", "ys"], ["▁particip", "ation"], ["▁know", "ing"], ["p", "es"], ["ay", "a"], ["清", "偿"], ["和", "市场"], [",▁", "▁"], ["ph", "ib"], ["演", "员"], ["的", "控制"], ["▁b", "ron"], ["y", "es"], [")", "\""], ["分", "区"], ["列", "车"], ["党", "派"], [":", """], ["为", "企业"], ["ri", "er"], ["起", "了"], ["来", "进行"], ["▁f", "ro"], ["▁sent", "ences"], ["▁princ", "iple"], ["▁t", "urb"], ["b", "ell"], ["▁offic", "er"], ["上", "面"], ["▁conflic", "ts"], ["▁frequ", "ent"], ["纲", "领"], ["结构性", "改革"], ["必须", "坚持"], ["人力", "资本"], ["思想", "和"], ["发展", "中"], ["op", "eration"], ["网", "格"], ["▁pers", "ons"], ["U", "K"], ["名", "单"], ["科", "普"], ["内", "核"], ["fl", "amm"], ["确立", "了"], ["期", "徒刑"], ["▁d", "ent"], ["占", "领"], ["▁S", "und"], ["▁Mart", "in"], ["美", "洲"], ["t", "elling"], ["候", "选"], ["间", "隔"], ["和", "国家"], ["▁difficult", "ies"], ["t", "ake"], ["还", "应"], ["敌", "人"], ["全球", "经济"], ["三个", "方面"], ["▁pres", "erve"], ["al", "m"], ["▁des", "c"], ["▁dis", "rupt"], ["合", "伙"], ["性", "别"], ["are", "t"], ["▁dist", "ricts"], ["具有", "一定的"], ["战", "线"], ["不仅", "要"], ["检察", "机关"], ["iox", "ide"], ["▁tro", "ops"], ["一致", "性"], ["编", "译"], ["pro", "t"], ["▁whe", "el"], ["▁object", "ive"], ["aterial", "s"], ["▁con", "crete"], ["关键", "技术"], ["各", "部门"], ["▁int", "ense"], ["▁abs", "ol"], ["▁consid", "ering"], ["▁moist", "ure"], ["▁qu", "iet"], ["▁t", "ap"], ["交易", "所"], ["数据", "处理"], ["R", "ad"], ["▁learn", "ers"], ["以", "外的"], ["▁st", "rain"], ["▁▁▁▁", "▁▁▁"], ["bre", "ak"], ["▁F", "amily"], ["▁st", "uff"], ["三", "次"], ["机制", "的"], ["黑", "色"], ["▁experim", "ental"], ["os", "ion"], ["ID", "S"], ["全面", "从严"], ["夯", "实"], ["拉", "动"], ["问题", "和"], ["应该", "是"], ["y", "an"], ["▁C", "ard"], ["▁streng", "then"], ["划", "分为"], ["il", "a"], ["▁ins", "urance"], ["▁concer", "ned"], ["▁iss", "ued"], ["lear", "ning"], ["完善", "的"], ["核心", "素养"], ["为", "人民"], ["并", "不能"], ["冠", "状"], ["▁Sec", "ret"], ["为", "实现"], ["地", "说"], ["Th", "ree"], ["com", "mon"], ["▁comb", "at"], ["F", "rench"], ["▁ad", "m"], ["dis", "ambiguation"], ["p", "ing"], ["印", "发"], ["合同", "法"], ["研究", "团队"], ["▁sh", "ut"], ["▁Champions", "hip"], ["ct", "u"], ["宿", "主"], ["▁V", "iet"], ["▁class", "ic"], ["▁pur", "su"], ["数据", "和"], ["其", "主要"], ["▁f", "ashion"], ["▁great", "ly"], ["财务", "管理"], ["授", "课"], ["恶", "化"], ["辽", "宁"], ["▁correct", "ly"], ["广泛", "应用"], ["▁encourag", "ed"], ["▁consum", "ers"], ["所", "属"], ["失", "衡"], ["环境", "污染"], ["季", "节"], ["涌", "现"], ["二", "元"], ["▁Prov", "ince"], ["Y", "ear"], ["R", "P"], ["act", "ions"], ["监", "护"], ["F", "F"], ["▁collect", "ive"], ["▁kil", "omet"], ["▁m", "ales"], ["▁oper", "ated"], ["in", "ch"], ["▁O", "l"], ["在", "国家"], ["但", "不"], ["▁neur", "ons"], ["os", "qu"], ["rag", "on"], ["▁green", "house"], ["▁rob", "ot"], ["下", "行"], ["共", "生"], ["当", "局"], ["▁R", "om"], ["\"", ")"], ["M", "ass"], ["▁investig", "ation"], ["bur", "gh"], ["习近平总书记", "指出"], ["思", "潮"], ["会议", "上"], ["究", "竟"], ["以习近平同志", "为核心的党中央"], ["技术", "的发展"], ["d", "espite"], ["S", "QL"], ["▁Gu", "ide"], ["陈", "述"], ["B", "r"], ["▁co", "ach"], ["st", "ep"], ["op", "her"], ["这种", "方法"], ["胚", "胎"], ["量", "和"], ["th", "ink"], ["et", "ime"], ["yp", "ically"], ["▁s", "olving"], ["集", "團"], ["在", "实践中"], ["密切", "相关"], ["采", "样"], ["▁L", "iter"], ["小", "麦"], ["▁therap", "eutic"], ["▁W", "rit"], ["v", "in"], ["▁rese", "arc"], ["▁own", "er"], ["读", "书"], ["关键", "词"], ["ym", "b"], ["▁un", "able"], ["b", "b"], ["▁emer", "ging"], ["l", "anguage"], ["大", "局"], ["会", "对"], ["的", "地"], ["▁r", "ing"], ["也", "被"], ["y", "et"], ["▁nerv", "ous"], ["▁se", "asons"], ["▁fac", "es"], ["提", "问"], ["▁man", "if"], ["▁am", "pl"], ["▁threat", "ened"], ["al", "ter"], ["c", "ase"], ["的", "表现"], ["申请", "人"], ["美", "联储"], ["当代", "中国"], ["▁integr", "ated"], ["戏", "剧"], ["L", "eg"], ["▁acc", "ommod"], ["▁L", "os"], ["▁trans", "p"], ["▁effect", "iveness"], ["用户", "的"], ["▁coast", "al"], ["▁identify", "ing"], ["A", "pril"], ["数", "控"], ["S", "arah"], ["而", "成"], ["▁f", "inger"], ["▁he", "l"], ["us", "hed"], ["em", "et"], ["▁l", "ens"], ["都", "不"], ["归", "属"], ["的", "有"], ["De", "velop"], ["▁exc", "iting"], ["重", "大的"], ["视", "网膜"], ["学", "分"], ["语", "法"], ["be", "an"], ["在", "本"], ["P", "eter"], ["藝", "術"], ["▁tra", "its"], ["in", "ction"], ["er", "us"], ["自", "学"], ["這", "些"], ["单位", "的"], ["▁pro", "ve"], ["W", "indows"], ["▁g", "iant"], ["In", "f"], ["违", "背"], ["▁ob", "esity"], ["是", "非常"], ["ace", "book"], ["▁ab", "andon"], ["▁E", "r"], ["%", ",▁"], ["歐", "洲"], ["▁plan", "e"], ["原", "型"], ["____", "____"], ["父", "亲"], ["等", "内容"], ["▁discuss", "ing"], ["做", "的"], ["▁prov", "iders"], ["▁A", "ge"], ["的", "计算"], ["▁complex", "ity"], ["也", "需要"], ["一", "号"], ["发展", "趋势"], ["▁n", "ic"], ["▁You", "ng"], ["背", "后"], ["第一", "百"], ["考", "验"], ["保护", "和"], ["应", "力"], ["▁flow", "er"], ["▁Bl", "ue"], ["汉", "字"], ["▁g", "ram"], ["▁saf", "ely"], ["▁target", "s"], ["电", "站"], ["h", "ard"], ["▁g", "ap"], ["▁g", "ent"], ["▁incorpor", "ate"], ["▁incorpor", "ating"], ["师", "资"], ["共产", "党的"], ["畅", "通"], ["意识", "到"], ["流", "失"], ["纵", "向"], ["真实", "性"], ["经济学", "家"], ["字", "符"], ["上", "了"], ["▁Kore", "a"], ["▁emp", "athy"], ["發", "生"], ["支", "援"], ["领导", "的"], ["政府", "部门"], ["出", "土"], ["大", "地"], ["的", "处理"], ["首", "席"], ["uss", "ion"], ["▁ad", "ds"], ["▁Franc", "isco"], ["在", "教学"], ["战", "后"], ["▁poss", "ibility"], ["▁t", "urning"], ["薄", "膜"], ["▁G", "r"], ["▁int", "est"], ["▁transl", "ation"], ["▁initi", "atives"], ["▁protect", "ive"], ["付", "款"], ["▁G", "ree"], ["▁membran", "e"], ["s", "omething"], ["贯", "通"], ["就", "没有"], ["th", "ree"], ["的", "重"], ["公", "告"], ["▁vari", "ations"], ["▁own", "ers"], ["iv", "a"], ["骨", "干"], ["这些", "问题"], ["再", "到"], ["原", "有的"], ["凭", "证"], ["▁keep", "s"], ["bet", "ween"], ["eli", "hood"], ["▁H", "y"], ["卓", "越"], ["▁s", "ister"], ["▁int", "ellectual"], ["生活", "方式"], ["当事", "人的"], ["财", "经"], ["之", "日起"], ["NA", "SA"], ["T", "T"], ["埃", "及"], ["得", "多"], ["线", "索"], ["▁esc", "ape"], ["m", "us"], ["为", "本"], ["不", "移"], ["运", "河"], ["▁exhib", "it"], ["▁pass", "ing"], ["减", "小"], ["▁st", "ake"], ["▁St", "ory"], ["大", "臣"], ["当时", "的"], ["th", "ur"], ["ail", "ing"], ["app", "ro"], ["加快", "推进"], ["应", "有"], ["短", "缺"], ["灵", "敏"], ["▁ev", "olved"], ["it", "age"], ["force", "ment"], ["h", "ar"], ["▁inter", "ventions"], ["am", "ong"], ["ish", "ment"], ["具有重要", "意义"], ["ps", "on"], ["er", "ior"], ["▁h", "op"], ["直", "流"], ["高质量", "发展的"], ["▁minim", "ize"], ["▁nec", "k"], ["封", "装"], ["J", "ava"], ["▁I", "V"], ["▁appro", "ved"], ["主", "義"], ["ibr", "aries"], ["▁newsp", "aper"], ["等", "一系列"], ["rou", "s"], ["U", "TC"], ["▁th", "read"], ["▁earth", "qu"], ["it", "ual"], ["D", "E"], ["▁over", "whel"], ["海", "水"], ["d", "id"], ["分", "之一"], ["▁mathemat", "ical"], ["不", "予"], ["中国式", "现代化"], ["萎", "缩"], ["领", "土"], ["规范", "化"], ["日", "军"], ["Pl", "us"], ["干", "燥"], ["g", "a"], ["M", "C"], ["▁hydro", "gen"], ["▁t", "ens"], ["▁art", "istic"], ["▁W", "indows"], ["s", "ign"], ["▁gu", "ard"], ["法", "则"], ["的一", "切"], ["▁I", "P"], ["▁commit", "ment"], ["H", "aving"], ["▁C", "at"], ["十三", "五"], ["人", "事"], ["前", "瞻"], ["传", "授"], ["削", "弱"], ["融合", "发展"], ["塞", "尔"], ["那", "里"], ["类似", "于"], ["C", "or"], ["发生", "变化"], ["▁do", "se"], ["▁sp", "ots"], ["is", "ode"], ["inc", "oln"], ["ors", "es"], ["▁sh", "ad"], ["h", "um"], ["以", "来的"], ["开展", "了"], ["▁t", "el"], ["fess", "ional"], ["▁gr", "id"], ["▁f", "rog"], ["▁t", "ube"], ["未", "有"], ["▁F", "ilm"], ["▁fil", "ter"], ["党", "建"], ["省", "委"], ["乾", "隆"], ["构", "筑"], ["oc", "ument"], ["▁U", "nder"], ["列", "为"], ["▁cont", "amin"], ["ru", "ption"], ["ont", "al"], ["sc", "ientists"], ["un", "til"], ["▁t", "ip"], ["▁webs", "ites"], ["▁mem", "ories"], ["▁sc", "ores"], ["M", "ain"], ["新", "征程"], ["配", "备"], ["▁out", "er"], ["道", "理"], ["他们", "在"], ["▁meaning", "ful"], ["cri", "be"], ["▁opin", "ion"], ["论", "的"], ["l", "t"], ["▁wa", "iting"], ["▁ear", "n"], ["起", "步"], ["▁calcul", "ate"], ["主", "角"], ["斯", "基"], ["atch", "ing"], ["▁Ind", "igenous"], ["S", "L"], ["▁ph", "arm"], ["▁watch", "ing"], ["▁emot", "ion"], ["y", "o"], ["学", "历"], ["议", "题"], ["国际", "合作"], ["知识", "点"], ["▁difficult", "y"], ["一", "部"], ["可以", "是"], ["演", "示"], ["we", "et"], ["Be", "ing"], ["iod", "iversity"], ["千", "年"], ["缓", "存"], ["▁express", "ions"], ["服", "从"], ["靶", "向"], ["混", "乱"], ["习近平总书记", "在"], ["数据", "分析"], ["umn", "i"], ["inn", "ers"], ["▁r", "u"], ["M", "iss"], ["int", "o"], ["▁measure", "ment"], ["F", "in"], ["st", "ery"], ["运", "转"], ["▁ra", "cial"], ["灾", "难"], ["文", "档"], ["  ", "  "], ["▁B", "ul"], ["▁gradu", "ally"], ["本质", "上"], ["ort", "ion"], ["el", "ly"], ["▁philosoph", "y"], ["p", "ublished"], ["▁tum", "ors"], ["D", "O"], ["▁att", "ended"], ["P", "N"], ["三", "农"], ["评", "分"], ["深", "层次"], ["诊", "疗"], ["全面建成", "小康社会"], ["▁ac", "ute"], ["使用", "了"], ["Pl", "ace"], ["▁bur", "ied"], ["▁excess", "ive"], ["▁A", "gency"], ["ps", "y"], ["长", "时间"], ["▁J", "oseph"], ["▁L", "ittle"], ["无人", "机"], ["▁sc", "hed"], ["▁to", "ys"], ["▁Rail", "way"], ["ig", "er"], ["巴", "西"], ["▁G", "all"], ["和", "中国"], ["th", "an"], ["越来越", "多的"], ["东", "亚"], ["▁M", "ur"], ["备", "份"], ["统计", "学"], ["中", "科院"], ["▁dig", "est"], ["法律", "责任"], ["违", "规"], ["社会", "组织"], ["的", "力量"], ["均", "有"], ["国", "王"], ["hel", "ial"], ["in", "er"], ["广", "西"], ["▁micro", "sc"], ["▁d", "ates"], ["▁arch", "ae"], ["▁works", "he"], ["n", "or"], ["质量", "的"], ["▁B", "ooks"], ["可能", "导致"], ["▁wind", "ows"], ["low", "er"], ["C", "ap"], ["雕", "塑"], ["有限", "的"], ["▁mechan", "ical"], ["足", "以"], ["Char", "les"], ["ag", "ers"], ["▁bab", "ies"], ["▁b", "onds"], ["▁colon", "ial"], ["acc", "o"], ["▁distribut", "ed"], ["红", "利"], ["内部", "的"], ["摄", "影"], ["▁comp", "rom"], ["▁un", "certain"], ["四", "种"], ["▁concentr", "ations"], ["▁pl", "enty"], ["友", "好"], ["▁Or", "der"], ["g", "ender"], ["▁Fore", "st"], ["上", "游"], ["决", "心"], ["M", "ult"], ["▁laun", "ch"], ["▁be", "ings"], ["年", "到"], ["p", "red"], ["A", "ir"], ["▁mod", "e"], ["情", "报"], ["基础", "研究"], ["▁M", "ethod"], ["▁find", "s"], ["▁intric", "ate"], ["▁real", "ize"], ["▁public", "ation"], ["▁my", "ster"], ["革", "新"], ["丢", "失"], ["传染", "病"], ["▁road", "s"], ["▁treat", "ing"], ["w", "estern"], ["▁System", "s"], ["▁voc", "abulary"], ["▁c", "ab"], ["惩", "罚"], ["衰", "退"], ["▁dr", "iver"], ["▁che", "st"], ["▁screen", "ing"], ["淘", "汰"], ["▁b", "rows"], ["叠", "加"], ["▁c", "ul"], ["▁l", "osing"], ["▁remark", "able"], ["的", "反"], ["▁T", "op"], ["o", "ids"], ["ils", "on"], ["星", "期"], ["▁societ", "ies"], ["评", "定"], ["放", "电"], ["来自", "于"], ["随", "意"], ["O", "H"], ["▁ed", "itor"], ["此", "前"], ["暂", "时"], ["▁del", "ay"], ["▁rem", "ind"], ["裁", "决"], ["蓬", "勃"], ["有", "哪些"], ["三", "十"], ["▁As", "sembly"], ["M", "B"], ["▁novel", "s"], ["▁T", "im"], ["牢", "牢"], ["c", "ient"], ["Con", "sequently"], ["▁substant", "ial"], ["▁sh", "arp"], ["D", "an"], ["動", "畫"], ["或", "不"], ["宋", "代"], ["老", "龄"], ["将", "成为"], ["的", "情形"], ["e", "enth"], ["▁sur", "ve"], ["▁rest", "aur"], ["L", "AN"], ["▁class", "ical"], ["emet", "ery"], ["共", "振"], ["r", "ine"], ["组", "装"], ["ord", "inary"], ["▁deb", "ate"], ["olog", "ic"], ["▁b", "ath"], ["▁indic", "ated"], ["old", "s"], ["om", "atic"], ["个人信息", "保护"], ["压", "迫"], ["的", "改革"], ["发表", "在"], ["中国", "古代"], ["ber", "ry"], ["▁d", "ioxide"], ["▁obs", "erve"], ["▁A", "st"], ["白", "色"], ["f", "ood"], ["言", "之"], ["投资", "的"], ["▁est", "imate"], ["▁hand", "ling"], ["▁ident", "ification"], ["写", "入"], ["ip", "e"], ["ass", "es"], ["▁flow", "s"], ["▁part", "n"], ["坚", "强"], ["勇", "于"], ["之", "道"], ["因", "其"], ["A", "tt"], ["原因", "是"], ["标准", "和"], ["c", "ard"], ["断", "裂"], ["上", "皮"], ["im", "als"], ["▁ch", "annels"], ["节", "省"], ["▁p", "and"], ["W", "ar"], ["▁B", "oston"], ["▁paralle", "l"], ["最大", "化"], ["轨", "迹"], ["讲", "述"], ["▁t", "ables"], ["路", "線"], ["D", "ue"], ["斯", "科"], ["▁strong", "ly"], ["▁fl", "avor"], ["迄", "今"], ["Des", "ign"], ["S", "N"], ["下", "去"], ["两", "岸"], ["其", "余"], ["的最", "高"], ["▁resp", "iratory"], ["▁re", "aching"], ["J", "uly"], ["J", "anuary"], ["潜在", "的"], ["總", "統"], ["注", "释"], ["▁pres", "ents"], ["▁equ", "ation"], ["▁p", "ed"], ["分", "开"], ["进", "出口"], ["生态文明", "建设"], ["目标", "和"], ["有", "什么"], ["有", "其"], ["改", "良"], ["ap", "se"], ["可", "达"], ["公", "園"], ["▁m", "ob"], ["阿拉", "伯"], ["的", "物质"], ["▁j", "oy"], ["G", "od"], ["下", "载"], ["ari", "os"], ["学科", "的"], ["是", "企业"], ["里", "程"], ["生物", "多样性"], ["艰", "苦"], ["飞", "跃"], ["生产总", "值"], ["并", "以"], ["的", "细胞"], ["eng", "ine"], ["\"", ",▁\""], ["ell", "o"], ["▁t", "ut"], ["伴", "随"], ["鐵", "道"], ["o", "a"], ["语", "义"], ["]", ","], ["P", "op"], ["中华", "优秀传统文化"], ["市场", "上"], ["实事", "求是"], ["新", "模式"], ["▁kid", "ney"], ["it", "ure"], ["hav", "ior"], ["▁t", "ension"], ["低", "成本"], ["存在", "的问题"], ["的", "经验"], ["百", "万"], ["em", "b"], ["▁fall", "s"], ["heim", "er"], ["U", "T"], ["l", "av"], ["治理体系", "和"], ["伟", "大的"], ["边缘", "计算"], ["甲", "状"], ["缴", "纳"], ["怀", "疑"], ["▁rel", "ation"], ["目前", "的"], ["名", "為"], ["梯", "度"], ["ospit", "als"], ["▁t", "ons"], ["omet", "ric"], ["▁m", "ic"], ["M", "E"], ["基本", "原理"], ["▁bi", "ology"], ["▁target", "ed"], ["▁offic", "ers"], ["在", "这些"], ["饱", "和"], ["经", "贸"], ["▁algorith", "ms"], ["m", "usic"], ["he", "dule"], ["iv", "ities"], ["▁transfer", "red"], ["▁F", "estival"], ["olic", "y"], ["D", "I"], ["tra", "ck"], ["神", "话"], ["传", "送"], ["▁CO", "VID"], ["▁sen", "ior"], ["▁supp", "lement"], ["ne", "g"], ["星", "系"], ["金融", "风险"], ["扣", "除"], ["被", "害"], ["创新", "驱动"], ["规", "避"], ["例", "外"], ["的", "共同"], ["成立", "了"], ["y", "roid"], ["F", "ood"], ["it", "ting"], ["综", "上"], ["▁un", "ion"], ["▁scient", "ist"], ["▁v", "eter"], ["C", "ur"], ["oper", "ative"], ["un", "ior"], ["设备", "和"], ["同", "盟"], ["空", "中"], ["▁tw", "enty"], ["现代", "农业"], ["的", "伟大"], ["在", "世界"], ["at", "oes"], [")", "-"], ["S", "ing"], ["▁Dem", "ocratic"], ["置", "于"], ["邮", "件"], ["康", "熙"], ["繁", "殖"], ["ic", "ating"], ["▁s", "izes"], ["▁Administ", "ration"], ["以及", "其他"], ["顶层", "设计"], ["链", "条"], ["▁D", "own"], ["▁ser", "ver"], ["ig", "inal"], ["▁struct", "ural"], ["▁M", "ore"], ["S", "chool"], ["引", "力"], ["认定", "为"], ["▁fe", "ver"], ["am", "ins"], ["▁horm", "one"], ["▁adequ", "ate"], ["▁I", "L"], ["色", "列"], ["发", "酵"], ["中", "医药"], ["p", "ublic"], ["用", "作"], ["为", "人"], ["▁d", "raft"], ["▁princ", "ipal"], ["▁fe", "aturing"], ["▁B", "ab"], ["B", "est"], ["▁E", "c"], ["有", "待"], ["坚定", "不移"], ["发", "作"], ["▁design", "ated"], ["▁imm", "igr"], ["▁dom", "ain"], ["▁bl", "og"], ["反", "之"], ["固", "醇"], ["▁car", "b"], ["▁insp", "iration"], ["▁protect", "ing"], ["▁vis", "iting"], ["▁would", "n"], ["金", "山"], ["▁V", "er"], ["改革开放", "以来"], ["日", "趋"], ["实", "效"], ["的", "理念"], ["A", "F"], ["▁arg", "ue"], ["S", "I"], ["▁P", "res"], ["imens", "ions"], ["Re", "al"], ["Ch", "oose"], ["让", "人"], ["碎", "片"], ["股份", "有限公司"], ["▁W", "all"], [")", "▁▁"], ["▁algorith", "m"], ["Se", "ptember"], ["our", "i"], ["医疗", "卫生"], ["人类", "命运共同体"], ["课", "时"], ["收", "费"], ["港", "澳"], ["群", "体的"], ["▁carry", "ing"], ["▁g", "one"], ["▁pract", "icing"], ["ER", "P"], [".▁", "["], ["▁coun", "cil"], ["▁cur", "ious"], ["there", "by"], ["定", "向"], ["和", "研究"], ["的", "自然"], ["重要", "性"], ["学", "研究"], ["可", "供"], ["m", "ult"], ["eng", "ers"], ["变", "局"], ["并", "与"], ["北京", "大学"], ["权", "人"], ["▁ex", "ec"], ["other", "s"], ["v", "ard"], ["▁expert", "ise"], ["▁feed", "ing"], ["▁min", "erals"], ["▁recommend", "ations"], ["邀", "请"], ["C", "s"], ["名", "的"], ["▁sus", "cept"], ["▁l", "aid"], ["外", "界"], ["▁m", "and"], ["Germ", "an"], ["海", "拔"], ["▁st", "ere"], ["▁experien", "cing"], ["伴", "有"], ["的", "价格"], ["程序", "的"], ["这", "两"], ["▁int", "ent"], ["▁prom", "pt"], ["▁phenomen", "on"], ["动", "画"], ["p", "ers"], ["觉", "得"], ["M", "o"], ["▁D", "et"], ["▁object", "ives"], ["▁Rad", "io"], ["writ", "ing"], ["外", "科"], ["▁exc", "it"], ["▁claim", "ed"], ["上", "层"], ["处理", "好"], ["冠", "军"], ["Ex", "per"], ["▁t", "ank"], ["▁pre", "ferences"], ["b", "ow"], ["▁dis", "pl"], ["重", "塑"], ["介", "石"], ["▁L", "ight"], ["如果", "没有"], ["it", "ely"], ["▁im", "pl"], ["▁Direct", "or"], ["她", "的"], ["面", "積"], ["管理", "体制"], ["发", "言"], ["欣", "赏"], ["前", "面"], ["▁po", "ison"], ["▁voc", "als"], ["▁dang", "er"], ["st", "ant"], ["這", "個"], ["▁in", "equ"], ["▁l", "ie"], ["高速", "公路"], ["学", "界"], ["c", "at"], ["手", "法"], ["▁suff", "ered"], [":", "《"], ["▁e", "lder"], ["供给侧", "结构性改革"], ["脊", "髓"], ["▁P", "ub"], ["ell", "er"], ["▁settle", "ment"], ["og", "a"], ["成立", "的"], ["ain", "ts"], ["▁cur", "iosity"], ["骨", "髓"], ["reg", "ular"], ["球", "隊"], ["▁cardi", "ovascular"], ["▁R", "et"], ["朝", "廷"], ["坏", "死"], ["颠", "覆"], ["▁K", "h"], ["and", "y"], ["▁ch", "ose"], ["不", "如"], ["B", "as"], ["▁c", "e"], ["Av", "oid"], ["ot", "or"], ["▁consum", "er"], ["内", "需"], ["这", "与"], ["展", "望"], ["▁P", "sych"], ["通", "過"], ["发展", "规划"], ["▁pass", "age"], ["月", "台"], ["端", "的"], ["R", "N"], ["心", "的"], ["az", "on"], ["G", "PS"], ["▁shap", "ed"], ["▁tem", "ple"], ["定义", "为"], ["P", "o"], ["enn", "is"], ["读", "取"], ["同", "一个"], ["决", "赛"], ["▁prof", "ound"], ["金融", "监管"], ["干", "旱"], ["模", "具"], ["素质", "教育"], ["市场", "需求"], ["相关", "性"], ["图", "谱"], ["▁er", "rors"], ["者", "在"], ["除", "外"], ["ak", "i"], ["H", "P"], ["▁improve", "ments"], ["人民", "为中心"], ["工程", "技术"], ["和", "历史"], ["中国", "社会"], ["非", "物质"], ["▁print", "ed"], ["▁us", "ual"], ["的最", "佳"], ["h", "uman"], ["▁Port", "ug"], ["▁re", "ct"], ["▁hypothes", "is"], ["▁cap", "abilities"], ["▁m", "ir"], ["腐", "蚀"], ["强烈", "的"], ["殖民", "地"], ["▁H", "ead"], ["f", "ile"], ["克", "隆"], ["其", "所"], ["资", "讯"], ["歧", "视"], ["陆", "续"], ["哪", "里"], ["R", "ichard"], ["▁h", "oles"], ["▁m", "ur"], ["▁phys", "ics"], [";", "\""], ["正", "面"], ["为", "目的"], ["全面建设", "社会主义现代化"], ["宏观", "调控"], ["课程", "思政"], ["思想政治", "教育"], ["搜", "集"], ["▁Histor", "ic"], ["日", "志"], ["▁min", "ing"], ["▁app", "lying"], ["▁bre", "eding"], ["限", "定"], ["vest", "ig"], ["s", "ize"], [")", "》"], ["re", "ens"], ["▁commit", "ted"], ["权利", "的"], ["更", "容易"], ["▁Ch", "ild"], ["▁poss", "ibly"], ["▁ben", "e"], ["数据", "进行"], ["W", "ashington"], ["M", "us"], ["ak", "istan"], ["地位", "和"], ["在", "整个"], ["排", "斥"], ["▁head", "s"], ["Ind", "ia"], ["发", "力"], ["增", "高"], ["抓", "好"], ["天", "线"], ["肝", "脏"], ["成员", "国"], ["行政", "部门"], ["与", "企业"], ["T", "otal"], ["che", "ck"], ["▁c", "rick"], ["N", "or"], ["ys", "ics"], ["it", "led"], ["▁the", "ories"], ["尼", "亞"], ["渐", "进"], ["全", "书"], ["ool", "s"], ["向", "前"], ["比", "亚"], ["官", "僚"], ["延", "安"], ["育", "种"], ["过", "敏"], ["结果", "显示"], ["▁P", "ython"], ["le", "ased"], ["▁w", "ish"], ["overn", "or"], ["可", "信"], ["显", "现"], ["▁f", "r"], ["se", "veral"], ["这是", "一个"], ["支", "架"], ["ple", "x"], ["▁F", "ree"], ["ig", "ue"], ["D", "el"], ["公司", "法"], ["与", "实践"], ["创新", "型"], ["俱", "进"], ["因此", "在"], ["▁isol", "ated"], ["▁may", "be"], ["om", "ers"], ["Go", "ogle"], ["oun", "ce"], ["▁ag", "ent"], ["ist", "ed"], ["y", "er"], ["▁g", "ly"], ["▁se", "g"], ["ient", "ific"], ["c", "os"], ["▁sit", "ting"], ["g", "ress"], ["▁farm", "ing"], ["用", "药"], ["发挥", "作用"], ["减", "弱"], ["基础", "知识"], ["上", "一"], ["热", "带"], ["rit", "ical"], ["▁inst", "ances"], ["▁mind", "s"], ["為", "了"], ["新发展", "格局"], ["韧", "性"], ["班", "级"], ["胰岛", "素"], ["的", "增长"], ["心", "灵"], ["▁Spec", "ial"], ["▁pan", "el"], ["O", "ften"], ["总", "的"], ["学", "问"], ["性", "格"], ["以", "色列"], ["▁line", "ar"], ["E", "xt"], ["▁connect", "ing"], ["▁des", "ire"], ["▁represent", "ing"], ["▁t", "ales"], ["本", "法"], ["法律", "制度"], ["氨基", "酸"], ["▁l", "iv"], ["它", "可以"], ["m", "al"], ["t", "em"], ["Int", "roduction"], ["im", "port"], ["占", "用"], ["运行", "的"], ["氧化", "物"], ["底", "层"], ["配", "送"], ["平台", "的"], ["ew", "is"], ["▁J", "ersey"], ["▁Engine", "ering"], ["▁Col", "l"], ["ard", "less"], ["选", "项"], ["▁bene", "ath"], ["▁un", "iform"], ["自", "强"], ["国有", "资产"], ["不", "用"], ["流", "体"], ["▁g", "ut"], ["pl", "ot"], ["的", "分"], ["▁W", "ill"], ["▁fair", "ly"], ["▁min", "ute"], ["▁f", "urn"], ["re", "p"], ["am", "ination"], ["Germ", "any"], ["本", "次"], ["▁En", "vironmental"], ["Mod", "ern"], ["電視", "劇"], ["▁ar", "ise"], ["許", "多"], ["Not", "es"], ["▁C", "E"], ["基本", "原则"], ["从", "此"], ["操", "纵"], ["还", "在"], ["▁as", "p"], ["▁interact", "ive"], ["▁const", "antly"], ["▁sustain", "ability"], ["v", "anced"], ["率", "和"], ["节", "目"], ["A", "fric"], ["R", "ob"], ["iz", "z"], ["▁c", "ensus"], ["是", "与"], ["神经", "系统"], ["约", "翰"], ["▁V", "en"], ["▁for", "th"], ["▁mat", "ches"], ["▁ar", "rest"], ["▁norm", "s"], ["▁list", "ing"], ["片", "段"], ["▁al", "ike"], ["▁wear", "ing"], [")", "="], ["新发展", "理念"], ["不断", "增强"], ["订", "单"], ["基", "建"], ["▁al", "ive"], ["ag", "raph"], ["ra", "it"], ["▁necess", "arily"], ["on", "ents"], ["▁mar", "ks"], ["▁Ed", "ward"], [",", "'▁"], ["▁hus", "band"], ["包含", "了"], ["ri", "p"], ["T", "om"], ["▁n", "od"], ["自主", "学习"], ["紧", "紧"], ["发展", "到"], ["有", "针对"], ["与时", "俱进"], ["follow", "ed"], ["”", ";"], ["相", "连"], ["▁W", "il"], ["▁rep", "ut"], ["▁Ex", "per"], ["▁g", "ast"], ["▁O", "ver"], ["▁sur", "ge"], ["om", "al"], ["▁<", "▁"], ["▁contain", "er"], ["迎", "来"], ["人", "际"], ["摄", "像"], ["問", "題"], ["是", "其"], ["狭", "窄"], ["▁mag", "ical"], ["▁qu", "arter"], ["up", "reme"], ["導", "演"], ["民主", "主义"], ["而", "被"], ["或", "许"], ["很", "高"], ["代表", "性"], ["t", "r"], ["劳动", "争议"], ["S", "um"], ["▁A", "p"], ["▁ox", "id"], ["F", "ree"], ["▁s", "ad"], ["▁acknow", "led"], ["▁he", "ating"], ["内", "生"], ["食", "用"], ["ur", "ches"], ["瑞", "典"], ["ential", "ly"], ["▁n", "ob"], ["▁w", "ound"], ["题", "目"], ["▁C", "orpor"], ["结", "晶"], ["▁M", "ah"], ["公", "斤"], ["▁tra", "ct"], ["凭", "借"], ["阻", "塞"], ["f", "our"], ["合法", "性"], ["▁conf", "ig"], ["▁vary", "ing"], ["直", "播"], ["Or", "gan"], ["一", "度"], ["friend", "ly"], ["▁ed", "ges"], ["▁Mount", "ain"], ["各族", "人民"], ["很", "强的"], ["▁h", "all"], ["并", "为"], ["得到", "的"], ["▁int", "ra"], ["▁cor", "on"], ["▁Cast", "le"], ["▁sp", "ark"], ["S", "ign"], ["▁m", "igration"], ["▁in", "herent"], ["拍", "卖"], ["m", "ath"], ["▁f", "u"], ["ers", "ion"], ["▁liter", "acy"], ["olv", "es"], ["和", "安全"], ["自", "律"], ["问", "卷"], ["的", "艺术"], ["ret", "urn"], ["m", "uch"], ["及", "相关"], ["区域", "的"], ["一", "组"], ["主要", "由"], ["▁correspond", "ing"], ["u", "rolog"], ["的", "作品"], ["第一", "章"], ["经济", "建设"], ["活", "化"], ["中心", "的"], ["▁in", "tern"], ["▁in", "her"], ["▁f", "alse"], ["在", "中"], ["▁R", "em"], ["核", "酸"], ["erm", "an"], ["▁comp", "ris"], ["▁estim", "ates"], ["a", "uc"], ["her", "ic"], ["G", "O"], ["▁J", "ul"], ["▁r", "id"], ["ous", "es"], ["m", "iss"], ["W", "TO"], ["管理", "与"], ["净", "化"], ["竞争", "优势"], ["调", "制"], ["▁mathemat", "ics"], ["以", "确保"], ["P", "e"], ["he", "art"], ["inn", "es"], ["机构", "和"], ["沿", "线"], ["▁calcul", "ated"], ["▁dial", "ogue"], ["▁A", "f"], ["人为", "本"], ["由此", "可见"], ["政治", "经济学"], ["内容", "和"], ["广东", "省"], ["理", "性的"], ["这", "对"], ["服务", "于"], ["梦", "想"], ["▁G", "irl"], [".▁", ".▁"], ["▁", "*▁"], ["參", "見"], ["这", "将"], ["的", "程度"], ["▁abs", "ence"], ["▁str", "ange"], ["助", "理"], ["ocyt", "es"], ["▁N", "az"], ["学", "前"], ["五", "四"], ["等", "相关"], ["学校", "的"], ["日", "前"], ["问题", "上"], ["aw", "are"], ["▁implement", "ed"], ["▁t", "act"], ["Fig", "ure"], ["▁meas", "uring"], ["▁", "ille"], ["▁paint", "ings"], ["化", "疗"], ["在", "进行"], ["Con", "nect"], ["en", "ess"], ["▁D", "ar"], ["地", "形"], ["▁athlet", "es"], ["▁S", "at"], ["▁path", "ways"], ["试", "题"], ["一", "线"], ["明", "清"], ["ik", "i"], ["▁dem", "ands"], ["▁eng", "ines"], ["▁est", "ate"], ["##", "▁"], ["第二", "章"], ["。", "」"], ["器", "和"], ["以", "太"], ["采", "访"], ["设", "有"], ["ann", "a"], ["。", "▁▁"], ["▁mit", "ig"], ["文物保护", "单位"], ["传统", "产业"], ["脆", "弱"], ["俄", "羅斯"], ["高", "性能"], ["參", "加"], ["基督", "教"], ["▁def", "ense"], ["char", "ge"], ["地", "进行"], ["F", "our"], ["ath", "an"], ["▁Gl", "obal"], ["▁sh", "ares"], ["U", "SA"], ["▁int", "rig"], ["▁equ", "ally"], ["▁mount", "ains"], ["ed", "eration"], ["万", "物"], ["极", "限"], ["分析", "方法"], ["Wh", "ite"], ["中", "对"], ["V", "A"], ["▁mag", "ic"], ["纽", "约"], ["▁ref", "uge"], ["ad", "der"], ["注意", "力"], ["医", "师"], ["▁Rep", "ort"], ["reg", "on"], ["ang", "ered"], ["▁st", "ead"], ["▁vol", "tage"], ["其中", "包括"], ["▁bur", "ning"], ["▁celebr", "ate"], ["▁sole", "ly"], ["▁V", "is"], ["▁F", "our"], ["心理", "健康"], ["另", "有"], ["证明", "了"], ["opy", "right"], ["▁int", "ensity"], ["▁res", "id"], ["▁light", "ing"], ["▁over", "come"], ["ater", "al"], ["江", "南"], ["接", "着"], ["恩", "格斯"], ["▁tow", "er"], ["亞", "洲"], ["营", "商"], ["竞争", "力的"], ["增加", "值"], ["最", "高的"], ["F", "i"], ["rou", "d"], ["▁M", "en"], ["消", "毒"], ["附", "属"], ["ac", "ob"], ["▁old", "est"], ["▁victim", "s"], ["教", "研"], ["连", "带"], ["我们", "必须"], ["▁custom", "er"], ["Writ", "e"], ["T", "w"], ["z", "er"], ["可", "知"], ["结果", "的"], ["©", "▁"], ["升", "值"], ["可以", "分为"], ["和", "政策"], ["缺", "血"], ["适应", "性"], ["国际", "社会"], ["P", "en"], ["ol", "t"], ["▁g", "athered"], ["f", "ocus"], ["收", "藏"], ["使用", "者"], ["空间", "的"], ["愿", "望"], ["L", "aw"], ["▁gu", "arant"], ["ran", "ch"], ["▁J", "ack"], ["▁O", "ther"], ["▁cover", "age"], ["▁fin", "ish"], ["新", "聞"], ["C", "oll"], ["瑞", "士"], ["几", "十"], ["薪", "酬"], ["预", "报"], ["要", "加强"], ["调", "试"], ["模", "板"], ["▁even", "ing"], ["▁exc", "ited"], ["▁b", "ag"], ["▁bi", "om"], ["▁neut", "ral"], ["▁p", "eoples"], ["▁accur", "ately"], ["▁r", "itual"], ["▁prob", "ability"], ["▁H", "is"], ["F", "rance"], ["l", "ook"], ["d", "el"], ["▁ecosystem", "s"], ["。", "["], ["的", "态度"], ["为", "指导"], ["电", "能"], ["过", "多"], ["欺", "诈"], ["完成", "的"], ["al", "ian"], ["h", "istor"], ["中国人民", "解放军"], ["▁F", "red"], ["ed", "u"], ["▁Can", "cer"], ["▁broad", "cast"], ["▁t", "rick"], ["▁interpret", "ation"], ["an", "ied"], ["昭", "和"], ["三", "级"], ["▁rob", "ust"], ["德", "里"], ["▁Br", "idge"], ["▁mod", "ified"], ["权", "重"], ["更", "重要的是"], ["案件", "的"], ["是", "由于"], ["▁wood", "en"], ["▁Mod", "ern"], ["判", "定"], ["根", "基"], ["▁concer", "ning"], ["位", "点"], ["条", "第"], ["马克思主义", "中国"], ["治理体系和", "治理能力"], ["业", "主"], ["公务", "员"], ["应", "以"], ["现", "阶段"], ["要", "从"], ["的", "治疗"], ["R", "O"], ["▁app", "eal"], ["联", "赛"], ["▁prevent", "ing"], ["▁scen", "es"], ["c", "ultural"], ["也", "不是"], ["做", "出了"], ["▁Phil", "ipp"], ["L", "ittle"], ["ha", "ust"], ["▁cal", "m"], ["▁act", "ing"], ["▁decl", "ared"], ["▁n", "ose"], ["▁(", ")▁"], ["更", "具"], ["周", "恩"], ["展", "览"], ["公", "允"], ["分别", "是"], ["ct", "ive"], ["课题", "组"], ["▁clean", "ing"], ["▁grow", "s"], ["▁purch", "ased"], ["▁r", "ats"], ["▁involve", "ment"], ["明", "白"], ["业务", "的"], ["f", "ire"], ["T", "exas"], ["Sm", "ith"], ["iox", "id"], ["酒", "店"], ["▁diam", "eter"], ["可以", "使用"], ["un", "s"], ["倾", "斜"], ["装", "配"], ["并", "无"], ["潜", "能"], ["偿", "还"], ["实", "在"], ["武", "帝"], ["ys", "elf"], ["▁cell", "ular"], [":", "("], ["皇", "家"], ["▁enh", "anced"], ["自动", "驾驶"], ["分", "別"], ["innes", "ota"], ["▁ep", "it"], ["▁prov", "ed"], ["ru", "b"], ["▁integ", "ration"], ["党的", "二十"], ["供", "需"], ["开发", "利用"], ["范围", "的"], ["se", "y"], ["羽", "毛"], ["终", "于"], ["項", "目"], ["▁ast", "hma"], ["▁fish", "ing"], ["l", "ive"], ["▁attem", "pts"], ["▁M", "id"], ["结构", "调整"], ["皮", "质"], ["▁Med", "ia"], ["▁R", "NA"], ["▁con", "clusion"], ["d", "oes"], ["sec", "ond"], ["▁def", "end"], ["▁supp", "osed"], ["d", "ate"], ["▁spect", "rum"], ["▁sens", "ors"], ["税", "法"], ["蒋", "介石"], ["月", "至"], ["▁to", "y"], ["ro", "ck"], ["O", "ff"], ["o", "ons"], ["▁depend", "ent"], ["卡", "尔"], ["▁virus", "es"], ["▁prec", "ise"], ["和", "不"], ["自然", "界"], ["Su", "pp"], ["pro", "cess"], ["▁vis", "ited"], ["到", "期"], ["的", "综合"], ["过", "失"], ["有", "很多"], ["的", "统一"], ["▁t", "ight"], ["▁analy", "zed"], ["▁phr", "ase"], ["▁pres", "erving"], ["▁rec", "over"], ["f", "eed"], ["荷", "兰"], ["Q", "ue"], ["▁F", "ire"], ["▁engine", "ers"], ["lect", "ing"], ["轻", "松"], ["据", "此"], ["也", "许"], ["被", "视为"], ["sc", "ience"], ["他", "说"], ["用", "工"], ["临床", "试验"], ["每", "个人"], ["何", "种"], ["公共", "利益"], ["林", "业"], ["有", "无"], ["还", "可"], ["b", "ul"], ["除", "此"], ["ian", "ts"], ["I", "g"], ["▁B", "u"], ["信", "道"], ["要", "想"], ["De", "cember"], ["國", "民"], ["▁stud", "io"], ["I", "ll"], ["同比", "增长"], ["人民", "民主"], ["附", "录"], ["大", "胆"], ["并", "存"], ["ess", "ment"], ["im", "pro"], ["op", "en"], ["e", "ast"], ["iss", "ance"], ["ple", "ase"], ["▁var", "ieties"], ["外", "来"], ["▁person", "ality"], ["▁deliv", "ered"], ["▁well", "being"], ["千", "瓦"], ["犯罪", "嫌疑"], ["投", "影"], ["汉", "族"], ["▁o", "vers"], ["法", "典"], ["年", "和"], ["adel", "ph"], ["▁weap", "ons"], ["ogen", "esis"], ["→", "▁"], ["线", "下"], ["是", "社会"], ["天", "主教"], ["itz", "er"], ["▁Budd", "h"], ["▁U", "r"], ["示", "例"], ["s", "um"], ["▁renew", "able"], ["▁techn", "ological"], ["▁ext", "end"], ["J", "ournal"], ["龙", "江"], ["結", "果"], ["u", "i"], ["▁Oh", "io"], ["ricult", "ure"], ["▁put", "ting"], ["▁c", "riminal"], ["》", "."], ["和", "处理"], ["经营", "管理"], ["增", "量"], ["仔", "细"], ["和", "生产"], ["每", "日"], ["▁L", "ee"], ["▁employ", "ment"], ["▁f", "lying"], ["▁hard", "er"], ["▁N", "atural"], ["制造", "商"], ["顾", "问"], ["器", "械"], ["聚", "合物"], ["B", "D"], ["▁P", "rize"], ["▁K", "ong"], ["▁L", "im"], ["。", "$"], ["座", "谈"], ["我国", "在"], ["▁b", "anks"], ["Mem", "bers"], ["▁min", "i"], ["p", "ur"], ["form", "ance"], ["选择", "性"], ["焊", "接"], ["和", "组织"], ["强制", "性"], ["输", "送"], ["▁con", "ven"], ["▁satis", "f"], ["▁consider", "ation"], ["以下几个", "方面"], ["分", "层"], ["余", "额"], ["淀", "粉"], ["基础", "性"], ["ex", "cept"], ["L", "ar"], ["let", "on"], ["▁c", "ash"], ["it", "ively"], ["▁display", "ed"], ["▁M", "ain"], ["▁C", "orn"], ["▁sec", "re"], ["sh", "aped"], ["以", "实现"], ["ividual", "s"], ["under", "standing"], ["▁cal", "ories"], ["▁lung", "s"], ["青", "春"], [".", "|"], ["产品", "质量"], ["国家", "战略"], ["設", "有"], ["▁pregn", "ant"], ["▁pro", "ceed"], ["▁qu", "alities"], ["▁scen", "arios"], ["ble", "m"], ["As", "k"], ["t", "d"], ["小", "說"], ["世界", "观"], ["可以", "帮助"], ["S", "er"], ["缓", "冲"], ["c", "n"], ["O", "ctober"], ["st", "orm"], ["ipp", "i"], ["▁Hol", "y"], ["感", "受到"], ["因", "地"], ["纳税", "人"], ["屏", "障"], ["保险", "人"], ["还", "将"], ["par", "ts"], ["ove", "ment"], ["M", "RI"], ["▁ris", "ing"], ["N", "ature"], ["P", "ersonal"], ["▁legisl", "ation"], ["低", "的"], ["和", "国际"], ["個", "人"], ["ress", "es"], ["▁tem", "por"], ["犯罪", "的"], ["儒", "学"], ["一个", "国家"], ["▁stre", "ets"], ["ether", "lands"], ["数据", "传输"], ["▁var", "iation"], ["▁can", "cers"], ["▁w", "ine"], ["一", "份"], ["出", "任"], ["隐", "藏"], ["S", "al"], ["im", "ents"], ["▁dis", "aster"], ["文化", "建设"], ["密集", "型"], ["adelph", "ia"], ["▁R", "ich"], ["v", "ance"], ["▁ag", "ed"], ["▁contribut", "es"], ["其", "二"], ["准确", "地"], ["互联", "互通"], ["理论", "基础"], ["不可", "避免"], ["沿", "着"], ["汇", "聚"], ["确定", "性"], ["身", "上"], ["he", "at"], ["▁Res", "ources"], ["行政区", "划"], ["雖", "然"], ["仍然", "是"], ["为基础", "的"], ["▁be", "at"], ["尼", "斯"], ["▁att", "ach"], ["▁sh", "op"], ["▁c", "av"], ["▁L", "uc"], ["不", "容"], ["所", "说的"], ["工", "伤"], ["P", "a"], ["▁He", "art"], ["j", "ud"], ["ie", "ve"], ["(,", "),"], ["公元", "前"], ["f", "oot"], ["i", "op"], ["am", "ous"], ["▁path", "way"], ["分析", "与"], ["即", "在"], ["胎", "儿"], ["我们", "对"], ["rese", "arch"], ["▁domin", "ant"], ["▁extra", "ordinary"], ["人", "員"], ["ik", "a"], ["▁Just", "ice"], ["金融", "业"], ["为", "重点"], ["增强", "了"], ["边", "际"], ["进入", "了"], ["▁review", "s"], [":", "“"], ["▁Ex", "pl"], ["的最", "终"], ["这是", "因为"], ["▁st", "ones"], ["男", "女"], ["un", "n"], ["ig", "ma"], ["本", "体"], ["广", "场"], ["伯", "特"], ["D", "oes"], ["▁b", "att"], ["▁min", "imal"], ["俱", "乐"], ["临", "界"], ["▁limit", "ations"], ["▁narr", "ative"], ["ut", "ely"], ["▁poss", "ibilities"], ["St", "ate"], ["遏", "制"], ["▁gal", "ax"], ["ict", "ional"], ["文", "的"], ["▁sub", "sequently"], ["仅", "有"], ["这", "么"], ["浪", "潮"], ["否", "认"], ["体", "重"], ["▁t", "ick"], ["累", "积"], ["▁mem", "or"], ["u", "er"], ["月", "的"], ["▁de", "ploy"], ["第三", "章"], ["宅", "基地"], ["摄", "入"], ["课", "外"], ["ym", "ptoms"], ["▁for", "g"], ["▁orig", "ins"], ["▁cl", "ient"], ["描", "绘"], ["▁sur", "g"], ["▁p", "ounds"], ["p", "m"], ["▁vess", "el"], ["民事", "诉讼"], ["饲", "料"], ["中", "枢"], ["恰", "当"], ["热", "量"], ["教", "会"], ["较", "快"], ["治疗", "的"], ["西", "洋"], ["▁ch", "ampions"], ["▁elect", "ions"], ["▁function", "ing"], ["\t\t", "\t\t"], ["▁K", "en"], ["▁execut", "ive"], ["itar", "ian"], ["▁pan", "els"], ["会", "出现"], ["▁ord", "inary"], ["c", "ap"], ["G", "old"], ["诗", "人"], ["Cont", "in"], ["▁H", "on"], ["▁emphas", "is"], ["▁sac", "r"], ["▁res", "c"], ["淋巴", "结"], ["el", "d"], ["首", "位"], ["用", "以"], ["負", "責"], ["C", "a"], ["▁cl", "ock"], ["▁min", "eral"], ["a", "very"], ["▁prov", "en"], ["▁am", "idst"], ["▁vibr", "ant"], ["ra", "ine"], ["谨", "慎"], ["致", "病"], ["▁l", "ingu"], ["as", "m"], ["gra", "de"], ["in", "flamm"], ["add", "ing"], ["▁dest", "ruction"], ["N", "ovember"], ["▁activ", "ely"], ["▁ident", "ities"], ["▁R", "am"], ["”,", "“"], ["\n", "  "], ["文化", "产业"], ["零", "部件"], ["着眼", "于"], ["水", "土"], ["制", "宜"], ["智", "库"], ["清", "醒"], ["诱", "发"], ["时", "机"], ["选", "拔"], ["国", "会"], ["综", "述"], ["▁Champions", "hips"], ["标", "本"], ["▁cl", "ients"], ["Su", "per"], ["下", "了"], ["也", "应"], ["曾", "任"], ["盲", "目"], ["Can", "adian"], ["z", "heimer"], ["▁bre", "aking"], ["▁marg", "inal"], ["igh", "th"], ["su", "pport"], ["▁ve", "ctor"], ["事件", "的"], ["物", "业"], ["水", "质"], ["离", "散"], ["规", "格"], ["不仅仅", "是"], ["角", "膜"], ["▁", "±"], ["十", "字"], ["Wh", "ich"], ["▁Con", "ference"], ["▁focus", "ing"], ["▁T", "wo"], ["▁E", "xt"], ["ol", "is"], ["▁T", "ype"], ["▁rem", "oval"], ["▁adap", "ted"], ["低", "收入"], ["清", "理"], ["超", "出"], ["P", "CR"], ["年", "后"], ["火", "山"], ["▁gent", "le"], ["賽", "事"], ["大", "夫"], ["第三", "次"], ["▁form", "ing"], ["▁maintain", "ed"], ["▁En", "ter"], ["d", "y"], ["的重要", "内容"], ["专", "制"], ["损", "耗"], ["和", "环境"], ["根据", "地"], ["中国", "人"], ["构成", "的"], ["ric", "ks"], ["e", "ither"], ["N", "a"], ["▁autom", "atically"], ["▁person", "nel"], ["的", "土地"], ["▁ne", "ural"], ["将", "是"], ["▁Bar", "on"], ["am", "ie"], ["▁ste", "am"], ["新的", "历史"], ["必", "修"], ["权利", "人"], ["设", "想"], ["望", "远"], ["ill", "age"], ["▁f", "ur"], ["av", "en"], ["in", "als"], ["古", "老"], ["▁pur", "s"], ["▁O", "F"], ["T", "H"], ["存", "量"], ["等", "多个"], ["签", "名"], ["精", "细"], ["色", "的"], ["▁cl", "othes"], ["▁ind", "eed"], ["▁phys", "ically"], ["ut", "ies"], ["N", "E"], ["You", "ng"], ["画", "面"], ["▁break", "s"], ["▁dist", "urb"], ["ro", "c"], ["▁ra", "c"], ["l", "ation"], ["能", "动"], ["制", "裁"], ["基", "石"], ["生态", "保护"], ["des", "ign"], ["▁sp", "r"], ["母", "亲"], ["▁vict", "ory"], ["村", "庄"], ["m", "ax"], ["播", "出"], ["row", "th"], ["▁p", "airs"], ["▁F", "ield"], ["照", "明"], ["en", "er"], ["▁ent", "ering"], ["▁port", "ray"], ["不", "大"], ["荣", "誉"], ["D", "irect"], ["▁s", "hed"], ["。", "。"], ["S", "W"], ["新", "业态"], ["绿色", "低碳"], ["品", "德"], ["底", "线"], ["见", "解"], ["感", "性"], ["固", "定的"], ["With", "in"], ["▁Are", "a"], ["e", "h"], ["W", "in"], ["al", "o"], ["显微", "镜"], ["的", "语言"], ["▁tit", "les"], ["▁comput", "ing"], ["医", "学院"], ["也", "包括"], ["ourn", "ament"], ["▁bet", "a"], ["▁war", "ning"], ["▁F", "ar"], ["的", "联系"], ["实", "地"], ["高", "新技术"], ["水", "肿"], ["源", "泉"], ["的", "现实"], ["ut", "her"], ["With", "out"], ["▁inter", "ior"], ["▁pass", "es"], ["士", "兵"], ["争", "论"], ["忠", "诚"], ["点", "击"], ["▁P", "ot"], ["ia", "h"], ["▁dis", "par"], ["可行", "性"], ["面", "貌"], ["之", "地"], ["的", "基因"], ["更", "改"], ["大", "事"], ["c", "ould"], ["cept", "ions"], ["▁aud", "io"], ["▁avail", "ability"], ["和", "地方"], ["会", "使"], ["备", "案"], ["的", "必要"], ["组", "分"], ["以", "提高"], ["的", "评价"], ["的", "服务"], ["com", "b"], ["▁I", "mp"], ["▁trans", "formation"], ["in", "te"], ["Fran", "k"], ["▁Sec", "urity"], ["▁con", "vert"], ["▁v", "el"], ["▁but", "ton"], ["D", "ou"], ["捕", "获"], ["性质", "的"], ["▁requ", "iring"], ["▁establish", "ments"], ["形势", "下"], ["医疗", "服务"], ["基础", "教育"], ["大幅", "度"], ["一", "词"], ["▁M", "ichigan"], ["▁vill", "ages"], ["▁gr", "ant"], ["▁earl", "iest"], ["▁ful", "f"], ["▁D", "ie"], ["山", "区"], ["gra", "du"], ["sug", "gest"], ["▁determ", "ination"], ["R", "D"], ["公平", "正义"], ["即", "便"], ["束", "缚"], ["他", "人的"], ["▁prog", "ression"], ["▁ear", "ned"], ["iz", "ers"], ["ing", "ing"], ["▁E", "U"], ["都", "具有"], ["估", "算"], ["本身", "的"], ["网", "关"], ["发表", "了"], ["变", "量的"], ["人口", "的"], ["ess", "ion"], ["per", "haps"], ["▁enthus", "ias"], ["▁explan", "ation"], ["戰", "爭"], ["有", "期徒刑"], ["细胞", "中"], ["中国共产党", "领导"], ["外", "观"], ["aw", "ay"], ["a", "que"], ["▁Scott", "ish"], ["Austral", "ia"], ["▁inhabit", "ants"], ["教", "堂"], ["s", "it"], ["重", "力"], ["和", "个人"], ["公安", "机关"], ["所", "学"], ["临床", "表现"], ["隐", "性"], ["常", "识"], ["帝国", "主义"], ["转移", "到"], ["▁comp", "ound"], ["拍", "摄"], ["amil", "iar"], ["孤", "立"], ["▁fl", "ash"], ["o", "is"], ["交换", "机"], ["有", "一定的"], ["▁Ch", "ange"], ["▁se", "ver"], ["▁print", "ing"], ["qu", "est"], ["▁ro", "yal"], ["▁high", "lights"], ["▁car", "cin"], ["▁vers", "us"], ["pt", "ic"], ["年夏季", "奥林匹克运动会"], ["图", "的"], ["石墨", "烯"], ["观察", "到"], ["▁or", "bit"], ["催", "生"], ["州", "的"], ["amp", "ion"], ["氧", "气"], ["▁enem", "y"], ["水", "量"], [".", "'▁"], ["▁apprec", "iation"], ["▁Reg", "ion"], ["既", "然"], ["理论", "体系"], ["▁f", "estival"], ["望远", "镜"], ["为", "何"], ["▁thous", "and"], ["ra", "v"], ["吉", "林"], ["为", "目标"], ["▁v", "oices"], ["导", "入"], ["▁assess", "ed"], ["riz", "ona"], ["职业", "技能"], ["理想", "信念"], ["严", "密"], ["也", "存在"], ["并", "进行"], ["ac", "qu"], ["ram", "e"], ["▁ro", "se"], ["▁S", "ign"], ["▁cur", "ve"], ["同", "类"], ["过去", "的"], ["▁music", "ians"], ["s", "ens"], ["in", "ates"], ["on", "ce"], ["Reg", "ular"], ["▁St", "an"], ["六", "年"], ["图", "表"], ["制度", "建设"], ["医疗", "机构"], ["与", "传统"], ["担", "心"], ["一", "人"], ["▁L", "ead"], ["▁con", "j"], ["ict", "ions"], ["▁fun", "g"], ["▁engine", "er"], ["n", "ecess"], ["▁emb", "ra"], ["aw", "n"], ["st", "ers"], ["C", "F"], ["出版", "的"], ["是", "个"], ["ric", "ted"], ["▁authent", "ic"], ["▁B", "ow"], ["▁t", "or"], ["團", "體"], ["所", "产生的"], ["操作", "性"], ["党", "政"], ["▁B", "al"], ["B", "O"], ["%", "~"], ["解", "散"], ["▁P", "oint"], ["H", "uman"], ["iss", "ippi"], ["▁sl", "avery"], ["聯", "合"], ["牢", "固"], ["均", "可"], ["重", "量"], ["ict", "ure"], ["▁J", "eff"], ["▁t", "on"], ["▁c", "ats"], ["ant", "i"], ["l", "an"], ["治", "安"], ["民营", "企业"], ["收入", "的"], ["可持续", "发展的"], ["权", "力的"], ["民族", "的"], ["▁High", "way"], ["▁consum", "e"], ["本", "研究"], ["▁elev", "ated"], ["D", "own"], ["ed", "ge"], ["▁et", "c"], ["▁evalu", "ated"], ["ne", "um"], ["ot", "ional"], ["在这种", "情况下"], ["波", "长"], ["应", "收"], ["影响", "到"], ["药", "物的"], ["京", "津"], ["手", "中"], ["世纪", "初"], ["成熟", "的"], ["▁tem", "porary"], ["▁contribut", "ing"], ["▁diet", "ary"], ["大", "陸"], ["不", "稳定"], ["类似", "的"], ["妻", "子"], ["er", "as"], ["f", "all"], ["▁W", "eek"], ["▁B", "at"], ["增长", "率"], ["植", "入"], ["▁dis", "abilities"], ["網", "站"], ["▁observ", "ation"], ["um", "er"], ["▁c", "ord"], ["物", "料"], ["叙", "述"], ["显示", "出"], ["▁bl", "ind"], ["dep", "ending"], ["▁household", "s"], ["▁ch", "ances"], ["▁ord", "ered"], ["m", "ates"], ["▁fing", "ers"], ["旅", "行"], ["▁football", "ers"], ["▁separ", "ated"], ["运营", "商"], ["ter", "ior"], ["e", "z"], ["▁Car", "l"], ["Europ", "ean"], ["▁A", "ff"], ["}", "{"], ["艰", "巨"], ["公", "主"], ["Sc", "ott"], ["的", "两"], ["▁fif", "th"], ["▁M", "arc"], ["▁C", "ub"], ["▁imp", "air"], ["和", "解"], ["▁H", "am"], ["▁G", "ame"], ["控制", "和"], ["效", "用"], ["▁hard", "ware"], ["▁stop", "ped"], ["r", "ial"], ["i", "ating"], ["▁Tr", "ust"], ["as", "ant"], ["▁l", "y"], ["严", "谨"], ["供", "求"], ["贫", "血"], ["▁inc", "ident"], ["▁collect", "ions"], ["共和", "國"], ["pre", "ne"], ["▁therm", "al"], ["已", "經"], ["▁In", "c"], ["还", "存在"], ["被", "迫"], ["ig", "her"], ["▁phys", "ician"], ["▁re", "ward"], ["▁f", "ostering"], ["計", "劃"], ["▁Re", "al"], ["S", "il"], ["ic", "ting"], ["设计", "与"], ["学", "员"], ["辉", "煌"], ["内部", "审计"], ["本", "来"], ["▁S", "anta"], ["少", "的"], ["画", "家"], ["並", "且"], ["▁K", "ent"], ["编", "号"], ["▁arg", "uments"], ["ou", "ds"], ["g", "ence"], ["d", "am"], ["S", "k"], ["性", "原则"], ["进一步", "提高"], ["不", "了"], ["提", "醒"], ["影", "片"], ["配", "音"], ["技", "術"], ["ed", "er"], ["▁med", "ieval"], ["▁rough", "ly"], ["光", "明"], ["保", "全"], ["试验", "区"], ["历", "代"], ["化学", "反应"], ["溶", "剂"], ["在", "一些"], ["二", "世"], ["艺术", "家"], ["▁m", "yself"], ["ex", "ts"], ["y", "ard"], ["▁direct", "ions"], ["▁rout", "es"], ["湿", "度"], ["关注", "的"], ["re", "prene"], ["”", "."], ["领", "袖"], ["▁Her", "itage"], ["c", "ur"], ["yn", "asty"], ["u", "z"], ["w", "ind"], ["\u0006", "\u0006"], ["全面从严", "治党"], ["之", "内"], ["征", "求"], ["科", "举"], ["pro", "duct"], ["一般", "来说"], ["以及", "对"], ["功", "夫"], ["凝", "胶"], ["即", "是"], ["播", "放"], ["有", "趣"], ["▁prepar", "ing"], ["▁when", "ever"], ["生物", "质"], ["▁pro", "spect"], ["名", "词"], ["财", "物"], ["看", "待"], ["阐述", "了"], ["企业", "管理"], ["致", "的"], ["之", "初"], ["高", "峰"], ["用", "例"], ["明", "治"], ["水", "分"], ["▁w", "at"], ["og", "y"], ["源", "自"], ["f", "ront"], ["是", "非"], ["开发", "和"], ["空", "白"], ["▁An", "alysis"], ["ib", "li"], ["erc", "ise"], ["▁obst", "acles"], ["社会", "保险"], ["趋", "于"], ["整", "治"], ["▁T", "our"], ["?", "**"], ["是指", "在"], ["概", "论"], ["的", "实验"], ["仅", "为"], ["az", "e"], ["ediat", "ric"], ["▁Olymp", "ic"], ["c", "ence"], ["▁h", "orses"], ["行政", "行为"], ["有关", "规定"], ["范围", "内的"], ["▁J", "ones"], ["▁loss", "es"], ["▁ch", "ocolate"], ["P", "ower"], ["▁sc", "hedule"], ["▁J", "an"], ["▁flex", "ible"], ["▁re", "aches"], ["b", "uilding"], ["F", "ebruary"], ["建设", "工程"], ["集体", "经济"], ["长", "效"], ["的", "事实"], ["打", "通"], ["御", "史"], ["的主要", "内容"], ["补", "助"], ["▁ass", "ets"], ["发布", "了"], ["▁dr", "inks"], ["▁l", "aser"], ["K", "now"], ["b", "est"], ["▁", ")▁"], ["细胞", "和"], ["通过", "了"], ["改", "制"], ["这样", "一个"], ["题", "材"], ["素", "材"], ["▁N", "ight"], ["▁sem", "i"], ["▁equ", "ality"], ["▁t", "ough"], ["▁deb", "t"], ["▁B", "ase"], ["▁", "id"], ["ut", "s"], ["行政", "处罚"], ["理论", "研究"], ["ail", "able"], ["原", "来的"], ["精", "心"], ["▁inf", "ect"], ["k", "ind"], ["▁F", "act"], ["▁B", "usiness"], ["or", "b"], ["elf", "are"], ["▁K", "now"], ["可以", "实现"], ["知识", "分子"], ["▁ju", "ice"], ["inc", "orpor"], ["▁leg", "end"], ["sh", "ould"], ["▁bal", "anced"], ["▁Sur", "vey"], ["自然", "保护"], ["规划", "和"], ["施", "加"], ["青", "藏"], ["▁expl", "ored"], ["▁veget", "ation"], ["▁su", "it"], ["▁m", "osqu"], ["▁plan", "ets"], ["▁di", "pl"], ["中国", "在"], ["相", "等"], ["之", "际"], ["杂", "交"], ["▁dro", "pped"], ["▁will", "ing"], ["的", "事"], ["i", "ations"], ["T", "op"], ["▁k", "in"], ["T", "ype"], ["、", "《"], ["主要", "矛盾"], ["银行", "的"], ["举", "例"], ["消费", "者的"], ["起", "草"], ["北", "宋"], ["抓", "手"], ["可以", "为"], ["▁class", "ified"], ["▁ver", "tical"], ["门", "槛"], ["▁B", "oy"], ["Pro", "t"], ["B", "er"], ["Japan", "ese"], ["▁trans", "mit"], ["▁contribut", "ion"], ["]", ";"], ["村", "落"], ["ran", "ean"], ["▁f", "ought"], ["▁sudden", "ly"], ["▁sh", "ock"], ["in", "ition"], ["土", "耳"], ["iv", "o"], ["▁prefer", "red"], ["中华", "文明"], ["更", "要"], ["亲", "自"], ["充分", "的"], ["温室", "气体"], ["政府", "在"], ["▁F", "er"], ["▁doll", "ars"], ["▁s", "elling"], ["日本", "的"], ["总", "部"], ["▁Aut", "hor"], ["▁indu", "ced"], ["ach", "ine"], ["app", "ed"], ["▁own", "ership"], ["安全", "和"], ["天", "的"], ["功", "耗"], ["ow", "a"], ["商", "人"], ["▁Th", "is"], ["isc", "ons"], ["▁illustr", "ate"], ["中", "长期"], ["尚", "不"], ["银", "行业"], ["废", "除"], ["▁d", "imensions"], ["▁mod", "erate"], ["▁C", "re"], ["状态", "的"], ["將", "軍"], ["▁Ch", "arl"], ["el", "ve"], ["a", "ug"], ["▁vir", "al"], ["▁sp", "oken"], ["Sm", "all"], ["▁strugg", "les"], ["届", "全国人大"], ["相", "位"], ["各", "界"], ["周恩", "来"], ["ane", "ous"], ["学", "和"], ["▁ar", "ter"], ["相", "邻"], ["▁lo", "op"], ["iscons", "in"], ["▁gl", "obe"], ["俱乐", "部"], ["水", "中"], ["精", "英"], ["的主", "题"], ["F", "M"], ["um", "ns"], ["電", "子"], ["▁b", "inding"], ["爱国", "主义"], ["复", "发"], ["产业", "集群"], ["数", "十"], ["见", "于"], ["综合", "素质"], ["赤", "字"], ["视", "力"], ["一直", "是"], ["教", "室"], ["党员", "干部"], ["分", "歧"], ["▁anal", "yt"], ["arm", "ing"], ["▁wonder", "ful"], ["決", "定"], ["▁comb", "ine"], ["▁tax", "es"], ["as", "is"], ["代理", "人"], ["黑", "龙江"], ["总", "局"], ["火", "灾"], ["特点", "是"], ["最", "好的"], ["▁man", "ual"], ["▁camp", "us"], ["共", "性"], ["中国特色社会主义", "制度"], ["发展", "与"], ["管理", "等"], ["健康", "的"], ["什么", "样的"], ["船", "舶"], ["sim", "ilar"], ["á", "n"], ["agn", "etic"], ["▁G", "eorgia"], ["▁Sh", "ow"], ["成", "品"], ["通常", "是"], ["▁diagn", "ostic"], ["▁f", "ert"], ["L", "L"], ["arch", "y"], ["S", "i"], ["海", "岸"], ["课堂", "上"], ["阵", "地"], ["▁J", "o"], ["缔", "约"], ["的", "东西"], ["▁sc", "ar"], ["▁com", "ments"], ["▁cho", "osing"], ["的", "含义"], ["废", "物"], ["▁S", "arah"], ["▁celebr", "ated"], ["▁character", "istic"], ["▁proport", "ion"], ["▁conf", "ident"], ["市", "的"], ["ur", "is"], ["土耳", "其"], ["Sh", "ort"], ["政", "法"], ["不动", "产"], ["加大", "对"], ["立", "案"], ["峰", "值"], ["文", "人"], ["语", "境"], ["▁B", "ut"], ["即", "为"], ["观", "众"], ["%", ".▁"], ["一个", "人"], ["要", "么"], ["s", "per"], ["▁c", "as"], ["▁gard", "ens"], ["▁haz", "ard"], ["▁than", "ks"], ["p", "ain"], ["▁El", "izabeth"], ["▁recept", "ors"], ["▁co", "at"], ["▁dr", "ivers"], ["新", "建"], ["▁c", "oc"], ["工业", "革命"], ["同", "等"], ["给", "付"], ["欧", "美"], ["的", "道路"], ["▁tra", "il"], ["ere", "n"], ["真", "空"], ["▁al", "le"], ["ok", "es"], ["com", "put"], ["▁sing", "er"], ["终", "结"], ["▁swim", "ming"], ["到", "来"], ["立", "德"], ["rem", "ember"], ["E", "r"], ["d", "imensional"], ["▁Mod", "el"], ["x", "im"], ["专业", "知识"], ["应", "变"], ["提", "炼"], ["收", "获"], ["▁sett", "led"], ["一", "支"], ["▁act", "ors"], ["特", "区"], ["l", "ink"], ["P", "resident"], ["▁par", "as"], ["▁A", "venue"], ["▁perform", "ances"], ["史", "学"], ["光", "电"], ["学", "业"], ["纯", "粹"], ["port", "ation"], ["依", "次"], ["t", "ension"], ["on", "ent"], ["出", "席"], ["▁h", "yd"], ["统一", "战线"], ["自然", "人"], ["军", "区"], ["▁a", "es"], ["▁g", "um"], ["▁elim", "inate"], ["有", "用"], ["▁psych", "ology"], ["▁O", "tt"], ["id", "al"], ["▁pr", "ime"], ["▁bo", "at"], ["▁replace", "ment"], ["ag", "re"], ["▁occur", "ring"], ["的", "限制"], ["體", "育"], ["b", "urn"], ["▁pro", "lif"], ["ard", "ing"], ["▁aud", "iences"], ["▁del", "icious"], ["▁win", "ning"], ["抗日", "战争"], ["外", "商"], ["创造", "力"], ["质", "押"], ["返", "还"], ["领", "会"], ["启", "蒙"], ["欲", "望"], ["的大", "量"], ["olit", "an"], ["▁se", "gment"], ["▁per", "mission"], ["青", "山"], ["▁ant", "icip"], ["▁pre", "y"], ["不", "超过"], ["更多", "地"], ["▁deg", "rad"], ["f", "old"], ["ch", "ron"], ["逮", "捕"], ["▁dat", "as"], ["▁A", "z"], ["▁repl", "ied"], ["▁super", "ior"], ["ol", "ly"], ["M", "el"], ["▁v", "on"], ["外", "贸"], ["下", "一步"], ["大", "体"], ["商业", "模式"], ["折", "旧"], ["前所未", "有的"], ["汉", "代"], ["龙", "头"], ["亲", "属"], ["▁pl", "asma"], ["▁upd", "ated"], ["▁Organ", "ization"], ["f", "ly"], ["f", "s"], ["▁C", "r"], ["ut", "ing"], ["罪", "的"], ["清华", "大学"], ["倾向", "于"], ["的", "机制"], ["ra", "q"], ["展示", "了"], ["▁M", "ath"], ["▁J", "ohnson"], ["▁cool", "ing"], ["▁equ", "ipped"], ["条", "的规定"], ["网", "友"], ["县", "域"], ["头", "脑"], ["节", "课"], ["学习", "者"], ["列", "举"], ["支", "部"], ["有", "两种"], ["t", "able"], ["▁cover", "ing"], ["▁develop", "ments"], ["▁d", "il"], ["et", "ary"], ["▁promot", "ed"], ["och", "ond"], ["there", "fore"], ["▁", ";"], ["u", "v"], ["合理", "性"], ["▁analy", "zing"], ["ul", "ed"], ["网络", "化"], ["准备", "金"], ["或", "缺"], ["预", "见"], ["房", "产"], ["校", "企"], ["射", "频"], ["全", "年"], ["起", "到了"], ["▁inter", "face"], ["一", "半"], ["’", ",▁"], ["▁adj", "acent"], ["▁opin", "ions"], ["bor", "ne"], ["▁rec", "re"], ["reg", "ation"], ["職", "業"], ["▁pol", "ar"], ["B", "ill"], ["▁ext", "ension"], ["▁l", "ists"], ["▁expl", "icit"], ["▁popular", "ity"], ["]", "\\"], ["质", "生产力"], ["和", "信息"], ["工", "农"], ["▁establish", "ment"], ["er", "ted"], ["phib", "ians"], ["g", "roup"], ["▁p", "y"], ["ast", "ics"], ["V", "R"], ["G", "R"], ["财政", "部"], ["一", "场"], ["显著", "的"], ["计划", "的"], ["▁st", "ood"], ["标", "题"], ["▁sh", "orter"], ["▁we", "igh"], ["i", "ac"], ["ug", "s"], [")", "{"], ["发展", "规律"], ["解", "答"], ["主要", "体现在"], ["量子", "计算"], ["都", "必须"], ["甲状", "腺"], ["柴", "油"], ["th", "od"], ["学术", "界"], ["w", "omen"], ["▁market", "ing"], ["队", "列"], ["▁E", "qu"], ["酸", "盐"], ["▁J", "ackson"], ["产", "权的"], ["各", "省"], ["抵", "御"], ["▁happ", "iness"], ["▁conf", "irm"], ["才", "会"], ["介", "导"], ["g", "ien"], ["▁design", "ing"], ["▁landsc", "apes"], ["ecut", "ive"], ["ry", "ing"], ["lic", "ations"], ["h", "ops"], ["江苏", "省"], ["实践", "教学"], ["主", "机"], ["经济", "的发展"], ["bl", "ack"], ["▁per", "ception"], ["▁", "|"], ["但是", "在"], ["有所", "不同"], ["writ", "ten"], ["rain", "ed"], ["话", "题"], ["植", "被"], ["规模", "的"], ["七", "年"], ["help", "ing"], ["▁William", "s"], ["str", "ong"], ["T", "im"], ["▁dis", "ability"], ["要", "实现"], ["数据", "采集"], ["最大限度", "地"], ["思维", "的"], ["主动", "性"], ["▁rad", "ical"], ["查", "找"], ["道", "的"], ["曾", "在"], ["▁A", "wards"], ["▁Sund", "ay"], ["cyclop", "edia"], ["▁flex", "ibility"], ["有", "两个"], ["构建", "了"], ["低", "下"], ["条件", "和"], ["▁color", "ful"], ["sh", "ort"], ["T", "ur"], ["app", "y"], ["B", "R"], ["▁be", "ach"], ["制", "剂"], ["适", "用的"], ["▁mere", "ly"], ["L", "O"], ["▁fat", "ty"], ["▁controll", "ing"], ["▁met", "res"], ["第十", "二"], ["课", "文"], ["当", "作"], ["夫", "人"], ["i", "ary"], ["Sh", "are"], ["yd", "ney"], ["▁Pro", "cess"], ["▁ab", "stract"], ["▁d", "uration"], ["▁em", "pty"], ["▁fall", "ing"], ["发展", "道路"], ["其", "对"], ["必然", "要求"], ["现实", "的"], ["上", "诉"], ["In", "cre"], ["'", ".▁"], ["▁w", "ise"], ["re", "port"], ["解", "剖"], ["尔", "斯"], ["所在", "地"], ["▁P", "rim"], ["the", "less"], ["▁un", "cle"], ["生", "產"], ["数据", "显示"], ["认识", "和"], ["收", "取"], ["S", "ir"], ["的", "模式"], ["▁On", "line"], ["全", "程"], ["口", "头"], ["事", "先"], ["错误", "的"], ["▁char", "ts"], ["▁quant", "um"], ["▁mor", "ph"], ["du", "ction"], ["Rec", "ent"], ["y", "te"], ["oc", "ated"], ["▁count", "less"], ["▁priv", "acy"], ["经济", "全球化"], ["应用", "型"], ["内部", "控制"], ["不", "宜"], ["厚", "度"], ["▁trans", "plant"], ["▁v", "ocal"], ["防", "火"], ["▁Histor", "ical"], ["▁tri", "bes"], ["▁h", "urt"], ["▁incorpor", "ated"], ["▁prec", "ious"], ["end", "ar"], ["▁±", "▁"], ["▁", ">"], ["以", "致"], ["▁U", "SA"], ["伦", "敦"], ["▁scen", "ario"], ["▁Ab", "out"], ["er", "ts"], ["ll", "a"], ["的", "自"], ["▁w", "ing"], ["S", "H"], ["▁absor", "b"], ["V", "ar"], ["阐", "明"], ["▁adv", "ers"], ["as", "ures"], ["ig", "ion"], ["▁exp", "ed"], ["▁mark", "ers"], ["▁perce", "ived"], ["表", "的"], ["▁Pr", "ince"], ["開", "發"], ["▁produ", "cer"], ["管理", "部门"], ["交易", "的"], ["集", "约"], ["链", "路"], ["局限", "于"], ["▁b", "omb"], ["▁Str", "ateg"], ["F", "lorida"], ["W", "ill"], ["战", "胜"], ["创", "办"], ["bre", "aking"], ["结束", "后"], ["▁base", "ball"], ["▁Pr", "inc"], ["应用", "中"], ["▁analys", "es"], ["▁cop", "ies"], ["▁excit", "ement"], ["▁ro", "oms"], ["第四", "章"], ["测", "评"], ["信息", "和"], ["力", "量的"], ["国家", "公园"], ["验", "收"], ["医", "保"], ["胆", "固醇"], ["肾", "脏"], ["专", "注"], ["Lear", "ning"], ["系统", "地"], ["keep", "ing"], ["N", "C"], ["it", "ches"], ["ag", "g"], ["S", "V"], ["▁L", "et"], ["G", "r"], ["与", "方法"], ["在", "企业"], ["▁cardi", "ac"], ["獎", "牌得主"], ["▁conver", "ted"], ["▁p", "ione"], ["▁inter", "pre"], ["B", "uilding"], ["▁ag", "ing"], ["cont", "in"], ["深入", "推进"], ["收益", "率"], ["成本", "的"], ["着", "手"], ["精", "力"], ["开放", "的"], ["在", "内"], ["▁assist", "ant"], ["獨", "立"], ["手", "工"], ["es", "ides"], ["▁text", "ure"], ["沉", "淀"], ["^", "{"], ["一", "类"], ["▁Alex", "ander"], ["▁par", "ks"], ["l", "ater"], ["并", "于"], ["▁S", "upreme"], ["ol", "ph"], ["▁pil", "ot"], ["or", "us"], ["全体", "人民"], ["非物质", "文化遗产"], ["作品", "的"], ["患", "病"], ["的基本", "原则"], ["▁gr", "anted"], ["▁somew", "hat"], ["▁D", "ictionary"], ["機", "構"], ["偶", "然"], [")▁", "=▁"], ["l", "en"], ["机动", "车"], ["过", "来"], ["实际", "的"], ["那", "种"], ["得", "益"], ["▁b", "low"], ["上", "帝"], ["夺", "取"], ["▁Count", "ry"], ["p", "ersonal"], ["ay", "er"], ["▁B", "ang"], ["▁trig", "ger"], ["ment", "ed"], ["精神", "和"], ["的", "意见"], ["语言", "文字"], ["合作", "的"], ["仍", "是"], ["艰", "难"], ["年", "限"], ["▁s", "oph"], ["▁Christian", "ity"], ["受到", "了"], ["年", "第"], ["c", "ule"], ["機", "場"], ["▁state", "ments"], ["en", "abling"], ["▁stru", "ck"], ["▁ex", "ch"], ["Tra", "ck"], ["▁surpr", "ising"], ["是否", "有"], ["品", "格"], ["保", "護"], ["▁", "es"], ["纪", "录"], ["▁Cons", "ervation"], ["▁R", "oute"], ["▁htt", "p"], ["▁", "£"], ["S", "F"], ["▁N", "orm"], ["iv", "als"], ["▁altern", "atives"], ["▁gra", "ins"], ["▁insp", "ire"], ["▁weak", "ness"], ["而", "对"], ["上", "年"], ["考", "量"], ["交", "际"], ["因地", "制宜"], ["标", "注"], ["▁H", "un"], ["▁g", "rain"], ["部分", "的"], ["感", "兴趣"], ["▁graph", "ic"], ["p", "res"], ["▁en", "comp"], ["▁adv", "is"], ["游", "泳"], ["稳", "健"], ["但", "它"], ["亟", "待"], ["兴", "奋"], ["特", "质"], ["审", "视"], ["▁class", "ification"], ["▁inflamm", "atory"], ["▁diff", "er"], ["the", "w"], ["▁Tem", "ple"], ["▁g", "ases"], ["▁sever", "ity"], ["is", "ition"], ["▁cop", "per"], ["▁Represent", "atives"], ["▁w", "ings"], [".", ";▁"], ["税", "制"], ["阵", "列"], ["探测", "器"], ["指导", "下"], ["力", "求"], ["针对", "性"], ["在", "学习"], ["V", "iew"], ["尚", "书"], ["关系", "到"], ["sy", "stem"], ["H", "y"], ["快", "乐"], ["那", "个"], ["M", "or"], ["ort", "ed"], ["ri", "um"], ["时", "钟"], ["岩", "石"], ["▁H", "and"], ["加快", "建设"], ["规模", "化"], ["中", "进行"], ["破", "裂"], ["约", "占"], ["五", "是"], ["存", "货"], ["市", "政府"], ["与", "国际"], ["患", "儿"], ["我们", "认为"], ["阻", "力"], ["权利", "和"], ["如", "同"], ["眼", "睛"], ["平", "原"], ["▁illness", "es"], ["▁inf", "ant"], ["ine", "a"], ["D", "et"], ["加", "利"], ["高", "层"], ["▁report", "ing"], ["irt", "ual"], ["▁under", "ground"], ["▁human", "ity"], ["b", "ound"], ["alleng", "es"], ["坚持", "和发展"], ["管理", "办法"], ["事", "后"], ["老", "百姓"], ["奴", "隶"], ["焦", "虑"], ["D", "raw"], ["引起", "了"], ["和", "大"], ["▁er", "u"], ["▁fact", "ory"], ["n", "amed"], ["▁g", "est"], ["ven", "ile"], ["En", "ter"], ["p", "ow"], ["多", "为"], ["进", "度"], ["适", "时"], ["d", "iv"], ["王", "国"], ["再", "度"], ["▁prov", "ider"], ["▁met", "als"], ["▁opp", "osed"], ["▁plant", "ing"], ["提", "及"], ["b", "en"], ["职业", "道德"], ["户", "籍"], ["积极", "探索"], ["改革", "发展"], ["W", "ork"], ["An", "n"], ["▁Prot", "ection"], ["▁I", "ran"], ["▁univers", "al"], ["▁defe", "ated"], ["▁seem", "ingly"], ["擁", "有"], ["▁chem", "istry"], ["ag", "an"], ["自", "立"], ["G", "iven"], ["▁mov", "ies"], ["▁inf", "ants"], ["▁pe", "ers"], ["▁Kore", "an"], ["亿", "吨"], ["独立", "性"], ["君", "子"], ["ent", "er"], ["数", "组"], ["六", "个"], ["Histor", "ical"], ["▁pract", "ition"], ["▁investig", "ated"], ["▁min", "ister"], ["加", "州"], ["enn", "es"], ["當", "地"], ["od", "ed"], ["▁Con", "stitution"], ["health", "y"], ["B", "ur"], ["九", "年"], ["中", "西"], ["互", "助"], ["人", "性"], ["oc", "a"], ["m", "outh"], ["▁comb", "ining"], ["H", "enry"], ["要求", "学生"], ["战", "术"], ["是否", "存在"], ["▁ir", "rit"], ["书", "籍"], ["紀", "錄"], ["B", "E"], ["in", "th"], ["▁Sen", "ate"], ["▁program", "me"], ["正常", "的"], ["无", "力"], ["经验", "的"], ["级", "的"], ["计", "数"], ["衰", "老"], ["▁emb", "ry"], ["▁P", "ur"], ["l", "ock"], ["▁po", "et"], ["▁hun", "ting"], ["人民", "生活"], ["新能源", "汽车"], ["有机", "结合"], ["教育", "与"], ["新", "时期"], ["技术", "等"], ["毒", "素"], ["議", "會"], ["坚", "守"], ["书", "院"], ["电", "场"], ["錦", "標"], ["cell", "ular"], ["▁consider", "able"], ["失去", "了"], ["ure", "au"], ["▁W", "ord"], ["▁H", "eb"], ["▁ret", "ire"], ["▁ch", "icken"], ["▁consist", "ently"], ["▁surg", "ical"], ["和", "支持"], ["流", "传"], ["规范", "的"], ["的", "性能"], ["一", "座"], ["k", "ed"], ["▁bacter", "ial"], ["▁club", "s"], ["▁dist", "ances"], ["▁ess", "ays"], ["赔偿", "责任"], ["中", "去"], ["刑事", "责任"], ["课程", "体系"], ["执行", "的"], ["▁ch", "lor"], ["狭", "义"], ["因为", "它"], ["E", "ast"], ["str", "ial"], ["▁sp", "atial"], ["▁antibiot", "ics"], ["▁flav", "ors"], ["▁view", "ed"], ["if", "ier"], ["口", "腔"], ["已", "有的"], ["卷", "积"], ["he", "a"], ["老", "人"], ["▁Corpor", "ation"], ["ch", "a"], ["▁un", "w"], ["claim", "ed"], ["行政", "诉讼"], ["和", "精神"], ["葡萄", "糖"], ["肺", "癌"], ["ol", "er"], ["fore", "st"], ["▁essential", "ly"], ["病毒", "感染"], ["▁", "..."], ["v", "ia"], ["▁Ar", "m"], ["▁S", "afety"], ["▁ord", "ers"], ["h", "u"], ["▁demonstr", "ates"], ["▁un", "less"], ["像", "素"], ["社会主义", "建设"], ["经营", "权"], ["▁antib", "odies"], ["im", "b"], ["W", "hether"], ["▁ex", "haust"], ["m", "ers"], ["路", "易"], ["图", "中"], ["刑", "罚"], ["ze", "ch"], ["▁metab", "olism"], ["死亡", "率"], ["额", "外"], ["L", "inux"], ["▁Pen", "nsylvania"], ["p", "ack"], ["S", "how"], ["mon", "ary"], ["Per", "haps"], ["▁B", "ack"], ["教学", "目标"], ["全国", "人民代表大会"], ["民主", "政治"], ["知", "情"], ["就", "在于"], ["理解", "为"], ["基因", "的"], ["显", "着"], ["特", "有的"], ["L", "D"], ["ir", "k"], ["po", "ints"], ["▁f", "et"], ["inc", "ial"], ["▁ant", "ioxid"], ["J", "oseph"], ["F", "P"], ["此", "种"], ["骨", "折"], ["M", "ont"], ["s", "yn"], ["▁Pol", "and"], ["P", "O"], ["实质", "性"], ["日", "内"], ["依", "存"], ["局", "长"], ["场", "合"], ["et", "ition"], ["已", "在"], ["▁O", "ur"], ["F", "T"], ["▁basket", "ball"], ["▁conclud", "ed"], ["▁dram", "a"], ["▁h", "oney"], ["(", "\""], ["▁gra", "d"], ["ep", "h"], ["atern", "al"], ["的", "手段"], ["叙", "事"], ["▁adv", "erse"], ["句", "子"], ["▁photograph", "s"], ["的", "实现"], ["國", "立"], ["▁Ber", "lin"], ["e", "fficient"], ["两", "条"], ["消", "防"], ["源", "性"], ["南", "海"], ["年夏季", "奧林匹克運動會"], ["g", "ood"], ["▁pand", "emic"], ["▁bra", "ins"], ["▁far", "ms"], ["▁mist", "akes"], ["▁recycl", "ing"], ["吸", "烟"], ["rid", "ay"], ["招", "聘"], ["需要", "对"], ["段", "的"], ["not", "e"], ["▁rare", "ly"], ["▁p", "in"], ["ass", "oci"], ["兩", "個"], ["罚", "款"], ["污染", "防治"], ["电", "容"], ["市场", "竞争"], ["可", "将"], ["张", "力"], ["非", "遗"], ["混", "淆"], ["▁volunte", "ers"], ["坦", "克"], ["ap", "or"], ["n", "ia"], ["N", "H"], ["不", "对称"], ["形成", "一个"], ["光", "源"], ["▁manufacture", "rs"], ["▁", "】"], ["▁influ", "ential"], ["▁gra", "vity"], ["if", "er"], ["▁Un", "it"], ["Oh", "io"], ["\u0005", "\u0005"], ["不", "懈"], ["意识", "的"], ["弊", "端"], ["[", "[@"], ["北", "美"], ["一", "道"], ["存", "活"], ["的", "水平"], ["溃", "疡"], ["▁M", "aster"], ["▁process", "ed"], ["▁strateg", "ic"], ["▁par", "ish"], ["O", "lymp"], ["栽", "培"], ["马", "来"], ["▁n", "one"], ["▁H", "ung"], ["▁aut", "o"], ["▁Pl", "ant"], ["▁Pol", "ish"], ["▁al", "umni"], ["w", "id"], ["▁achie", "ving"], ["▁dec", "ay"], ["您", "的"], ["八", "年"], ["抗", "生素"], ["紫", "外"], ["社会", "化"], ["B", "ig"], ["波", "兰"], ["um", "atic"], ["Expl", "oring"], ["▁or", "b"], ["T", "ele"], ["T", "r"], ["ens", "is"], ["▁occ", "as"], ["▁Victor", "ia"], ["▁trans", "formed"], ["转换", "为"], ["▁Ch", "ief"], ["tain", "s"], ["▁agg", "ressive"], ["▁tra", "ins"], ["值", "为"], ["西", "哥"], ["pt", "on"], ["▁dr", "iven"], ["▁ret", "ired"], ["更加", "注重"], ["促进", "学生"], ["调查", "研究"], ["过", "高"], ["的", "内涵"], ["全", "市"], ["这", "在"], ["首先", "是"], ["应", "付"], ["中国", "政府"], ["來", "源"], ["B", "u"], ["H", "IV"], ["I", "O"], ["的", "城市"], [".", "'"], ["▁h", "am"], ["▁implement", "ing"], ["▁se", "am"], ["价", "的"], ["少", "量"], ["别", "人"], ["让", "我们"], ["▁administr", "ative"], ["T", "CP"], ["▁D", "am"], ["▁Al", "zheimer"], ["M", "M"], ["多", "重"], ["▁S", "ports"], ["▁product", "ivity"], ["sh", "ire"], ["▁any", "where"], ["▁Viet", "nam"], ["▁V", "an"], ["理", "学"], ["选择", "的"], ["确", "诊"], ["都", "将"], ["图", "案"], ["st", "ar"], ["pr", "ise"], ["该", "项"], ["微", "波"], ["当", "选"], ["巨", "噬"], ["同", "事"], ["无", "机"], ["精", "密"], ["▁sp", "in"], ["唱", "片"], ["comp", "ared"], ["三", "类"], ["会计", "准则"], ["整", "体的"], ["伪", "造"], ["规则", "的"], ["主", "编"], ["b", "usiness"], ["海", "域"], ["只", "需"], ["Eng", "land"], ["▁lif", "etime"], ["的一", "個"], ["原", "文"], ["▁char", "ged"], ["R", "oman"], ["为", "民"], ["的", "特殊"], ["所", "能"], ["RF", "ID"], ["r", "ange"], ["▁b", "ought"], ["▁circ", "ulation"], ["正", "处于"], ["照", "射"], ["能力的", "培养"], ["自主", "创新"], ["紧", "缩"], ["在", "北京"], ["在", "使用"], ["olog", "ically"], ["▁re", "verse"], ["ist", "ent"], ["不", "清"], ["科学家", "们"], ["ic", "on"], ["▁a", "ster"], ["▁b", "ags"], ["ong", "ue"], ["▁background", "s"], ["▁fib", "ers"], ["▁w", "ider"], ["elt", "a"], ["三", "者"], ["不可", "或缺"], ["优", "于"], ["仪", "式"], ["t", "i"], ["可靠", "的"], ["▁promot", "es"], ["▁m", "ine"], ["羽毛", "球"], ["▁r", "iding"], ["▁wond", "ered"], ["同", "行"], ["司", "马"], ["万", "个"], ["契", "机"], ["主要", "内容"], ["▁initi", "ative"], ["太", "子"], ["▁encount", "ered"], ["▁partn", "ership"], ["▁G", "ar"], ["▁log", "ic"], ["n", "ear"], ["快速", "增长"], ["营商", "环境"], ["完", "美"], ["成本", "和"], ["一个", "重要"], ["资金", "的"], ["评价", "体系"], ["▁N", "O"], ["哪", "个"], ["as", "hes"], ["▁independ", "ently"], ["A", "K"], ["▁comp", "ens"], ["就", "在"], ["海", "量"], ["总", "线"], ["投", "放"], ["管理", "模式"], ["v", "it"], ["篇", "文章"], ["与", "环境"], ["始", "于"], ["天", "体"], ["Th", "anks"], ["▁cele", "b"], ["S", "un"], ["紀", "念"], ["ustain", "able"], ["▁pre", "ced"], ["较", "强"], ["和", "发展的"], ["ap", "ore"], ["传", "说"], ["iter", "ranean"], ["St", "and"], ["amm", "a"], ["▁E", "ffect"], ["W", "S"], ["▁Cent", "ury"], ["▁Cl", "imate"], ["强调", "了"], ["cons", "cious"], ["▁cl", "ar"], ["的", "程序"], ["高", "雄"], ["▁lab", "els"], ["pl", "us"], ["al", "em"], ["read", "ing"], ["o", "op"], ["发展", "阶段"], ["可", "使"], ["山东", "省"], ["筹", "资"], ["真实", "的"], ["▁d", "ies"], ["▁stri", "ke"], [",", "\""], ["对", "这些"], ["切", "换"], ["▁pro", "of"], ["▁wh", "atever"], ["称", "作"], ["很好", "地"], ["s", "il"], ["ib", "bean"], ["分", "校"], ["之", "时"], ["数", "目"], ["的", "趋势"], ["不", "多"], ["ap", "el"], ["u", "ate"], ["向", "上"], ["正", "规"], ["z", "o"], ["行动", "计划"], ["初级", "阶段"], ["各", "领域"], ["作用", "下"], ["清洁", "能源"], ["助", "推"], ["湾", "区"], ["▁max", "im"], ["al", "ks"], ["准确", "的"], ["▁s", "ampl"], ["主", "演"], ["▁L", "i"], ["▁f", "ires"], ["▁point", "ed"], ["的", "高度"], ["把", "它"], ["预", "先"], ["造", "就"], ["描", "写"], ["Care", "er"], ["ht", "ml"], ["s", "ite"], ["se", "ud"], ["▁t", "one"], ["g", "ov"], ["▁res", "idential"], ["▁app", "s"], ["▁ur", "ine"], ["公", "证"], ["嘉", "靖"], ["E", "ss"], ["不", "一致"], ["偏", "好"], ["这", "条"], ["奇", "迹"], ["亦", "有"], ["▁U", "k"], ["位", "一体"], ["備", "註"], ["Other", "s"], ["B", "V"], ["pr", "im"], ["是", "用"], ["转", "发"], ["骨", "骼"], ["m", "il"], ["rum", "s"], ["on", "ial"], ["▁sum", "mary"], ["▁l", "oud"], ["▁manag", "ers"], ["▁▁", "《"], ["思维", "能力"], ["可以", "使"], ["为", "由"], ["而", "来"], ["牵", "引"], ["▁T", "HE"], ["一般", "的"], ["指", "针"], ["华", "北"], ["▁L", "incoln"], ["▁inv", "asion"], ["▁F", "und"], ["cl", "er"], ["▁B", "uilding"], ["全", "國"], ["西部", "地区"], ["要", "通过"], ["中", "日"], ["L", "ow"], ["▁gen", "u"], ["不", "充分"], ["降", "至"], ["违法", "行为"], ["趋", "向"], ["回", "避"], ["安", "置"], ["残", "留"], ["治理", "的"], ["ivers", "ary"], ["不", "必"], ["等", "特点"], ["不", "太"], ["▁s", "in"], ["莱", "茵"], ["▁M", "ap"], ["▁jud", "ge"], ["em", "an"], ["▁fant", "astic"], ["D", "iv"], ["▁The", "atre"], ["下", "午"], ["生", "化"], ["职业", "学校"], ["试", "剂"], ["nd", "s"], ["福", "祉"], ["su", "ccess"], ["▁doub", "t"], ["▁b", "ands"], ["▁re", "ferences"], ["AC", "E"], ["多", "人"], ["对照", "组"], ["知识", "与"], ["重", "症"], ["增", "收"], ["筹", "划"], ["的", "地位"], ["aw", "s"], ["▁c", "odes"], ["▁meet", "ings"], ["ang", "a"], ["▁researc", "her"], ["▁according", "ly"], ["Mart", "in"], ["▁F", "air"], ["婴", "儿"], ["灌", "溉"], ["如何", "在"], ["肥", "胖"], ["B", "eg"], ["lik", "ely"], ["▁ex", "ceed"], ["▁predict", "ed"], ["re", "ction"], ["Cent", "ral"], ["动", "产"], ["新", "材料"], ["疫情", "防控"], ["死", "刑"], ["尤其", "是在"], ["▁gl", "ob"], ["ens", "ed"], ["ad", "ed"], ["的", "心"], ["qu", "arters"], ["Con", "f"], ["om", "pson"], ["▁offic", "ially"], ["▁preval", "ence"], ["tern", "oon"], ["fact", "ion"], ["湖", "泊"], ["花", "费"], ["急", "剧"], ["N", "K"], ["▁d", "rought"], ["d", "ied"], ["▁leg", "acy"], ["▁sc", "ored"], ["▁un", "ity"], ["舉", "行"], ["▁metab", "olic"], ["%", ";"], ["全面建设社会主义现代化", "国家"], ["民", "意"], ["自我", "革命"], ["建设", "用地"], ["法律", "关系"], ["▁mut", "ual"], ["、", "、"], ["常", "数"], ["靠", "近"], ["▁holid", "ay"], ["▁gra", "des"], ["▁m", "ature"], ["n", "ames"], ["▁Islam", "ic"], ["▁ec", "ological"], ["却", "是"], ["双", "边"], ["if", "ts"], ["▁L", "y"], ["在", "某些"], ["给", "出了"], ["病毒", "的"], ["▁candid", "ates"], ["▁b", "ite"], ["▁sp", "oke"], ["▁O", "bs"], ["▁P", "rem"], ["世界大", "战"], ["外", "在"], ["主体", "地位"], ["医疗", "保险"], ["不", "具有"], ["盗", "窃"], ["较", "差"], ["放", "置"], ["任务", "的"], ["g", "overnment"], ["▁address", "ed"], ["▁inv", "asive"], ["相", "机"], ["ris", "k"], ["▁mut", "ations"], ["不", "好"], ["研究", "对象"], ["之", "以"], ["刚", "刚"], ["孟", "子"], ["hed", "ral"], ["▁En", "vironment"], ["高", "科技"], ["ang", "ers"], ["▁Mar", "ia"], ["ac", "ial"], ["C", "reating"], ["▁Ar", "ctic"], ["▁Be", "ach"], ["▁pow", "der"], ["墨", "西哥"], ["科研", "人员"], ["舉", "人"], ["结", "点"], ["工", "序"], ["导", "弹"], ["特色", "的"], ["系统", "工程"], ["▁num", "er"], ["▁bro", "ke"], ["▁coun", "sel"], ["▁else", "where"], ["成", "績"], ["▁to", "m"], ["石", "器"], ["B", "orn"], ["▁convers", "ion"], ["▁P", "rop"], ["▁pres", "erved"], ["is", "ely"], ["▁Pol", "it"], ["ile", "y"], ["国家和", "地区"], ["保", "管"], ["辩", "论"], ["▁cast", "le"], ["▁r", "ide"], ["▁educ", "ators"], ["▁se", "ats"], ["值得", "注意的是"], ["妊", "娠"], ["查", "阅"], ["ic", "hel"], ["單", "位"], ["▁c", "otton"], ["性", "是"], ["课", "件"], ["浸", "润"], ["阻", "断"], ["流", "向"], ["不", "合理"], ["en", "ergy"], ["越", "多"], ["热", "爱"], ["j", "e"], ["▁sens", "or"], ["▁b", "iodiversity"], ["clus", "ions"], ["▁b", "orrow"], ["▁out", "door"], ["推", "断"], ["%", "-"], ["uc", "lear"], ["▁low", "est"], ["受害", "人"], ["各", "有"], ["创", "伤"], ["为", "我国"], ["r", "ated"], ["ag", "u"], ["amil", "ton"], ["▁Haw", "ai"], ["ce", "ans"], ["▁f", "ans"], ["ues", "e"], ["▁z", "ones"], ["N", "N"], ["lect", "ed"], ["erc", "ury"], ["和", "实施"], ["阶段", "性"], ["阳", "光"], ["at", "ile"], ["ip", "edia"], ["ap", "ing"], ["▁K", "n"], ["▁l", "ibraries"], ["ather", "s"], ["te", "in"], ["▁ob", "lig"], ["▁consum", "ed"], ["▁e", "ase"], ["su", "pp"], ["制度", "体系"], ["指导", "思想"], ["苏", "州"], ["真", "菌"], ["除此", "之外"], ["近", "年"], ["Te", "chn"], ["ok", "ed"], ["▁compet", "itive"], ["要", "注意"], ["这", "使得"], ["就是", "在"], ["因素", "的"], ["交通", "事故"], ["患", "有"], ["作", "的"], ["▁defic", "iency"], ["ak", "h"], ["▁emp", "ower"], ["▁p", "roud"], ["儿", "子"], ["el", "and"], ["C", "G"], ["社会主义市场经济", "体制"], ["党", "对"], ["犯罪嫌疑", "人"], ["制度", "创新"], ["至", "上"], ["血", "浆"], ["的一", "致"], ["r", "ary"], ["▁sp", "inal"], ["▁dram", "atic"], ["▁t", "ale"], ["入", "学"], ["act", "ly"], ["協", "會"], ["f", "ol"], ["ol", "ished"], ["P", "H"], ["机制", "和"], ["并", "能"], ["支", "气管"], ["美好", "生活"], ["实验", "教学"], ["客观", "上"], ["带", "头"], ["折", "射"], ["契", "合"], ["住", "院"], ["统治", "者"], ["!", "!"], ["he", "ro"], ["▁con", "ference"], ["嵌入", "式"], ["▁C", "ode"], ["▁ille", "gal"], ["▁Mex", "ican"], ["▁p", "ace"], ["▁ground", "s"], ["▁accomp", "anied"], ["▁f", "ats"], ["p", "ath"], ["f", "red"], ["oc", "ity"], ["休", "息"], ["▁sc", "ales"], ["▁enzym", "e"], ["▁ass", "ume"], ["ject", "s"], ["▁em", "bed"], ["放", "疗"], ["司法", "机关"], ["空", "调"], ["▁O", "ntario"], ["▁sod", "ium"], ["P", "al"], ["Up", "on"], ["漫", "畫"], ["回", "忆"], ["▁p", "H"], ["connect", "ed"], ["诠", "释"], ["放射", "性"], ["剖", "析"], ["▁A", "k"], ["」", "、"], ["S", "ource"], ["社会", "发展"], ["极", "化"], ["非常", "重要"], ["不", "满"], ["劳动", "者的"], ["不断", "扩大"], ["事业", "的"], ["构", "件"], ["建", "党"], ["重", "心"], ["N", "orm"], ["▁s", "ale"], ["影", "视"], ["臺", "北"], ["▁Reg", "ister"], ["▁h", "ier"], ["▁ar", "th"], ["C", "ase"], ["無", "法"], ["▁b", "orders"], ["如", "在"], ["高", "频"], ["如果", "不"], ["青", "海"], ["月", "底"], ["公", "開"], ["ura", "ble"], ["D", "ay"], ["修", "建"], ["▁ref", "lection"], ["og", "ens"], ["若干", "问题的"], ["应当", "在"], ["中国", "梦"], ["世纪", "的"], ["背", "后的"], ["体现", "出"], ["色", "谱"], ["进一步", "完善"], ["剧", "烈"], ["淋巴", "细胞"], ["人才", "的"], ["pro", "fit"], ["▁act", "or"], ["▁appro", "ached"], ["▁fu", "els"], ["种", "族"], ["▁K", "ey"], ["▁▁", "-"], ["▁achieve", "ment"], ["的基本", "原理"], ["绝", "缘"], ["选", "修"], ["▁div", "ine"], ["▁h", "ospitals"], ["▁n", "ice"], ["有", "许多"], ["結", "束"], ["首", "个"], ["中国共产党", "人"], ["队伍", "建设"], ["的", "民族"], ["表现", "形式"], ["强", "有力的"], ["与", "合作"], ["应", "有的"], ["互", "利"], ["▁ear", "s"], ["教科", "书"], ["是", "根据"], ["▁M", "ill"], ["部", "落"], ["w", "ich"], ["▁inc", "idence"], ["▁sh", "ore"], ["▁ha", "ven"], ["研究", "方法"], ["的人", "工"], ["而", "又"], ["增", "生"], ["变", "性"], ["gl", "as"], ["▁ch", "a"], ["▁G", "ulf"], ["▁thorough", "ly"], ["▁m", "old"], ["角度", "看"], ["财政", "收入"], ["业务", "流程"], ["加", "息"], ["等", "同"], ["招", "标"], ["金融", "体系"], ["阻", "抗"], ["不", "敢"], ["机", "车"], ["县", "城"], ["▁syn", "thesis"], ["ones", "ia"], ["▁opp", "osition"], ["中", "性"], ["f", "at"], ["bet", "a"], ["le", "m"], ["ord", "an"], ["(", ")▁"], ["A", "G"], ["领导", "下"], ["强", "迫"], ["▁bi", "as"], ["In", "it"], ["的一", "次"], ["地", "名"], ["(", "-"], ["the", "astern"], ["B", "al"], ["educ", "ation"], ["▁equ", "ations"], ["▁vit", "amins"], ["责任", "感"], ["一", "件"], ["仓", "储"], ["南", "宋"], ["负", "有"], ["学", "期"], ["陆", "军"], ["但", "从"], ["三角", "形"], ["傳", "統"], ["▁h", "ockey"], ["▁particip", "ated"], ["中央", "政府"], ["凋", "亡"], ["名", "誉"], ["在", "现代"], ["动", "荡"], ["的", "生物"], ["▁Read", "ing"], ["今", "日"], ["epend", "ence"], ["▁gr", "asp"], ["Al", "ways"], ["▁determ", "ining"], ["ef", "its"], ["▁to", "b"], ["ph", "ones"], ["▁horm", "ones"], ["▁occasion", "ally"], ["T", "M"], ["第五", "章"], ["三个", "代表"], ["务", "实"], ["市", "委"], ["和谐", "社会"], ["充", "实"], ["而", "已"], ["]", "["], ["▁J", "ean"], ["超过", "了"], ["长", "达"], ["▁J", "r"], ["L", "ab"], ["▁Con", "nect"], ["▁prom", "ise"], ["▁c", "rown"], ["p", "op"], ["roph", "y"], ["层面", "的"], ["主", "力"], ["▁regul", "atory"], ["▁S", "pring"], ["T", "est"], ["▁pay", "ing"], ["▁Mem", "orial"], ["ol", "as"], ["过", "分"], ["国家", "治理体系和治理能力"], ["国家", "机关"], ["和", "行为"], ["不仅", "可以"], ["集成", "电路"], ["业", "的"], ["模型", "中"], ["的", "特性"], ["T", "D"], ["的", "资源"], ["R", "h"], ["▁K", "ar"], ["▁par", "agraph"], ["警", "告"], ["▁gold", "en"], ["▁perfect", "ly"], ["▁rem", "oving"], ["un", "a"], ["这种", "情况"], ["法", "等"], ["华", "为"], ["W", "ood"], ["ar", "ound"], ["▁ent", "ities"], ["▁surround", "ed"], ["▁B", "and"], ["ch", "i"], ["之一", "的"], ["创新", "性"], ["养老", "金"], ["生产", "方式"], ["矿", "物"], ["▁to", "t"], ["我们", "需要"], ["仍", "在"], ["e", "em"], ["E", "ducation"], ["▁rel", "ate"], ["J", "ohnson"], ["▁Gold", "en"], ["▁Comm", "ons"], ["和", "水"], ["主要", "用于"], ["动", "物的"], ["无线", "电"], ["阴", "阳"], ["▁Gu", "ard"], ["▁m", "uc"], ["▁behavior", "al"], ["视", "图"], ["V", "E"], ["▁adv", "ances"], ["大", "道"], ["ur", "ring"], ["▁pup", "ils"], ["▁C", "ost"], ["第五", "节"], ["理论", "创新"], ["出发", "点"], ["人类", "文明"], ["联", "想"], ["付", "出"], ["紧", "迫"], ["言", "论"], ["牢", "记"], ["具有", "重要的"], ["行", "動"], ["▁quant", "ities"], ["Ph", "ysical"], ["▁dis", "pos"], ["▁do", "ors"], ["没有", "任何"], ["▁d", "uty"], ["公", "交"], ["经验", "和"], ["res", "hold"], ["▁att", "itudes"], ["▁ex", "ception"], ["▁Le", "vel"], ["c", "ents"], ["气", "温"], ["父", "親"], ["ã", "o"], ["产品", "和"], ["立德", "树"], ["财政", "政策"], ["提起", "诉讼"], ["价", "款"], ["两", "侧"], ["反映", "出"], ["▁B", "road"], ["the", "ns"], ["分析", "的"], ["迫", "使"], ["bo", "ards"], ["▁cont", "ents"], ["▁gen", "re"], ["▁univers", "ities"], ["▁I", "S"], ["ob", "b"], ["自", "发"], ["转", "为"], ["农", "场"], ["▁und", "ers"], ["▁particip", "ating"], ["▁situ", "ated"], ["主义", "者"], ["ik", "ipedia"], ["完", "工"], ["Bet", "ween"], ["ru", "ce"], ["M", "ajor"], ["生产", "者"], ["稿", "件"], ["高", "素质"], ["物", "体的"], ["姿", "态"], ["有", "一定"], ["不", "一定"], ["解决", "的"], ["主义", "和"], ["采取", "了"], ["蔓", "延"], ["▁br", "ush"], ["▁med", "itation"], ["▁in", "ch"], ["▁B", "BC"], ["不", "過"], ["▁f", "an"], ["▁box", "es"], ["is", "a"], ["a", "a"], ["地", "上"], ["达", "峰"], ["▁thr", "ive"], ["的", "女"], ["u", "its"], ["現", "在"], ["ge", "bra"], ["但", "也"], ["实验", "中"], ["肿瘤", "细胞"], ["行政", "复议"], ["实际", "问题"], ["往", "来"], ["征", "税"], ["▁sign", "aling"], ["等", "工作"], ["扭", "曲"], ["Austral", "ian"], ["ins", "ula"], ["bum", "s"], ["▁t", "ang"], ["J", "ack"], ["b", "as"], ["er", "ick"], ["reat", "ive"], ["▁spec", "ified"], ["他", "是"], ["▁football", "er"], ["会", "的"], ["注意", "到"], ["产", "值"], ["被害", "人"], ["板", "块"], ["副", "教授"], ["地", "表"], ["自然", "的"], ["发", "光"], ["rain", "ts"], ["ian", "ces"], ["AP", "P"], ["▁al", "though"], ["▁recip", "es"], ["f", "a"], ["痛", "苦"], ["收", "敛"], ["m", "ia"], ["▁batter", "ies"], ["H", "ome"], ["cl", "ick"], ["est", "ock"], ["▁", "...▁"], ["▁alt", "ered"], ["▁rhyth", "m"], ["?", "▁"], ["▁exhib", "ition"], ["▁inj", "ured"], ["▁c", "a"], ["科技", "革命"], ["理", "政"], ["富", "强"], ["支持", "和"], ["限制", "了"], ["遗", "嘱"], ["度", "量"], ["▁C", "ulture"], ["em", "or"], ["可以", "被"], ["▁stat", "istical"], ["▁stake", "holders"], ["▁And", "rew"], ["减", "税"], ["除", "非"], ["b", "ial"], ["圆", "形"], ["现", "存"], ["▁re", "vers"], ["ain", "st"], ["年代", "初"], ["▁cl", "ouds"], ["▁exist", "ed"], ["▁P", "op"], ["ement", "ia"], ["国际", "上"], ["诸", "侯"], ["服务", "提供"], ["盆", "地"], ["電視", "台"], ["▁par", "l"], ["▁f", "o"], ["writ", "er"], ["w", "all"], ["▁cl", "ay"], ["▁prop", "ag"], ["▁imp", "ressive"], ["▁tra", "cking"], ["Stud", "ies"], ["▁carb", "oh"], ["Last", "ly"], ["▁art", "work"], ["▁stream", "s"], ["效率", "的"], ["vent", "h"], ["▁reve", "als"], ["▁sac", "red"], ["al", "pha"], ["m", "ethod"], ["▁bu", "ff"], ["▁bound", "ary"], ["平", "时"], ["理想", "的"], ["结构", "与"], ["指", "明了"], ["租", "金"], ["内", "心"], ["出", "行"], ["地", "利"], ["In", "ternet"], ["▁M", "ult"], ["▁ver", "b"], ["▁Gree", "ce"], ["▁jo", "ints"], ["bour", "ne"], ["工作", "会议"], ["可以", "利用"], ["可", "为"], ["公", "示"], ["趣", "味"], ["▁Col", "orado"], ["▁ent", "rance"], ["化", "为"], ["▁r", "anges"], ["d", "eg"], ["se", "ction"], ["br", "is"], ["▁pain", "ted"], ["D", "ev"], ["克", "兰"], ["经济增长", "的"], ["迫切", "需要"], ["长", "三角"], ["环境", "影响"], ["s", "un"], ["ok", "yo"], ["med", "iate"], ["h", "ans"], ["性", "状"], ["rag", "ing"], ["ax", "is"], ["▁p", "el"], ["▁commit", "tee"], ["▁loc", "ally"], ["▁util", "ize"], ["p", "erson"], ["ix", "ed"], ["▁Cor", "ps"], ["小", "板"], ["或者", "说"], ["▁G", "overnor"], ["同时", "也是"], ["概念", "的"], ["▁reflect", "ed"], ["▁pro", "hib"], ["▁advance", "ments"], ["的", "分类"], ["L", "og"], ["▁s", "ch"], ["呼吸", "道"], ["细", "分"], ["可", "作为"], ["解决", "的问题"], ["特", "权"], ["▁Mount", "ains"], ["起", "始"], ["▁S", "et"], ["▁appear", "ances"], ["▁enjoy", "ed"], ["▁travel", "ing"], ["st", "ru"], ["▁", "ion"], ["O", "ld"], ["▁Ar", "gent"], ["Pro", "fessor"], ["▁propos", "al"], ["的", "先"], ["多", "方"], ["残疾", "人"], ["不", "知道"], ["▁fem", "in"], ["▁L", "GBT"], ["▁cont", "exts"], ["il", "st"], ["▁Dan", "iel"], ["▁distinct", "ive"], ["▁▁▁▁▁▁▁▁", "▁"], ["S", "ports"], ["▁E", "arly"], ["b", "one"], ["就", "需要"], ["抽", "样"], ["的", "直接"], ["听", "力"], ["在", "生产"], ["管理", "学"], ["ect", "ors"], ["系", "的"], ["区", "和"], ["可以", "对"], ["中", "被"], ["▁kit", "chen"], ["是", "目前"], ["▁encourag", "ing"], ["Res", "ults"], ["▁S", "us"], ["d", "eterm"], ["▁pe", "er"], ["ograp", "her"], ["风险", "评估"], ["继承", "人"], ["ber", "ries"], ["p", "arents"], ["▁N", "etherlands"], ["▁was", "h"], ["▁harm", "ony"], ["al", "og"], ["情", "況"], ["qu", "ir"], ["ros", "is"], ["十", "条"], ["和", "价值"], ["通过", "的"], ["事业", "发展"], ["长期", "的"], ["子", "宫"], ["生活", "中的"], ["礼", "仪"], ["精", "品"], ["奉", "献"], ["期", "权"], ["g", "rad"], ["▁S", "ab"], ["l", "iter"], ["▁sh", "oes"], ["深入", "研究"], ["概", "况"], ["E", "ventually"], ["▁co", "operation"], ["▁The", "ory"], ["天", "文学"], ["▁B", "on"], ["ad", "vant"], ["海", "軍"], ["E", "ffect"], ["eg", "u"], ["ond", "er"], ["▁Secret", "ary"], ["may", "be"], ["▁bre", "ed"], ["▁land", "ing"], ["▁mother", "s"], ["筛", "查"], ["ry", "pt"], ["bu", "ilt"], ["▁aut", "ism"], ["▁manif", "est"], ["十", "大"], ["资产负债", "表"], ["发病", "率"], ["扭", "转"], ["缺", "口"], ["会", "被"], ["个", "体的"], ["an", "z"], ["▁H", "a"], ["▁h", "at"], ["▁tel", "esc"], ["es", "ium"], ["b", "ass"], ["▁bring", "ing"], ["人", "以"], ["在", "网络"], ["汇", "总"], ["与", "否"], ["创", "始"], ["val", "ue"], ["▁elder", "ly"], ["con", "duct"], ["l", "ocal"], ["▁conf", "ront"], ["会", "影响"], ["损害", "的"], ["是一", "门"], ["历", "经"], ["培养", "目标"], ["电", "位"], ["再", "现"], ["往往", "是"], ["人", "脸"], ["前提", "下"], ["ond", "ay"], ["▁sou", "l"], ["ors", "hip"], ["▁as", "sembly"], ["f", "are"], ["D", "en"], ["▁ident", "ical"], ["▁ext", "ens"], ["▁at", "oms"], ["▁sl", "aves"], ["青", "岛"], ["侵", "入"], ["推", "翻"], ["代", "数"], ["內", "容"], ["▁dev", "ast"], ["▁bu", "ying"], ["▁t", "elling"], ["思考", "题"], ["公益", "诉讼"], ["但", "对"], ["受", "教育"], ["紧密", "结合"], ["联系", "的"], ["京津", "冀"], ["以", "满足"], ["青藏", "高原"], ["帮", "扶"], ["但", "这"], ["H", "on"], ["雙", "打"], ["▁E", "st"], ["▁reg", "ulate"], ["▁vacc", "ines"], ["▁prom", "ising"], ["▁tob", "acco"], ["b", "eg"], ["项目", "管理"], ["血", "小板"], ["最", "具"], ["的", "区域"], ["市", "政"], ["p", "rop"], ["▁B", "ern"], ["▁as", "ide"], ["▁transl", "ated"], ["N", "R"], ["b", "acks"], ["会计", "师"], ["这就", "要求"], ["质", "性"], ["位", "移"], ["寄", "存"], ["的最", "新"], ["amil", "ies"], ["c", "ore"], ["玩", "家"], ["▁path", "s"], ["▁story", "telling"], ["▁sc", "r"], ["▁speak", "ers"], ["等", "信息"], ["和", "法律"], ["有限", "责任"], ["▁adapt", "ation"], ["▁E", "ss"], ["▁accompl", "ish"], ["提高", "到"], ["中", "之"], ["新", "课"], ["义务", "的"], ["应", "注意"], ["表面", "的"], ["吸引", "力"], ["牵", "头"], ["和", "教育"], ["党", "章"], ["▁S", "and"], ["▁chrom", "os"], ["该", "方法"], ["▁nutri", "ent"], ["▁be", "ans"], ["▁gradu", "ate"], ["F", "ound"], ["▁Ch", "art"], ["h", "ome"], ["长", "沙"], ["](", "#"], ["较", "长"], ["em", "ale"], ["ibl", "ical"], ["O", "pt"], ["▁g", "ift"], ["▁soc", "io"], ["▁Gard", "en"], ["在", "未来"], ["金融", "科技"], ["情况", "的"], ["始终", "坚持"], ["敏感", "性"], ["专", "科"], ["全", "力"], ["中", "也"], ["L", "uc"], ["马", "斯"], ["Ident", "ify"], ["the", "t"], ["▁p", "ets"], ["简单", "地"], ["西", "斯"], ["▁s", "ew"], ["▁ancest", "ors"], ["▁re", "ign"], ["ious", "ly"], ["sp", "ring"], ["▁E", "ll"], ["计划", "经济"], ["早", "已"], ["▁A", "ction"], ["▁collect", "ing"], ["▁prof", "it"], ["▁sav", "ed"], ["▁be", "es"], ["akes", "pe"], ["变", "的"], ["loc", "ated"], ["▁teach", "ings"], ["I", "oT"], ["ar", "ray"], ["深", "层"], ["共同", "体的"], ["和", "工作"], ["生命", "力"], ["不", "平等"], ["地位", "的"], ["积极", "作用"], ["畸", "形"], ["发", "热"], ["军", "的"], ["与", "非"], ["传", "达"], ["▁A", "sh"], ["▁comp", "an"], ["微", "分"], ["Encou", "rage"], ["B", "ro"], ["▁Th", "ree"], ["▁H", "T"], ["m", "ega"], ["▁pack", "age"], ["下", "来的"], ["切", "入"], ["▁sym", "pt"], ["▁cust", "oms"], ["pl", "ate"], ["P", "ut"], ["▁g", "ran"], ["we", "b"], ["▁Ant", "ar"], ["球", "队"], ["C", "omb"], ["治国", "理政"], ["西方", "国家"], ["产", "学"], ["发", "票"], ["庞", "大的"], ["严", "肃"], ["结构", "化"], ["▁cir", "cul"], ["不", "属于"], ["Ind", "eed"], ["▁ev", "il"], ["▁or", "ange"], ["▁reflect", "s"], ["▁sub", "tle"], ["▁t", "ribut"], ["h", "k"], ["现在", "的"], ["火", "星"], ["it", "us"], ["语言", "的"], ["ash", "ing"], ["年", "被"], ["ai", "wan"], ["att", "ered"], ["▁B", "a"], ["▁St", "adium"], ["通信", "技术"], ["新冠肺炎", "疫情"], ["之间", "存在"], ["在", "不"], ["作", "詞"], ["反", "向"], ["rop", "olitan"], ["▁su", "icide"], ["▁contain", "ers"], ["万", "亿"], ["教学", "法"], ["各级", "政府"], ["承", "租"], ["情", "怀"], ["基", "站"], ["血", "栓"], ["走", "进"], ["纽", "带"], ["又", "能"], ["的", "局面"], ["▁ad", "here"], ["要素", "的"], ["成", "型"], ["需求", "和"], ["do", "i"], ["▁rest", "ore"], ["▁abandon", "ed"], ["▁territ", "ories"], ["▁c", "ran"], ["亚", "太"], ["共同", "的"], ["▁L", "og"], ["▁hy", "brid"], ["▁per", "ipher"], ["tain", "ment"], ["捕", "捉"], ["▁", "【"], ["ph", "abet"], ["▁ren", "amed"], ["岁", "的"], ["耐", "药"], ["变", "成了"], ["群", "落"], ["通", "俗"], ["宽", "带"], ["加", "之"], ["试", "行"], ["服务", "体系"], ["▁W", "ars"], ["》", "▁▁"], ["c", "oll"], ["了", "一些"], ["M", "ex"], ["生", "殖"], ["▁F", "ig"], ["这是", "一种"], ["成为", "一个"], ["ch", "ant"], ["有", "多"], ["并", "将其"], ["Al", "ong"], ["Ad", "ditional"], ["che", "ster"], ["▁ann", "ually"], ["▁every", "where"], ["▁le", "mon"], ["▁A", "M"], ["十二", "五"], ["学", "时"], ["重点", "领域"], ["中", "指出"], ["询", "问"], ["酒", "精"], ["▁Su", "pport"], ["而", "生"], ["Ind", "ian"], ["fl", "ies"], ["▁B", "ell"], ["▁bot", "tle"], ["▁t", "ou"], ["l", "oss"], ["o", "king"], ["▁L", "ive"], ["副", "主席"], ["股", "市"], ["后", "世"], ["柏", "林"], ["北", "海"], ["▁expand", "ing"], ["T", "immy"], ["▁del", "icate"], ["▁space", "craft"], ["om", "ot"], ["生态环境", "保护"], ["数字", "货币"], ["人工智能", "技术"], ["日", "元"], ["建", "制"], ["自然科学", "基金"], ["ig", "a"], ["ogn", "ition"], ["M", "a"], ["ab", "ama"], ["▁rest", "oration"], ["▁spec", "imens"], ["▁gather", "ing"], ["▁strugg", "ling"], ["c", "urrent"], ["O", "xford"], ["长", "安"], ["任何", "一个"], ["不", "一"], ["eed", "s"], ["▁therap", "ies"], ["三", "国"], ["▁Sp", "irit"], ["▁S", "av"], ["公允", "价值"], ["家", "具"], ["外部", "环境"], ["自然", "灾害"], ["审", "慎"], ["estab", "lished"], ["aff", "e"], ["十", "月"], ["衰", "减"], ["用", "了"], ["▁P", "akistan"], ["ove", "re"], ["C", "ast"], ["▁c", "ub"], ["▁correl", "ation"], ["▁del", "ight"], ["▁n", "u"], ["▁del", "ve"], ["▁integr", "ity"], ["▁pos", "itively"], ["▁Tor", "onto"], ["c", "ond"], ["ow", "nt"], ["▁▁", "."], ["N", "ame"], ["w", "er"], ["更", "换"], ["剥", "夺"], ["est", "one"], ["g", "rams"], ["CA", "D"], ["te", "chn"], ["演", "奏"], ["▁surv", "iv"], ["▁wor", "ship"], ["un", "ar"], ["ennes", "see"], ["粮食", "安全"], ["来", "确定"], ["而", "后"], ["弱", "势"], ["с", "т"], ["真", "的"], ["▁smooth", "ly"], ["不", "等"], ["en", "za"], ["iber", "ty"], ["els", "on"], ["inflamm", "atory"], ["要求", "和"], ["得", "不到"], ["应", "激"], ["很", "可能"], ["▁res", "istant"], ["和", "中"], ["play", "ing"], ["▁po", "ems"], ["▁streng", "ths"], ["()", "`▁"], ["▁com", "ic"], ["AR", "T"], ["▁A", "ND"], ["▁over", "view"], ["▁opt", "ical"], ["▁instit", "ution"], ["ic", "ts"], ["发展", "为"], ["马克思主义", "的"], ["的", "证据"], ["年", "我国"], ["城市", "群"], ["迈", "向"], ["汲", "取"], ["肝", "炎"], ["am", "ents"], ["平", "民"], ["×", "▁"], ["gien", "e"], ["▁c", "ow"], ["▁tail", "ored"], ["伊", "朗"], ["akespe", "are"], ["▁t", "y"], ["對", "於"], ["umb", "ers"], ["▁enh", "ancing"], ["b", "ral"], ["建", "国"], ["he", "ld"], ["▁earthqu", "ake"], ["的最", "后"], ["▁she", "ets"], ["▁din", "ner"], ["▁r", "anging"], ["C", "ong"], ["il", "ms"], ["E", "conom"], ["利", "于"], ["的", "运动"], ["在", "国内"], ["改革", "创新"], ["外", "语"], ["测", "绘"], ["▁stri", "king"], ["子", "公司"], ["we", "alth"], ["▁soc", "cer"], ["▁th", "roat"], ["▁schem", "e"], ["St", "ar"], ["che", "stra"], ["d", "ependent"], ["to", "k"], ["T", "or"], ["mar", "ks"], ["▁Labor", "atory"], ["erus", "alem"], ["s", "ing"], ["深", "厚"], ["相结合", "的"], ["两", "方面"], ["投", "标"], ["测", "算"], ["与", "学生"], ["代表", "性的"], ["来", "解决"], ["这", "场"], ["余", "人"], ["方法", "论"], ["作", "文"], ["▁week", "ly"], ["▁col", "umns"], ["结", "婚"], [",▁", "'"], ["球", "员"], ["sec", "ut"], ["▁p", "od"], ["这", "表明"], ["建设", "项目"], ["反应", "的"], ["▁crit", "ically"], ["▁dist", "ant"], ["elect", "ric"], ["▁sav", "ings"], ["ES", "T"], ["id", "elines"], ["▁polit", "icians"], ["课程", "内容"], ["原则", "上"], ["交", "融"], ["军", "民"], ["同学", "们"], ["放", "松"], ["▁bow", "l"], ["▁c", "ater"], ["▁ac", "res"], ["▁call", "ing"], ["▁inv", "ited"], ["ip", "h"], ["effect", "ive"], ["神", "秘"], ["as", "ia"], ["▁end", "ing"], ["▁fac", "ulty"], ["▁G", "re"], ["世纪", "末"], ["在", "不同的"], ["维", "埃"], ["向", "往"], ["祖", "父"], ["可", "扩展"], ["葡萄", "牙"], ["▁Pl", "ace"], ["ov", "ak"], ["唯一", "的"], ["▁O", "xford"], ["l", "iving"], ["ant", "e"], ["▁m", "i"], ["v", "i"], ["法", "令"], ["▁h", "arsh"], ["follow", "ing"], ["▁Heb", "rew"], ["▁sp", "ray"], ["新华", "社"], ["生", "机"], ["小", "微"], ["知识产权", "保护"], ["事", "关"], ["基础", "和"], ["磁", "盘"], ["风", "景"], ["临床", "上"], ["保证", "了"], ["转", "运"], ["知", "縣"], ["畢", "業"], ["▁pl", "ain"], ["int", "on"], ["ook", "ed"], ["▁rob", "ots"], ["▁belie", "ves"], ["▁int", "ention"], ["▁p", "estic"], ["▁pl", "ates"], ["▁sun", "ny"], ["ch", "ain"], ["▁B", "ol"], ["的", "抗"], ["负面", "影响"], ["me", "ans"], ["▁F", "arm"], ["非", "线性"], ["F", "ore"], ["d", "et"], ["c", "op"], ["over", "ning"], ["▁conf", "usion"], ["▁pres", "ervation"], ["C", "r"], ["▁v", "ig"], ["核", "电"], ["免疫", "系统"], ["充分", "考虑"], ["必须", "是"], ["的", "义务"], ["总体", "上"], ["参", "观"], ["当", "家"], ["n", "i"], ["登", "录"], ["at", "on"], ["▁spread", "ing"], ["▁acc", "idents"], ["▁g", "ear"], ["▁represent", "ative"], ["\"", "}"], ["私", "营"], ["任", "职"], ["一", "天"], ["东", "京"], ["▁M", "unicip"], ["和", "相关"], ["▁D", "un"], ["區", "域"], ["小", "時"], ["編", "曲"], ["in", "it"], ["与", "经济"], ["收", "回"], ["万", "美元"], ["游", "客"], ["游", "击"], ["红", "细胞"], ["原", "生"], ["重", "叠"], ["人", "所"], ["ag", "a"], ["▁l", "ig"], ["k", "h"], ["ann", "er"], ["▁J", "ava"], ["的", "转变"], ["作出", "的"], ["议", "员"], ["必须", "要"], ["内", "地"], ["S", "en"], ["自", "旋"], ["地", "主"], ["在", "他"], ["恰", "恰"], ["▁phenomen", "a"], ["▁ra", "inf"], ["▁w", "ars"], ["篇", "章"], ["课程", "教学"], ["政府", "对"], ["▁Un", "ivers"], ["第十", "三"], ["长", "城"], ["ra", "ham"], ["▁c", "attle"], ["▁Pre", "vention"], ["▁inequ", "ality"], ["▁Ind", "ians"], ["▁ret", "urning"], ["tre", "ated"], ["▁de", "bris"], ["部", "份"], ["Sp", "ace"], ["▁I", "D"], ["g", "ae"], ["在", "高"], ["尔", "省"], ["ang", "el"], ["▁ch", "urches"], ["▁comprehens", "ion"], ["▁res", "erved"], ["▁Republic", "an"], ["技术", "进步"], ["激励", "机制"], ["再", "审"], ["通", "风"], ["协议", "的"], ["尔", "德"], ["rit", "ic"], ["推", "测"], ["R", "un"], ["▁R", "esp"], ["▁quant", "ity"], ["▁val", "ley"], ["▁upd", "ate"], ["▁stra", "ins"], ["IS", "T"], ["▁ax", "is"], ["▁af", "ternoon"], ["▁s", "aving"], ["一段", "时间"], ["造", "血"], ["蒸", "发"], ["演", "讲"], ["域", "网"], ["rig", "ation"], ["▁sp", "ons"], ["C", "V"], ["for", "cing"], ["相", "较"], ["Not", "able"], ["▁O", "s"], ["人民群众", "的"], ["涉及", "的"], ["的", "依据"], ["老龄", "化"], ["变", "压"], ["这", "部分"], ["同样", "的"], ["舆", "情"], ["强", "劲"], ["财", "税"], ["以", "人为本"], ["的", "内在"], ["立方", "米"], ["假", "定"], ["大", "阪"], ["▁restrict", "ions"], ["▁world", "s"], ["▁D", "igital"], ["D", "ifferent"], ["单", "词"], ["E", "th"], ["ig", "m"], ["W", "estern"], ["Tax", "onomy"], ["人", "是"], ["保", "卫"], ["对外", "贸易"], ["前", "途"], ["▁my", "stery"], ["S", "U"], ["年", "版"], ["▁R", "od"], ["ev", "in"], ["p", "an"], ["un", "ctions"], ["这项", "研究"], ["诉讼", "时效"], ["全国", "各族人民"], ["案件", "中"], ["放", "缓"], ["关", "怀"], ["▁comp", "aring"], ["很", "小"], ["▁des", "cent"], ["▁al", "pha"], ["▁commun", "ications"], ["彼", "得"], ["▁des", "ert"], ["istic", "ated"], ["一", "门"], ["不", "出"], ["os", "aur"], ["he", "tic"], ["▁ble", "eding"], ["▁inters", "ection"], ["丈", "夫"], ["▁sequ", "ences"], ["<", "/"], ["▁I", "T"], ["▁bl", "ank"], ["建设", "社会主义"], ["中", "级"], ["区域", "内"], ["吸", "纳"], ["取", "证"], ["▁reput", "ation"], ["和", "投资"], ["姆", "斯"], ["接", "下来"], ["魅", "力"], ["ph", "ot"], ["h", "yd"], ["n", "m"], ["ro", "ve"], ["act", "ivity"], ["▁vis", "its"], ["▁cy", "cles"], ["▁dream", "s"], ["l", "ined"], ["▁shel", "ter"], ["▁cou", "rage"], ["▁hon", "est"], ["综上", "所述"], ["说明", "了"], ["bl", "ood"], ["h", "istory"], ["表", "格"], ["Dep", "artment"], ["icip", "ants"], ["'", "'"], ["▁arr", "anged"], ["▁colon", "ies"], ["▁me", "ets"], ["▁out", "break"], ["▁so", "ap"], ["▁su", "g"], ["国", "产"], ["黑", "格尔"], ["因果", "关系"], ["迈", "进"], ["蓝", "图"], ["车", "间"], ["如", "有"], ["风", "暴"], ["▁S", "ound"], ["St", "r"], ["▁L", "at"], ["▁con", "d"], ["h", "arm"], ["b", "us"], ["S", "erv"], ["▁imag", "ery"], ["B", "ook"], ["▁col", "ored"], ["明", "晰"], ["许可", "证"], ["爱", "好"], ["拟", "合"], ["竣", "工"], ["▁M", "arsh"], ["阿", "里"], ["Im", "age"], ["▁Ill", "inois"], ["▁ver", "te"], ["Al", "tern"], ["▁var", "ied"], ["▁F", "riend"], ["作用", "于"], ["妥", "善"], ["胶", "质"], ["将", "对"], ["脉", "络"], ["风险", "和"], ["拥", "护"], ["金", "钱"], ["改", "编"], ["列", "車"], ["f", "ive"], ["c", "ost"], ["Gen", "er"], ["▁k", "nee"], ["▁plant", "ed"], ["um", "ing"], ["]", ")"], ["▁D", "ub"], ["rou", "ps"], ["▁p", "ill"], ["red", "it"], ["sc", "reen"], ["明确", "指出"], ["另一", "方"], ["的主要", "原因"], ["过程", "和"], ["不", "难"], ["着", "陆"], ["问", "责"], ["在", "法律"], ["在", "同一"], ["是", "很"], ["▁R", "ay"], ["▁W", "inter"], ["▁o", "w"], ["▁conscious", "ness"], ["▁cour", "ts"], ["▁comp", "assion"], ["▁p", "ose"], ["▁C", "T"], ["P", "et"], ["特", "性的"], ["召开", "的"], ["基", "质"], ["标志", "物"], ["L", "im"], ["ak", "ota"], ["默", "认"], ["▁pl", "us"], ["▁theore", "tical"], ["eng", "ths"], ["▁De", "ath"], ["▁Pro", "duct"], ["中华", "文化"], ["市场", "和"], ["乡村振兴", "战略"], ["静", "止"], ["而", "产生的"], ["产", "教"], ["论", "断"], ["降", "水"], ["▁arr", "ival"], ["o", "en"], ["植", "物的"], ["应", "答"], ["ob", "by"], ["ik", "es"], ["導", "致"], ["J", "an"], ["Des", "cription"], ["比", "利"], ["Int", "eg"], ["N", "Y"], ["í", "a"], ["大", "师"], ["并", "根据"], ["诚", "实"], ["▁row", "s"], ["督", "导"], ["▁cl", "ust"], ["▁nit", "rogen"], ["▁Wild", "life"], ["?", "”▁"], ["▁health", "ier"], ["包括", "了"], ["ro", "se"], ["Im", "pro"], ["相互", "促进"], ["层次", "的"], ["用", "好"], ["规范", "性"], ["投", "融资"], ["账", "款"], ["征", "信"], ["固", "化"], ["▁Ph", "ot"], ["都", "被"], ["F", "ocus"], ["m", "o"], ["▁l", "unch"], ["▁S", "on"], ["uris", "d"], ["在", "政治"], ["听", "取"], ["▁tra", "ce"], ["▁A", "R"], ["对其", "进行"], ["▁par", "ad"], ["▁Med", "iterranean"], ["▁displ", "ays"], ["名", "人"], ["PL", "C"], ["▁d", "uties"], ["时", "有"], ["居", "世界"], ["法定", "代表"], ["功能", "障碍"], ["污", "泥"], ["口", "服"], ["影响", "着"], ["的人", "物"], ["r", "é"], ["▁accel", "er"], ["方法", "是"], ["▁Mc", "C"], ["▁observ", "ing"], ["it", "ations"], ["▁govern", "or"], ["▁mot", "ivation"], ["河南", "省"], ["p", "are"], ["▁respect", "ive"], ["建设", "中"], ["的", "两个"], ["▁o", "ils"], ["▁var", "ies"], ["urric", "ane"], ["▁br", "id"], ["分子", "的"], ["河北", "省"], ["矛盾", "和"], ["为", "依据"], ["建立", "一个"], ["财", "力"], ["不", "正当"], ["黑", "洞"], ["▁bus", "y"], ["▁expl", "ores"], ["▁ess", "ence"], ["▁nutrition", "al"], ["▁ra", "ising"], ["▁art", "if"], ["A", "h"], ["m", "ail"], ["公", "尺"], ["哲学", "家"], ["ic", "ut"], ["am", "ic"], ["▁C", "ape"], ["无", "穷"], ["交", "给"], ["▁h", "ip"], ["▁medic", "ines"], [".", "’"], ["V", "er"], ["立足", "于"], ["联", "结"], ["国际", "经济"], ["ey", "ond"], ["艺术", "的"], ["▁cent", "ered"], ["▁C", "emetery"], ["▁shif", "ts"], ["▁stay", "ing"], ["▁were", "n"], ["M", "V"], ["來", "自"], ["c", "hem"], ["art", "en"], ["F", "R"], ["CA", "R"], ["拉", "丁"], ["页", "面"], ["e", "at"], ["▁address", "es"], ["▁diet", "s"], ["▁tack", "le"], ["下", "跌"], ["参", "谋"], ["增", "效"], ["▁saf", "er"], ["▁sp", "ine"], ["财务", "报表"], ["▁b", "in"], ["得", "分"], ["▁les", "ions"], ["▁Mass", "achusetts"], ["上升", "到"], ["管理", "工作"], ["仪", "表"], ["损", "益"], ["全", "覆盖"], ["所", "带来的"], ["班", "主任"], ["霸", "权"], ["有", "为"], ["▁cook", "ed"], ["▁discover", "ies"], ["▁ne", "ither"], ["▁veget", "able"], ["▁comp", "ost"], ["光", "的"], ["▁F", "uture"], ["eth", "yl"], ["▁div", "ide"], ["在", "前"], ["商品", "的"], ["苏", "维埃"], ["洪", "水"], ["M", "ad"], ["白", "血"], ["s", "al"], ["he", "el"], ["▁H", "ong"], ["▁P", "ass"], ["▁p", "itch"], ["▁arg", "ued"], ["▁imag", "ination"], ["▁b", "ic"], ["▁che", "ese"], ["▁l", "akes"], ["▁sens", "ory"], ["本章", "小结"], ["实施", "了"], ["外汇", "储备"], ["尊", "严"], ["急", "需"], ["氢", "气"], ["设计", "中"], ["轻", "重"], ["疲", "劳"], ["戏", "曲"], ["片", "面"], ["相对", "应"], ["的", "逻辑"], ["est", "ions"], ["▁d", "ating"], ["▁rul", "ed"], ["▁rail", "road"], ["▁fre", "ely"], ["▁tw", "ist"], ["开", "源"], ["虚拟", "化"], ["区", "为"], ["p", "ol"], ["▁p", "iano"], ["ad", "ing"], ["uten", "ant"], ["▁part", "ial"], ["F", "amily"], ["▁pass", "engers"], ["▁post", "s"], ["▁pred", "ators"], ["▁g", "ate"], ["一", "书"], ["百年", "奋斗"], ["技术的", "应用"], ["与", "创新"], ["习", "俗"], ["事", "中"], ["全", "新"], ["ar", "o"], ["收", "錄"], ["o", "ys"], ["b", "irds"], ["马", "尔"], ["▁dem", "ocracy"], ["環", "境"], ["▁c", "ure"], ["▁d", "ense"], ["▁wor", "st"], ["l", "is"], ["is", "ons"], ["▁rainf", "all"], ["▁succeed", "ed"], ["电池", "的"], ["流", "的"], ["设计", "师"], ["as", "a"], ["▁C", "op"], ["▁distingu", "ish"], ["▁regard", "ed"], ["▁pick", "ed"], ["侵权", "责任"], ["方", "略"], ["亮", "点"], ["本", "病"], ["串", "联"], ["教育", "资源"], ["的", "投资"], ["公", "认"], ["浪", "漫"], ["最", "有"], ["的", "故事"], ["▁R", "ef"], ["▁dr", "um"], ["伊斯", "兰"], ["▁en", "orm"], ["▁ne", "urolog"], ["企", "業"], ["▁B", "ad"], ["风", "电"], ["色", "素"], ["ch", "ild"], ["直", "辖"], ["显示", "了"], ["▁L", "ib"], ["oc", "ols"], ["Olymp", "ic"], ["▁ele", "ph"], ["▁select", "ing"], ["an", "th"], ["aun", "a"], ["▁ut", "ility"], ["民族", "复兴"], ["本", "领"], ["无形", "资产"], ["如果", "说"], ["都", "没有"], ["水", "源"], ["▁res", "ist"], ["▁im", "per"], ["和", "保护"], ["D", "B"], ["▁belong", "ing"], ["▁f", "raction"], ["癌", "细胞"], ["市场", "营销"], ["正", "向"], ["▁barri", "er"], ["▁mult", "ip"], ["▁p", "anc"], ["end", "ers"], ["▁c", "yl"], ["▁lik", "elihood"], ["d", "ess"], ["▁rele", "ases"], ["当今", "世界"], ["可", "行的"], ["涉", "案"], ["反", "抗"], ["▁assign", "ment"], ["▁absor", "ption"], ["▁cut", "s"], ["▁▁▁▁▁▁▁▁", "▁▁▁▁"], ["U", "C"], ["Bl", "ue"], ["n", "um"], ["▁Christ", "ians"], ["▁mamm", "als"], ["▁wor", "n"], ["▁vol", "umes"], ["▁Con", "vention"], ["▁m", "es"], ["\u0007", "\b"], ["历史", "文化"], ["理", "财"], ["办", "案"], ["一致", "的"], ["确", "切"], ["we", "gian"], ["▁b", "are"], ["▁abnorm", "al"], ["▁pro", "long"], ["h", "ot"], ["C", "arl"], ["h", "ydro"], ["ot", "yp"], ["▁he", "ter"], ["思维", "方式"], ["派", "的"], ["就", "不能"], ["也", "不会"], ["固", "有"], ["技", "艺"], ["电", "器"], ["▁occup", "ied"], ["▁N", "ic"], ["▁add", "iction"], ["▁haz", "ards"], ["▁minor", "ity"], ["▁pain", "ful"], ["u", "ated"], ["u", "j"], ["▁F", "rom"], ["▁Min", "istry"], ["▁U", "se"], ["i", "ors"], ["ins", "p"], ["权", "责"], ["经济", "结构"], ["的", "比重"], ["各个", "方面"], ["传统", "文化的"], ["用", "品"], ["朝", "着"], ["偏", "离"], ["▁School", "s"], ["散", "射"], ["可用", "性"], ["▁critic", "ism"], ["▁f", "ictional"], ["▁att", "ending"], ["▁continu", "ing"], ["р", "а"], ["边", "境"], ["▁l", "ib"], ["▁per", "m"], ["▁en", "forcement"], ["两", "部分"], ["后", "代"], ["首", "批"], ["ibli", "ography"], ["▁fol", "k"], ["▁he", "pat"], ["▁how", "ever"], ["▁speak", "er"], ["og", "ene"], ["gh", "an"], ["itzer", "land"], ["▁Stand", "ard"], ["C", "u"], ["v", "as"], ["▁b", "ub"], ["▁v", "ascular"], ["为", "国家"], ["还", "不"], ["规章", "制度"], ["千", "万"], ["受", "托"], ["各个", "环节"], ["损", "坏"], ["紊", "乱"], ["当前", "的"], ["▁emer", "ge"], ["▁mole", "cule"], ["通", "行"], ["系统", "中的"], ["▁end", "angered"], ["▁R", "o"], ["▁t", "ag"], ["E", "mb"], ["P", "an"], ["▁Car", "ibbean"], ["▁J", "oe"], ["证", "人"], ["▁assum", "ed"], ["com", "m"], ["for", "ced"], ["款", "规定"], ["模块", "化"], ["军", "委"], ["但", "却"], ["推", "定"], ["▁document", "ary"], ["牛", "顿"], ["ustr", "ial"], ["透", "過"], ["J", "ew"], ["▁capt", "ivating"], ["▁phr", "ases"], ["▁surround", "ings"], ["以太", "网"], ["k", "ay"], ["▁P", "olicy"], ["aren", "cy"], ["▁Pl", "aces"], ["et", "he"], ["P", "rior"], ["▁lo", "an"], ["▁per", "pet"], ["跨", "学科"], ["影响", "因素"], ["判", "处"], ["表", "决"], ["转", "折"], ["说", "服"], ["价格", "的"], ["这里", "的"], ["甚至", "是"], ["的研究", "人员"], ["的安全", "性"], ["in", "cess"], ["ly", "n"], ["▁car", "ries"], ["▁municip", "alities"], ["▁recip", "e"], ["▁sk", "illed"], ["▁ter", "ror"], ["▁Th", "at"], ["ot", "ten"], ["▁T", "a"], ["▁f", "ra"], ["▁parl", "iament"], ["▁w", "elfare"], ["m", "ont"], ["▁m", "issions"], ["▁pl", "acing"], ["整体", "性"], ["国有", "资本"], ["现代", "企业"], ["卒", "中"], ["更", "能"], ["下", "滑"], ["将", "为"], ["接", "壤"], ["as", "al"], ["▁Med", "al"], ["ri", "ers"], ["on", "i"], ["P", "ractice"], ["i", "king"], ["发展", "水平"], ["产品", "和服务"], ["孩", "子的"], ["广泛", "应用于"], ["东南", "亚"], ["L", "ocal"], ["ü", "r"], ["itect", "ure"], ["▁isol", "ation"], ["oun", "s"], ["ard", "o"], ["超", "級"], ["生产", "力的"], ["辩证", "法"], ["表", "型"], ["农", "作物"], ["必", "不可"], ["频", "谱"], ["作", "主"], ["鄉", "試"], ["im", "en"], ["讲", "座"], ["play", "ers"], ["L", "ight"], ["▁N", "ov"], ["▁explain", "ing"], ["▁interview", "s"], ["apt", "ers"], ["▁attempt", "ed"], ["▁d", "oses"], ["▁g", "aps"], ["▁am", "ino"], ["oc", "hemical"], ["连续", "性"], ["额", "外的"], ["▁N", "a"], ["##", "##▁"], ["▁b", "its"], ["▁n", "odes"], ["▁prev", "ents"], ["哺", "乳"], ["M", "ount"], ["▁L", "ady"], ["▁t", "ongue"], ["到", "位"], ["中国特色社会主义", "道路"], ["投", "机"], ["超", "過"], ["th", "lete"], ["▁orient", "ation"], ["中", "學"], ["斯", "拉"], ["▁cra", "ck"], ["▁sk", "et"], ["ur", "se"], ["▁public", "ations"], ["Christ", "ian"], ["Im", "p"], ["▁N", "ob"], ["現", "代"], ["。", "▁("], ["功能", "和"], ["主要", "通过"], ["心脏", "病"], ["五", "十"], ["的", "反应"], ["V", "irginia"], ["an", "ia"], ["中", "叶"], ["▁dig", "it"], ["▁partic", "le"], ["▁f", "est"], ["▁c", "her"], ["▁batt", "les"], ["▁teac", "hes"], ["It", "alian"], ["▁be", "am"], ["▁F", "acebook"], ["需要", "进行"], ["计", "入"], ["城乡", "居民"], ["飞", "船"], ["一", "律"], ["涉", "外"], ["高职", "院校"], ["推", "导"], ["是", "大"], ["ne", "x"], ["▁R", "ena"], ["是", "可以"], ["成功", "地"], ["▁qu", "e"], ["▁in", "clusion"], ["的", "操作"], ["P", "rodu"], ["它", "与"], ["le", "ting"], ["f", "ather"], ["▁ad", "mitted"], ["▁c", "ave"], ["▁among", "st"], ["▁establish", "ing"], ["黄", "色"], ["s", "er"], ["▁Tur", "k"], ["p", "olitical"], ["▁M", "ovement"], ["国家", "治理"], ["所", "处"], ["加快", "发展"], ["节能", "减排"], ["是", "把"], ["的", "心理"], ["微", "型"], ["公平", "竞争"], ["工", "匠"], ["应", "根据"], ["号", "召"], ["理论", "知识"], ["探", "针"], ["邮", "政"], ["▁s", "le"], ["ograph", "ics"], ["▁Em", "peror"], ["这些", "数据"], ["的", "工具"], ["▁W", "ilson"], ["▁horiz", "ontal"], ["▁sp", "ir"], ["▁c", "able"], ["▁campaign", "s"], ["▁digest", "ive"], ["▁f", "isher"], ["▁last", "ing"], ["▁wind", "s"], ["ou", "stic"], ["▁mel", "an"], ["O", "l"], ["pl", "ed"], ["百", "科"], ["和", "基本"], ["了", "我国"], ["争", "夺"], ["恶", "劣"], ["里", "面"], ["ag", "le"], ["增加", "到"], ["Ch", "inese"], ["振", "荡"], ["字", "节"], ["f", "lu"], ["c", "s"], ["mod", "ern"], ["Spec", "ial"], ["▁d", "ictionary"], ["N", "i"], ["国家", "对"], ["电解", "质"], ["享", "有的"], ["开始", "了"], ["产学", "研"], ["眼", "光"], ["不足", "以"], ["▁prior", "ity"], ["ol", "ine"], ["乳", "腺癌"], ["pro", "b"], ["J", "ud"], ["ipl", "inary"], ["或", "在"], ["▁A", "ud"], ["天文", "台"], ["in", "ces"], ["W", "A"], ["上", "来"], ["才", "有"], ["提供了", "一个"], ["寄", "生"], ["▁king", "dom"], ["即", "时"], ["Int", "erest"], ["int", "erest"], ["▁A", "ccess"], ["▁Pal", "est"], ["▁col", "ony"], ["A", "p"], ["重要", "思想"], ["构建", "新发展格局"], ["的", "正确"], ["人民币", "汇率"], ["督", "促"], ["边", "疆"], ["气", "氛"], ["节", "水"], ["汇", "报"], ["渔", "业"], ["▁pay", "ment"], ["逆", "转"], ["▁sh", "opping"], ["的", "自由"], ["d", "in"], ["▁th", "yroid"], ["om", "ical"], ["at", "abase"], ["▁cir", "cles"], ["就", "越"], ["海", "底"], ["无", "数"], ["St", "ill"], ["`", ",▁"], ["▁dim", "in"], ["经济", "和"], ["▁H", "an"], ["on", "el"], ["未成", "年"], ["P", "G"], ["R", "ank"], ["hemat", "ics"], ["m", "ind"], ["▁N", "ame"], ["ph", "al"], ["cast", "ing"], ["生产", "过程"], ["准确", "把握"], ["分析", "法"], ["理论", "课"], ["短期", "内"], ["农村", "土地"], ["高等", "院校"], ["开放", "性"], ["企", "图"], ["多", "家"], ["税务", "机关"], ["▁S", "her"], ["▁regist", "ered"], ["in", "formation"], ["这", "段"], ["▁prot", "ocol"], ["▁T", "O"], ["主", "題"], ["end", "ment"], ["▁tra", "ding"], ["▁works", "hops"], ["m", "ap"], ["s", "qu"], ["▁dist", "ract"], ["▁ent", "reprene"], ["▁integ", "ral"], ["各自", "的"], ["心", "律"], ["u", "um"], ["v", "y"], ["ent", "i"], ["c", "r"], ["▁D", "ream"], ["舉", "辦"], ["▁defin", "itions"], ["u", "f"], ["▁appl", "ies"], ["necess", "ary"], ["▁I", "raq"], ["▁kilomet", "ers"], ["省", "市"], ["实践", "性"], ["电动", "汽车"], ["而", "不能"], ["洞", "察"], ["大", "革命"], ["派", "出"], ["来", "到"], ["▁dist", "ress"], ["▁dest", "ination"], ["▁immigr", "ants"], ["▁se", "es"], ["▁bul", "lying"], ["Pl", "ant"], ["▁B", "or"], ["采用", "的"], ["方", "差"], ["乙", "烯"], ["演", "绎"], ["采", "纳"], ["物理", "学家"], ["的", "好"], ["冗", "余"], ["M", "er"], ["附近", "的"], ["▁cons", "ent"], ["▁cam", "eras"], ["▁pray", "er"], ["▁suggest", "ions"], ["▁trans", "mitted"], ["公共", "安全"], ["区", "内"], ["的基本", "概念"], ["目前", "我国"], ["惯", "例"], ["还", "需"], ["科学", "与"], ["于", "一"], ["的", "热"], ["表达", "式"], ["工作", "报告"], ["得", "知"], ["EN", "T"], ["▁Am", "azon"], ["M", "arc"], ["ram", "a"], ["▁gra", "y"], ["t", "ered"], ["off", "ering"], ["▁man", "us"], ["▁prec", "isely"], ["b", "ird"], ["▁C", "ultural"], ["再", "加上"], ["直", "肠"], ["▁mod", "ule"], ["▁lect", "ure"], ["”", "("], ["▁associ", "ate"], ["vious", "ly"], ["马克思主义中国", "化"], ["生产", "资料"], ["市场", "经济的"], ["呼", "吁"], ["的", "区别"], ["感", "应"], ["应当", "按照"], ["年", "逝世"], ["之后", "的"], ["▁R", "en"], ["元素", "的"], ["De", "ath"], ["的", "开发"], ["▁T", "reat"], ["se", "a"], ["▁jud", "gment"], ["▁document", "ed"], ["▁rest", "ricted"], ["*", ":▁"], ["L", "and"], ["敦", "煌"], ["可以", "看到"], ["m", "aster"], ["下", "一个"], ["▁on", "set"], ["传", "媒"], ["天", "皇"], ["拍", "攝"], ["▁s", "ulf"], ["▁suscept", "ible"], ["▁an", "ch"], ["荷", "蘭"], ["西", "亞"], ["▁S", "a"], ["▁T", "aylor"], ["法治", "化"], ["市场", "机制"], ["不", "履行"], ["矫", "正"], ["专门", "的"], ["优秀", "的"], ["存储", "器"], ["让学生", "在"], ["侧重", "于"], ["ul", "ates"], ["市", "长"], ["▁fat", "igue"], ["amm", "ad"], ["▁E", "dition"], ["ject", "ive"], ["导", "演"], ["ol", "o"], ["ym", "e"], ["让", "他们"], ["进行", "研究"], ["▁d", "ual"], ["下", "属"], ["和", "多"], ["有", "不同的"], ["两", "项"], ["thod", "ox"], ["U", "nt"], ["一", "同"], ["▁sc", "ope"], ["GF", "R"], ["redu", "cing"], ["▁d", "airy"], ["▁dis", "comfort"], ["▁phot", "ography"], ["▁writ", "es"], ["th", "ony"], ["on", "ing"], ["L", "ead"], ["cont", "rol"], ["m", "RNA"], ["主", "线"], ["胜", "任"], ["党", "校"], ["ind", "ex"], ["在", "很大程度上"], ["的", "增加"], ["旅", "客"], ["大", "同"], ["明", "的"], ["C", "ut"], ["▁supp", "lements"], ["▁Pr", "ime"], ["N", "atural"], ["化", "物"], ["▁stim", "ulation"], ["状态", "下"], ["口", "号"], ["科", "學"], ["联系", "起来"], ["每", "月"], ["O", "U"], ["▁system", "ic"], ["▁P", "it"], ["or", "ig"], ["▁h", "ide"], ["aus", "es"], ["n", "ational"], ["指导", "意见"], ["重要", "讲话"], ["信息", "披露"], ["课程", "改革"], ["支付", "的"], ["所", "长"], ["五", "代"], ["▁inv", "ention"], ["▁B", "alt"], ["▁S", "ydney"], ["every", "one"], ["suggest", "ing"], ["▁bel", "oved"], ["一", "张"], ["lar", "ge"], ["結", "構"], ["▁cy", "t"], ["ourn", "als"], ["顯", "示"], ["▁L", "ewis"], ["▁I", "mm"], ["▁sc", "iences"], ["N", "G"], ["涵盖", "了"], ["基础", "上的"], ["▁V", "iew"], ["em", "in"], ["的有效", "性"], ["▁sing", "ing"], ["▁brother", "s"], ["▁c", "ups"], ["▁cl", "ues"], ["▁sh", "ade"], ["方", "言"], ["截", "止"], ["y", "g"], ["P", "rom"], ["中", "使用"], ["的", "角色"], ["▁k", "g"], ["少", "女"], ["▁Har", "vard"], ["复合", "型"], ["创新", "和"], ["办公", "厅"], ["贫困", "地区"], ["从而", "实现"], ["毕", "竟"], ["电", "图"], ["比较", "优势"], ["等", "形式"], ["为", "我们"], ["膜", "炎"], ["监", "会"], ["μ", "m"], ["▁fit", "ness"], ["–", "▁▁"], ["j", "an"], ["蓝", "色"], ["有", "一些"], ["So", "on"], ["▁re", "venue"], ["▁sing", "les"], ["▁B", "all"], ["y", "ers"], ["▁m", "apping"], ["ment", "ation"], ["▁separ", "ation"], ["▁enzym", "es"], ["年", "内"], ["资源", "共享"], ["逃", "避"], ["减", "缓"], ["▁desc", "end"], ["▁bron", "ze"], ["挪", "威"], ["之前", "的"], ["管理", "局"], ["Never", "theless"], ["▁consist", "ed"], ["▁manufacture", "r"], ["m", "el"], ["党", "在"], ["四川", "省"], ["方向", "的"], ["组织", "中"], ["机", "电"], ["西", "汉"], ["上", "限"], ["制", "药"], ["州", "府"], ["近", "现代"], ["东", "盟"], ["校", "准"], ["第六", "章"], ["走", "势"], ["新", "区"], ["优越", "性"], ["主要", "表现在"], ["▁d", "ress"], ["▁absol", "ute"], ["起源", "于"], ["和", "维护"], ["▁celeb", "ration"], ["▁magn", "itude"], ["▁J", "on"], ["▁M", "ajor"], ["m", "ount"], ["不", "及"], ["▁sl", "ave"], ["in", "ery"], ["▁ch", "amber"], ["▁arth", "ritis"], ["Vol", "ume"], ["f", "iction"], ["▁const", "raints"], ["的", "解释"], ["很", "重要"], ["泄", "漏"], ["的", "材料"], ["病", "灶"], ["▁should", "er"], ["D", "T"], ["ob", "ic"], ["Afric", "an"], ["選", "區"], ["▁I", "dent"], ["S", "aint"], ["all", "enge"], ["▁se", "al"], ["r", "ise"], ["Sp", "anish"], ["▁th", "row"], ["财产", "的"], ["请求", "权"], ["乐", "观"], ["议", "事"], ["▁accept", "ance"], ["▁ex", "clud"], ["地", "带"], ["拆", "除"], ["ph", "ysical"], ["▁pred", "omin"], ["▁defin", "itely"], ["▁sett", "lers"], ["▁w", "ra"], ["▁work", "place"], ["一", "大"], ["航空", "航天"], ["第三", "个"], ["流行", "病"], ["开", "通"], ["ag", "h"], ["职", "位"], ["入", "选"], ["u", "pp"], ["▁s", "ons"], ["这一", "问题"], ["团结", "带领"], ["超", "导"], ["功", "效"], ["孕", "育"], ["新", "的发展"], ["条", "文"], ["这一", "时期"], ["知", "觉"], ["军", "人"], ["▁F", "ront"], ["大", "都"], ["D", "ate"], ["▁gram", "mar"], ["▁F", "ox"], ["as", "hed"], ["w", "ent"], ["▁St", "one"], ["▁cy", "ber"], ["▁defe", "at"], ["▁in", "clusive"], ["T", "able"], ["创造", "的"], ["无", "所"], ["理事", "会"], ["E", "G"], ["」、", "「"], ["per", "ature"], ["在", "日本"], ["▁can", "al"], ["Ph", "ot"], ["▁gen", "ome"], ["O", "s"], ["norm", "al"], ["omet", "er"], ["国内", "生产总值"], ["和", "学生"], ["臺", "南"], ["填", "补"], ["校", "外"], ["逐", "年"], ["▁Dav", "is"], ["批", "量"], ["半", "径"], ["ustr", "ated"], ["t", "own"], ["調", "查"], ["ues", "ts"], ["▁bo", "ards"], ["▁with", "draw"], ["ro", "b"], ["这", "对于"], ["B", "razil"], ["面", "上"], ["哈", "尔"], ["▁Phil", "adelphia"], ["ym", "n"], ["PP", "P"], ["▁toler", "ance"], ["▁assum", "ptions"], ["d", "d"], ["▁b", "ass"], ["▁c", "ig"], ["s", "ized"], ["at", "ri"], ["T", "urn"], ["ect", "ive"], ["从", "这个"], ["新", "民主主义"], ["膜", "的"], ["积极", "推进"], ["较低", "的"], ["与", "分析"], ["带", "着"], ["积极", "开展"], ["上", "腺"], ["停", "车"], ["家", "园"], ["T", "reatment"], ["employ", "ment"], ["运", "载"], ["示", "意图"], ["相", "近"], ["▁prec", "ip"], ["▁bur", "den"], ["▁p", "ale"], ["’", ".▁"], ["▁incred", "ibly"], ["▁install", "ation"], ["▁viol", "ent"], ["au", "x"], ["进行", "比较"], ["课", "本"], ["基因", "表达"], ["刺", "史"], ["以及", "在"], ["不", "忘"], ["ik", "h"], ["roll", "ing"], ["\"", "|"], ["▁bas", "ics"], ["▁mean", "ings"], ["▁ret", "ail"], ["J", "ul"], ["▁\\", "[[@"], ["Am", "phibians"], ["▁b", "aking"], ["代表", "团"], ["P", "res"], ["现代化", "建设"], ["可以", "作为"], ["大力", "推进"], ["周期", "性"], ["等", "离子"], ["必须", "以"], ["新", "动能"], ["载", "人"], ["等", "功能"], ["CP", "I"], ["▁whe", "at"], ["▁architect", "ural"], ["▁n", "ick"], ["▁repe", "at"], ["年", "中"], ["▁r", "ational"], ["▁Th", "rough"], ["▁ph", "ilos"], ["▁produ", "cers"], ["採", "用"], ["ask", "et"], ["市", "場"], ["K", "en"], ["▁S", "ong"], ["F", "ar"], ["巨噬", "细胞"], ["说", "是"], ["营", "利"], ["合作", "伙伴"], ["io", "let"], ["umin", "um"], ["▁associ", "ations"], ["▁element", "ary"], ["▁surv", "ived"], ["利", "亞"], ["▁B", "ureau"], ["▁wid", "th"], ["O", "per"], ["各", "地区"], ["农民", "的"], ["理论和", "实践"], ["进一步", "加强"], ["排", "水"], ["梗", "死"], ["感", "悟"], ["不断", "推进"], ["抑", "郁"], ["主", "事"], ["pl", "t"], ["年代", "末"], ["is", "ations"], ["▁co", "ins"], ["读", "写"], ["▁be", "ars"], ["▁conf", "used"], ["▁speed", "s"], ["l", "ib"], ["▁ret", "ro"], ["or", "ney"], ["S", "yn"], ["方", "形"], ["兼", "任"], ["以", "保证"], ["董事", "长"], ["ass", "ium"], ["受", "试"], ["l", "ob"], ["▁Aff", "airs"], ["▁v", "ice"], ["re", "leased"], ["▁ref", "used"], ["▁soph", "isticated"], ["▁high", "way"], ["omm", "y"], ["球", "菌"], ["▁L", "inux"], ["x", "y"], ["▁J", "ane"], ["精", "细化"], ["民主", "党派"], ["教学", "活动"], ["感", "和"], ["聚", "类"], ["全国", "政协"], ["电力", "系统"], ["直接", "投资"], ["侵", "蚀"], ["辛", "亥"], ["次", "会议"], ["民", "办"], ["▁prec", "ision"], ["程序", "设计"], ["困", "扰"], ["▁f", "ed"], ["ydr", "ates"], ["▁b", "ike"], ["▁entertain", "ment"], ["菲", "律"], ["▁R", "oss"], ["▁m", "ask"], ["乌", "克兰"], ["和", "提高"], ["镜", "头"], ["Cl", "imate"], ["▁off", "ices"], ["▁t", "ape"], ["▁ang", "les"], ["e", "ared"], ["母", "親"], ["T", "ube"], ["▁th", "reshold"], ["par", "ing"], ["ad", "ron"], ["应", "是"], ["反", "腐败"], ["血", "流"], ["税", "款"], ["细", "致"], ["▁en", "cl"], ["就是", "一个"], ["生物", "技术"], ["陷", "阱"], ["将", "被"], ["▁le", "an"], ["▁st", "ems"], ["水", "域"], ["的", "单"], ["▁", "•▁"], ["最早", "的"], ["场", "地"], ["og", "ram"], ["一", "世"], ["st", "all"], [";", "}-"], ["lic", "t"], ["th", "ings"], ["N", "P"], ["B", "uild"], ["▁Swed", "ish"], ["▁brows", "er"], ["从而", "提高"], ["的", "做法"], ["安", "定"], ["随", "访"], ["%", "),▁"], ["▁accomp", "any"], ["▁categ", "or"], ["▁educ", "ated"], ["咖", "啡"], ["▁R", "ab"], ["▁rad", "i"], ["spec", "ies"], ["▁pass", "word"], ["▁season", "al"], ["ug", "by"], ["犯罪", "行为"], ["的", "权力"], ["指标", "体系"], ["的", "结合"], ["伊", "拉克"], ["p", "a"], ["▁Liter", "ature"], ["spec", "ifically"], ["▁brief", "ly"], ["后", "面"], ["流", "行的"], ["ic", "iency"], ["▁to", "mat"], ["reg", "ardless"], ["▁beg", "un"], ["▁relax", "ation"], ["A", "bs"], ["集", "中的"], ["冻", "结"], ["装", "机"], ["j", "u"], ["陆", "地"], ["恩", "斯"], ["v", "als"], ["▁Res", "erve"], ["e", "ffic"], ["L", "ee"], ["▁Miss", "issippi"], ["▁abund", "ant"], ["▁c", "ough"], ["▁god", "s"], ["▁sa", "uce"], ["▁v", "ot"], ["的", "决定"], ["及", "应用"], ["特点", "和"], ["鼓励", "学生"], ["副", "作用"], ["目的", "在于"], ["淡", "化"], ["为", "首"], ["▁cry", "pt"], ["短", "暂"], ["ore", "r"], ["▁dis", "put"], ["▁an", "at"], ["inc", "ome"], ["▁st", "abil"], ["b", "ase"], ["▁oper", "ational"], ["▁fore", "ver"], ["▁sleep", "ing"], ["反", "垄断"], ["固", "态"], ["每", "周"], ["研究", "结果"], ["一", "开始"], ["公司", "在"], ["計", "畫"], ["onom", "ous"], ["av", "oid"], ["甲基", "化"], ["▁Y", "ears"], ["ag", "us"], ["▁arrang", "ements"], ["▁deb", "ates"], ["▁prot", "est"], ["▁adopt", "ion"], ["▁re", "ef"], ["坚持", "和完善"], ["教学", "过程"], ["之间的", "矛盾"], ["校", "正"], ["费", "用的"], ["可", "谓"], ["里程", "碑"], ["内", "皮"], ["开", "采"], ["毫", "无"], ["社会", "中"], ["力", "争"], ["上", "行"], ["总", "数"], ["▁H", "ay"], ["▁progress", "ive"], ["ac", "le"], ["sk", "i"], ["平方", "千米"], ["有机", "物"], ["授", "权的"], ["上", "调"], ["It", "aly"], ["ill", "ance"], ["口", "岸"], ["M", "aking"], ["Est", "ab"], ["經", "過"], ["L", "ove"], ["▁cra", "fts"], ["ad", "r"], ["判", "例"], ["弱", "化"], ["看", "成"], ["量", "刑"], ["与", "人"], ["ellig", "ent"], ["enn", "edy"], ["w", "orm"], ["山", "市"], ["提", "案"], ["了", "大量"], ["▁Tur", "key"], ["▁comb", "inations"], ["▁F", "ederation"], ["l", "isher"], ["t", "ogether"], ["▁R", "un"], ["il", "er"], ["i", "ć"], ["安徽", "省"], ["共", "计"], ["代表", "的"], ["然后", "再"], ["▁W", "ed"], ["▁prolif", "eration"], ["程", "式"], ["▁descri", "bing"], ["onym", "ous"], ["▁ph", "ones"], ["▁o", "ceans"], ["▁reprodu", "ctive"], ["E", "arth"], ["科", "创"], ["预", "案"], ["思维", "和"], ["言", "语"], ["祭", "祀"], ["精", "华"], ["劳动", "教育"], ["服务", "平台"], ["上", "进行"], ["ast", "ing"], ["udden", "ly"], ["▁s", "ending"], ["▁complet", "ion"], ["▁t", "rem"], ["▁p", "neum"], ["质量", "管理"], ["bl", "ue"], ["塑", "性"], ["有", "三"], ["AT", "P"], ["or", "ient"], ["▁myster", "ious"], ["ier", "re"], ["▁her", "b"], ["▁fol", "ks"], ["▁overwhel", "ming"], ["ard", "ed"], ["▁Ant", "on"], ["H", "and"], ["ic", "ul"], ["国际", "货币"], ["要", "对"], ["法律", "体系"], ["全球", "化的"], ["组织", "结构"], ["病", "人的"], ["经济社会", "发展的"], ["商", "事"], ["等", "奖"], ["重点", "实验室"], ["he", "nd"], ["p", "oss"], ["民", "政"], ["▁m", "art"], ["ropri", "ate"], ["▁ceremon", "y"], ["▁e", "ager"], ["▁show", "c"], ["alk", "er"], ["▁reg", "ister"], ["崩", "溃"], ["公", "社"], ["Disc", "uss"], ["g", "iven"], ["▁des", "k"], ["Form", "er"], ["▁stret", "ch"], ["▁ar", "tery"], ["▁gu", "ides"], ["▁upd", "ates"], ["D", "eterm"], ["▁rece", "ives"], ["十二", "条"], ["▁Mar", "ine"], ["改", "為"], ["'", ")"], ["▁Ag", "riculture"], ["▁D", "uke"], ["▁ra", "b"], ["刑事", "诉讼"], ["能力", "建设"], ["职业", "院校"], ["财务", "会计"], ["房", "价"], ["携", "手"], ["水", "体"], ["古", "城"], ["变", "暖"], ["从", "来"], ["出", "让"], ["是", "现代"], ["A", "st"], ["ir", "ms"], ["章", "节"], ["row", "span"], ["的", "时"], ["▁v", "ivo"], ["▁comb", "ines"], ["▁puzz", "le"], ["分布", "在"], ["▁h", "al"], ["▁the", "sis"], ["▁require", "ment"], ["规律", "的"], ["等", "进行"], ["打", "下"], ["扩大", "了"], ["打破", "了"], ["博士", "生"], ["经济", "活动"], ["▁sol", "o"], ["可以", "直接"], ["H", "um"], ["▁se", "iz"], ["▁L", "o"], ["▁air", "port"], ["▁illustr", "ations"], ["▁v", "ine"], ["▁need", "le"], ["設", "立"], ["硫", "酸"], ["ex", "ample"], ["▁Ad", "vent"], ["哈", "佛"], ["布", "鲁"], ["網", "路"], ["价值", "和"], ["违约", "金"], ["污水", "处理"], ["服务", "贸易"], ["波", "形"], ["办", "好"], ["破", "除"], ["向", "社会"], ["斯", "塔"], ["以下", "的"], ["▁L", "ow"], ["他", "对"], ["ad", "i"], ["▁assess", "ments"], ["▁com", "edy"], ["▁review", "ed"], ["▁D", "u"], ["ole", "cular"], ["▁mit", "ochond"], ["有", "關"], ["ft", "ware"], ["关系", "和"], ["處", "理"], ["早期", "的"], ["传", "入"], ["Pat", "ients"], ["▁controvers", "ial"], ["▁dram", "atically"], ["▁fav", "our"], ["▁not", "ion"], ["▁retire", "ment"], ["▁st", "unning"], ["Cam", "bridge"], ["t", "ah"], ["加", "哥"], ["芝", "加哥"], ["wid", "th"], ["錦標", "賽"], ["▁R", "og"], ["和", "网络"], ["基本", "实现"], ["转移", "支付"], ["沈", "阳"], ["大规模", "的"], ["废弃", "物"], ["不", "尽"], ["裁", "量"], ["失", "误"], ["开", "支"], ["的", "矛盾"], ["umb", "led"], ["▁m", "RNA"], ["▁util", "ized"], ["指", "定的"], ["崇", "拜"], ["選", "擇"], ["f", "ilm"], ["▁F", "ord"], ["▁T", "ips"], ["会", "造成"], ["创造", "出"], ["蒸", "汽"], ["with", "in"], ["▁absor", "bed"], ["▁employ", "ee"], ["▁N", "ut"], ["are", "st"], ["悠", "久"], ["▁Tre", "nds"], ["az", "ines"], ["S", "ystem"], ["▁M", "ind"], ["▁def", "ects"], ["▁indic", "ators"], ["▁h", "ill"], ["的", "观念"], ["产业", "体系"], ["新", "质生产力"], ["保障", "体系"], ["可", "根据"], ["改", "正"], ["课", "后"], ["款", "项"], ["服务", "等"], ["▁exp", "enses"], ["▁ra", "ces"], ["了", "新的"], ["子", "系统"], ["uls", "ion"], ["▁J", "erusalem"], ["▁so", "ils"], ["▁curren", "cy"], ["▁discipl", "ine"], ["▁special", "ist"], ["马来", "西亚"], ["▁pack", "aging"], ["▁tri", "be"], ["av", "ed"], ["基本", "技能"], ["流", "水"], ["ther", "s"], ["质", "子"], [":", "||"], ["ret", "t"], ["U", "lt"], ["▁mut", "ation"], ["▁practition", "ers"], ["R", "L"], ["▁te", "ens"], ["Current", "ly"], ["▁friends", "hip"], ["▁merg", "ed"], ["▁pot", "atoes"], ["人与自然", "和谐"], ["企业", "经营"], ["迅速", "发展"], ["从而", "导致"], ["公", "积"], ["你", "们"], ["严", "厉"], ["电", "缆"], ["资产", "管理"], ["一直", "在"], ["修正", "案"], ["▁Gall", "ery"], ["生成", "的"], ["▁model", "ing"], ["▁I", "g"], ["▁Tra", "de"], ["▁vel", "ocity"], ["do", "ors"], ["▁el", "abor"], ["ab", "ases"], ["▁jo", "ining"], ["▁h", "ol"], ["B", "esides"], ["▁neighb", "ors"], ["▁virt", "ually"], ["全面", "依法治国"], ["很", "高的"], ["已经", "在"], ["知识", "产权的"], ["领域", "中"], ["发表", "的"], ["u", "ity"], ["r", "int"], ["▁cr", "imes"], ["ays", "ia"], ["P", "oint"], ["us", "hes"], ["▁as", "h"], ["▁elect", "rons"], ["莫", "斯科"], ["威", "尔"], ["▁L", "ar"], ["编码", "为"], ["等", "都"], ["能源", "消费"], ["持", "股"], ["的", "平均"], ["规范", "和"], ["所", "占"], ["日益", "增长的"], ["相关", "部门"], ["上下", "游"], ["多", "彩"], ["人", "次"], ["融", "通"], ["地", "铁"], ["place", "ment"], ["是", "具有"], ["优", "异"], ["精", "彩"], ["V", "M"], ["ut", "ical"], ["val", "ues"], ["銀", "行"], ["uis", "ine"], ["lear", "n"], ["▁cl", "oth"], ["整", "数"], ["的", "第"], ["▁N", "ap"], ["th", "ird"], ["表", "中"], ["停", "留在"], ["加", "权"], ["实质", "上"], ["没", "收"], ["if", "ice"], ["任务", "是"], ["的", "类型"], ["▁dys", "function"], ["征", "服"], ["▁sm", "ell"], ["▁T", "el"], ["Def", "inition"], ["▁achieve", "ments"], ["▁t", "ends"], ["▁tw", "elve"], ["▁vit", "ro"], ["科技", "进步"], ["交", "织"], ["添加", "剂"], ["参与", "到"], ["政府", "职能"], ["耐", "受"], ["必要", "时"], ["绿", "化"], ["罕", "见"], ["y", "st"], ["W", "orks"], ["大", "城市"], ["J", "ean"], ["m", "icro"], ["维", "尔"], ["om", "ed"], ["M", "ag"], ["pl", "ants"], ["▁el", "ig"], ["▁hom", "ework"], ["奥", "斯"], ["▁d", "iving"], ["▁sum", "mar"], ["▁t", "ied"], ["▁travel", "ed"], ["▁met", "ap"], ["form", "s"], ["了一", "定的"], ["单一", "的"], ["B", "T"], ["tain", "ed"], ["▁Leg", "isl"], ["▁l", "oyal"], ["▁Stand", "ards"], ["▁lay", "out"], ["幻", "想"], ["▁", "×▁"], ["▁development", "al"], ["b", "ad"], ["▁m", "im"], ["创新", "精神"], ["湖南", "省"], ["分", "期"], ["的人", "文"], ["不", "具备"], ["使", "他们"], ["打", "好"], ["模式", "和"], ["▁comp", "at"], ["▁corpor", "ate"], ["▁ext", "ends"], ["▁search", "ing"], ["列", "出"], ["▁trans", "f"], ["特", "许"], ["弯", "曲"], ["精", "髓"], ["的", "革命"], ["洛", "克"], ["▁Col", "lection"], ["▁f", "ate"], ["B", "B"], ["▁ind", "irect"], ["z", "one"], ["▁ph", "on"], ["行政", "许可"], ["主要", "以"], ["应", "由"], ["孵", "化"], ["解", "题"], ["担", "忧"], ["可", "是"], ["et", "ically"], ["加", "速度"], ["惯", "性"], ["品", "的"], ["▁out", "line"], ["也", "称"], ["▁tit", "led"], ["▁p", "enc"], ["+", "+"], ["im", "ore"], ["▁P", "ap"], ["▁d", "a"], ["▁H", "op"], ["细胞", "内"], ["想", "到"], ["种", "群"], ["▁Mag", "azine"], ["j", "amin"], ["不再", "是"], ["其", "后"], ["▁aff", "airs"], ["et", "ed"], ["d", "rums"], ["▁develop", "ers"], ["I", "X"], ["In", "s"], ["m", "ill"], ["▁Reg", "ional"], ["重大", "问题"], ["经济", "体系"], ["企", "事业单位"], ["常", "委"], ["价值", "取向"], ["采取", "的"], ["可以", "提高"], ["霉", "素"], ["肺", "部"], ["步", "入"], ["回", "路"], ["民事", "行为"], ["规律", "和"], ["海", "默"], ["手", "册"], ["领", "事"], ["▁E", "mer"], ["克", "拉"], ["▁term", "inal"], ["可", "有"], ["▁ra", "ys"], ["▁tub", "es"], ["退", "化"], ["m", "akers"], ["Dep", "ending"], ["▁develop", "s"], ["▁enorm", "ous"], ["加利", "福"], ["p", "iece"], ["几", "十年"], ["注册", "商标"], ["以", "期"], ["资", "质"], ["▁app", "le"], ["▁char", "ges"], ["▁cre", "ations"], ["▁Pub", "lishing"], ["▁", "~"], ["G", "rand"], ["▁L", "iberal"], ["▁", "\"▁"], ["lic", "ation"], ["▁mark", "er"], ["制", "成"], ["制度", "化"], ["的发展", "和"], ["责", "令"], ["多样", "化的"], ["接", "地"], ["中国", "革命"], ["新", "颖"], ["粘", "膜"], ["身", "边"], ["公司", "治理"], ["碳", "达峰"], ["第一", "位"], ["报", "纸"], ["▁f", "illing"], ["oc", "ate"], ["▁cal", "endar"], ["▁work", "er"], ["二", "人"], ["其", "後"], ["▁B", "ir"], ["B", "ab"], ["ord", "on"], ["經", "營"], ["c", "asts"], [").▁", "\""], ["局", "势"], ["▁w", "ww"], ["任", "期"], ["▁collabor", "ative"], ["▁cook", "ies"], ["▁part", "ially"], ["稳", "态"], ["群", "岛"], ["you", "ng"], ["的", "首"], ["I", "BM"], ["▁st", "er"], ["▁ke", "ys"], ["▁nurs", "ing"], ["act", "ic"], ["实施", "方案"], ["总", "量的"], ["化", "肥"], ["的", "商品"], ["替", "换"], ["骨", "质"], ["失", "调"], ["废", "气"], ["头", "痛"], ["▁consider", "ations"], ["麻", "醉"], ["公", "立"], ["▁M", "innesota"], ["▁prot", "agon"], ["▁un", "likely"], ["▁Pe", "ace"], ["▁dr", "ives"], ["▁effic", "acy"], ["距", "離"], ["▁re", "nt"], ["▁elev", "ation"], ["中华", "民国"], ["非常", "重要的"], ["▁C", "ru"], ["P", "olit"], ["▁ann", "iversary"], ["▁attribut", "ed"], ["d", "rop"], ["在", "外"], ["软件", "开发"], ["▁M", "ess"], ["並", "在"], ["▁gra", "ce"], ["屏", "幕"], ["▁calcul", "ations"], ["▁recogn", "izing"], ["十四", "条"], ["全面", "领导"], ["的", "压力"], ["满意", "度"], ["文", "体"], ["由于", "其"], ["所有", "人"], ["s", "olving"], ["▁conduct", "ing"], ["不", "完全"], ["一个", "新的"], ["▁D", "C"], ["已经", "被"], ["\"▁", "-▁"], ["▁Squ", "are"], ["n", "ings"], ["▁H", "indu"], ["▁cross", "ing"], ["ist", "ically"], ["▁arr", "ive"], ["而", "对于"], ["吸", "取"], ["皮", "书"], ["一次", "性"], ["St", "at"], ["出", "自"], ["繼", "續"], ["高", "地"], ["a", "qu"], ["rict", "ion"], ["ect", "ing"], ["p", "opulation"], ["▁th", "umb"], ["En", "vironmental"], ["▁promot", "ion"], ["數", "據"], ["安", "德"], ["▁l", "ift"], ["▁advoc", "ate"], ["▁dis", "asters"], ["》", ")"], ["我", "认为"], ["当家", "作主"], ["高", "技术"], ["中国", "共产党的"], ["的重要", "手段"], ["监", "理"], ["受", "伤"], ["等", "手段"], ["转", "入"], ["儿童", "的"], ["研究", "与"], ["必", "由"], ["的", "资金"], ["不", "强"], ["守", "法"], ["F", "act"], ["福建", "省"], ["黑", "客"], ["核", "苷"], ["两", "位"], ["大", "樓"], ["c", "ross"], ["▁G", "h"], ["L", "ED"], ["In", "formation"], ["?", "”"], ["ob", "s"], ["▁compet", "ing"], ["▁trig", "gers"], ["▁psych", "iat"], ["am", "an"], ["d", "ated"], ["天", "堂"], ["F", "re"], ["不", "相"], ["开", "工"], ["形", "而上"], ["的", "地区"], ["飞", "速"], ["退", "役"], ["mar", "ine"], ["▁wa", "vel"], ["▁an", "throp"], ["S", "ymptoms"], ["▁avoid", "ing"], ["的", "背景下"], ["各", "环节"], ["的", "成功"], ["但", "如果"], ["利益", "相关"], ["民事", "责任"], ["肥", "料"], ["提", "名"], ["b", "age"], ["异", "构"], ["皇", "后"], ["清", "洗"], ["Dan", "iel"], ["F", "red"], ["▁L", "ev"], ["R", "ail"], ["▁be", "e"], ["▁de", "als"], ["新", "产品"], ["避免", "了"], ["kl", "ah"], ["t", "urn"], ["▁comp", "elling"], ["▁regard", "less"], ["back", "ground"], ["ar", "ms"], [")", "/"], ["的", "无"], ["习近平总书记", "强调"], ["性", "强"], ["根本", "性"], ["民", "用"], ["不", "全"], ["昂", "贵"], ["削", "减"], ["政府", "和"], ["涉", "嫌"], ["宁", "夏"], ["小", "学生"], ["走出", "去"], ["Im", "port"], ["法", "系"], ["s", "ay"], ["古", "希腊"], ["▁j", "urisd"], ["the", "ning"], ["▁ind", "oor"], ["▁inv", "ented"], ["▁pract", "iced"], ["空", "間"], ["s", "ix"], ["战争", "的"], ["艾", "滋"], ["照", "顾"], ["▁prot", "ocols"], ["白血", "病"], ["duc", "ational"], ["н", "и"], ["比", "分"], ["Co", "V"], ["I", "B"], ["W", "ild"], ["vel", "s"], ["▁real", "istic"], ["▁l", "oose"], ["▁harm", "on"], ["E", "X"], ["▁emphas", "ize"], ["▁tra", "v"], ["W", "atch"], ["生", "于"], ["組", "成"], ["坚持和发展", "中国特色社会主义"], ["高速", "增长"], ["应对", "气候变化"], ["中国", "与"], ["与", "国家"], ["示范", "区"], ["责任", "制"], ["制度", "安排"], ["均", "等"], ["造", "影"], ["妨", "碍"], ["▁D", "aily"], ["防火", "墙"], ["的", "能量"], ["拥", "有的"], ["但", "他"], ["v", "ation"], ["祖", "先"], ["Gl", "obal"], ["M", "uch"], ["▁attract", "ive"], ["fect", "ure"], ["▁c", "ope"], ["in", "h"], ["文", "學"], ["以", "达到"], ["十二", "年"], ["从", "未"], ["中", "止"], ["乡", "土"], ["员", "的"], ["▁I", "N"], ["的", "执行"], ["▁im", "plant"], ["▁rel", "atives"], ["布", "尔"], ["▁design", "ers"], ["▁function", "ality"], ["▁intrig", "uing"], ["em", "pt"], ["Y", "e"], ["一种", "是"], ["和", "改善"], ["庞", "大"], ["职业", "技术"], ["缺", "氧"], ["知识和", "技能"], ["典", "范"], ["社会", "责任"], ["党的十九", "大"], ["int", "ers"], ["肿瘤", "的"], ["▁R", "os"], ["全", "文"], ["▁pip", "e"], ["▁writ", "ings"], ["arr", "hea"], ["el", "come"], ["▁end", "ot"], ["f", "urther"], ["ub", "le"], ["人", "机"], ["极", "管"], ["incre", "ased"], ["▁represent", "ations"], ["议", "院"], ["▁electron", "ics"], ["▁creat", "ure"], ["▁workshe", "ets"], ["▁gu", "ided"], ["M", "ap"], ["at", "ories"], ["▁Ind", "ust"], ["car", "bon"], ["发现", "问题"], ["与", "市场"], ["贯穿", "于"], ["兑", "换"], ["凡", "是"], ["社", "团"], ["多", "万"], ["一定", "程度上"], ["H", "F"], ["第二", "种"], ["ble", "ms"], ["▁Swed", "en"], ["▁priv", "ile"], ["▁g", "overning"], ["▁design", "er"], ["▁consist", "ing"], ["▁ingred", "ient"], ["Sw", "ed"], ["**", "▁"], ["▁D", "oes"], ["▁dis", "k"], ["定义", "的"], ["也", "对"], ["看", "似"], ["▁Philipp", "ines"], ["▁te", "ch"], ["▁s", "ail"], ["▁pen", "et"], ["C", "as"], ["▁j", "ew"], ["▁vis", "ually"], ["P", "y"], ["的", "值"], ["會", "議"], ["▁F", "ac"], ["P", "F"], ["半", "岛"], ["abil", "itation"], ["on", "ge"], ["▁d", "ementia"], ["中等", "收入"], ["前瞻", "性"], ["和", "政府"], ["之大", "变局"], ["当", "期"], ["社会主义现代化", "建设"], ["地下", "水"], ["网络", "强国"], ["落", "到"], ["误", "解"], ["的", "差异"], ["摆", "在"], ["▁F", "riday"], ["▁ser", "um"], ["给", "了"], ["很", "有"], ["▁m", "ile"], ["▁k", "illing"], ["▁br", "ill"], ["au", "ge"], ["▁def", "ault"], ["▁acqu", "isition"], ["p", "olit"], ["▁embed", "ded"], ["处理", "和"], ["条件", "下的"], ["原", "先"], ["畜", "牧"], ["su", "per"], ["▁her", "bs"], ["国", "立"], ["p", "ool"], ["▁Ch", "annel"], ["▁S", "ar"], ["An", "aly"], ["▁A", "rizona"], ["▁depos", "its"], ["Every", "one"], ["▁consist", "ency"], ["在", "与"], ["定", "金"], ["百年", "奋斗目标"], ["新", "农村"], ["技能", "人才"], ["必要", "性"], ["翻", "转"], ["选", "题"], ["展现", "出"], ["撞", "击"], ["区域", "经济"], ["家", "属"], ["▁kind", "ness"], ["总", "经理"], ["稳定", "性和"], ["▁sh", "allow"], ["R", "ather"], ["▁consum", "ing"], ["▁introdu", "cing"], ["▁municip", "al"], ["分", "鐘"], ["語", "言"], ["W", "W"], ["克", "蘭"], ["电视", "台"], ["▁inter", "val"], ["▁rot", "ation"], ["....", ".."], ["▁appro", "val"], ["▁subs", "id"], ["国际", "关系"], ["外", "包"], ["沙", "漠"], ["月", "初"], ["或", "有"], ["▁read", "ily"], ["▁real", "m"], ["▁rest", "ored"], ["▁sympt", "om"], ["事", "務"], ["给", "定"], ["是", "世界"], ["oy", "d"], ["复杂", "度"], ["▁S", "olar"], ["ig", "s"], ["▁le", "uk"], ["▁p", "ap"], ["▁E", "arl"], ["ather", "ine"], ["過", "程"], ["ber", "ta"], ["▁mob", "ility"], ["文化", "自信"], ["理论与", "实践"], ["综合", "运用"], ["功能", "性"], ["新", "常态"], ["等", "各种"], ["流", "派"], ["汇", "编"], ["O", "K"], ["▁sm", "iled"], ["的", "项目"], ["族", "群"], ["ib", "et"], ["h", "ol"], ["▁continu", "ously"], ["▁tour", "ism"], ["工业", "和"], ["技术", "人员"], ["可以", "向"], ["不断", "增加"], ["成", "因"], ["多", "名"], ["明", "星"], ["th", "al"], ["Read", "ing"], ["▁S", "n"], ["接受", "了"], ["設", "施"], ["等", "方法"], ["▁t", "ournament"], ["牙", "利"], ["S", "at"], ["▁Wh", "o"], ["▁dis", "advant"], ["▁J", "im"], ["▁Nor", "way"], ["▁advent", "ures"], ["▁purs", "ue"], ["▁somew", "here"], ["writ", "e"], ["来", "表示"], ["以", "学生"], ["小", "区"], ["服务", "和"], ["党和", "人民"], ["原则", "的"], ["产", "地"], ["扩展", "到"], ["的人", "力"], ["被", "执行"], ["贫", "富"], ["兼", "并"], ["实践", "证明"], ["配", "偶"], ["但", "仍"], ["年", "世界"], ["ew", "orks"], ["▁mult", "ipl"], ["▁C", "R"], ["inet", "eenth"], ["ist", "a"], ["▁pow", "ered"], ["at", "ics"], ["ri", "ble"], ["de", "velopment"], ["保持", "在"], ["旋", "律"], ["不", "被"], ["h", "ind"], ["н", "а"], ["勇", "气"], ["华", "盛"], ["Pen", "nsylvania"], ["ou", "ston"], ["▁Die", "go"], ["l", "ie"], ["▁d", "ried"], ["▁h", "ang"], ["ox", "ic"], ["建", "于"], ["▁ev", "ident"], ["▁fund", "ed"], ["▁press", "ing"], ["▁st", "adium"], ["教育", "改革"], ["区别", "于"], ["全面", "发展的"], ["灵敏", "度"], ["重", "在"], ["现实", "意义"], ["导", "电"], ["白", "细胞"], ["懂", "得"], ["投", "保"], ["主要", "为"], ["进", "取"], ["▁immun", "ity"], ["ple", "t"], ["的", "现代"], ["共", "產"], ["▁syn", "thetic"], ["|", "-▁"], ["C", "at"], ["克", "里"], ["▁ra", "cing"], ["▁gra", "ms"], ["问题的", "能力"], ["将", "这些"], ["多", "学科"], ["神", "圣"], ["最", "新的"], ["▁reserv", "oir"], ["i", "ón"], ["乘", "客"], ["▁pro", "sper"], ["▁Test", "ament"], ["至", "此"], ["▁M", "rs"], ["under", "stand"], ["▁e", "rect"], ["▁inject", "ion"], ["▁pres", "cribed"], ["enc", "ou"], ["发展", "史"], ["\n\n", "  "], ["是", "利用"], ["竞", "业"], ["黏", "膜"], ["课", "前"], ["信息", "共享"], ["古", "建筑"], ["公", "顷"], ["的", "物理"], ["致", "癌"], ["iv", "ia"], ["v", "iol"], ["▁H", "ard"], ["resp", "ons"], ["▁descri", "ptions"], ["▁Portug", "uese"], ["▁exc", "av"], ["Su", "pport"], ["▁un", "t"], ["▁sus", "pect"], ["迅", "猛"], ["通", "量"], ["中", "立"], ["观", "看"], ["鼓", "舞"], ["冷", "冻"], ["空", "军"], ["els", "h"], ["ig", "e"], ["ob", "i"], ["s", "ky"], ["▁stead", "y"], ["▁rele", "vance"], ["▁serious", "ly"], ["▁un", "necessary"], ["Access", "ed"], ["ang", "ular"], ["实践", "能力"], ["标的", "物"], ["社会主义", "初级阶段"], ["相", "统一"], ["活动", "和"], ["员工", "的"], ["生产", "线"], ["开", "来"], ["渊", "源"], ["为主", "导"], ["报", "警"], ["免", "责"], ["刚", "性"], ["it", "ic"], ["成", "年"], ["年", "美国"], ["号", "线"], ["▁", "→▁"], ["▁b", "ell"], ["▁cam", "ps"], ["▁end", "emic"], ["C", "all"], ["▁O", "fficial"], ["S", "elf"], ["imm", "une"], ["实际上", "是"], ["兵", "团"], ["感", "官"], ["路", "军"], ["对", "环境"], ["存", "放"], ["osc", "ow"], ["▁post", "ed"], ["都", "是在"], ["年", "末"], ["atur", "day"], ["ow", "ers"], ["▁M", "ir"], ["▁flu", "or"], ["▁Miss", "ouri"], ["▁organ", "ize"], ["匈", "牙利"], ["基金", "会"], ["▁accept", "able"], ["▁care", "ers"], ["▁h", "ills"], ["Mass", "achusetts"], ["分", "類"], ["d", "ou"], ["}", "}"], ["E", "qu"], ["h", "abilitation"], ["klah", "oma"], ["一体", "化的"], ["东", "汉"], ["鸦", "片"], ["个", "案"], ["下", "一代"], ["烈", "士"], ["酸", "性"], ["▁M", "other"], ["oh", "ann"], ["▁emb", "ark"], ["f", "requ"], ["PD", "F"], ["u", "ction"], ["op", "ter"], ["In", "clud"], ["人们", "在"], ["▁val", "ve"], ["华盛", "顿"], ["阴", "性"], ["B", "rown"], ["▁invest", "ments"], ["▁f", "ost"], ["roph", "ic"], ["a", "ffect"], ["▁f", "usion"], ["ace", "utical"], ["▁Rena", "issance"], ["▁pl", "aque"], ["安全", "问题"], ["比", "上年"], ["网络", "技术"], ["期限", "内"], ["是", "推动"], ["肾", "上腺"], ["风", "湿"], ["政治", "制度"], ["em", "p"], ["st", "an"], ["同", "性"], ["▁infect", "ious"], ["▁st", "ew"], ["▁arrang", "ement"], ["▁exec", "ution"], ["▁orig", "inated"], ["▁ult", "imate"], ["的", "意思"], ["r", "anging"], ["▁d", "rag"], ["▁T", "ree"], ["b", "uild"], ["S", "n"], ["太", "陽"], ["国家", "标准"], ["总结", "了"], ["绝", "大部分"], ["不", "佳"], ["孩子", "们"], ["▁tr", "ies"], ["的", "和"], ["▁as", "ks"], ["▁dep", "icted"], ["▁st", "ops"], ["標", "準"], ["▁Wh", "at"], ["P", "erson"], ["Th", "ank"], ["s", "outh"], ["A", "V"], ["关键", "核心技术"], ["免疫", "细胞"], ["信息", "技术的"], ["侵", "占"], ["毛泽东", "同志"], ["与", "现代"], ["嫦", "娥"], ["领导", "者"], ["剥", "削"], ["不", "一样"], ["院", "所"], ["ot", "te"], ["▁h", "ung"], ["lu", "x"], ["结", "肠"], ["▁rese", "mb"], ["▁neg", "atively"], ["B", "usiness"], ["▁Ar", "thur"], ["▁di", "agram"], ["▁t", "ort"], ["▁O", "S"], ["th", "ood"], ["▁sim", "ulation"], ["s", "oc"], ["部", "和"], ["与", "健康"], ["数", "百"], ["以", "内"], ["出", "境"], ["▁b", "alls"], ["寄存", "器"], ["▁a", "wards"], ["clus", "ively"], ["▁re", "ar"], ["oc", "ent"], ["▁R", "eb"], ["gradu", "ate"], ["dem", "onstr"], [")", ":"], ["L", "T"], ["生产", "效率"], ["未有", "之大变局"], ["产教", "融合"], ["金融", "资产"], ["突出", "问题"], ["自主", "权"], ["产能", "过剩"], ["外", "周"], ["承", "接"], ["还", "必须"], ["生态", "补偿"], ["远", "离"], ["萃", "取"], ["发展", "方向"], ["征求", "意见"], ["新", "媒体"], ["t", "ons"], ["▁comm", "emor"], ["医疗", "器械"], ["在", "各"], ["▁express", "ing"], ["▁found", "er"], ["▁p", "ediatric"], ["▁ph", "ases"], ["▁A", "PI"], ["N", "B"], ["pro", "gram"], ["p", "in"], ["他", "曾"], ["d", "ie"], ["S", "ix"], ["▁B", "an"], ["▁Al", "aska"], ["▁pass", "enger"], ["那", "就是"], ["的", "中心"], ["不断", "的"], ["结", "节"], ["▁hum", "or"], ["▁hy", "giene"], ["▁important", "ly"], ["设计", "了"], ["从", "一个"], ["b", "in"], ["城市", "规划"], ["C", "opyright"], ["▁R", "est"], ["▁L", "ED"], ["d", "ers"], ["亨", "利"], ["Al", "low"], ["U", "V"], ["安全", "管理"], ["进一步", "的"], ["获得", "感"], ["失业", "率"], ["充", "当"], ["参与", "的"], ["攻", "克"], ["▁O", "regon"], ["▁works", "hop"], ["▁bl", "end"], ["▁Ex", "p"], ["粉", "末"], ["掌握", "了"], ["末", "端"], ["ro", "it"], ["▁target", "ing"], ["▁lingu", "istic"], ["t", "ypically"], ["om", "iting"], ["▁Egypt", "ian"], ["▁an", "ger"], ["▁thick", "ness"], ["应用", "到"], ["比", "值"], ["are", "r"], ["题", "为"], ["▁Ex", "press"], ["▁system", "atic"], ["cel", "and"], ["▁pro", "state"], ["oc", "ard"], ["高", "能"], ["市场", "准入"], ["高", "低"], ["贫困", "人口"], ["严重", "影响"], ["立德树", "人"], ["口", "径"], ["国民", "政府"], ["愿", "景"], ["中华民族", "的"], ["▁n", "ode"], ["建", "設"], ["hem", "atic"], [".▁", "*"], ["bal", "ance"], ["有", "毒"], ["生活", "在"], ["▁M", "ember"], ["▁P", "C"], ["▁reg", "ression"], ["ol", "ia"], ["▁aff", "il"], ["ment", "al"], ["ar", "ium"], ["dom", "inal"], ["▁adoles", "cents"], ["▁ar", "med"], ["▁record", "ings"], ["▁t", "ies"], ["▁b", "ars"], ["京", "都"], ["sp", "eed"], ["所", "需要的"], ["认为", "是"], ["lor", "a"], ["▁activ", "ated"], ["Rev", "iew"], ["ira", "ble"], ["▁reason", "able"], ["se", "ason"], ["▁attribut", "es"], ["▁j", "azz"], ["ind", "ividuals"], ["▁nod", "ded"], ["▁u", "pl"], ["型", "企业"], ["的", "产业"], ["侵权", "行为"], ["虚拟", "现实"], ["了一", "批"], ["组织", "形式"], ["较", "小的"], ["南", "昌"], ["庆", "祝"], ["杀", "死"], ["中", "继"], ["必由", "之路"], ["燃料", "电池"], ["相", "辅"], ["提", "质"], ["d", "ev"], ["的", "代表"], ["代表", "了"], ["第一", "作者"], ["苹", "果"], ["w", "ick"], ["▁mur", "der"], ["▁D", "akota"], ["▁t", "orn"], ["l", "ooking"], ["▁v", "otes"], ["▁Dem", "ocr"], ["nes", "day"], ["▁flood", "ing"], ["▁inc", "ent"], ["▁d", "ownt"], ["▁sh", "r"], ["V", "ictor"], ["d", "ig"], ["为", "解决"], ["媒", "体的"], ["心", "室"], ["为中心", "的"], ["▁sed", "iment"], ["v", "ae"], ["▁attempt", "ing"], ["▁an", "x"], ["▁Lab", "our"], ["互联网", "金融"], ["和", "要求"], ["行政", "执法"], ["为主", "线"], ["推", "向"], ["得", "的"], ["cri", "pts"], ["um", "ed"], ["▁ch", "ron"], ["ad", "ays"], ["▁he", "al"], ["h", "alf"], ["H", "ol"], ["P", "ress"], ["▁S", "ky"], ["am", "el"], ["》", ")"], ["找", "到了"], ["的", "效率"], ["磁", "性"], ["▁Techn", "iques"], ["是", "美国"], ["▁d", "ict"], ["▁mix", "ing"], ["▁Micro", "soft"], ["▁class", "rooms"], ["And", "rew"], ["的", "客观"], ["中央", "政治局"], ["两", "制"], ["从业", "人员"], ["透明", "度"], ["以", "后的"], ["舒", "适"], ["的一", "大"], ["皮", "层"], ["脂", "质"], ["失", "常"], ["推", "移"], ["新", "旧"], ["方向", "发展"], ["和", "功能"], ["▁T", "raining"], ["▁g", "ang"], ["斯", "的"], ["萨", "克"], ["al", "most"], ["incre", "asing"], ["▁gr", "at"], ["▁afford", "able"], ["▁gu", "est"], ["▁host", "s"], ["▁men", "u"], ["▁oper", "ates"], ["▁travel", "s"], ["▁b", "old"], ["S", "pring"], ["ash", "i"], ["Don", "ald"], ["▁L", "ess"], ["B", "G"], ["推", "出了"], ["之", "心"], ["的", "道德"], ["谈", "到"], ["不", "上"], ["轴", "承"], ["访问", "控制"], ["单", "向"], ["g", "ly"], ["▁che", "cks"], ["des", "igned"], ["comfort", "able"], ["產", "生"], ["▁E", "nt"], ["十分", "重要的"], ["为", "人类"], ["专利", "权"], ["常务", "委员会"], ["不动", "摇"], ["加速", "器"], ["承担", "责任"], ["独立", "自主"], ["见", "证"], ["基", "底"], ["差", "额"], ["优先", "级"], ["轻", "度"], ["大", "豆"], ["解放", "思想"], ["等", "活动"], ["在", "教育"], ["综合", "治理"], ["前", "行"], ["疑", "问"], ["中", "发挥"], ["▁P", "ractice"], ["进", "制"], ["包", "围"], ["必", "备"], ["y", "ll"], ["G", "ive"], ["h", "our"], ["▁satis", "faction"], [")", "》"], ["t", "aken"], ["▁P", "ope"], ["th", "reat"], ["win", "ning"], ["▁advert", "ising"], ["▁label", "ed"], ["▁P", "M"], ["▁cort", "ex"], ["▁C", "ab"], ["大學", "校友"], ["iz", "ational"], ["ve", "get"], ["万", "亿美元"], ["需要", "通过"], ["大", "宗"], ["对", "不同"], ["羅", "馬"], ["▁p", "or"], ["▁s", "lic"], ["ast", "ed"], ["▁g", "ains"], ["ab", "etic"], ["▁S", "ant"], ["▁Cam", "bridge"], ["新", "人"], ["新", "世纪"], ["正", "是在"], ["证券", "市场"], ["亏", "损"], ["得益", "于"], ["谋", "求"], ["阻", "滞"], ["进程", "的"], ["雇", "佣"], ["国家", "发展"], ["和", "风险"], ["我国", "社会"], ["mer", "cial"], ["Bel", "ow"], ["轻", "微"], ["抚", "养"], ["▁allerg", "ic"], ["▁disapp", "oint"], ["▁flu", "ctu"], ["▁stere", "otypes"], ["▁ge", "ographical"], ["▁rac", "ism"], ["▁surve", "ys"], ["▁sust", "ained"], ["h", "m"], ["'", ","], ["南", "极"], ["▁peripher", "al"], ["▁Sing", "apore"], ["——", "——"], ["▁be", "et"], ["▁fac", "ial"], ["W", "ow"], ["数据", "包"], ["He", "ad"], ["W", "HO"], ["▁comp", "leting"], ["▁liv", "estock"], ["▁log", "ical"], ["▁phys", "iological"], ["ur", "ally"], ["为", "一个"], ["英", "美"], ["H", "ard"], ["並", "於"], ["ar", "an"], ["re", "ve"], ["Cont", "emporary"], ["国内", "国际"], ["提高", "学生的"], ["录", "取"], ["康", "德"], ["冠", "心"], ["空", "前"], ["统筹", "推进"], ["说", "话"], ["C", "ity"], ["▁administ", "ered"], ["▁gre", "y"], ["是", "不可"], ["虚拟", "机"], ["单", "体"], ["is", "er"], ["▁Pol", "bot"], ["▁compet", "e"], ["M", "aster"], ["Th", "ird"], ["政治", "家"], ["pos", "itive"], ["▁F", "le"], ["mon", "th"], ["ues", "day"], ["▁En", "cyclopedia"], ["▁U", "V"], ["▁pers", "u"], ["▁dis", "charge"], ["商业", "化"], ["并", "结合"], ["水", "泥"], ["靶", "点"], ["并且", "在"], ["▁St", "ock"], ["ut", "ter"], ["l", "ived"], ["▁G", "et"], ["遇", "到的"], ["探讨", "了"], ["▁H", "amilton"], ["详细", "的"], ["中的", "一个"], ["s", "in"], ["軍", "事"], ["C", "amp"], ["om", "on"], ["E", "ns"], ["P", "olitical"], ["工", "業"], ["▁glob", "ally"], ["▁w", "ake"], ["百年", "未有之大变局"], ["专注", "于"], ["具有", "良好的"], ["统一", "领导"], ["要", "根据"], ["规", "程"], ["通过", "在"], ["事", "变"], ["国", "力"], ["執", "行"], ["▁T", "urn"], ["▁represent", "atives"], ["▁contamin", "ated"], ["▁furn", "iture"], ["▁mir", "ror"], ["▁neigh", "bour"], ["▁nerv", "es"], ["▁v", "ivid"], ["科技", "大学"], ["和", "挑战"], ["F", "ilm"], ["乙", "醇"], ["而", "有"], ["发", "行的"], ["ig", "o"], ["▁Ind", "ex"], ["▁F", "M"], ["P", "ub"], ["▁secre", "ts"], ["▁uncertain", "ty"], ["▁M", "and"], ["▁pat", "ience"], ["第十", "一"], ["和", "优化"], ["前", "述"], ["▁Ad", "d"], ["T", "L"], ["R", "ight"], ["oc", "yte"], ["commun", "ity"], ["▁circ", "ular"], ["▁dent", "ist"], ["▁found", "ing"], ["▁ic", "onic"], ["▁p", "ink"], ["▁predict", "ions"], ["▁t", "ender"], ["深刻", "的"], ["教学", "质量"], ["内容", "包括"], ["秘书", "长"], ["是", "社会主义"], ["自由", "主义"], ["连带", "责任"], ["中国人民", "银行"], ["锁", "定"], ["质", "谱"], ["主", "干"], ["层面", "上"], ["普惠", "金融"], ["词", "语"], ["关键", "在于"], ["决定性", "作用"], ["挂", "钩"], ["周", "转"], ["重大", "战略"], ["和", "科学"], ["char", "acter"], ["和", "治疗"], ["覆盖", "率"], ["部", "隊"], ["第十", "四"], ["加", "载"], ["▁J", "acob"], ["阿", "根"], ["S", "em"], ["▁h", "opes"], ["▁con", "qu"], ["▁ly", "rics"], ["▁drain", "age"], ["▁s", "ectors"], ["▁attract", "ed"], ["▁ent", "itled"], ["▁respond", "ed"], ["时", "应"], ["▁P", "age"], ["orn", "s"], ["le", "ans"], ["▁discipl", "ines"], ["te", "achers"], ["▁appoint", "ment"], ["▁host", "ed"], ["▁poll", "ut"], ["▁press", "ures"], ["▁similar", "ities"], ["放大", "器"], ["一", "块"], ["大", "循环"], ["都", "不能"], ["个人", "所得税"], ["基本", "知识"], ["线", "条"], ["行", "驶"], ["能", "使"], ["一", "生"], ["可", "比"], ["之", "子"], ["At", "l"], ["Med", "ical"], ["▁b", "on"], ["▁under", "water"], ["C", "ard"], ["G", "IS"], ["▁similar", "ly"], ["胁", "迫"], ["x", "x"], ["▁met", "ast"], ["测", "量的"], ["较", "短"], ["不", "以"], ["争", "端"], ["▁", "©▁"], ["el", "le"], ["模式", "下"], ["▁Econom", "ic"], ["▁er", "osion"], ["im", "ated"], ["▁re", "plic"], ["▁gener", "ating"], ["▁ir", "rigation"], ["▁sp", "elling"], ["erv", "es"], ["▁tri", "ps"], ["▁ent", "ers"], ["▁frequ", "encies"], ["▁ill", "um"], ["▁ref", "rig"], ["D", "igital"], ["ricult", "ural"], ["消费", "品"], ["企业", "内部"], ["政府", "采购"], ["进一步", "提升"], ["税", "负"], ["适用", "范围"], ["贴", "近"], ["实用", "性"], ["az", "a"], ["Vis", "ual"], ["购", "物"], ["▁degrad", "ation"], ["E", "c"], ["or", "ic"], ["▁ap", "opt"], ["Unt", "il"], ["urs", "day"], ["▁impro", "ves"], ["▁histor", "ian"], ["▁prof", "iles"], ["Spec", "ifically"], ["▁pain", "ter"], ["<0xF0>", "<0x9F>"], ["d", "ifferent"], ["帝", "國"], ["党的", "政治"], ["两", "者的"], ["内", "战"], ["叶", "片"], ["细胞", "因子"], ["é", "e"], ["▁R", "ose"], ["樂", "團"], ["g", "ium"], ["produ", "cing"], ["access", "ed"], ["阿根", "廷"], ["▁decre", "ases"], ["▁encount", "ers"], ["▁pu", "pp"], ["▁int", "r"], ["T", "rue"], ["é", "s"], ["王", "子"], ["ant", "ry"], ["会计", "信息"], ["据", "统计"], ["所", "具有"], ["劳动合同", "法"], ["常态", "化"], ["担", "负"], ["智能", "合约"], ["自觉", "地"], ["先天", "性"], ["医", "务"], ["构建", "人类命运共同体"], ["简", "要"], ["它", "将"], ["惠", "及"], ["监管", "部门"], ["的", "临床"], ["il", "ib"], ["Pro", "per"], ["▁sym", "met"], ["it", "ime"], ["晚", "上"], ["珊", "瑚"], ["ro", "le"], ["U", "r"], ["▁div", "isions"], ["Ex", "p"], ["▁organ", "ism"], ["▁allerg", "ies"], ["▁genu", "ine"], ["▁wat", "ched"], ["▁C", "ra"], ["▁bl", "ess"], ["S", "ou"], ["▁co", "h"], ["而", "导致"], ["和", "改进"], ["罪", "犯"], ["永", "恒"], ["的发展", "趋势"], ["erg", "arten"], ["▁M", "att"], ["英格", "蘭"], ["的", "现代化"], ["全面", "深化"], ["后", "再"], ["市场", "在"], ["中的", "重要"], ["解决", "好"], ["出", "具"], ["具有", "较强的"], ["文化", "交流"], ["尤为", "重要"], ["接受", "的"], ["或", "服务"], ["一种", "新的"], ["企业", "与"], ["区", "位"], ["奠定了", "基础"], ["服", "用"], ["事务", "所"], ["职", "称"], ["危险", "因素"], ["收入", "差距"], ["ne", "a"], ["群众", "的"], ["直辖", "市"], ["enti", "eth"], ["發", "表"], ["▁agg", "reg"], ["▁lic", "ense"], ["▁peace", "ful"], ["▁atmosp", "heric"], ["ul", "ent"], ["▁drop", "s"], ["AS", "T"], ["▁Franc", "is"], ["▁exped", "ition"], ["▁cont", "amination"], ["▁conv", "in"], ["▁pr", "one"], ["▁st", "raw"], ["▁Rel", "ations"], ["stit", "utional"], ["▁All", "iance"], ["ack", "ing"], ["大", "类"], ["或", "多"], ["最", "多的"], ["T", "er"], ["光", "合"], ["▁hyper", "tension"], ["or", "rect"], ["▁g", "erm"], ["ug", "g"], ["▁d", "ough"], ["▁p", "ond"], ["yt", "ic"], ["associ", "ated"], ["发生", "率"], ["研讨", "会"], ["变压", "器"], ["促进", "社会"], ["工程", "建设"], ["学生", "们"], ["抽", "取"], ["联", "络"], ["毛泽东", "思想"], ["致", "富"], ["外", "延"], ["个", "国家"], ["feed", "ing"], ["Eng", "ine"], ["主", "人"], ["▁Comp", "uter"], ["▁R", "aj"], ["▁restaur", "ant"], ["▁breat", "he"], ["▁counter", "parts"], ["▁tun", "nel"], ["▁hot", "el"], ["─", "─"], ["分", "发"], ["▁P", "R"], ["站", "点"], ["\"", ":"], ["▁be", "er"], ["生命", "的"], ["莱茵", "省"], ["向", "下"], ["中", "将"], ["基本", "概念"], ["同", "位"], ["上", "午"], ["观", "的"], ["p", "df"], ["o", "ard"], ["▁Int", "eg"], ["興", "建"], ["ation", "ally"], ["▁Gu", "inea"], ["毕业", "后"], ["▁coun", "ts"], ["▁flow", "ing"], ["▁sc", "reens"], ["其他", "的"], [".\"", "\""], ["er", "ness"], ["所", "说"], ["的历史", "性"], ["和", "保障"], ["学前", "教育"], ["的基本", "理论"], ["突破", "口"], ["但", "对于"], ["原", "发性"], ["电", "化学"], ["F", "ire"], ["▁b", "ust"], ["▁recycl", "ed"], ["erm", "at"], ["▁inc", "idents"], ["▁p", "ushing"], ["南", "非"], ["老", "化"], ["▁V", "illage"], ["▁I", "de"], ["局", "的"], ["过", "大"], ["矛盾", "的"], ["鲜明", "的"], ["▁aqu", "atic"], ["路", "上"], ["的", "正"], ["▁b", "ark"], ["华", "东"], ["透", "露"], [",", "「"], ["ene", "z"], ["▁c", "er"], ["sh", "aring"], ["▁evolution", "ary"], ["▁form", "ats"], ["其次", "是"], ["开辟", "了"], ["的", "良好"], ["十六", "条"], ["利用", "效率"], ["油", "气"], ["不", "允许"], ["最高人民法院", "关于"], ["可", "实现"], ["的重要", "因素"], ["领导", "小组"], ["恐", "惧"], ["终", "点"], ["夫妻", "共同"], ["相辅", "相"], ["b", "rain"], ["▁he", "ated"], ["▁qual", "ified"], [",▁", "‘"], ["甲", "烷"], ["ev", "al"], ["金", "牌"], ["早", "年"], ["A", "E"], ["m", "ans"], ["▁b", "er"], ["▁sc", "an"], ["av", "irus"], ["▁fro", "zen"], ["▁hero", "es"], ["▁neighb", "oring"], ["▁ro", "d"], ["人", "道"], ["这", "为"], ["治", "愈"], ["sem", "ble"], ["▁concer", "t"], ["in", "ely"], ["▁innov", "ations"], ["serv", "ing"], ["廣", "東"], ["内", "陆"], ["切", "割"], ["他", "还"], ["醫", "院"], ["範", "圍"], ["P", "ass"], ["商", "店"], ["描述", "了"], ["Ass", "oci"], ["K", "D"], ["▁put", "s"], ["ra", "id"], ["表", "現"], ["▁al", "lev"], ["肢", "体"], ["环境", "监测"], ["的人", "格"], ["土地", "使用权"], ["新", "鲜"], ["综合", "考虑"], ["特殊", "性"], ["的", "数字"], ["▁res", "olve"], ["相似", "的"], ["mod", "el"], ["P", "resent"], ["▁G", "il"], ["Bl", "ood"], ["▁A", "thlet"], ["abit", "at"], ["▁Ch", "ile"], ["▁rec", "all"], ["▁challeng", "ed"], ["▁em", "it"], ["▁stim", "ulate"], ["通过", "将"], ["隐私", "保护"], ["并", "向"], ["水", "和"], ["ear", "l"], ["ce", "pts"], ["▁M", "iller"], ["▁co", "in"], ["eng", "u"], ["▁leg", "it"], ["▁execut", "ed"], ["▁emp", "ire"], ["▁Ass", "essment"], ["▁bel", "t"], ["▁elect", "oral"], ["▁highlight", "ed"], ["进", "士"], ["分", "担"], ["四", "中全会"], ["进一步", "发展"], ["不", "服"], ["内", "阁"], ["心", "力"], ["融资", "租赁"], ["暂", "行"], ["美好", "生活的"], ["第一", "步"], ["通", "则"], ["▁D", "rug"], ["or", "f"], ["在", "上海"], ["遗", "迹"], ["学", "士"], ["次", "年"], ["op", "athy"], ["R", "a"], ["m", "id"], ["'", "."], ["spec", "ial"], ["P", "ay"], ["▁mist", "ake"], ["▁pul", "monary"], ["▁sampl", "ing"], ["m", "other"], ["▁ste", "ep"], ["▁trans", "actions"], [")", "|"], ["Ge", "ography"], ["▁port", "ions"], ["滤波", "器"], ["影响", "力的"], ["宪", "政"], ["仍然", "存在"], ["既", "能"], ["工作", "和"], ["其", "三"], ["如果", "你"], ["▁N", "on"], ["▁v", "oting"], ["F", "ort"], ["▁account", "ing"], ["▁bas", "eline"], ["▁coll", "apse"], ["國", "王"], ["▁reason", "ing"], ["s", "ource"], ["\u0006", "\b"], ["各", "方面的"], ["的主", "导"], ["处", "处"], ["领", "悟"], ["抵", "制"], ["好", "奇"], ["宏", "伟"], ["特别", "行政区"], ["减", "灾"], ["遗传", "学"], ["轮", "廓"], ["仅仅", "是"], ["文件", "的"], ["参加", "了"], ["山", "大"], ["M", "s"], ["it", "ched"], ["al", "ways"], ["有", "以下"], ["▁C", "ore"], ["▁oper", "ator"], ["▁v", "ow"], ["st", "able"], ["He", "y"], ["l", "ab"], ["off", "s"], ["▁nucle", "us"], ["c", "reat"], ["▁burn", "ed"], ["▁eat", "en"], ["▁navig", "ating"], ["▁P", "ract"], ["在", "许多"], ["为", "基本"], ["宽", "度"], ["北", "斗"], ["il", "ateral"], ["unc", "iation"], ["new", "s"], ["迄今", "为止"], ["il", "ty"], ["模", "态"], ["J", "eff"], ["网", "页"], ["▁seg", "ments"], ["▁al", "phabet"], ["▁d", "ying"], ["▁poor", "ly"], ["▁treat", "s"], ["▁he", "sit"], ["an", "ol"], ["oot", "s"], ["损失", "的"], ["网络", "中"], ["循环", "经济"], ["马克思", "列宁"], ["纤维", "素"], ["学校", "教育"], ["等", "诸多"], ["风", "俗"], ["肾", "小"], ["并", "举"], ["计算", "的"], ["欺", "骗"], ["▁D", "al"], ["联合", "会"], ["▁trig", "g"], ["▁occup", "ation"], ["▁artif", "acts"], ["▁bra", "ve"], ["▁decl", "ined"], ["▁saf", "egu"], ["J", "esus"], ["北", "大"], ["te", "chnology"], ["在", "过去"], ["升", "华"], ["权", "衡"], ["珍", "贵"], ["引", "人"], ["先", "导"], ["iz", "oph"], ["製", "造"], ["▁res", "ident"], ["O", "W"], ["▁per", "f"], ["▁att", "itude"], ["▁cont", "est"], ["▁partners", "hips"], ["维", "亚"], ["▁Que", "bec"], ["▁depart", "ments"], ["anc", "ies"], ["sh", "ape"], ["▁different", "iation"], ["▁Base", "ball"], ["的", "认知"], ["企业", "对"], ["十五", "条"], ["能够", "实现"], ["%", ","], ["积极", "推动"], ["四个", "方面"], ["水", "准"], ["之", "分"], ["纵", "深"], ["要", "约"], ["这种", "方式"], ["的", "探索"], ["道", "光"], ["一般", "情况下"], ["▁D", "eb"], ["暗", "示"], ["氏", "族"], ["於", "是"], ["衰", "落"], ["f", "ight"], ["這", "種"], ["托", "管"], ["▁ch", "ains"], ["▁App", "ro"], ["l", "ied"], ["P", "ot"], ["k", "al"], ["出", "去"], ["的基础", "设施"], ["的大", "型"], ["杂", "质"], ["或者", "是"], ["篡", "改"], ["m", "etic"], ["T", "reat"], ["▁Frank", "lin"], ["G", "roup"], ["disc", "uss"], ["▁H", "al"], ["▁E", "lementary"], ["pp", "ers"], ["Te", "am"], ["▁acqu", "ire"], ["▁preval", "ent"], ["▁relig", "ions"], ["▁H", "u"], ["▁C", "ensus"], ["为", "前提"], ["权利", "义务"], ["线", "粒"], ["矿", "产"], ["缺", "损"], ["运行", "机制"], ["防", "疫"], ["研究", "领域"], ["名", "录"], ["ke", "ys"], ["ox", "ide"], ["▁can", "n"], ["▁al", "ert"], ["▁persist", "ent"], ["col", "span"], ["▁cr", "ust"], ["▁rese", "m"], ["初始", "化"], ["▁L", "ocal"], ["▁Le", "on"], ["▁D", "ead"], ["▁C", "zech"], ["提供了", "新的"], ["史", "记"], ["筹", "集"], ["将", "从"], ["所以", "在"], ["▁W", "ind"], ["▁pat", "ch"], ["Fran", "c"], ["O", "fficial"], ["▁N", "ation"], ["▁en", "rich"], ["▁ac", "adem"], ["p", "ace"], ["▁I", "ng"], ["娛", "樂"], ["最初", "的"], ["全", "生命周期"], ["环境", "质量"], ["劳动", "生产率"], ["这", "不仅"], ["掌", "控"], ["教学", "资源"], ["下", "调"], ["警", "惕"], ["红", "线"], ["▁coord", "ination"], ["▁sub", "str"], ["袭", "击"], ["的", "分子"], ["见", "图"], ["▁cy", "tok"], ["主", "办"], ["阈", "值"], ["H", "ence"], ["ro", "ts"], ["陸", "軍"], ["N", "I"], ["or", "se"], ["izoph", "ren"], ["▁Rail", "road"], ["他们", "对"], ["该", "技术"], ["听", "证"], ["侦", "察"], ["厦", "门"], ["必须", "有"], ["上", "网"], ["ex", "ual"], ["青", "铜"], ["上", "映"], ["▁R", "ole"], ["▁count", "ing"], ["SA", "RS"], ["▁Mil", "itary"], ["end", "a"], ["Rec", "ogn"], ["▁sched", "uled"], ["▁should", "n"], ["▁M", "onday"], ["K", "ent"], ["▁ch", "ip"], ["ate", "ur"], ["p", "ract"], ["量", "为"], ["技术", "手段"], ["应当", "承担"], ["主要", "是指"], ["投资", "和"], ["改革开放", "和"], ["集", "资"], ["抗", "辩"], ["云", "端"], ["信用", "卡"], ["应急", "管理"], ["摄像", "头"], ["本", "位"], ["信息", "资源"], ["总体", "规划"], ["较", "多的"], ["为了", "实现"], ["应收", "账款"], ["萨", "斯"], ["闭", "环"], ["毛", "细"], ["物权", "法"], ["的", "长"], ["交", "替"], ["引发", "的"], ["在", "校"], ["▁h", "its"], ["是", "位於"], ["Mar", "ia"], ["▁B", "ah"], ["來", "的"], ["媒", "體"], ["gen", "eration"], ["▁gradu", "ated"], ["是", "全球"], ["病原", "体"], ["隐", "蔽"], ["游", "离"], ["a", "ire"], ["L", "ine"], ["ac", "erb"], ["▁W", "isconsin"], ["▁con", "clusions"], ["and", "ra"], ["该", "公司"], ["yl", "on"], ["▁kn", "ock"], ["▁al", "oud"], ["▁connect", "s"], ["▁enjoy", "ing"], ["l", "ings"], ["一", "片"], ["tern", "s"], ["U", "til"], ["▁C", "ell"], ["合", "唱"], ["商", "業"], ["研究", "小组"], ["时期", "内"], ["工业", "生产"], ["既", "可以"], ["配", "额"], ["我", "省"], ["蓬勃", "发展"], ["备", "课"], ["口", "语"], ["联", "通"], ["二", "号"], ["依法", "行政"], ["先进", "性"], ["企业", "所得税"], ["降低", "成本"], ["▁pharm", "ac"], ["▁clos", "est"], ["勋", "章"], ["昆", "虫"], ["Ph", "oto"], ["▁An", "cient"], ["%", "▁▁"], ["指", "揮"], ["棒", "球"], ["Hel", "p"], ["▁P", "DF"], ["▁hear", "ts"], ["cle", "an"], ["▁extra", "ction"], ["▁", "с"], ["▁phys", "icians"], ["H", "ER"], ["而", "这些"], ["九", "龍"], ["复", "旦"], ["两", "点"], ["▁LGBT", "Q"], ["▁dis", "miss"], ["▁fe", "as"], ["▁walk", "ed"], ["人", "有"], ["其", "为"], ["▁so", "y"], ["ific", "ate"], ["▁ic", "on"], ["ro", "st"], ["▁L", "ie"], ["▁b", "ull"], ["▁storm", "s"], ["let", "al"], ["ic", "ated"], ["bl", "ock"], ["▁stri", "p"], ["结构", "中"], ["孙", "中山"], ["地方", "的"], ["屋", "顶"], ["新", "阶段"], ["的主", "观"], ["集中", "于"], ["之", "于"], ["如果", "我们"], ["留", "置"], ["社", "保"], ["周", "知"], ["的", "业务"], ["voc", "als"], ["omb", "ia"], ["▁mind", "fulness"], ["▁rein", "force"], ["▁up", "set"], ["▁p", "ine"], ["▁pr", "ide"], ["▁sp", "an"], ["和", "资源"], ["率", "领"], ["平", "安"], ["cont", "rolled"], ["O", "bs"], ["▁L", "es"], ["ir", "s"], ["德", "尔"], ["▁en", "abled"], ["▁eth", "ics"], ["ar", "ians"], ["d", "ale"], ["gu", "itar"], ["M", "Hz"], ["急", "救"], ["进行", "分类"], ["V", "ideo"], ["eral", "d"], ["?", "▁("], ["▁Step", "hen"], ["▁M", "RI"], ["On", "line"], ["g", "rim"], ["O", "F"], ["Ill", "inois"], ["▁comp", "lement"], ["▁t", "ab"], ["▁de", "leg"], ["▁L", "uther"], ["M", "ur"], ["act", "ing"], ["emb", "ered"], ["First", "ly"], ["强调", "的是"], ["政策", "措施"], ["成员", "的"], ["要", "将"], ["共同", "发展"], ["具体", "而言"], ["回", "升"], ["攻击", "者"], ["区域", "性"], ["落", "脚"], ["而", "没有"], ["论", "语"], ["沿", "革"], ["众", "所"], ["▁enh", "ances"], ["一", "日"], ["C", "lear"], ["n", "ie"], ["od", "ge"], ["ill", "o"], ["▁Cap", "tain"], ["od", "d"], ["▁g", "ifts"], ["v", "o"], ["▁dis", "agre"], ["▁res", "erve"], ["int", "rodu"], ["基础", "的"], ["免疫", "反应"], ["免", "除"], ["业", "界"], ["is", "ol"], ["受", "限"], ["完", "毕"], ["P", "sych"], ["urg", "ical"], ["ir", "cle"], ["▁poly", "mer"], ["▁T", "ower"], ["▁d", "ivers"], ["ver", "ages"], ["▁illustr", "ated"], ["old", "ing"], ["▁b", "ills"], ["▁wel", "come"], ["中国", "传统"], ["更", "强"], ["反", "腐"], ["活", "力的"], ["副", "院长"], ["只", "需要"], ["知", "府"], ["势", "必"], ["一", "审"], ["合同", "中"], ["整", "改"], ["党", "领导"], ["不同", "类型"], ["e", "ur"], ["▁O", "ffic"], ["ont", "in"], ["p", "i"], ["F", "inal"], ["▁organ", "izing"], ["erv", "atory"], ["▁sm", "ile"], ["▁consequ", "ence"], ["▁gen", "res"], ["編", "號"], ["r", "ative"], ["▁O", "wn"], ["纠", "缠"], ["听", "觉"], ["行", "走"], ["西", "域"], ["行", "之"], ["▁Hel", "p"], ["的", "低"], ["了", "许多"], ["g", "aret"], ["▁sc", "al"], ["▁tim", "ing"], ["P", "ers"], ["▁ch", "ips"], ["▁see", "ks"], ["▁crow", "d"], ["▁pl", "ug"], ["▁wor", "ried"], ["经济", "利益"], ["药物", "治疗"], ["体现", "为"], ["相", "差"], ["货币", "的"], ["体", "征"], ["国家", "在"], ["现", "行的"], ["等", "领域的"], ["我们", "应该"], ["西", "欧"], ["仍", "处于"], ["因素", "的影响"], ["无", "序"], ["惩", "戒"], ["股权", "转让"], ["直接", "的"], ["古", "今"], ["quir", "y"], ["河", "道"], ["行", "為"], ["當", "中"], ["can", "cer"], ["▁N", "eed"], ["收", "录"], ["▁B", "iology"], ["▁r", "ival"], ["▁P", "ath"], ["▁rock", "et"], ["▁asp", "ir"], ["Ep", "isode"], ["▁M", "S"], ["大", "中"], ["文化", "与"], ["一", "对"], ["中", "存在"], ["完成", "后"], ["ras", "ound"], ["動", "物"], ["▁L", "u"], ["▁agre", "ements"], ["Int", "rodu"], ["p", "aper"], ["▁sn", "ake"], ["bec", "ame"], ["▁ir", "regular"], ["▁was", "hing"], ["ur", "ated"], ["▁M", "ot"], ["▁S", "ac"], ["oc", "occ"], ["国家治理体系和治理能力", "现代化"], ["系统", "集成"], ["教师", "应"], ["以", "至"], ["水", "果"], ["政策", "性"], ["相互", "关系"], ["洗", "钱"], ["不同", "类型的"], ["事", "宜"], ["北", "极"], ["杀", "伤"], ["偏", "低"], ["可持续", "性"], ["人民", "当家作主"], ["浮", "动"], ["股", "价"], ["的", "案件"], ["副", "书记"], ["apt", "ist"], ["▁B", "rad"], ["诺", "贝尔"], ["算法", "的"], ["后", "来的"], ["ac", "ity"], ["直", "觉"], ["形", "容"], ["ch", "t"], ["D", "av"], ["ir", "ical"], ["▁g", "er"], ["we", "ed"], ["▁resc", "ue"], ["▁The", "rapy"], ["develop", "ed"], ["▁answ", "ered"], ["▁fil", "ters"], ["▁res", "idence"], ["E", "val"], ["数", "列"], ["间", "隙"], ["侧", "面"], ["科研", "机构"], ["十一", "年"], ["合", "併"], ["不", "相同"], ["方程", "式"], ["目的", "地"], ["ail", "and"], ["吻", "合"], ["R", "est"], ["ac", "on"], ["▁A", "ns"], ["P", "ython"], ["和", "建设"], ["并", "提出"], ["标准", "体系"], ["十一", "条"], ["第二", "百"], ["是", "不是"], ["帝", "王"], ["细", "则"], ["反", "动"], ["简", "便"], ["获", "利"], ["长效", "机制"], ["关", "乎"], ["议", "程"], ["台", "阶"], ["增", "设"], ["核", "实"], ["筑", "牢"], ["数据", "挖掘"], ["淡", "水"], ["所", "用"], ["总", "和"], ["赞", "同"], ["u", "ct"], ["▁P", "rom"], ["属", "性的"], ["快", "捷"], ["▁D", "ark"], ["▁per", "mit"], ["▁M", "un"], ["t", "ook"], ["行政", "法"], ["b", "ian"], [":", "▁▁"], ["fe", "el"], ["get", "s"], ["▁H", "art"], ["这", "三个"], ["同", "胞"], ["不", "起"], ["大", "连"], ["研究", "方向"], ["人民", "共和國"], ["必", "須"], ["—▁", "—▁"], ["▁s", "our"], ["s", "aying"], ["▁ju", "venile"], ["▁product", "ive"], ["▁pe", "pt"], ["▁H", "ills"], ["教学", "设计"], ["外商", "投资"], ["马克思主义", "理论"], ["优惠", "政策"], ["由", "政府"], ["这就", "需要"], ["势", "头"], ["也", "成为"], ["职业", "病"], ["西", "周"], ["洛", "阳"], ["指标", "的"], ["回", "落"], ["并", "用"], ["即使", "是"], ["▁Que", "ens"], ["Micro", "soft"], ["most", "ly"], ["▁dat", "abases"], ["art", "icles"], ["ro", "d"], ["▁", "ul"], ["戰", "鬥"], ["▁cr", "ash"], ["定", "居"], ["F", "ull"], ["▁brid", "ges"], ["并", "重"], ["家", "人"], ["话语", "权"], ["\\", "_"], ["的", "原"], ["生", "死"], ["▁d", "ynasty"], ["P", "rim"], ["▁A", "qu"], ["▁integr", "ate"], ["▁interpret", "ations"], ["▁view", "ers"], ["▁roll", "ing"], ["金", "的"], ["▁O", "pp"], ["ober", "ts"], ["ht", "m"], ["▁W", "W"], ["im", "age"], ["in", "ator"], ["cler", "osis"], ["人口", "普查"], ["科学", "性"], ["异", "化"], ["的", "挑战"], ["能", "为"], ["诉讼", "请求"], ["变", "频"], ["电子", "邮件"], ["集", "权"], ["盛", "行"], ["富", "集"], ["成", "交"], ["摩", "尔"], ["查", "明"], ["北", "魏"], ["绿色", "金融"], ["做", "大"], ["▁contin", "ent"], ["行", "列"], ["A", "ust"], ["direct", "or"], ["▁path", "ogens"], ["▁k", "ick"], ["▁emb", "race"], ["▁rom", "antic"], ["▁sal", "mon"], ["▁sw", "elling"], ["h", "r"], ["▁econom", "ics"], ["in", "ian"], ["iot", "ic"], ["▁S", "i"], ["停", "滞"], ["合", "法的"], ["uer", "to"], ["(", "'"], ["RC", "EP"], ["先", "前"], ["—▁▁—▁▁", "—▁▁—▁▁"], ["▁bott", "les"], ["▁ch", "apters"], ["▁m", "urd"], ["▁month", "ly"], ["os", "é"], ["英", "語"], ["▁st", "atic"], ["▁Ter", "rit"], ["▁shad", "ow"], ["复", "合物"], ["▁N", "i"], ["**", "*"], ["▁met", "eor"], ["▁Prem", "ier"], ["ro", "kes"], ["十三", "条"], ["风险", "挑战"], ["突破", "了"], ["杠杆", "率"], ["了一", "条"], ["财产", "权"], ["各种", "各"], ["而", "来的"], ["评", "议"], ["买", "方"], ["共", "存"], ["工人", "阶级"], ["涂", "层"], ["创造", "条件"], ["顺", "差"], ["信息", "基础设施"], ["大", "湾区"], ["中的", "地位"], ["研究", "工作"], ["加快", "构建"], ["什么", "样"], ["身份", "认证"], ["▁an", "ten"], ["元", "宇宙"], ["in", "ic"], ["oc", "he"], ["it", "an"], ["unt", "ary"], ["g", "raph"], ["e", "u"], ["▁j", "et"], ["▁B", "ishop"], ["▁che", "ap"], ["▁cap", "tain"], ["书", "的"], ["可能", "在"], ["是", "当前"], ["中", "具有"], ["断", "层"], ["未", "被"], ["每", "种"], ["▁st", "uck"], ["▁surviv", "ors"], ["▁y", "ields"], ["简", "洁"], ["扩", "增"], ["一", "台"], ["▁L", "ast"], ["烏", "克蘭"], ["●", "▁"], ["s", "ound"], ["▁M", "ission"], ["ro", "sc"], ["▁ge", "ometry"], ["▁Author", "ity"], ["朝", "鮮"], ["▁Bro", "ok"], ["▁comm", "ands"], ["▁govern", "ance"], ["会计", "核算"], ["发达", "地区"], ["全面", "提升"], ["国土", "空间"], ["树", "脂"], ["选择", "了"], ["功", "利"], ["硬", "盘"], ["风", "貌"], ["廉", "政"], ["奋", "进"], ["组", "长"], ["▁d", "ed"], ["▁con", "g"], ["▁cha", "os"], ["▁ritual", "s"], ["第十", "五"], ["▁T", "al"], ["o", "oth"], ["電", "腦"], ["相", "當"], ["and", "ed"], ["s", "i"], ["be", "y"], ["pos", "ure"], ["▁F", "C"], ["op", "ing"], ["▁S", "ix"], ["▁acc", "ord"], ["list", "ed"], ["▁accompl", "ished"], ["▁ch", "ampion"], ["▁prolong", "ed"], [";", "("], ["欠", "缺"], ["则", "为"], ["中", "亚"], ["▁M", "oh"], ["C", "ultural"], ["▁Y", "outh"], ["ul", "ative"], ["unct", "ure"], ["▁Rec", "ord"], ["▁Gra", "de"], ["▁count", "ies"], ["▁dec", "omp"], ["▁flo", "ating"], ["Us", "ually"], ["▁gl", "ac"], ["▁cor", "related"], ["▁marginal", "ized"], ["土地", "利用"], ["则", "在"], ["到", "一个"], ["控制", "在"], ["发达", "国家的"], ["往往", "会"], ["的基本", "要求"], ["以下几", "点"], ["信息", "服务"], ["提高", "学生"], ["公", "信"], ["的研究", "成果"], ["举", "行的"], ["一般", "为"], ["op", "ath"], ["▁C", "ro"], ["im", "s"], ["▁sh", "ield"], ["▁K", "han"], ["inte", "gr"], ["▁w", "ed"], ["▁un", "c"], ["▁Mary", "land"], ["▁e", "co"], ["bor", "iginal"], ["▁she", "ep"], ["▁support", "ive"], ["▁K", "al"], ["▁ar", "c"], ["布", "拉"], ["ar", "on"], ["弟", "子"], ["甲", "骨"], ["公众", "号"], ["反", "过来"], ["敏", "捷"], ["来", "完成"], ["疱", "疹"], ["к", "о"], ["在", "其他"], ["▁fin", "ance"], ["W", "orking"], ["▁I", "ce"], ["举", "报"], ["開", "放"], ["vers", "ion"], ["▁pol", "ym"], ["▁de", "er"], ["▁c", "oding"], ["▁pr", "iest"], ["App", "lying"], ["▁con", "secut"], ["▁dang", "ers"], ["ache", "lor"], ["▁j", "aw"], ["教育", "工作"], ["协同", "创新"], ["资料", "的"], ["和", "学习"], ["哲学", "的"], ["座谈", "会"], ["开启", "了"], ["突发", "事件"], ["主要", "集中在"], ["共产", "国际"], ["生产", "关系"], ["的人", "生"], ["通", "气"], ["是", "我们党"], ["并", "由"], ["开发", "了"], ["限", "额"], ["这些", "都"], ["最", "重要"], ["▁Writ", "ing"], ["▁T", "okyo"], ["▁Im", "perial"], ["M", "F"], ["H", "ung"], ["尔", "兰"], ["▁op", "ens"], ["▁che", "cking"], ["▁T", "oday"], ["用", "法"], ["cer", "y"], ["light", "ing"], ["▁distingu", "ished"], ["▁navig", "ation"], ["un", "es"], ["學", "習"], ["▁newsp", "apers"], ["Supp", "ose"], ["▁med", "ian"], ["▁loc", "ate"], ["印", "尼"], ["id", "el"], ["性", "等"], ["学院", "教授"], ["卵", "巢"], ["多样", "的"], ["占", "总"], ["pl", "ane"], ["音", "频"], ["▁N", "otes"], ["▁antib", "ody"], ["▁le", "ak"], ["▁su", "p"], ["▁sk", "ull"], ["▁cl", "uster"], ["泰", "国"], ["▁collabor", "ate"], ["▁g", "uests"], ["▁K", "ansas"], ["经济", "制度"], ["不", "成"], ["变", "法"], ["对", "人类"], ["方向", "和"], ["人与", "人"], ["劳", "工"], ["声", "誉"], ["大", "赛"], ["制", "止"], ["层", "层"], ["税", "费"], ["不", "分"], ["近", "几年"], ["Tra", "ditional"], ["以下", "是"], ["《", "》"], ["S", "ources"], ["▁tra", "ditionally"], [".", "),▁"], ["st", "ory"], ["自由", "的"], ["笔", "记"], ["走", "上"], ["兵", "力"], ["上", "而"], ["打", "算"], ["Ed", "ward"], ["▁T", "able"], ["德", "的"], ["相较", "于"], ["暂", "停"], ["】", "▁"], ["ograp", "hers"], ["▁vacc", "ination"], ["T", "aking"], ["▁vulner", "ability"], ["r", "ights"], ["路", "口"], ["est", "eem"], ["▁d", "rew"], ["▁except", "ional"], ["▁o", "live"], ["f", "ostering"], ["▁flu", "ids"], ["▁prevent", "ed"], ["协同", "发展"], ["国", "资"], ["在", "当前"], ["的一", "方"], ["抵押", "权"], ["核心", "竞争力"], ["非", "公有制"], ["恶性", "肿瘤"], ["边", "区"], ["基", "数"], ["和", "监督"], ["之", "所"], ["▁inf", "o"], ["开发", "人员"], ["优", "化的"], ["生理", "学"], ["▁vari", "ant"], ["on", "line"], ["R", "en"], ["平台", "上"], ["▁im", "perial"], ["ER", "S"], [".", ").▁"], ["Gener", "ally"], ["▁pal", "m"], ["▁break", "fast"], ["▁har", "ness"], ["▁reg", "ime"], ["ru", "p"], ["▁impair", "ment"], ["A", "thlet"], ["并", "从"], ["路由", "器"], ["及", "以上"], ["丰富", "了"], ["提供", "服务"], ["行", "人"], ["的", "条件下"], ["▁datas", "et"], ["Sp", "ain"], ["▁anal", "og"], ["ibl", "ings"], ["▁histor", "ians"], ["▁evalu", "ating"], ["英格", "兰"], ["是一", "位"], ["a", "er"], ["社会", "和"], ["配", "电"], ["强", "国的"], ["课程", "设置"], ["法律", "和"], ["规模", "和"], ["变得", "更加"], ["道", "教"], ["勘", "探"], ["在", "现实"], ["膳", "食"], ["访", "谈"], ["并不", "意味着"], ["十四", "年"], ["着力", "点"], ["l", "ades"], ["inn", "ish"], ["开", "了"], ["该", "系统"], ["ip", "ation"], ["oth", "s"], ["vel", "y"], ["▁hist", "ories"], ["pow", "ered"], ["®", "▁"], ["▁c", "erv"], ["▁m", "ast"], ["▁key", "board"], ["▁music", "ian"], ["ind", "a"], ["自", "動"], ["▁F", "DA"], ["U", "D"], ["而", "无"], ["活", "泼"], ["大会", "上"], ["较", "弱"], ["中", "发现"], ["先", "锋"], ["im", "eter"], ["level", "and"], ["資", "訊"], ["▁Bl", "ood"], ["re", "hend"], ["▁crit", "ics"], ["酰", "胺"], ["S", "oc"], ["▁M", "P"], ["準", "決賽"], ["▁Def", "ense"], ["▁Im", "port"], ["▁O", "w"], ["n", "est"], ["的", "社会主义"], ["技术", "应用"], ["和", "关键"], ["机", "组"], ["治疗", "方法"], ["等", "行业"], ["坚持以", "人民为中心"], ["病", "虫"], ["一", "九"], ["单", "片"], ["放", "宽"], ["李", "某"], ["排", "出"], ["思想", "道德"], ["节", "日"], ["注意", "事项"], ["案例", "分析"], ["第二", "大"], ["▁str", "ings"], ["▁R", "ound"], ["▁H", "en"], ["an", "ese"], ["▁occur", "rence"], ["pr", "ising"], ["▁W", "in"], ["ous", "ing"], ["▁citiz", "en"], ["ag", "ger"], ["thet", "ics"], ["ob", "a"], ["▁g", "land"], ["电视", "剧"], ["识别", "和"], ["▁Ch", "air"], ["▁N", "eg"], ["▁c", "ues"], ["▁pack", "ed"], ["▁present", "ing"], ["▁ra", "ises"], ["▁", "·"], ["in", "burgh"], ["App", "ro"], ["and", "ing"], ["m", "ix"], ["地理", "学"], ["工业", "企业"], ["至关", "重要的"], ["肝", "癌"], ["双方", "的"], ["发现", "和"], ["驳", "回"], ["主体", "性"], ["人大", "代表"], ["多", "维"], ["基", "特"], ["图", "示"], ["众所", "周知"], ["n", "umber"], ["l", "ay"], ["剂", "的"], ["在", "研究"], ["e", "ating"], ["▁compos", "er"], ["▁investig", "ations"], ["结", "局"], ["扩", "充"], ["▁accommod", "ate"], ["▁assign", "ments"], ["▁miss", "ed"], ["Ex", "actly"], ["屏", "蔽"], ["/", "-▁"], ["nov", "ation"], ["ul", "u"], ["大", "理"], ["全国人大", "常委会"], ["二", "百"], ["太", "多"], ["表达", "的"], ["Writ", "ing"], ["▁gen", "etics"], ["格", "拉"], ["ind", "ers"], ["可能", "与"], ["之", "和"], ["通讯", "作者"], ["国家", "自然科学基金"], ["▁dist", "inction"], ["Pro", "ject"], ["R", "esp"], ["▁C", "ase"], ["建築", "物"], ["an", "alysis"], ["▁o", "ste"], ["約", "翰"], ["危险", "性"], ["而", "成的"], ["落", "后的"], ["产生", "影响"], ["巧", "妙"], ["禀", "赋"], ["能", "量的"], ["微", "课"], ["载", "荷"], ["进入", "新时代"], ["闲", "置"], ["大", "运河"], ["旅游", "业"], ["归", "根"], ["情况", "进行"], ["民族", "团结"], ["绿", "水"], ["上", "半年"], ["和", "能力"], ["ab", "ove"], ["affe", "ine"], ["人", "類"], ["的", "唯一"], ["▁cav", "ity"], ["▁colle", "ges"], ["▁super", "hero"], ["▁alt", "itude"], ["▁attack", "ed"], ["▁s", "orts"], ["类", "比"], ["Russ", "ian"], ["at", "able"], ["v", "ideo"], ["編", "劇"], ["ody", "nam"], ["n", "orth"], ["▁galax", "y"], ["年", "由"], ["us", "er"], ["▁ad", "hes"], ["穿", "透"], ["上", "去"], ["换", "言之"], ["天", "人"], ["▁belong", "s"], ["▁cap", "s"], ["G", "al"], ["L", "V"], ["鱼", "类"], ["Aut", "hor"], ["Is", "rael"], ["▁Imp", "act"], ["cre", "ate"], ["济", "南"], ["ad", "er"], ["是一", "個"], ["▁M", "aterials"], ["足球", "運動員"], ["om", "o"], ["cont", "ribut"], ["▁J", "unior"], ["Expl", "ore"], ["▁gl", "ue"], ["▁M", "es"], ["公共", "管理"], ["法律", "规范"], ["适用", "法律"], ["世界", "一流"], ["受", "众"], ["宋", "朝"], ["等", "原因"], ["决策", "部署"], ["地", "缘"], ["不", "完善"], ["精神", "文明"], ["质量", "控制"], ["Sh", "ould"], ["▁f", "ears"], ["▁satell", "ites"], ["▁p", "iv"], ["▁six", "th"], ["人", "或"], ["开发", "出"], ["大学", "教授"], ["如果", "在"], ["液", "态"], ["C", "ell"], ["曾", "經"], ["擊", "敗"], ["st", "ill"], ["学", "报"], ["太", "郎"], ["om", "at"], ["▁any", "more"], ["▁sub", "mit"], ["ell", "i"], ["▁chair", "man"], ["▁prog", "n"], ["▁p", "ests"], ["▁tact", "ics"], ["拉", "伸"], ["不", "法"], ["医", "科"], ["共產", "黨"], ["ien", "na"], ["in", "ology"], ["之一", "是"], ["蛋白", "的"], ["电", "平"], ["▁ren", "al"], ["▁T", "y"], ["T", "ypes"], ["▁quant", "itative"], ["in", "os"], ["中国", "制造"], ["党和国家", "事业"], ["矢", "量"], ["以", "适应"], ["持续", "时间"], ["驰", "名"], ["走", "廊"], ["郑", "州"], ["电", "离"], ["总体", "布局"], ["波", "段"], ["成果", "的"], ["理", "論"], ["各个", "领域"], ["锂", "离子"], ["化学", "品"], ["无", "缝"], ["山", "的"], ["在", "第"], ["而", "出"], ["ren", "al"], ["奥", "地利"], ["c", "hemical"], ["▁T", "itle"], ["▁constitu", "ency"], ["▁copy", "right"], ["专", "辑"], ["水", "解"], ["H", "g"], ["C", "ross"], ["%", "▁("], ["▁all", "ergy"], ["▁coron", "ary"], ["▁graph", "ics"], ["▁sus", "pected"], ["▁j", "ournals"], ["▁medal", "ists"], ["獎", "項"], ["ph", "y"], ["本科", "生"], ["填", "写"], ["通", "报"], ["主要", "表现为"], ["h", "ang"], ["!", ")▁"], ["▁ex", "clusive"], ["l", "ad"], ["W", "ould"], ["W", "ord"], ["cell", "s"], ["▁abund", "ance"], ["▁c", "ited"], ["▁commission", "ed"], ["▁disapp", "ear"], ["▁gra", "pp"], ["▁sc", "attered"], ["▁autom", "atic"], ["浏览", "器"], ["国际", "组织"], ["保护", "主义"], ["和", "农村"], ["心血管", "疾病"], ["粗", "放"], ["困", "惑"], ["模", "范"], ["新生", "儿"], ["凝", "血"], ["引发", "了"], ["一国", "两制"], ["呕", "吐"], ["刑事", "诉讼法"], ["大", "势"], ["明", "知"], ["Pl", "an"], ["▁P", "as"], ["持续", "的"], ["必", "定"], ["▁C", "irc"], ["ri", "k"], ["▁var", "iants"], ["▁K", "it"], ["分", "為"]], "special_tokens": ["<|endoftext|>", "<|im_start|>", "<|im_end|>", "<|pad|>", "<|reserved_0|>", "<|reserved_1|>", "<|reserved_2|>", "<|reserved_3|>", "<|reserved_4|>", "<|reserved_5|>", "<|reserved_6|>", "<|reserved_7|>", "<|reserved_8|>", "<|reserved_9|>", "<|reserved_10|>", "<|reserved_11|>", "<|reserved_12|>", "<|reserved_13|>", "<|reserved_14|>", "<|reserved_15|>", "<|reserved_16|>", "<|reserved_17|>", "<|reserved_18|>", "<|reserved_19|>", "<|reserved_20|>", "<|reserved_21|>", "<|reserved_22|>", "<|reserved_23|>", "<|reserved_24|>", "<|reserved_25|>", "<|reserved_26|>", "<|reserved_27|>", "<|reserved_28|>", "<|reserved_29|>", "<|reserved_30|>", "<|reserved_31|>", "<|reserved_32|>", "<|reserved_33|>", "<|reserved_34|>", "<|reserved_35|>", "<|reserved_36|>", "<|reserved_37|>", "<|reserved_38|>", "<|reserved_39|>", "<|reserved_40|>", "<|reserved_41|>", "<|reserved_42|>", "<|reserved_43|>", "<|reserved_44|>", "<|reserved_45|>", "<|reserved_46|>", "<|reserved_47|>", "<|reserved_48|>", "<|reserved_49|>", "<|reserved_50|>", "<|reserved_51|>", "<|reserved_52|>", "<|reserved_53|>", "<|reserved_54|>", "<|reserved_55|>", "<|reserved_56|>", "<|reserved_57|>", "<|reserved_58|>", "<|reserved_59|>"], "metadata": {"trainer": {"vocab_size": 32768, "char_coverage": 0.9999, "max_alphabet_fraction": 0.4, "min_pair_frequency": 2, "language_temperature": 0.5, "max_token_chars": 16, "min_bucket_share": 0.01, "max_bucket_weight": 4.0}, "train_stats": {"bucket_weights": {"latin": 0.823191228144042, "zh": 1.7399979096984903, "other": 4.0}, "unique_pretokens": 4924919, "alphabet_size": 8458, "merges": 23990, "final_vocab": 32768}, "heldout_eval": {"latin": {"texts": 3731, "bytes_per_token": 3.981, "chars_per_token": 3.956, "tokens_per_word": 1.606, "tokens_per_han": 263.008, "byte_fallback_rate": 0.00017, "roundtrip_failures": 0}, "zh": {"texts": 939, "bytes_per_token": 4.347, "chars_per_token": 1.589, "tokens_per_word": 35.946, "tokens_per_han": 0.772, "byte_fallback_rate": 0.00373, "roundtrip_failures": 0}, "ko": {"texts": 1, "bytes_per_token": 1.665, "chars_per_token": 0.829, "tokens_per_word": 5.663, "tokens_per_han": 8.731, "byte_fallback_rate": 0.37386, "roundtrip_failures": 0}, "cyrillic": {"texts": 1, "bytes_per_token": 2.512, "chars_per_token": 1.268, "tokens_per_word": 9.897, "tokens_per_han": 3.12, "byte_fallback_rate": 0.0, "roundtrip_failures": 0}, "ja": {"texts": 1, "bytes_per_token": 2.671, "chars_per_token": 1.333, "tokens_per_word": 10.074, "tokens_per_han": 2.666, "byte_fallback_rate": 0.01567, "roundtrip_failures": 0}, "other": {"texts": 1, "bytes_per_token": 1.514, "chars_per_token": 1.478, "tokens_per_word": 2.391, "tokens_per_han": null, "byte_fallback_rate": 0.0, "roundtrip_failures": 0}, "vocab_utilization": 0.9042}, "sources": {"tokenizer sample: 233,619 chunks (<= 2000 chars) from FineWeb-Edu, Fineweb-Edu-Chinese V2.1, Cosmopedia v2, Wikipedia en, Wikipedia zh": {"files": 1, "records": 233619, "texts_seen": 233619, "sampled": 233619, "buckets": {"latin": 186575, "zh": 46977, "ko": 1, "cyrillic": 40, "ja": 20, "other": 6}}}, "elapsed_s": 443.9, "vocab_size": 32768, "fingerprint": "6d4b3b524922f6cd34d674cf10605488d99c4dc97a58699d59466eb4ba396171", "special_tokens": ["<|endoftext|>", "<|im_start|>", "<|im_end|>", "<|pad|>", "<|reserved_0|>", "<|reserved_1|>", "<|reserved_2|>", "<|reserved_3|>", "<|reserved_4|>", "<|reserved_5|>", "<|reserved_6|>", "<|reserved_7|>", "<|reserved_8|>", "<|reserved_9|>", "<|reserved_10|>", "<|reserved_11|>", "<|reserved_12|>", "<|reserved_13|>", "<|reserved_14|>", "<|reserved_15|>", "<|reserved_16|>", "<|reserved_17|>", "<|reserved_18|>", "<|reserved_19|>", "<|reserved_20|>", "<|reserved_21|>", "<|reserved_22|>", "<|reserved_23|>", "<|reserved_24|>", "<|reserved_25|>", "<|reserved_26|>", "<|reserved_27|>", "<|reserved_28|>", "<|reserved_29|>", "<|reserved_30|>", "<|reserved_31|>", "<|reserved_32|>", "<|reserved_33|>", "<|reserved_34|>", "<|reserved_35|>", "<|reserved_36|>", "<|reserved_37|>", "<|reserved_38|>", "<|reserved_39|>", "<|reserved_40|>", "<|reserved_41|>", "<|reserved_42|>", "<|reserved_43|>", "<|reserved_44|>", "<|reserved_45|>", "<|reserved_46|>", "<|reserved_47|>", "<|reserved_48|>", "<|reserved_49|>", "<|reserved_50|>", "<|reserved_51|>", "<|reserved_52|>", "<|reserved_53|>", "<|reserved_54|>", "<|reserved_55|>", "<|reserved_56|>", "<|reserved_57|>", "<|reserved_58|>", "<|reserved_59|>"], "algorithm": "chronos-bpe-v1", "derived_from": {"fingerprint": "169668b1be29a517fb20f44060cb4a2955cf16dc56f484ceb5376ff2f9a9f37a", "relabelled_ids": [3, 63], "rule": "control ids 3-63 relabelled to the task-neutral layout special_tokens_with(slots=64); ordinary tokens, merges and ids unchanged"}}} \ No newline at end of file diff --git a/models/chronos-enzh-50m-sft/tokenizer/special_tokens_map.json b/chronos/assets/tokenizers/general_32k/special_tokens_map.json similarity index 100% rename from models/chronos-enzh-50m-sft/tokenizer/special_tokens_map.json rename to chronos/assets/tokenizers/general_32k/special_tokens_map.json diff --git a/chronos/assets/tokenizers/general_32k/tokenizer.json b/chronos/assets/tokenizers/general_32k/tokenizer.json new file mode 100644 index 0000000..e2b7f8b --- /dev/null +++ b/chronos/assets/tokenizers/general_32k/tokenizer.json @@ -0,0 +1 @@ +{"version": "1.0", "truncation": null, "padding": null, "added_tokens": [{"id": 0, "content": "<|endoftext|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 1, "content": "<|im_start|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 2, "content": "<|im_end|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 3, "content": "<|pad|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 4, "content": "<|reserved_0|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 5, "content": "<|reserved_1|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 6, "content": "<|reserved_2|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 7, "content": "<|reserved_3|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 8, "content": "<|reserved_4|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 9, "content": "<|reserved_5|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 10, "content": "<|reserved_6|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 11, "content": "<|reserved_7|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 12, "content": "<|reserved_8|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 13, "content": "<|reserved_9|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 14, "content": "<|reserved_10|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 15, "content": "<|reserved_11|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 16, "content": "<|reserved_12|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 17, "content": "<|reserved_13|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 18, "content": "<|reserved_14|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 19, "content": "<|reserved_15|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 20, "content": "<|reserved_16|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 21, "content": "<|reserved_17|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 22, "content": "<|reserved_18|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 23, "content": "<|reserved_19|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 24, "content": "<|reserved_20|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 25, "content": "<|reserved_21|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 26, "content": "<|reserved_22|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 27, "content": "<|reserved_23|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 28, "content": "<|reserved_24|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 29, "content": "<|reserved_25|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 30, "content": "<|reserved_26|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 31, "content": "<|reserved_27|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 32, "content": "<|reserved_28|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 33, "content": "<|reserved_29|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 34, "content": "<|reserved_30|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 35, "content": "<|reserved_31|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 36, "content": "<|reserved_32|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 37, "content": "<|reserved_33|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 38, "content": "<|reserved_34|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 39, "content": "<|reserved_35|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 40, "content": "<|reserved_36|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 41, "content": "<|reserved_37|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 42, "content": "<|reserved_38|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 43, "content": "<|reserved_39|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 44, "content": "<|reserved_40|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 45, "content": "<|reserved_41|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 46, "content": "<|reserved_42|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 47, "content": "<|reserved_43|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 48, "content": "<|reserved_44|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 49, "content": "<|reserved_45|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 50, "content": "<|reserved_46|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 51, "content": "<|reserved_47|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 52, "content": "<|reserved_48|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 53, "content": "<|reserved_49|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 54, "content": "<|reserved_50|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 55, "content": "<|reserved_51|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 56, "content": "<|reserved_52|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 57, "content": "<|reserved_53|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 58, "content": "<|reserved_54|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 59, "content": "<|reserved_55|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 60, "content": "<|reserved_56|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 61, "content": "<|reserved_57|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 62, "content": "<|reserved_58|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}, {"id": 63, "content": "<|reserved_59|>", "single_word": false, "lstrip": false, "rstrip": false, "normalized": false, "special": true}], "normalizer": {"type": "Sequence", "normalizers": [{"type": "NFC"}, {"type": "Replace", "pattern": {"Regex": "[\\u0000-\\u0008\\u000b\\u000c\\u000e-\\u001f\\u007f\\u200b\\u200c\\u200e\\u200f\\ufeff]"}, "content": ""}, {"type": "Replace", "pattern": {"String": " "}, "content": "▁"}]}, "pre_tokenizer": {"type": "Split", "pattern": {"Regex": "\\p{Han}+|▁?[^\\s▁\\p{Han}\\p{P}\\p{S}\\p{N}]+|\\p{N}|▁?[\\p{P}\\p{S}]+|▁+|\\s+"}, "behavior": "Isolated", "invert": false}, "post_processor": null, "decoder": {"type": "Sequence", "decoders": [{"type": "Replace", "pattern": {"String": "▁"}, "content": " "}, {"type": "ByteFallback"}, {"type": "Fuse"}]}, "model": {"type": "BPE", "dropout": null, "unk_token": null, "continuing_subword_prefix": null, "end_of_word_suffix": null, "fuse_unk": false, "byte_fallback": true, "ignore_merges": false, "vocab": {"<0x00>": 64, "<0x01>": 65, "<0x02>": 66, "<0x03>": 67, "<0x04>": 68, "<0x05>": 69, "<0x06>": 70, "<0x07>": 71, "<0x08>": 72, "<0x09>": 73, "<0x0A>": 74, "<0x0B>": 75, "<0x0C>": 76, "<0x0D>": 77, "<0x0E>": 78, "<0x0F>": 79, "<0x10>": 80, "<0x11>": 81, "<0x12>": 82, "<0x13>": 83, "<0x14>": 84, "<0x15>": 85, "<0x16>": 86, "<0x17>": 87, "<0x18>": 88, "<0x19>": 89, "<0x1A>": 90, "<0x1B>": 91, "<0x1C>": 92, "<0x1D>": 93, "<0x1E>": 94, "<0x1F>": 95, "<0x20>": 96, "<0x21>": 97, "<0x22>": 98, "<0x23>": 99, "<0x24>": 100, "<0x25>": 101, "<0x26>": 102, "<0x27>": 103, "<0x28>": 104, "<0x29>": 105, "<0x2A>": 106, "<0x2B>": 107, "<0x2C>": 108, "<0x2D>": 109, "<0x2E>": 110, "<0x2F>": 111, "<0x30>": 112, "<0x31>": 113, "<0x32>": 114, "<0x33>": 115, "<0x34>": 116, "<0x35>": 117, "<0x36>": 118, "<0x37>": 119, "<0x38>": 120, "<0x39>": 121, "<0x3A>": 122, "<0x3B>": 123, "<0x3C>": 124, "<0x3D>": 125, "<0x3E>": 126, "<0x3F>": 127, "<0x40>": 128, "<0x41>": 129, "<0x42>": 130, "<0x43>": 131, "<0x44>": 132, "<0x45>": 133, "<0x46>": 134, "<0x47>": 135, "<0x48>": 136, "<0x49>": 137, "<0x4A>": 138, "<0x4B>": 139, "<0x4C>": 140, "<0x4D>": 141, "<0x4E>": 142, "<0x4F>": 143, "<0x50>": 144, "<0x51>": 145, "<0x52>": 146, "<0x53>": 147, "<0x54>": 148, "<0x55>": 149, "<0x56>": 150, "<0x57>": 151, "<0x58>": 152, "<0x59>": 153, "<0x5A>": 154, "<0x5B>": 155, "<0x5C>": 156, "<0x5D>": 157, "<0x5E>": 158, "<0x5F>": 159, "<0x60>": 160, "<0x61>": 161, "<0x62>": 162, "<0x63>": 163, "<0x64>": 164, "<0x65>": 165, "<0x66>": 166, "<0x67>": 167, "<0x68>": 168, "<0x69>": 169, "<0x6A>": 170, "<0x6B>": 171, "<0x6C>": 172, "<0x6D>": 173, "<0x6E>": 174, "<0x6F>": 175, "<0x70>": 176, "<0x71>": 177, "<0x72>": 178, "<0x73>": 179, "<0x74>": 180, "<0x75>": 181, "<0x76>": 182, "<0x77>": 183, "<0x78>": 184, "<0x79>": 185, "<0x7A>": 186, "<0x7B>": 187, "<0x7C>": 188, "<0x7D>": 189, "<0x7E>": 190, "<0x7F>": 191, "<0x80>": 192, "<0x81>": 193, "<0x82>": 194, "<0x83>": 195, "<0x84>": 196, "<0x85>": 197, "<0x86>": 198, "<0x87>": 199, "<0x88>": 200, "<0x89>": 201, "<0x8A>": 202, "<0x8B>": 203, "<0x8C>": 204, "<0x8D>": 205, "<0x8E>": 206, "<0x8F>": 207, "<0x90>": 208, "<0x91>": 209, "<0x92>": 210, "<0x93>": 211, "<0x94>": 212, "<0x95>": 213, "<0x96>": 214, "<0x97>": 215, "<0x98>": 216, "<0x99>": 217, "<0x9A>": 218, "<0x9B>": 219, "<0x9C>": 220, "<0x9D>": 221, "<0x9E>": 222, "<0x9F>": 223, "<0xA0>": 224, "<0xA1>": 225, "<0xA2>": 226, "<0xA3>": 227, "<0xA4>": 228, "<0xA5>": 229, "<0xA6>": 230, "<0xA7>": 231, "<0xA8>": 232, "<0xA9>": 233, "<0xAA>": 234, "<0xAB>": 235, "<0xAC>": 236, "<0xAD>": 237, "<0xAE>": 238, "<0xAF>": 239, "<0xB0>": 240, "<0xB1>": 241, "<0xB2>": 242, "<0xB3>": 243, "<0xB4>": 244, "<0xB5>": 245, "<0xB6>": 246, "<0xB7>": 247, "<0xB8>": 248, "<0xB9>": 249, "<0xBA>": 250, "<0xBB>": 251, "<0xBC>": 252, "<0xBD>": 253, "<0xBE>": 254, "<0xBF>": 255, "<0xC0>": 256, "<0xC1>": 257, "<0xC2>": 258, "<0xC3>": 259, "<0xC4>": 260, "<0xC5>": 261, "<0xC6>": 262, "<0xC7>": 263, "<0xC8>": 264, "<0xC9>": 265, "<0xCA>": 266, "<0xCB>": 267, "<0xCC>": 268, "<0xCD>": 269, "<0xCE>": 270, "<0xCF>": 271, "<0xD0>": 272, "<0xD1>": 273, "<0xD2>": 274, "<0xD3>": 275, "<0xD4>": 276, "<0xD5>": 277, "<0xD6>": 278, "<0xD7>": 279, "<0xD8>": 280, "<0xD9>": 281, "<0xDA>": 282, "<0xDB>": 283, "<0xDC>": 284, "<0xDD>": 285, "<0xDE>": 286, "<0xDF>": 287, "<0xE0>": 288, "<0xE1>": 289, "<0xE2>": 290, "<0xE3>": 291, "<0xE4>": 292, "<0xE5>": 293, "<0xE6>": 294, "<0xE7>": 295, "<0xE8>": 296, "<0xE9>": 297, "<0xEA>": 298, "<0xEB>": 299, "<0xEC>": 300, "<0xED>": 301, "<0xEE>": 302, "<0xEF>": 303, "<0xF0>": 304, "<0xF1>": 305, "<0xF2>": 306, "<0xF3>": 307, "<0xF4>": 308, "<0xF5>": 309, "<0xF6>": 310, "<0xF7>": 311, "<0xF8>": 312, "<0xF9>": 313, "<0xFA>": 314, "<0xFB>": 315, "<0xFC>": 316, "<0xFD>": 317, "<0xFE>": 318, "<0xFF>": 319, "\u0002": 320, "\u0003": 321, "\u0004": 322, "\u0005": 323, "\u0006": 324, "\u0007": 325, "\b": 326, "\t": 327, "\n": 328, "\r": 329, "\u0010": 330, "\u0011": 331, "!": 332, "\"": 333, "#": 334, "$": 335, "%": 336, "&": 337, "'": 338, "(": 339, ")": 340, "*": 341, "+": 342, ",": 343, "-": 344, ".": 345, "/": 346, "0": 347, "1": 348, "2": 349, "3": 350, "4": 351, "5": 352, "6": 353, "7": 354, "8": 355, "9": 356, ":": 357, ";": 358, "<": 359, "=": 360, ">": 361, "?": 362, "@": 363, "A": 364, "B": 365, "C": 366, "D": 367, "E": 368, "F": 369, "G": 370, "H": 371, "I": 372, "J": 373, "K": 374, "L": 375, "M": 376, "N": 377, "O": 378, "P": 379, "Q": 380, "R": 381, "S": 382, "T": 383, "U": 384, "V": 385, "W": 386, "X": 387, "Y": 388, "Z": 389, "[": 390, "\\": 391, "]": 392, "^": 393, "_": 394, "`": 395, "a": 396, "b": 397, "c": 398, "d": 399, "e": 400, "f": 401, "g": 402, "h": 403, "i": 404, "j": 405, "k": 406, "l": 407, "m": 408, "n": 409, "o": 410, "p": 411, "q": 412, "r": 413, "s": 414, "t": 415, "u": 416, "v": 417, "w": 418, "x": 419, "y": 420, "z": 421, "{": 422, "|": 423, "}": 424, "~": 425, "": 426, " ": 427, "¡": 428, "¢": 429, "£": 430, "¥": 431, "¦": 432, "§": 433, "¨": 434, "©": 435, "ª": 436, "«": 437, "¬": 438, "­": 439, "®": 440, "¯": 441, "°": 442, "±": 443, "²": 444, "³": 445, "´": 446, "µ": 447, "¶": 448, "·": 449, "¹": 450, "º": 451, "»": 452, "¼": 453, "½": 454, "¾": 455, "¿": 456, "À": 457, "Á": 458, "Â": 459, "Ã": 460, "Ä": 461, "Å": 462, "Æ": 463, "Ç": 464, "É": 465, "Ë": 466, "Í": 467, "Î": 468, "Ð": 469, "Ñ": 470, "Ó": 471, "Ö": 472, "×": 473, "Ø": 474, "Ú": 475, "Ü": 476, "Þ": 477, "ß": 478, "à": 479, "á": 480, "â": 481, "ã": 482, "ä": 483, "å": 484, "æ": 485, "ç": 486, "è": 487, "é": 488, "ê": 489, "ë": 490, "ì": 491, "í": 492, "î": 493, "ï": 494, "ð": 495, "ñ": 496, "ò": 497, "ó": 498, "ô": 499, "õ": 500, "ö": 501, "÷": 502, "ø": 503, "ù": 504, "ú": 505, "û": 506, "ü": 507, "ý": 508, "þ": 509, "ÿ": 510, "Ā": 511, "ā": 512, "ă": 513, "ą": 514, "Ć": 515, "ć": 516, "ĉ": 517, "Č": 518, "č": 519, "ď": 520, "Đ": 521, "đ": 522, "ē": 523, "ĕ": 524, "ė": 525, "ę": 526, "ě": 527, "ğ": 528, "ħ": 529, "ĩ": 530, "ī": 531, "ĭ": 532, "İ": 533, "ı": 534, "ķ": 535, "ĺ": 536, "ľ": 537, "Ł": 538, "ł": 539, "ń": 540, "ņ": 541, "ň": 542, "ŋ": 543, "Ō": 544, "ō": 545, "ŏ": 546, "ő": 547, "Œ": 548, "œ": 549, "ř": 550, "Ś": 551, "ś": 552, "Ş": 553, "ş": 554, "Š": 555, "š": 556, "ţ": 557, "ť": 558, "ū": 559, "ŭ": 560, "ů": 561, "Ÿ": 562, "ź": 563, "Ż": 564, "ż": 565, "Ž": 566, "ž": 567, "ƒ": 568, "ơ": 569, "ư": 570, "ǀ": 571, "ǁ": 572, "ǂ": 573, "ǃ": 574, "ǎ": 575, "ǐ": 576, "ǒ": 577, "ǔ": 578, "Ș": 579, "ș": 580, "ț": 581, "ɐ": 582, "ɑ": 583, "ɒ": 584, "ɔ": 585, "ɕ": 586, "ə": 587, "ɛ": 588, "ɜ": 589, "ɤ": 590, "ɨ": 591, "ɪ": 592, "ɹ": 593, "ʁ": 594, "ʂ": 595, "ʃ": 596, "ʊ": 597, "ʌ": 598, "ʒ": 599, "ʔ": 600, "ʰ": 601, "ʷ": 602, "ʻ": 603, "ʼ": 604, "ʾ": 605, "ʿ": 606, "ˆ": 607, "ˇ": 608, "ˈ": 609, "ˊ": 610, "ˋ": 611, "ˌ": 612, "ː": 613, "˘": 614, "˙": 615, "˚": 616, "˜": 617, "˝": 618, "́": 619, "̃": 620, "̄": 621, "̍": 622, "̓": 623, "̣": 624, "̯": 625, "͏": 626, "͡": 627, "Α": 628, "Β": 629, "Γ": 630, "Δ": 631, "Ε": 632, "Η": 633, "Θ": 634, "Ι": 635, "Κ": 636, "Λ": 637, "Μ": 638, "Ν": 639, "Ο": 640, "Π": 641, "Ρ": 642, "Σ": 643, "Τ": 644, "Υ": 645, "Φ": 646, "Χ": 647, "Ψ": 648, "Ω": 649, "ά": 650, "έ": 651, "ή": 652, "ί": 653, "α": 654, "β": 655, "γ": 656, "δ": 657, "ε": 658, "ζ": 659, "η": 660, "θ": 661, "ι": 662, "κ": 663, "λ": 664, "μ": 665, "ν": 666, "ξ": 667, "ο": 668, "π": 669, "ρ": 670, "ς": 671, "σ": 672, "τ": 673, "υ": 674, "φ": 675, "χ": 676, "ψ": 677, "ω": 678, "ό": 679, "ύ": 680, "ώ": 681, "ϕ": 682, "ϵ": 683, "І": 684, "А": 685, "Б": 686, "В": 687, "Г": 688, "Д": 689, "Е": 690, "Ж": 691, "З": 692, "И": 693, "К": 694, "Л": 695, "М": 696, "Н": 697, "О": 698, "П": 699, "Р": 700, "С": 701, "Т": 702, "У": 703, "Ф": 704, "Х": 705, "Ц": 706, "Ч": 707, "Ш": 708, "Ы": 709, "Ь": 710, "Э": 711, "Ю": 712, "Я": 713, "а": 714, "б": 715, "в": 716, "г": 717, "д": 718, "е": 719, "ж": 720, "з": 721, "и": 722, "й": 723, "к": 724, "л": 725, "м": 726, "н": 727, "о": 728, "п": 729, "р": 730, "с": 731, "т": 732, "у": 733, "ф": 734, "х": 735, "ц": 736, "ч": 737, "ш": 738, "щ": 739, "ъ": 740, "ы": 741, "ь": 742, "э": 743, "ю": 744, "я": 745, "ё": 746, "є": 747, "і": 748, "ї": 749, "ѣ": 750, "ӏ": 751, "ա": 752, "ե": 753, "ի": 754, "կ": 755, "մ": 756, "յ": 757, "ն": 758, "ո": 759, "ս": 760, "վ": 761, "տ": 762, "ր": 763, "ց": 764, "ւ": 765, "ְ": 766, "ֲ": 767, "ִ": 768, "ֵ": 769, "ֶ": 770, "ַ": 771, "ָ": 772, "ֹ": 773, "ּ": 774, "ׁ": 775, "א": 776, "ב": 777, "ג": 778, "ד": 779, "ה": 780, "ו": 781, "ז": 782, "ח": 783, "ט": 784, "י": 785, "ך": 786, "כ": 787, "ל": 788, "ם": 789, "מ": 790, "ן": 791, "נ": 792, "ס": 793, "ע": 794, "פ": 795, "צ": 796, "ק": 797, "ר": 798, "ש": 799, "ת": 800, "آ": 801, "أ": 802, "إ": 803, "ا": 804, "ب": 805, "ة": 806, "ت": 807, "ج": 808, "ح": 809, "خ": 810, "د": 811, "ذ": 812, "ر": 813, "ز": 814, "س": 815, "ش": 816, "ص": 817, "ض": 818, "ط": 819, "ظ": 820, "ع": 821, "غ": 822, "ـ": 823, "ف": 824, "ق": 825, "ك": 826, "ل": 827, "م": 828, "ن": 829, "ه": 830, "و": 831, "ى": 832, "ي": 833, "ً": 834, "ٌ": 835, "َ": 836, "ُ": 837, "ِ": 838, "ّ": 839, "ْ": 840, "پ": 841, "ک": 842, "گ": 843, "ہ": 844, "ی": 845, "ं": 846, "अ": 847, "आ": 848, "उ": 849, "ए": 850, "क": 851, "ख": 852, "ग": 853, "च": 854, "ज": 855, "ट": 856, "ड": 857, "ण": 858, "त": 859, "द": 860, "ध": 861, "न": 862, "प": 863, "ब": 864, "भ": 865, "म": 866, "य": 867, "र": 868, "ल": 869, "व": 870, "श": 871, "ष": 872, "स": 873, "ह": 874, "ा": 875, "ि": 876, "ी": 877, "ु": 878, "ृ": 879, "े": 880, "ै": 881, "ो": 882, "्": 883, "।": 884, "॥": 885, "ক": 886, "ট": 887, "ত": 888, "ন": 889, "র": 890, "ল": 891, "স": 892, "া": 893, "ি": 894, "ু": 895, "ে": 896, "্": 897, "ા": 898, "ା": 899, "க": 900, "ச": 901, "ட": 902, "த": 903, "ன": 904, "ப": 905, "ம": 906, "ர": 907, "ல": 908, "வ": 909, "ா": 910, "ி": 911, "ு": 912, "்": 913, "ക": 914, "ത": 915, "ന": 916, "ാ": 917, "ി": 918, "്": 919, "ก": 920, "ค": 921, "ง": 922, "จ": 923, "ช": 924, "ซ": 925, "ด": 926, "ต": 927, "ท": 928, "น": 929, "บ": 930, "ป": 931, "พ": 932, "ม": 933, "ย": 934, "ร": 935, "ล": 936, "ว": 937, "ส": 938, "ห": 939, "อ": 940, "ะ": 941, "ั": 942, "า": 943, "ิ": 944, "ี": 945, "ุ": 946, "ู": 947, "เ": 948, "โ": 949, "่": 950, "้": 951, "์": 952, "າ": 953, "་": 954, "ག": 955, "ང": 956, "ད": 957, "ས": 958, "ུ": 959, "ོ": 960, "က": 961, "ခ": 962, "ဂ": 963, "င": 964, "စ": 965, "ဆ": 966, "ည": 967, "တ": 968, "ထ": 969, "ဒ": 970, "န": 971, "ပ": 972, "ဖ": 973, "ဘ": 974, "မ": 975, "ယ": 976, "ရ": 977, "လ": 978, "ဝ": 979, "သ": 980, "အ": 981, "ါ": 982, "ာ": 983, "ိ": 984, "ီ": 985, "ု": 986, "ူ": 987, "ေ": 988, "ဲ": 989, "ံ": 990, "့": 991, "း": 992, "္": 993, "်": 994, "ျ": 995, "ြ": 996, "ွ": 997, "ှ": 998, "၊": 999, "၌": 1000, "၍": 1001, "၏": 1002, "ა": 1003, "ბ": 1004, "გ": 1005, "დ": 1006, "ე": 1007, "ვ": 1008, "თ": 1009, "ი": 1010, "კ": 1011, "ლ": 1012, "მ": 1013, "ნ": 1014, "ო": 1015, "რ": 1016, "ს": 1017, "ტ": 1018, "უ": 1019, "შ": 1020, "ᜀ": 1021, "ᜃ": 1022, "ᜅ": 1023, "ᜆ": 1024, "ᜈ": 1025, "ᜋ": 1026, "ᜐ": 1027, "ᜒ": 1028, "᜔": 1029, "ក": 1030, "ង": 1031, "ប": 1032, "រ": 1033, "ស": 1034, "ា": 1035, "ោ": 1036, "ះ": 1037, "្": 1038, "ᵏ": 1039, "ḍ": 1040, "Ḥ": 1041, "ḥ": 1042, "ṃ": 1043, "ṅ": 1044, "ṇ": 1045, "ṛ": 1046, "Ṣ": 1047, "ṣ": 1048, "ṭ": 1049, "ẓ": 1050, "ạ": 1051, "ả": 1052, "ấ": 1053, "ầ": 1054, "ậ": 1055, "ắ": 1056, "ế": 1057, "ề": 1058, "ễ": 1059, "ệ": 1060, "ị": 1061, "ọ": 1062, "ố": 1063, "ồ": 1064, "ổ": 1065, "ộ": 1066, "ớ": 1067, "ờ": 1068, "ợ": 1069, "ứ": 1070, "ữ": 1071, "ἀ": 1072, "ἐ": 1073, "ἡ": 1074, "ὁ": 1075, "ὐ": 1076, "ὶ": 1077, "ὸ": 1078, "ῆ": 1079, "ῖ": 1080, "ῦ": 1081, "ῶ": 1082, " ": 1083, " ": 1084, " ": 1085, " ": 1086, " ": 1087, "​": 1088, "‌": 1089, "‍": 1090, "‐": 1091, "‑": 1092, "‒": 1093, "–": 1094, "—": 1095, "―": 1096, "‖": 1097, "‘": 1098, "’": 1099, "‚": 1100, "‛": 1101, "“": 1102, "”": 1103, "„": 1104, "‟": 1105, "†": 1106, "‡": 1107, "•": 1108, "…": 1109, "‧": 1110, "‬": 1111, " ": 1112, "‰": 1113, "′": 1114, "″": 1115, "›": 1116, "※": 1117, "⁄": 1118, "⁻": 1119, "ⁿ": 1120, "₀": 1121, "₁": 1122, "₂": 1123, "₃": 1124, "₄": 1125, "€": 1126, "₹": 1127, "⃣": 1128, "℃": 1129, "№": 1130, "™": 1131, "⅓": 1132, "Ⅰ": 1133, "Ⅱ": 1134, "Ⅲ": 1135, "Ⅳ": 1136, "Ⅴ": 1137, "Ⅵ": 1138, "Ⅶ": 1139, "Ⅷ": 1140, "Ⅸ": 1141, "Ⅹ": 1142, "Ⅼ": 1143, "Ⅽ": 1144, "Ⅾ": 1145, "Ⅿ": 1146, "ⅱ": 1147, "ⅲ": 1148, "←": 1149, "↑": 1150, "→": 1151, "↓": 1152, "↔": 1153, "↗": 1154, "↘": 1155, "↙": 1156, "↩": 1157, "↺": 1158, "⇒": 1159, "∀": 1160, "∁": 1161, "∂": 1162, "∅": 1163, "∆": 1164, "∇": 1165, "∈": 1166, "∏": 1167, "∑": 1168, "−": 1169, "∕": 1170, "∗": 1171, "∙": 1172, "√": 1173, "∞": 1174, "∠": 1175, "∣": 1176, "∥": 1177, "∧": 1178, "∨": 1179, "∩": 1180, "∪": 1181, "∫": 1182, "∮": 1183, "∴": 1184, "∵": 1185, "∶": 1186, "∷": 1187, "∼": 1188, "≈": 1189, "≠": 1190, "≡": 1191, "≤": 1192, "≥": 1193, "≦": 1194, "≧": 1195, "⊂": 1196, "⊙": 1197, "⊥": 1198, "⊿": 1199, "⋅": 1200, "⋯": 1201, "①": 1202, "②": 1203, "③": 1204, "④": 1205, "⑤": 1206, "⑥": 1207, "⑦": 1208, "⑧": 1209, "⑨": 1210, "⑩": 1211, "⑴": 1212, "⑵": 1213, "⑶": 1214, "⑷": 1215, "⑸": 1216, "⑹": 1217, "⑺": 1218, "⑻": 1219, "⑼": 1220, "⑾": 1221, "⒄": 1222, "⒈": 1223, "⒉": 1224, "⒊": 1225, "⒋": 1226, "─": 1227, "│": 1228, "┊": 1229, "└": 1230, "├": 1231, "┣": 1232, "╱": 1233, "╲": 1234, "▁": 1235, "▋": 1236, "▌": 1237, "▍": 1238, "■": 1239, "□": 1240, "▪": 1241, "▲": 1242, "△": 1243, "▶": 1244, "▸": 1245, "►": 1246, "▼": 1247, "◆": 1248, "◇": 1249, "○": 1250, "◎": 1251, "●": 1252, "◦": 1253, "◾": 1254, "★": 1255, "☆": 1256, "♀": 1257, "♂": 1258, "♥": 1259, "♦": 1260, "♪": 1261, "♭": 1262, "♯": 1263, "✓": 1264, "✔": 1265, "✦": 1266, "✨": 1267, "➡": 1268, "➤": 1269, "⟷": 1270, "⭐": 1271, "⼀": 1272, "⼈": 1273, "⼤": 1274, "⽅": 1275, "⽣": 1276, "⽤": 1277, "⾏": 1278, " ": 1279, "、": 1280, "。": 1281, "々": 1282, "〇": 1283, "〈": 1284, "〉": 1285, "《": 1286, "》": 1287, "「": 1288, "」": 1289, "『": 1290, "』": 1291, "【": 1292, "】": 1293, "〔": 1294, "〕": 1295, "〖": 1296, "〗": 1297, "〜": 1298, "あ": 1299, "い": 1300, "う": 1301, "え": 1302, "お": 1303, "か": 1304, "が": 1305, "き": 1306, "ぎ": 1307, "く": 1308, "ぐ": 1309, "け": 1310, "げ": 1311, "こ": 1312, "ご": 1313, "さ": 1314, "ざ": 1315, "し": 1316, "じ": 1317, "す": 1318, "ず": 1319, "せ": 1320, "ぜ": 1321, "そ": 1322, "ぞ": 1323, "た": 1324, "だ": 1325, "ち": 1326, "っ": 1327, "つ": 1328, "づ": 1329, "て": 1330, "で": 1331, "と": 1332, "ど": 1333, "な": 1334, "に": 1335, "ぬ": 1336, "ね": 1337, "の": 1338, "は": 1339, "ば": 1340, "ぱ": 1341, "ひ": 1342, "び": 1343, "ぴ": 1344, "ふ": 1345, "ぶ": 1346, "へ": 1347, "べ": 1348, "ほ": 1349, "ぼ": 1350, "ぽ": 1351, "ま": 1352, "み": 1353, "む": 1354, "め": 1355, "も": 1356, "ゃ": 1357, "や": 1358, "ゅ": 1359, "ゆ": 1360, "ょ": 1361, "よ": 1362, "ら": 1363, "り": 1364, "る": 1365, "れ": 1366, "ろ": 1367, "わ": 1368, "を": 1369, "ん": 1370, "ァ": 1371, "ア": 1372, "ィ": 1373, "イ": 1374, "ウ": 1375, "ェ": 1376, "エ": 1377, "ォ": 1378, "オ": 1379, "カ": 1380, "ガ": 1381, "キ": 1382, "ギ": 1383, "ク": 1384, "グ": 1385, "ケ": 1386, "ゲ": 1387, "コ": 1388, "ゴ": 1389, "サ": 1390, "ザ": 1391, "シ": 1392, "ジ": 1393, "ス": 1394, "ズ": 1395, "セ": 1396, "ゼ": 1397, "ソ": 1398, "ゾ": 1399, "タ": 1400, "ダ": 1401, "チ": 1402, "ッ": 1403, "ツ": 1404, "テ": 1405, "デ": 1406, "ト": 1407, "ド": 1408, "ナ": 1409, "ニ": 1410, "ネ": 1411, "ノ": 1412, "ハ": 1413, "バ": 1414, "パ": 1415, "ヒ": 1416, "ビ": 1417, "ピ": 1418, "フ": 1419, "ブ": 1420, "プ": 1421, "ヘ": 1422, "ベ": 1423, "ペ": 1424, "ホ": 1425, "ボ": 1426, "ポ": 1427, "マ": 1428, "ミ": 1429, "ム": 1430, "メ": 1431, "モ": 1432, "ャ": 1433, "ヤ": 1434, "ュ": 1435, "ユ": 1436, "ョ": 1437, "ヨ": 1438, "ラ": 1439, "リ": 1440, "ル": 1441, "レ": 1442, "ロ": 1443, "ワ": 1444, "ン": 1445, "ヴ": 1446, "・": 1447, "ー": 1448, "ㄈ": 1449, "ㄒ": 1450, "ㄧ": 1451, "ㅋ": 1452, "㈠": 1453, "㈡": 1454, "㈢": 1455, "㎜": 1456, "㎡": 1457, "䓬": 1458, "䲁": 1459, "一": 1460, "丁": 1461, "七": 1462, "万": 1463, "丈": 1464, "三": 1465, "上": 1466, "下": 1467, "丌": 1468, "不": 1469, "与": 1470, "丐": 1471, "丑": 1472, "专": 1473, "且": 1474, "丕": 1475, "世": 1476, "丘": 1477, "丙": 1478, "业": 1479, "丛": 1480, "东": 1481, "丝": 1482, "丞": 1483, "丟": 1484, "両": 1485, "丢": 1486, "两": 1487, "严": 1488, "並": 1489, "丧": 1490, "丨": 1491, "个": 1492, "丫": 1493, "中": 1494, "丰": 1495, "串": 1496, "临": 1497, "丶": 1498, "丸": 1499, "丹": 1500, "为": 1501, "主": 1502, "丼": 1503, "丽": 1504, "举": 1505, "乂": 1506, "乃": 1507, "久": 1508, "么": 1509, "义": 1510, "之": 1511, "乌": 1512, "乍": 1513, "乎": 1514, "乏": 1515, "乐": 1516, "乒": 1517, "乓": 1518, "乔": 1519, "乖": 1520, "乗": 1521, "乘": 1522, "乙": 1523, "九": 1524, "乞": 1525, "也": 1526, "习": 1527, "乡": 1528, "书": 1529, "乩": 1530, "买": 1531, "乱": 1532, "乳": 1533, "乾": 1534, "亂": 1535, "了": 1536, "予": 1537, "争": 1538, "亊": 1539, "事": 1540, "二": 1541, "于": 1542, "亏": 1543, "云": 1544, "互": 1545, "五": 1546, "井": 1547, "亘": 1548, "亚": 1549, "些": 1550, "亜": 1551, "亞": 1552, "亟": 1553, "亡": 1554, "亢": 1555, "交": 1556, "亥": 1557, "亦": 1558, "产": 1559, "亨": 1560, "亩": 1561, "享": 1562, "京": 1563, "亭": 1564, "亮": 1565, "亲": 1566, "亳": 1567, "亵": 1568, "亶": 1569, "人": 1570, "亿": 1571, "什": 1572, "仁": 1573, "仃": 1574, "仄": 1575, "仅": 1576, "仆": 1577, "仇": 1578, "今": 1579, "介": 1580, "仍": 1581, "从": 1582, "仑": 1583, "仓": 1584, "仔": 1585, "仕": 1586, "他": 1587, "仗": 1588, "付": 1589, "仙": 1590, "仝": 1591, "仞": 1592, "代": 1593, "令": 1594, "以": 1595, "仨": 1596, "仪": 1597, "们": 1598, "仰": 1599, "仲": 1600, "件": 1601, "价": 1602, "仸": 1603, "任": 1604, "份": 1605, "仿": 1606, "企": 1607, "伉": 1608, "伊": 1609, "伍": 1610, "伎": 1611, "伏": 1612, "伐": 1613, "休": 1614, "伕": 1615, "众": 1616, "优": 1617, "伙": 1618, "会": 1619, "伝": 1620, "伞": 1621, "伟": 1622, "传": 1623, "伤": 1624, "伦": 1625, "伪": 1626, "伫": 1627, "伯": 1628, "估": 1629, "伴": 1630, "伶": 1631, "伸": 1632, "伺": 1633, "似": 1634, "伽": 1635, "佃": 1636, "但": 1637, "佈": 1638, "位": 1639, "低": 1640, "住": 1641, "佐": 1642, "佑": 1643, "体": 1644, "佔": 1645, "何": 1646, "佗": 1647, "佘": 1648, "余": 1649, "佚": 1650, "佛": 1651, "作": 1652, "佝": 1653, "佞": 1654, "佟": 1655, "你": 1656, "佢": 1657, "佣": 1658, "佤": 1659, "佥": 1660, "佩": 1661, "佬": 1662, "佯": 1663, "佰": 1664, "佳": 1665, "併": 1666, "佶": 1667, "佼": 1668, "佾": 1669, "使": 1670, "侃": 1671, "侄": 1672, "來": 1673, "侈": 1674, "例": 1675, "侍": 1676, "侏": 1677, "侑": 1678, "侖": 1679, "侗": 1680, "供": 1681, "依": 1682, "侠": 1683, "侣": 1684, "侥": 1685, "侦": 1686, "侧": 1687, "侨": 1688, "侩": 1689, "侪": 1690, "侬": 1691, "侮": 1692, "侯": 1693, "侵": 1694, "侶": 1695, "侷": 1696, "便": 1697, "係": 1698, "促": 1699, "俄": 1700, "俊": 1701, "俎": 1702, "俏": 1703, "俐": 1704, "俑": 1705, "俗": 1706, "俘": 1707, "俚": 1708, "保": 1709, "俞": 1710, "俟": 1711, "俠": 1712, "信": 1713, "俣": 1714, "俨": 1715, "俩": 1716, "俪": 1717, "俭": 1718, "修": 1719, "俯": 1720, "俱": 1721, "俳": 1722, "俸": 1723, "俺": 1724, "俾": 1725, "倆": 1726, "倉": 1727, "個": 1728, "倍": 1729, "們": 1730, "倒": 1731, "倔": 1732, "倖": 1733, "倘": 1734, "候": 1735, "倚": 1736, "倜": 1737, "借": 1738, "倡": 1739, "値": 1740, "倦": 1741, "倩": 1742, "倪": 1743, "倫": 1744, "倬": 1745, "倭": 1746, "倶": 1747, "债": 1748, "值": 1749, "倾": 1750, "偁": 1751, "偃": 1752, "假": 1753, "偈": 1754, "偉": 1755, "偌": 1756, "偏": 1757, "偕": 1758, "做": 1759, "停": 1760, "健": 1761, "側": 1762, "偵": 1763, "偶": 1764, "偷": 1765, "偻": 1766, "偽": 1767, "偿": 1768, "傀": 1769, "傅": 1770, "傈": 1771, "傍": 1772, "傑": 1773, "傘": 1774, "備": 1775, "傢": 1776, "傣": 1777, "储": 1778, "傩": 1779, "催": 1780, "傭": 1781, "傲": 1782, "傳": 1783, "債": 1784, "傷": 1785, "傻": 1786, "傾": 1787, "僅": 1788, "僉": 1789, "像": 1790, "僑": 1791, "僕": 1792, "僖": 1793, "僚": 1794, "僧": 1795, "僭": 1796, "僮": 1797, "僱": 1798, "僳": 1799, "僵": 1800, "價": 1801, "僻": 1802, "儀": 1803, "儁": 1804, "儂": 1805, "億": 1806, "儆": 1807, "儉": 1808, "儋": 1809, "儒": 1810, "儘": 1811, "償": 1812, "儡": 1813, "優": 1814, "儲": 1815, "儷": 1816, "儼": 1817, "儿": 1818, "兀": 1819, "允": 1820, "元": 1821, "兄": 1822, "充": 1823, "兆": 1824, "兇": 1825, "先": 1826, "光": 1827, "克": 1828, "兌": 1829, "免": 1830, "児": 1831, "兑": 1832, "兒": 1833, "兔": 1834, "兖": 1835, "兗": 1836, "党": 1837, "兜": 1838, "兢": 1839, "入": 1840, "內": 1841, "全": 1842, "兩": 1843, "八": 1844, "公": 1845, "六": 1846, "兮": 1847, "兰": 1848, "共": 1849, "关": 1850, "兴": 1851, "兵": 1852, "其": 1853, "具": 1854, "典": 1855, "兹": 1856, "养": 1857, "兼": 1858, "兽": 1859, "冀": 1860, "内": 1861, "円": 1862, "冈": 1863, "冉": 1864, "冊": 1865, "册": 1866, "再": 1867, "冏": 1868, "冒": 1869, "冕": 1870, "冗": 1871, "写": 1872, "军": 1873, "农": 1874, "冠": 1875, "冢": 1876, "冤": 1877, "冥": 1878, "冨": 1879, "冪": 1880, "冬": 1881, "冯": 1882, "冰": 1883, "冲": 1884, "决": 1885, "冴": 1886, "况": 1887, "冶": 1888, "冷": 1889, "冻": 1890, "冼": 1891, "冽": 1892, "净": 1893, "凄": 1894, "准": 1895, "凇": 1896, "凉": 1897, "凋": 1898, "凌": 1899, "凍": 1900, "减": 1901, "凑": 1902, "凛": 1903, "凜": 1904, "凝": 1905, "几": 1906, "凡": 1907, "凤": 1908, "処": 1909, "凭": 1910, "凯": 1911, "凰": 1912, "凱": 1913, "凳": 1914, "凶": 1915, "凸": 1916, "凹": 1917, "出": 1918, "击": 1919, "函": 1920, "凿": 1921, "刀": 1922, "刁": 1923, "刃": 1924, "分": 1925, "切": 1926, "刊": 1927, "刍": 1928, "刎": 1929, "刑": 1930, "划": 1931, "列": 1932, "刘": 1933, "则": 1934, "刚": 1935, "创": 1936, "初": 1937, "删": 1938, "判": 1939, "別": 1940, "刨": 1941, "利": 1942, "刪": 1943, "别": 1944, "刮": 1945, "到": 1946, "制": 1947, "刷": 1948, "券": 1949, "刹": 1950, "刺": 1951, "刻": 1952, "刽": 1953, "刿": 1954, "剁": 1955, "剂": 1956, "剃": 1957, "則": 1958, "削": 1959, "剋": 1960, "剌": 1961, "前": 1962, "剎": 1963, "剑": 1964, "剔": 1965, "剖": 1966, "剛": 1967, "剝": 1968, "剡": 1969, "剣": 1970, "剥": 1971, "剧": 1972, "剩": 1973, "剪": 1974, "副": 1975, "割": 1976, "創": 1977, "剽": 1978, "剿": 1979, "劃": 1980, "劇": 1981, "劈": 1982, "劉": 1983, "劍": 1984, "劑": 1985, "力": 1986, "劝": 1987, "办": 1988, "功": 1989, "加": 1990, "务": 1991, "劢": 1992, "劣": 1993, "动": 1994, "助": 1995, "努": 1996, "劫": 1997, "劭": 1998, "励": 1999, "劲": 2000, "劳": 2001, "劵": 2002, "劾": 2003, "势": 2004, "勁": 2005, "勃": 2006, "勅": 2007, "勇": 2008, "勉": 2009, "勋": 2010, "勐": 2011, "勑": 2012, "勒": 2013, "動": 2014, "勖": 2015, "勗": 2016, "勘": 2017, "務": 2018, "勛": 2019, "勝": 2020, "勞": 2021, "募": 2022, "勠": 2023, "勢": 2024, "勤": 2025, "勰": 2026, "勳": 2027, "勵": 2028, "勸": 2029, "勺": 2030, "勻": 2031, "勾": 2032, "勿": 2033, "匀": 2034, "包": 2035, "匆": 2036, "匈": 2037, "匍": 2038, "匏": 2039, "匐": 2040, "匕": 2041, "化": 2042, "北": 2043, "匙": 2044, "匝": 2045, "匠": 2046, "匡": 2047, "匣": 2048, "匪": 2049, "匮": 2050, "匯": 2051, "匹": 2052, "区": 2053, "医": 2054, "匾": 2055, "匿": 2056, "區": 2057, "十": 2058, "千": 2059, "卅": 2060, "升": 2061, "午": 2062, "卉": 2063, "半": 2064, "华": 2065, "协": 2066, "卑": 2067, "卒": 2068, "卓": 2069, "協": 2070, "单": 2071, "卖": 2072, "南": 2073, "博": 2074, "卜": 2075, "卞": 2076, "卟": 2077, "占": 2078, "卡": 2079, "卢": 2080, "卤": 2081, "卦": 2082, "卧": 2083, "卫": 2084, "卮": 2085, "卯": 2086, "印": 2087, "危": 2088, "即": 2089, "却": 2090, "卵": 2091, "卷": 2092, "卸": 2093, "卻": 2094, "卿": 2095, "厂": 2096, "厄": 2097, "厅": 2098, "历": 2099, "厉": 2100, "压": 2101, "厌": 2102, "厕": 2103, "厘": 2104, "厚": 2105, "厝": 2106, "原": 2107, "厢": 2108, "厥": 2109, "厦": 2110, "厨": 2111, "厩": 2112, "厭": 2113, "厮": 2114, "厯": 2115, "厲": 2116, "去": 2117, "县": 2118, "叁": 2119, "参": 2120, "參": 2121, "又": 2122, "叉": 2123, "及": 2124, "友": 2125, "双": 2126, "反": 2127, "収": 2128, "叐": 2129, "发": 2130, "叔": 2131, "取": 2132, "受": 2133, "变": 2134, "叙": 2135, "叛": 2136, "叟": 2137, "叠": 2138, "叡": 2139, "叢": 2140, "口": 2141, "古": 2142, "句": 2143, "另": 2144, "叨": 2145, "叩": 2146, "只": 2147, "叫": 2148, "召": 2149, "叭": 2150, "叮": 2151, "可": 2152, "台": 2153, "叱": 2154, "史": 2155, "右": 2156, "叵": 2157, "叶": 2158, "号": 2159, "司": 2160, "叹": 2161, "叻": 2162, "吁": 2163, "吃": 2164, "各": 2165, "合": 2166, "吉": 2167, "吊": 2168, "吋": 2169, "同": 2170, "名": 2171, "后": 2172, "吏": 2173, "吐": 2174, "向": 2175, "吒": 2176, "吓": 2177, "吕": 2178, "吖": 2179, "吗": 2180, "君": 2181, "吝": 2182, "吞": 2183, "吟": 2184, "吠": 2185, "吡": 2186, "否": 2187, "吧": 2188, "吨": 2189, "吩": 2190, "含": 2191, "听": 2192, "吭": 2193, "吮": 2194, "启": 2195, "吱": 2196, "吲": 2197, "吳": 2198, "吴": 2199, "吵": 2200, "吶": 2201, "吸": 2202, "吹": 2203, "吻": 2204, "吼": 2205, "吾": 2206, "呀": 2207, "呂": 2208, "呃": 2209, "呆": 2210, "呈": 2211, "告": 2212, "呋": 2213, "呎": 2214, "呐": 2215, "呕": 2216, "呗": 2217, "员": 2218, "呛": 2219, "呜": 2220, "呢": 2221, "呤": 2222, "呦": 2223, "周": 2224, "呱": 2225, "味": 2226, "呵": 2227, "呻": 2228, "呼": 2229, "命": 2230, "咀": 2231, "咁": 2232, "咄": 2233, "咆": 2234, "咋": 2235, "和": 2236, "咎": 2237, "咏": 2238, "咐": 2239, "咒": 2240, "咔": 2241, "咕": 2242, "咖": 2243, "咙": 2244, "咚": 2245, "咝": 2246, "咤": 2247, "咨": 2248, "咪": 2249, "咫": 2250, "咬": 2251, "咯": 2252, "咱": 2253, "咲": 2254, "咳": 2255, "咸": 2256, "咽": 2257, "哀": 2258, "品": 2259, "哄": 2260, "哆": 2261, "哇": 2262, "哈": 2263, "哉": 2264, "哌": 2265, "响": 2266, "哎": 2267, "哑": 2268, "哔": 2269, "哗": 2270, "哙": 2271, "哚": 2272, "哟": 2273, "員": 2274, "哥": 2275, "哦": 2276, "哨": 2277, "哩": 2278, "哪": 2279, "哭": 2280, "哮": 2281, "哲": 2282, "哺": 2283, "哼": 2284, "唁": 2285, "唄": 2286, "唅": 2287, "唆": 2288, "唇": 2289, "唉": 2290, "唐": 2291, "唑": 2292, "唔": 2293, "唤": 2294, "唬": 2295, "售": 2296, "唯": 2297, "唱": 2298, "唸": 2299, "唾": 2300, "唿": 2301, "啃": 2302, "啄": 2303, "商": 2304, "啉": 2305, "啊": 2306, "問": 2307, "啓": 2308, "啖": 2309, "啜": 2310, "啞": 2311, "啟": 2312, "啡": 2313, "啤": 2314, "啥": 2315, "啦": 2316, "啧": 2317, "啪": 2318, "啬": 2319, "啮": 2320, "啰": 2321, "啶": 2322, "啸": 2323, "啻": 2324, "啼": 2325, "啾": 2326, "喀": 2327, "喂": 2328, "喃": 2329, "善": 2330, "喆": 2331, "喇": 2332, "喉": 2333, "喊": 2334, "喋": 2335, "喔": 2336, "喘": 2337, "喙": 2338, "喚": 2339, "喜": 2340, "喝": 2341, "喧": 2342, "喪": 2343, "喬": 2344, "單": 2345, "喵": 2346, "営": 2347, "喷": 2348, "喹": 2349, "喻": 2350, "喾": 2351, "嗅": 2352, "嗎": 2353, "嗓": 2354, "嗔": 2355, "嗜": 2356, "嗝": 2357, "嗟": 2358, "嗡": 2359, "嗣": 2360, "嗦": 2361, "嗨": 2362, "嗪": 2363, "嗯": 2364, "嗳": 2365, "嗽": 2366, "嘅": 2367, "嘆": 2368, "嘈": 2369, "嘉": 2370, "嘌": 2371, "嘎": 2372, "嘏": 2373, "嘔": 2374, "嘗": 2375, "嘘": 2376, "嘛": 2377, "嘟": 2378, "嘢": 2379, "嘧": 2380, "嘩": 2381, "嘯": 2382, "嘱": 2383, "嘲": 2384, "嘴": 2385, "嘶": 2386, "嘹": 2387, "嘻": 2388, "噁": 2389, "噌": 2390, "噎": 2391, "噜": 2392, "器": 2393, "噩": 2394, "噪": 2395, "噬": 2396, "噱": 2397, "噴": 2398, "噶": 2399, "噸": 2400, "噹": 2401, "噻": 2402, "嚇": 2403, "嚎": 2404, "嚏": 2405, "嚣": 2406, "嚨": 2407, "嚮": 2408, "嚴": 2409, "嚷": 2410, "嚼": 2411, "囊": 2412, "囍": 2413, "囑": 2414, "囚": 2415, "四": 2416, "回": 2417, "囟": 2418, "因": 2419, "团": 2420, "団": 2421, "囤": 2422, "囧": 2423, "囫": 2424, "园": 2425, "囯": 2426, "困": 2427, "囱": 2428, "図": 2429, "围": 2430, "囵": 2431, "固": 2432, "国": 2433, "图": 2434, "囿": 2435, "圃": 2436, "圆": 2437, "圈": 2438, "國": 2439, "圍": 2440, "園": 2441, "圓": 2442, "圖": 2443, "團": 2444, "圜": 2445, "土": 2446, "圣": 2447, "在": 2448, "圩": 2449, "圪": 2450, "圭": 2451, "圮": 2452, "地": 2453, "圳": 2454, "场": 2455, "圻": 2456, "圾": 2457, "址": 2458, "坂": 2459, "均": 2460, "坊": 2461, "坍": 2462, "坎": 2463, "坏": 2464, "坐": 2465, "坑": 2466, "块": 2467, "坚": 2468, "坛": 2469, "坝": 2470, "坞": 2471, "坟": 2472, "坠": 2473, "坡": 2474, "坤": 2475, "坦": 2476, "坩": 2477, "坪": 2478, "坭": 2479, "坯": 2480, "坳": 2481, "坵": 2482, "坷": 2483, "坻": 2484, "垂": 2485, "垃": 2486, "垄": 2487, "型": 2488, "垒": 2489, "垓": 2490, "垛": 2491, "垠": 2492, "垢": 2493, "垣": 2494, "垦": 2495, "垩": 2496, "垫": 2497, "垭": 2498, "垮": 2499, "垵": 2500, "埂": 2501, "埃": 2502, "埈": 2503, "埋": 2504, "城": 2505, "埔": 2506, "埕": 2507, "埗": 2508, "埙": 2509, "埚": 2510, "域": 2511, "埠": 2512, "埡": 2513, "埤": 2514, "埭": 2515, "埴": 2516, "執": 2517, "埸": 2518, "培": 2519, "基": 2520, "埼": 2521, "堀": 2522, "堂": 2523, "堃": 2524, "堅": 2525, "堆": 2526, "堇": 2527, "堊": 2528, "堑": 2529, "堕": 2530, "堡": 2531, "堤": 2532, "堪": 2533, "堯": 2534, "堰": 2535, "報": 2536, "場": 2537, "堵": 2538, "堺": 2539, "堿": 2540, "塊": 2541, "塌": 2542, "塑": 2543, "塔": 2544, "塗": 2545, "塘": 2546, "塚": 2547, "塞": 2548, "塢": 2549, "塩": 2550, "填": 2551, "塬": 2552, "塵": 2553, "塹": 2554, "塾": 2555, "墀": 2556, "境": 2557, "墅": 2558, "墉": 2559, "墊": 2560, "墒": 2561, "墓": 2562, "増": 2563, "墘": 2564, "墙": 2565, "墜": 2566, "增": 2567, "墟": 2568, "墨": 2569, "墩": 2570, "墮": 2571, "墳": 2572, "墻": 2573, "墾": 2574, "壁": 2575, "壅": 2576, "壇": 2577, "壎": 2578, "壑": 2579, "壓": 2580, "壕": 2581, "壘": 2582, "壙": 2583, "壞": 2584, "壟": 2585, "壢": 2586, "壤": 2587, "壩": 2588, "士": 2589, "壬": 2590, "壮": 2591, "壯": 2592, "声": 2593, "売": 2594, "壳": 2595, "壶": 2596, "壹": 2597, "壺": 2598, "壽": 2599, "处": 2600, "备": 2601, "変": 2602, "复": 2603, "夏": 2604, "夔": 2605, "夕": 2606, "外": 2607, "夙": 2608, "多": 2609, "夜": 2610, "够": 2611, "夠": 2612, "夢": 2613, "夤": 2614, "夥": 2615, "大": 2616, "天": 2617, "太": 2618, "夫": 2619, "夭": 2620, "央": 2621, "夯": 2622, "失": 2623, "头": 2624, "夷": 2625, "夸": 2626, "夹": 2627, "夺": 2628, "夾": 2629, "奂": 2630, "奄": 2631, "奇": 2632, "奈": 2633, "奉": 2634, "奋": 2635, "奎": 2636, "奏": 2637, "奐": 2638, "契": 2639, "奔": 2640, "奕": 2641, "奖": 2642, "套": 2643, "奘": 2644, "奚": 2645, "奠": 2646, "奢": 2647, "奥": 2648, "奧": 2649, "奪": 2650, "奬": 2651, "奭": 2652, "奮": 2653, "女": 2654, "奴": 2655, "奶": 2656, "奸": 2657, "她": 2658, "好": 2659, "如": 2660, "妃": 2661, "妄": 2662, "妆": 2663, "妇": 2664, "妈": 2665, "妊": 2666, "妍": 2667, "妒": 2668, "妓": 2669, "妖": 2670, "妙": 2671, "妝": 2672, "妞": 2673, "妣": 2674, "妤": 2675, "妥": 2676, "妨": 2677, "妮": 2678, "妲": 2679, "妳": 2680, "妹": 2681, "妻": 2682, "妾": 2683, "姆": 2684, "姉": 2685, "姊": 2686, "始": 2687, "姐": 2688, "姑": 2689, "姒": 2690, "姓": 2691, "委": 2692, "姗": 2693, "姚": 2694, "姜": 2695, "姝": 2696, "姣": 2697, "姥": 2698, "姦": 2699, "姨": 2700, "姪": 2701, "姫": 2702, "姬": 2703, "姻": 2704, "姿": 2705, "威": 2706, "娃": 2707, "娄": 2708, "娅": 2709, "娇": 2710, "娑": 2711, "娓": 2712, "娘": 2713, "娛": 2714, "娜": 2715, "娟": 2716, "娠": 2717, "娣": 2718, "娥": 2719, "娩": 2720, "娱": 2721, "娲": 2722, "娴": 2723, "娶": 2724, "娼": 2725, "婁": 2726, "婆": 2727, "婉": 2728, "婕": 2729, "婚": 2730, "婢": 2731, "婦": 2732, "婧": 2733, "婪": 2734, "婭": 2735, "婴": 2736, "婵": 2737, "婷": 2738, "婺": 2739, "婿": 2740, "媒": 2741, "媚": 2742, "媛": 2743, "媲": 2744, "媳": 2745, "媽": 2746, "媾": 2747, "嫁": 2748, "嫂": 2749, "嫉": 2750, "嫌": 2751, "嫔": 2752, "嫖": 2753, "嫘": 2754, "嫡": 2755, "嫣": 2756, "嫦": 2757, "嫩": 2758, "嫻": 2759, "嬅": 2760, "嬉": 2761, "嬌": 2762, "嬖": 2763, "嬗": 2764, "嬤": 2765, "嬪": 2766, "嬰": 2767, "嬴": 2768, "嬸": 2769, "孀": 2770, "子": 2771, "孑": 2772, "孔": 2773, "孕": 2774, "字": 2775, "存": 2776, "孙": 2777, "孚": 2778, "孛": 2779, "孜": 2780, "孝": 2781, "孟": 2782, "孢": 2783, "季": 2784, "孤": 2785, "孥": 2786, "学": 2787, "孩": 2788, "孪": 2789, "孫": 2790, "孰": 2791, "孱": 2792, "孳": 2793, "孵": 2794, "學": 2795, "孺": 2796, "孽": 2797, "孿": 2798, "宁": 2799, "它": 2800, "宅": 2801, "宇": 2802, "守": 2803, "安": 2804, "宋": 2805, "完": 2806, "宏": 2807, "宓": 2808, "宕": 2809, "宗": 2810, "官": 2811, "宙": 2812, "定": 2813, "宛": 2814, "宜": 2815, "宝": 2816, "实": 2817, "実": 2818, "宠": 2819, "审": 2820, "客": 2821, "宣": 2822, "室": 2823, "宥": 2824, "宦": 2825, "宪": 2826, "宫": 2827, "宮": 2828, "宰": 2829, "害": 2830, "宴": 2831, "宵": 2832, "家": 2833, "宸": 2834, "容": 2835, "宽": 2836, "宾": 2837, "宿": 2838, "寀": 2839, "寂": 2840, "寄": 2841, "寅": 2842, "密": 2843, "寇": 2844, "富": 2845, "寐": 2846, "寒": 2847, "寓": 2848, "寔": 2849, "寛": 2850, "寝": 2851, "寞": 2852, "察": 2853, "寡": 2854, "寢": 2855, "寤": 2856, "寥": 2857, "實": 2858, "寧": 2859, "寨": 2860, "審": 2861, "寫": 2862, "寬": 2863, "寮": 2864, "寰": 2865, "寵": 2866, "寶": 2867, "寸": 2868, "对": 2869, "寺": 2870, "寻": 2871, "导": 2872, "対": 2873, "寿": 2874, "封": 2875, "専": 2876, "射": 2877, "将": 2878, "將": 2879, "專": 2880, "尉": 2881, "尊": 2882, "尋": 2883, "對": 2884, "導": 2885, "小": 2886, "少": 2887, "尔": 2888, "尕": 2889, "尖": 2890, "尘": 2891, "尚": 2892, "尝": 2893, "尤": 2894, "尧": 2895, "尬": 2896, "就": 2897, "尴": 2898, "尷": 2899, "尸": 2900, "尹": 2901, "尺": 2902, "尻": 2903, "尼": 2904, "尽": 2905, "尾": 2906, "尿": 2907, "局": 2908, "屁": 2909, "层": 2910, "居": 2911, "屆": 2912, "屈": 2913, "屉": 2914, "届": 2915, "屋": 2916, "屍": 2917, "屎": 2918, "屏": 2919, "屑": 2920, "展": 2921, "属": 2922, "屠": 2923, "屡": 2924, "屢": 2925, "層": 2926, "履": 2927, "屬": 2928, "屯": 2929, "山": 2930, "屹": 2931, "屿": 2932, "岀": 2933, "岁": 2934, "岂": 2935, "岌": 2936, "岐": 2937, "岑": 2938, "岔": 2939, "岖": 2940, "岗": 2941, "岘": 2942, "岙": 2943, "岚": 2944, "岛": 2945, "岡": 2946, "岢": 2947, "岩": 2948, "岫": 2949, "岬": 2950, "岭": 2951, "岱": 2952, "岳": 2953, "岷": 2954, "岸": 2955, "岿": 2956, "峁": 2957, "峄": 2958, "峇": 2959, "峒": 2960, "峙": 2961, "峡": 2962, "峤": 2963, "峥": 2964, "峦": 2965, "峨": 2966, "峪": 2967, "峭": 2968, "峯": 2969, "峰": 2970, "峴": 2971, "島": 2972, "峻": 2973, "峽": 2974, "崁": 2975, "崃": 2976, "崇": 2977, "崎": 2978, "崐": 2979, "崑": 2980, "崔": 2981, "崖": 2982, "崗": 2983, "崙": 2984, "崛": 2985, "崧": 2986, "崩": 2987, "崭": 2988, "崴": 2989, "嵇": 2990, "嵊": 2991, "嵋": 2992, "嵌": 2993, "嵐": 2994, "嵗": 2995, "嵘": 2996, "嵩": 2997, "嵬": 2998, "嵯": 2999, "嵴": 3000, "嶂": 3001, "嶄": 3002, "嶋": 3003, "嶟": 3004, "嶷": 3005, "嶺": 3006, "嶼": 3007, "嶽": 3008, "巂": 3009, "巅": 3010, "巍": 3011, "巒": 3012, "巔": 3013, "巖": 3014, "川": 3015, "州": 3016, "巡": 3017, "巢": 3018, "工": 3019, "左": 3020, "巧": 3021, "巨": 3022, "巩": 3023, "巫": 3024, "差": 3025, "巯": 3026, "己": 3027, "已": 3028, "巳": 3029, "巴": 3030, "巷": 3031, "巻": 3032, "巽": 3033, "巾": 3034, "币": 3035, "市": 3036, "布": 3037, "帅": 3038, "帆": 3039, "师": 3040, "希": 3041, "帐": 3042, "帑": 3043, "帕": 3044, "帖": 3045, "帘": 3046, "帙": 3047, "帚": 3048, "帛": 3049, "帜": 3050, "帝": 3051, "帥": 3052, "带": 3053, "帧": 3054, "師": 3055, "席": 3056, "帮": 3057, "帯": 3058, "帰": 3059, "帳": 3060, "帶": 3061, "帷": 3062, "常": 3063, "帼": 3064, "帽": 3065, "幀": 3066, "幂": 3067, "幄": 3068, "幅": 3069, "幌": 3070, "幔": 3071, "幕": 3072, "幞": 3073, "幟": 3074, "幡": 3075, "幢": 3076, "幣": 3077, "幫": 3078, "干": 3079, "平": 3080, "年": 3081, "幵": 3082, "并": 3083, "幸": 3084, "幹": 3085, "幺": 3086, "幻": 3087, "幼": 3088, "幽": 3089, "幾": 3090, "广": 3091, "庁": 3092, "広": 3093, "庄": 3094, "庆": 3095, "庇": 3096, "床": 3097, "庋": 3098, "序": 3099, "庐": 3100, "庑": 3101, "库": 3102, "应": 3103, "底": 3104, "庖": 3105, "店": 3106, "庙": 3107, "庚": 3108, "府": 3109, "庞": 3110, "废": 3111, "庠": 3112, "度": 3113, "座": 3114, "庫": 3115, "庭": 3116, "庵": 3117, "庶": 3118, "康": 3119, "庸": 3120, "庾": 3121, "廁": 3122, "廂": 3123, "廈": 3124, "廉": 3125, "廊": 3126, "廍": 3127, "廒": 3128, "廓": 3129, "廕": 3130, "廖": 3131, "廚": 3132, "廟": 3133, "廠": 3134, "廢": 3135, "廣": 3136, "廩": 3137, "廪": 3138, "廬": 3139, "廳": 3140, "延": 3141, "廷": 3142, "建": 3143, "廿": 3144, "开": 3145, "弁": 3146, "异": 3147, "弃": 3148, "弄": 3149, "弇": 3150, "弈": 3151, "弊": 3152, "弋": 3153, "式": 3154, "弑": 3155, "弒": 3156, "弓": 3157, "弔": 3158, "引": 3159, "弗": 3160, "弘": 3161, "弛": 3162, "弟": 3163, "张": 3164, "弢": 3165, "弥": 3166, "弦": 3167, "弧": 3168, "弩": 3169, "弭": 3170, "弯": 3171, "弱": 3172, "張": 3173, "強": 3174, "弹": 3175, "强": 3176, "弼": 3177, "弾": 3178, "彈": 3179, "彌": 3180, "彎": 3181, "归": 3182, "当": 3183, "录": 3184, "彖": 3185, "彗": 3186, "彙": 3187, "彝": 3188, "形": 3189, "彤": 3190, "彥": 3191, "彦": 3192, "彧": 3193, "彩": 3194, "彪": 3195, "彬": 3196, "彭": 3197, "彰": 3198, "影": 3199, "彷": 3200, "役": 3201, "彻": 3202, "彼": 3203, "往": 3204, "征": 3205, "径": 3206, "待": 3207, "徇": 3208, "很": 3209, "徉": 3210, "徊": 3211, "律": 3212, "後": 3213, "徐": 3214, "徑": 3215, "徒": 3216, "徕": 3217, "得": 3218, "徘": 3219, "徙": 3220, "徜": 3221, "從": 3222, "御": 3223, "徨": 3224, "復": 3225, "循": 3226, "徭": 3227, "微": 3228, "徳": 3229, "徴": 3230, "徵": 3231, "德": 3232, "徹": 3233, "徽": 3234, "心": 3235, "必": 3236, "忆": 3237, "忌": 3238, "忍": 3239, "忏": 3240, "忒": 3241, "志": 3242, "忘": 3243, "忙": 3244, "忠": 3245, "忡": 3246, "忤": 3247, "忧": 3248, "快": 3249, "忱": 3250, "念": 3251, "忻": 3252, "忽": 3253, "忾": 3254, "忿": 3255, "怀": 3256, "态": 3257, "怂": 3258, "怅": 3259, "怎": 3260, "怒": 3261, "怕": 3262, "怖": 3263, "怙": 3264, "怛": 3265, "怜": 3266, "思": 3267, "怠": 3268, "怡": 3269, "急": 3270, "怦": 3271, "性": 3272, "怨": 3273, "怪": 3274, "怯": 3275, "怵": 3276, "总": 3277, "恂": 3278, "恃": 3279, "恆": 3280, "恋": 3281, "恍": 3282, "恐": 3283, "恒": 3284, "恕": 3285, "恙": 3286, "恚": 3287, "恢": 3288, "恣": 3289, "恤": 3290, "恥": 3291, "恨": 3292, "恩": 3293, "恪": 3294, "恫": 3295, "恬": 3296, "恭": 3297, "息": 3298, "恰": 3299, "恳": 3300, "恵": 3301, "恶": 3302, "恸": 3303, "恺": 3304, "恻": 3305, "恼": 3306, "恽": 3307, "恿": 3308, "悄": 3309, "悅": 3310, "悉": 3311, "悌": 3312, "悍": 3313, "悔": 3314, "悖": 3315, "悚": 3316, "悝": 3317, "悟": 3318, "悠": 3319, "患": 3320, "悦": 3321, "您": 3322, "悪": 3323, "悬": 3324, "悭": 3325, "悯": 3326, "悱": 3327, "悲": 3328, "悴": 3329, "悶": 3330, "悸": 3331, "悼": 3332, "情": 3333, "惆": 3334, "惇": 3335, "惊": 3336, "惋": 3337, "惑": 3338, "惕": 3339, "惘": 3340, "惚": 3341, "惜": 3342, "惟": 3343, "惠": 3344, "惡": 3345, "惣": 3346, "惦": 3347, "惧": 3348, "惨": 3349, "惩": 3350, "惫": 3351, "惬": 3352, "惭": 3353, "惮": 3354, "惯": 3355, "惰": 3356, "惱": 3357, "想": 3358, "惶": 3359, "惹": 3360, "惺": 3361, "愁": 3362, "愈": 3363, "愉": 3364, "愍": 3365, "意": 3366, "愕": 3367, "愚": 3368, "愛": 3369, "感": 3370, "愤": 3371, "愧": 3372, "愫": 3373, "愷": 3374, "愿": 3375, "慈": 3376, "態": 3377, "慌": 3378, "慎": 3379, "慑": 3380, "慕": 3381, "慘": 3382, "慟": 3383, "慢": 3384, "慣": 3385, "慧": 3386, "慨": 3387, "慮": 3388, "慰": 3389, "慶": 3390, "慷": 3391, "慾": 3392, "憂": 3393, "憋": 3394, "憎": 3395, "憐": 3396, "憑": 3397, "憔": 3398, "憤": 3399, "憧": 3400, "憨": 3401, "憩": 3402, "憫": 3403, "憬": 3404, "憲": 3405, "憶": 3406, "憾": 3407, "懂": 3408, "懇": 3409, "懈": 3410, "應": 3411, "懋": 3412, "懑": 3413, "懒": 3414, "懦": 3415, "懲": 3416, "懵": 3417, "懶": 3418, "懷": 3419, "懸": 3420, "懺": 3421, "懼": 3422, "懿": 3423, "戀": 3424, "戈": 3425, "戊": 3426, "戌": 3427, "戍": 3428, "戎": 3429, "戏": 3430, "成": 3431, "我": 3432, "戒": 3433, "戕": 3434, "或": 3435, "戗": 3436, "战": 3437, "戚": 3438, "戛": 3439, "戟": 3440, "戡": 3441, "戢": 3442, "戦": 3443, "截": 3444, "戮": 3445, "戰": 3446, "戲": 3447, "戳": 3448, "戴": 3449, "戶": 3450, "户": 3451, "戸": 3452, "戾": 3453, "房": 3454, "所": 3455, "扁": 3456, "扇": 3457, "扈": 3458, "扉": 3459, "手": 3460, "才": 3461, "扎": 3462, "扑": 3463, "扒": 3464, "打": 3465, "扔": 3466, "托": 3467, "扛": 3468, "扣": 3469, "扦": 3470, "执": 3471, "扩": 3472, "扪": 3473, "扫": 3474, "扬": 3475, "扭": 3476, "扮": 3477, "扯": 3478, "扰": 3479, "扳": 3480, "扶": 3481, "批": 3482, "扼": 3483, "找": 3484, "承": 3485, "技": 3486, "抄": 3487, "抉": 3488, "把": 3489, "抑": 3490, "抒": 3491, "抓": 3492, "投": 3493, "抖": 3494, "抗": 3495, "折": 3496, "抚": 3497, "抛": 3498, "抟": 3499, "抠": 3500, "抢": 3501, "护": 3502, "报": 3503, "抨": 3504, "披": 3505, "抬": 3506, "抱": 3507, "抵": 3508, "抹": 3509, "押": 3510, "抽": 3511, "拂": 3512, "担": 3513, "拆": 3514, "拇": 3515, "拈": 3516, "拉": 3517, "拋": 3518, "拌": 3519, "拍": 3520, "拎": 3521, "拐": 3522, "拒": 3523, "拓": 3524, "拔": 3525, "拖": 3526, "拗": 3527, "拘": 3528, "拙": 3529, "拚": 3530, "招": 3531, "拜": 3532, "拟": 3533, "拢": 3534, "拣": 3535, "拥": 3536, "拦": 3537, "拧": 3538, "拨": 3539, "择": 3540, "括": 3541, "拭": 3542, "拮": 3543, "拯": 3544, "拱": 3545, "拳": 3546, "拴": 3547, "拷": 3548, "拼": 3549, "拽": 3550, "拾": 3551, "拿": 3552, "持": 3553, "挂": 3554, "指": 3555, "挈": 3556, "按": 3557, "挑": 3558, "挖": 3559, "挚": 3560, "挛": 3561, "挝": 3562, "挞": 3563, "挟": 3564, "挠": 3565, "挡": 3566, "挣": 3567, "挤": 3568, "挥": 3569, "挨": 3570, "挪": 3571, "挫": 3572, "振": 3573, "挹": 3574, "挺": 3575, "挽": 3576, "挾": 3577, "捂": 3578, "捅": 3579, "捆": 3580, "捉": 3581, "捌": 3582, "捍": 3583, "捎": 3584, "捏": 3585, "捐": 3586, "捕": 3587, "捞": 3588, "损": 3589, "捡": 3590, "换": 3591, "捣": 3592, "捧": 3593, "捨": 3594, "捩": 3595, "捭": 3596, "据": 3597, "捲": 3598, "捶": 3599, "捷": 3600, "捺": 3601, "捻": 3602, "掀": 3603, "掂": 3604, "掃": 3605, "授": 3606, "掉": 3607, "掌": 3608, "掏": 3609, "掐": 3610, "排": 3611, "掖": 3612, "掘": 3613, "掙": 3614, "掛": 3615, "掟": 3616, "掠": 3617, "採": 3618, "探": 3619, "掣": 3620, "接": 3621, "控": 3622, "推": 3623, "掩": 3624, "措": 3625, "掬": 3626, "掰": 3627, "掲": 3628, "掳": 3629, "掷": 3630, "掸": 3631, "掺": 3632, "掾": 3633, "揀": 3634, "揄": 3635, "揆": 3636, "揉": 3637, "描": 3638, "提": 3639, "插": 3640, "揖": 3641, "揚": 3642, "換": 3643, "握": 3644, "揣": 3645, "揪": 3646, "揭": 3647, "揮": 3648, "援": 3649, "揽": 3650, "搀": 3651, "搁": 3652, "搂": 3653, "搅": 3654, "損": 3655, "搏": 3656, "搐": 3657, "搓": 3658, "搔": 3659, "搖": 3660, "搗": 3661, "搜": 3662, "搞": 3663, "搪": 3664, "搬": 3665, "搭": 3666, "搶": 3667, "携": 3668, "摄": 3669, "摆": 3670, "摇": 3671, "摈": 3672, "摊": 3673, "摒": 3674, "摔": 3675, "摘": 3676, "摧": 3677, "摩": 3678, "摭": 3679, "摯": 3680, "摸": 3681, "摹": 3682, "摺": 3683, "摻": 3684, "撂": 3685, "撃": 3686, "撇": 3687, "撈": 3688, "撐": 3689, "撑": 3690, "撒": 3691, "撓": 3692, "撕": 3693, "撞": 3694, "撤": 3695, "撥": 3696, "撩": 3697, "撫": 3698, "撬": 3699, "播": 3700, "撮": 3701, "撰": 3702, "撲": 3703, "撷": 3704, "撸": 3705, "撻": 3706, "撼": 3707, "撾": 3708, "撿": 3709, "擁": 3710, "擂": 3711, "擄": 3712, "擅": 3713, "擇": 3714, "擊": 3715, "擋": 3716, "操": 3717, "擎": 3718, "擒": 3719, "擔": 3720, "擘": 3721, "據": 3722, "擠": 3723, "擢": 3724, "擦": 3725, "擬": 3726, "擱": 3727, "擲": 3728, "擴": 3729, "擷": 3730, "擺": 3731, "擾": 3732, "攀": 3733, "攏": 3734, "攒": 3735, "攔": 3736, "攘": 3737, "攜": 3738, "攝": 3739, "攤": 3740, "攪": 3741, "攫": 3742, "攬": 3743, "支": 3744, "收": 3745, "攸": 3746, "改": 3747, "攻": 3748, "放": 3749, "政": 3750, "敁": 3751, "故": 3752, "效": 3753, "敌": 3754, "敍": 3755, "敏": 3756, "救": 3757, "敕": 3758, "敖": 3759, "敗": 3760, "敘": 3761, "教": 3762, "敛": 3763, "敝": 3764, "敞": 3765, "敢": 3766, "散": 3767, "敦": 3768, "敬": 3769, "数": 3770, "敲": 3771, "整": 3772, "敵": 3773, "敷": 3774, "數": 3775, "斂": 3776, "斃": 3777, "文": 3778, "斋": 3779, "斌": 3780, "斎": 3781, "斐": 3782, "斑": 3783, "斓": 3784, "斗": 3785, "料": 3786, "斛": 3787, "斜": 3788, "斟": 3789, "斡": 3790, "斤": 3791, "斥": 3792, "斧": 3793, "斩": 3794, "斫": 3795, "斬": 3796, "断": 3797, "斯": 3798, "新": 3799, "斷": 3800, "方": 3801, "於": 3802, "施": 3803, "旁": 3804, "旃": 3805, "旅": 3806, "旋": 3807, "旌": 3808, "族": 3809, "旒": 3810, "旗": 3811, "无": 3812, "既": 3813, "日": 3814, "旦": 3815, "旧": 3816, "旨": 3817, "早": 3818, "旬": 3819, "旭": 3820, "旱": 3821, "时": 3822, "旷": 3823, "旸": 3824, "旺": 3825, "旻": 3826, "旼": 3827, "昀": 3828, "昂": 3829, "昃": 3830, "昆": 3831, "昇": 3832, "昉": 3833, "昊": 3834, "昌": 3835, "明": 3836, "昏": 3837, "易": 3838, "昔": 3839, "昕": 3840, "昙": 3841, "星": 3842, "映": 3843, "春": 3844, "昧": 3845, "昨": 3846, "昭": 3847, "是": 3848, "昱": 3849, "昴": 3850, "昵": 3851, "昶": 3852, "昺": 3853, "昼": 3854, "显": 3855, "晁": 3856, "時": 3857, "晃": 3858, "晉": 3859, "晋": 3860, "晏": 3861, "晒": 3862, "晓": 3863, "晔": 3864, "晕": 3865, "晖": 3866, "晗": 3867, "晚": 3868, "晝": 3869, "晞": 3870, "晟": 3871, "晤": 3872, "晦": 3873, "晨": 3874, "晩": 3875, "普": 3876, "景": 3877, "晰": 3878, "晴": 3879, "晶": 3880, "晷": 3881, "智": 3882, "晾": 3883, "暂": 3884, "暄": 3885, "暇": 3886, "暈": 3887, "暉": 3888, "暎": 3889, "暐": 3890, "暑": 3891, "暖": 3892, "暗": 3893, "暘": 3894, "暝": 3895, "暠": 3896, "暢": 3897, "暧": 3898, "暨": 3899, "暫": 3900, "暮": 3901, "暱": 3902, "暴": 3903, "暹": 3904, "曄": 3905, "曆": 3906, "曇": 3907, "曉": 3908, "曖": 3909, "曙": 3910, "曜": 3911, "曝": 3912, "曠": 3913, "曦": 3914, "曩": 3915, "曬": 3916, "曰": 3917, "曲": 3918, "曳": 3919, "更": 3920, "書": 3921, "曹": 3922, "曼": 3923, "曾": 3924, "替": 3925, "最": 3926, "會": 3927, "月": 3928, "有": 3929, "朊": 3930, "朋": 3931, "服": 3932, "朏": 3933, "朐": 3934, "朓": 3935, "朔": 3936, "朕": 3937, "朗": 3938, "望": 3939, "朝": 3940, "期": 3941, "朦": 3942, "朧": 3943, "木": 3944, "未": 3945, "末": 3946, "本": 3947, "札": 3948, "术": 3949, "朱": 3950, "朴": 3951, "朵": 3952, "机": 3953, "朽": 3954, "杀": 3955, "杂": 3956, "权": 3957, "杆": 3958, "杈": 3959, "杉": 3960, "李": 3961, "杏": 3962, "材": 3963, "村": 3964, "杓": 3965, "杖": 3966, "杜": 3967, "杞": 3968, "束": 3969, "杠": 3970, "条": 3971, "来": 3972, "杨": 3973, "杭": 3974, "杯": 3975, "杰": 3976, "東": 3977, "杲": 3978, "杳": 3979, "杵": 3980, "杷": 3981, "松": 3982, "板": 3983, "极": 3984, "构": 3985, "枇": 3986, "枉": 3987, "枋": 3988, "析": 3989, "枕": 3990, "林": 3991, "枚": 3992, "果": 3993, "枝": 3994, "枞": 3995, "枢": 3996, "枣": 3997, "枨": 3998, "枪": 3999, "枫": 4000, "枭": 4001, "枯": 4002, "枳": 4003, "架": 4004, "枷": 4005, "枸": 4006, "柄": 4007, "柏": 4008, "某": 4009, "柑": 4010, "柒": 4011, "染": 4012, "柔": 4013, "柘": 4014, "柚": 4015, "柜": 4016, "柞": 4017, "柠": 4018, "柢": 4019, "查": 4020, "柩": 4021, "柬": 4022, "柯": 4023, "柱": 4024, "柲": 4025, "柳": 4026, "柴": 4027, "柵": 4028, "査": 4029, "柿": 4030, "栀": 4031, "栃": 4032, "栄": 4033, "栅": 4034, "标": 4035, "栈": 4036, "栉": 4037, "栋": 4038, "栎": 4039, "栏": 4040, "树": 4041, "栓": 4042, "栖": 4043, "栗": 4044, "校": 4045, "栢": 4046, "栩": 4047, "株": 4048, "栱": 4049, "样": 4050, "核": 4051, "根": 4052, "栻": 4053, "格": 4054, "栽": 4055, "栾": 4056, "桀": 4057, "桁": 4058, "桂": 4059, "桃": 4060, "桅": 4061, "框": 4062, "案": 4063, "桉": 4064, "桌": 4065, "桎": 4066, "桐": 4067, "桑": 4068, "桓": 4069, "桔": 4070, "桜": 4071, "桡": 4072, "桢": 4073, "档": 4074, "桥": 4075, "桦": 4076, "桧": 4077, "桨": 4078, "桩": 4079, "桫": 4080, "桶": 4081, "桿": 4082, "梁": 4083, "梅": 4084, "梆": 4085, "梏": 4086, "梓": 4087, "梗": 4088, "條": 4089, "梟": 4090, "梢": 4091, "梦": 4092, "梧": 4093, "梨": 4094, "梭": 4095, "梯": 4096, "械": 4097, "梳": 4098, "梵": 4099, "梶": 4100, "检": 4101, "棂": 4102, "棄": 4103, "棉": 4104, "棋": 4105, "棍": 4106, "棒": 4107, "棕": 4108, "棗": 4109, "棘": 4110, "棚": 4111, "棟": 4112, "棠": 4113, "棣": 4114, "棧": 4115, "棨": 4116, "森": 4117, "棱": 4118, "棲": 4119, "棵": 4120, "棹": 4121, "棺": 4122, "棻": 4123, "椁": 4124, "椅": 4125, "植": 4126, "椎": 4127, "椒": 4128, "椤": 4129, "椭": 4130, "椰": 4131, "椹": 4132, "椽": 4133, "椿": 4134, "楂": 4135, "楊": 4136, "楓": 4137, "楔": 4138, "楚": 4139, "楝": 4140, "楞": 4141, "楠": 4142, "楣": 4143, "楦": 4144, "楨": 4145, "楫": 4146, "業": 4147, "極": 4148, "楷": 4149, "楸": 4150, "楹": 4151, "楼": 4152, "楽": 4153, "概": 4154, "榄": 4155, "榆": 4156, "榈": 4157, "榉": 4158, "榊": 4159, "榎": 4160, "榔": 4161, "榕": 4162, "榘": 4163, "榛": 4164, "榜": 4165, "榦": 4166, "榧": 4167, "榨": 4168, "榫": 4169, "榭": 4170, "榮": 4171, "榴": 4172, "榷": 4173, "榻": 4174, "槁": 4175, "槃": 4176, "構": 4177, "槌": 4178, "槍": 4179, "槎": 4180, "槐": 4181, "槓": 4182, "様": 4183, "槛": 4184, "槟": 4185, "槭": 4186, "槳": 4187, "槻": 4188, "槽": 4189, "槿": 4190, "樁": 4191, "樂": 4192, "樊": 4193, "樋": 4194, "樑": 4195, "樓": 4196, "樗": 4197, "標": 4198, "樞": 4199, "樟": 4200, "模": 4201, "樣": 4202, "権": 4203, "横": 4204, "樱": 4205, "樵": 4206, "樸": 4207, "樹": 4208, "樺": 4209, "樽": 4210, "樾": 4211, "橄": 4212, "橇": 4213, "橋": 4214, "橘": 4215, "橙": 4216, "機": 4217, "橡": 4218, "橢": 4219, "橥": 4220, "橦": 4221, "橫": 4222, "橱": 4223, "橼": 4224, "檀": 4225, "檄": 4226, "檎": 4227, "檐": 4228, "檔": 4229, "檗": 4230, "檜": 4231, "檢": 4232, "檩": 4233, "檬": 4234, "檯": 4235, "檳": 4236, "檸": 4237, "檻": 4238, "櫂": 4239, "櫃": 4240, "櫚": 4241, "櫛": 4242, "櫸": 4243, "櫻": 4244, "欄": 4245, "權": 4246, "欒": 4247, "欖": 4248, "欠": 4249, "次": 4250, "欢": 4251, "欣": 4252, "欤": 4253, "欧": 4254, "欲": 4255, "欺": 4256, "欽": 4257, "款": 4258, "歆": 4259, "歇": 4260, "歉": 4261, "歌": 4262, "歎": 4263, "歐": 4264, "歙": 4265, "歡": 4266, "止": 4267, "正": 4268, "此": 4269, "步": 4270, "武": 4271, "歧": 4272, "歩": 4273, "歪": 4274, "歲": 4275, "歳": 4276, "歴": 4277, "歷": 4278, "歸": 4279, "歹": 4280, "死": 4281, "歼": 4282, "歿": 4283, "殁": 4284, "殃": 4285, "殆": 4286, "殇": 4287, "殉": 4288, "殊": 4289, "残": 4290, "殓": 4291, "殖": 4292, "殘": 4293, "殚": 4294, "殡": 4295, "殤": 4296, "殭": 4297, "殯": 4298, "殲": 4299, "殴": 4300, "段": 4301, "殷": 4302, "殺": 4303, "殼": 4304, "殿": 4305, "毀": 4306, "毁": 4307, "毂": 4308, "毅": 4309, "毆": 4310, "毋": 4311, "毌": 4312, "母": 4313, "毎": 4314, "每": 4315, "毒": 4316, "毓": 4317, "比": 4318, "毕": 4319, "毖": 4320, "毗": 4321, "毘": 4322, "毙": 4323, "毛": 4324, "毡": 4325, "毫": 4326, "毯": 4327, "毽": 4328, "氏": 4329, "氐": 4330, "民": 4331, "氓": 4332, "气": 4333, "氖": 4334, "気": 4335, "氘": 4336, "氙": 4337, "氚": 4338, "氛": 4339, "氟": 4340, "氡": 4341, "氢": 4342, "氣": 4343, "氦": 4344, "氧": 4345, "氨": 4346, "氩": 4347, "氪": 4348, "氫": 4349, "氮": 4350, "氯": 4351, "氰": 4352, "水": 4353, "永": 4354, "氹": 4355, "氾": 4356, "汀": 4357, "汁": 4358, "求": 4359, "汇": 4360, "汉": 4361, "汊": 4362, "汎": 4363, "汐": 4364, "汕": 4365, "汗": 4366, "汙": 4367, "汛": 4368, "汜": 4369, "汝": 4370, "汞": 4371, "江": 4372, "池": 4373, "污": 4374, "汤": 4375, "汨": 4376, "汪": 4377, "汰": 4378, "汲": 4379, "汴": 4380, "汶": 4381, "汹": 4382, "決": 4383, "汽": 4384, "汾": 4385, "沁": 4386, "沂": 4387, "沃": 4388, "沅": 4389, "沆": 4390, "沈": 4391, "沉": 4392, "沌": 4393, "沐": 4394, "沒": 4395, "沓": 4396, "沔": 4397, "沖": 4398, "沙": 4399, "沛": 4400, "沟": 4401, "没": 4402, "沢": 4403, "沣": 4404, "沤": 4405, "沥": 4406, "沦": 4407, "沧": 4408, "沪": 4409, "沫": 4410, "沭": 4411, "沮": 4412, "沱": 4413, "河": 4414, "沸": 4415, "油": 4416, "治": 4417, "沼": 4418, "沽": 4419, "沾": 4420, "沿": 4421, "況": 4422, "泃": 4423, "泄": 4424, "泉": 4425, "泊": 4426, "泌": 4427, "泓": 4428, "法": 4429, "泗": 4430, "泛": 4431, "泞": 4432, "泠": 4433, "泡": 4434, "波": 4435, "泣": 4436, "泥": 4437, "注": 4438, "泪": 4439, "泮": 4440, "泯": 4441, "泰": 4442, "泱": 4443, "泳": 4444, "泵": 4445, "泸": 4446, "泺": 4447, "泻": 4448, "泼": 4449, "泽": 4450, "泾": 4451, "洁": 4452, "洄": 4453, "洋": 4454, "洎": 4455, "洒": 4456, "洗": 4457, "洙": 4458, "洛": 4459, "洞": 4460, "津": 4461, "洧": 4462, "洩": 4463, "洪": 4464, "洮": 4465, "洱": 4466, "洲": 4467, "洵": 4468, "洶": 4469, "洹": 4470, "洺": 4471, "活": 4472, "洼": 4473, "洽": 4474, "派": 4475, "流": 4476, "浅": 4477, "浆": 4478, "浇": 4479, "浊": 4480, "测": 4481, "济": 4482, "浏": 4483, "浑": 4484, "浒": 4485, "浓": 4486, "浔": 4487, "浙": 4488, "浚": 4489, "浜": 4490, "浣": 4491, "浦": 4492, "浩": 4493, "浪": 4494, "浮": 4495, "浴": 4496, "海": 4497, "浸": 4498, "涂": 4499, "涅": 4500, "涇": 4501, "消": 4502, "涉": 4503, "涌": 4504, "涎": 4505, "涑": 4506, "涓": 4507, "涔": 4508, "涕": 4509, "涛": 4510, "涝": 4511, "涟": 4512, "涡": 4513, "涣": 4514, "涤": 4515, "润": 4516, "涧": 4517, "涨": 4518, "涩": 4519, "涪": 4520, "涮": 4521, "涯": 4522, "液": 4523, "涵": 4524, "涸": 4525, "涼": 4526, "涿": 4527, "淀": 4528, "淄": 4529, "淅": 4530, "淆": 4531, "淇": 4532, "淋": 4533, "淌": 4534, "淑": 4535, "淖": 4536, "淘": 4537, "淙": 4538, "淚": 4539, "淝": 4540, "淞": 4541, "淡": 4542, "淤": 4543, "淦": 4544, "淨": 4545, "淩": 4546, "淪": 4547, "淫": 4548, "淬": 4549, "淮": 4550, "深": 4551, "淳": 4552, "淵": 4553, "混": 4554, "淸": 4555, "淹": 4556, "淺": 4557, "添": 4558, "淼": 4559, "清": 4560, "済": 4561, "渊": 4562, "渍": 4563, "渎": 4564, "渐": 4565, "渔": 4566, "渗": 4567, "渚": 4568, "減": 4569, "渝": 4570, "渠": 4571, "渡": 4572, "渣": 4573, "渤": 4574, "渥": 4575, "渦": 4576, "温": 4577, "測": 4578, "渭": 4579, "港": 4580, "渲": 4581, "渴": 4582, "游": 4583, "渺": 4584, "渾": 4585, "湃": 4586, "湄": 4587, "湊": 4588, "湍": 4589, "湎": 4590, "湖": 4591, "湘": 4592, "湛": 4593, "湟": 4594, "湧": 4595, "湮": 4596, "湯": 4597, "湳": 4598, "湾": 4599, "湿": 4600, "満": 4601, "溃": 4602, "溅": 4603, "溉": 4604, "溏": 4605, "源": 4606, "準": 4607, "溜": 4608, "溝": 4609, "溟": 4610, "溢": 4611, "溥": 4612, "溧": 4613, "溪": 4614, "溫": 4615, "溯": 4616, "溱": 4617, "溴": 4618, "溶": 4619, "溺": 4620, "滁": 4621, "滂": 4622, "滄": 4623, "滅": 4624, "滇": 4625, "滋": 4626, "滌": 4627, "滑": 4628, "滓": 4629, "滔": 4630, "滕": 4631, "滗": 4632, "滘": 4633, "滙": 4634, "滚": 4635, "滞": 4636, "满": 4637, "滤": 4638, "滥": 4639, "滦": 4640, "滨": 4641, "滩": 4642, "滬": 4643, "滯": 4644, "滲": 4645, "滴": 4646, "滸": 4647, "滾": 4648, "滿": 4649, "漁": 4650, "漂": 4651, "漆": 4652, "漏": 4653, "漓": 4654, "演": 4655, "漕": 4656, "漠": 4657, "漢": 4658, "漣": 4659, "漩": 4660, "漪": 4661, "漫": 4662, "漬": 4663, "漯": 4664, "漱": 4665, "漲": 4666, "漳": 4667, "漸": 4668, "漾": 4669, "漿": 4670, "潁": 4671, "潇": 4672, "潍": 4673, "潑": 4674, "潔": 4675, "潘": 4676, "潛": 4677, "潜": 4678, "潞": 4679, "潟": 4680, "潢": 4681, "潤": 4682, "潦": 4683, "潭": 4684, "潮": 4685, "潯": 4686, "潰": 4687, "潴": 4688, "潺": 4689, "潼": 4690, "澀": 4691, "澂": 4692, "澄": 4693, "澈": 4694, "澍": 4695, "澎": 4696, "澗": 4697, "澜": 4698, "澡": 4699, "澤": 4700, "澧": 4701, "澪": 4702, "澱": 4703, "澳": 4704, "澶": 4705, "澹": 4706, "激": 4707, "濁": 4708, "濂": 4709, "濃": 4710, "濉": 4711, "濑": 4712, "濒": 4713, "濕": 4714, "濛": 4715, "濞": 4716, "濟": 4717, "濠": 4718, "濡": 4719, "濤": 4720, "濫": 4721, "濬": 4722, "濮": 4723, "濯": 4724, "濱": 4725, "濾": 4726, "瀅": 4727, "瀉": 4728, "瀋": 4729, "瀏": 4730, "瀑": 4731, "瀕": 4732, "瀘": 4733, "瀚": 4734, "瀛": 4735, "瀝": 4736, "瀟": 4737, "瀧": 4738, "瀨": 4739, "瀬": 4740, "瀾": 4741, "灌": 4742, "灏": 4743, "灑": 4744, "灘": 4745, "灝": 4746, "灞": 4747, "灣": 4748, "火": 4749, "灭": 4750, "灯": 4751, "灰": 4752, "灵": 4753, "灶": 4754, "灸": 4755, "灼": 4756, "災": 4757, "灾": 4758, "灿": 4759, "炀": 4760, "炅": 4761, "炉": 4762, "炊": 4763, "炎": 4764, "炒": 4765, "炔": 4766, "炕": 4767, "炖": 4768, "炘": 4769, "炙": 4770, "炜": 4771, "炤": 4772, "炫": 4773, "炬": 4774, "炭": 4775, "炮": 4776, "炯": 4777, "炳": 4778, "炸": 4779, "点": 4780, "為": 4781, "炼": 4782, "炽": 4783, "烁": 4784, "烂": 4785, "烃": 4786, "烈": 4787, "烏": 4788, "烔": 4789, "烘": 4790, "烙": 4791, "烛": 4792, "烟": 4793, "烤": 4794, "烦": 4795, "烧": 4796, "烨": 4797, "烩": 4798, "烫": 4799, "烬": 4800, "热": 4801, "烯": 4802, "烷": 4803, "烹": 4804, "烽": 4805, "焉": 4806, "焊": 4807, "焓": 4808, "焕": 4809, "焖": 4810, "焘": 4811, "焙": 4812, "焚": 4813, "焜": 4814, "無": 4815, "焦": 4816, "焯": 4817, "焰": 4818, "焱": 4819, "然": 4820, "煅": 4821, "煇": 4822, "煉": 4823, "煊": 4824, "煌": 4825, "煎": 4826, "煒": 4827, "煙": 4828, "煜": 4829, "煞": 4830, "煤": 4831, "煥": 4832, "煦": 4833, "照": 4834, "煩": 4835, "煬": 4836, "煮": 4837, "煲": 4838, "煳": 4839, "煴": 4840, "煽": 4841, "熄": 4842, "熊": 4843, "熏": 4844, "熒": 4845, "熔": 4846, "熙": 4847, "熟": 4848, "熠": 4849, "熨": 4850, "熬": 4851, "熱": 4852, "熵": 4853, "熹": 4854, "熾": 4855, "燁": 4856, "燃": 4857, "燈": 4858, "燉": 4859, "燊": 4860, "燎": 4861, "燒": 4862, "燔": 4863, "燕": 4864, "燙": 4865, "營": 4866, "燥": 4867, "燦": 4868, "燧": 4869, "燭": 4870, "燮": 4871, "燹": 4872, "燾": 4873, "爆": 4874, "爐": 4875, "爛": 4876, "爨": 4877, "爪": 4878, "爬": 4879, "爭": 4880, "爰": 4881, "爱": 4882, "爲": 4883, "爵": 4884, "父": 4885, "爷": 4886, "爸": 4887, "爹": 4888, "爺": 4889, "爻": 4890, "爽": 4891, "爾": 4892, "牂": 4893, "牆": 4894, "片": 4895, "版": 4896, "牌": 4897, "牍": 4898, "牒": 4899, "牙": 4900, "牛": 4901, "牝": 4902, "牟": 4903, "牠": 4904, "牡": 4905, "牢": 4906, "牦": 4907, "牧": 4908, "物": 4909, "牲": 4910, "牵": 4911, "特": 4912, "牺": 4913, "牽": 4914, "牾": 4915, "犀": 4916, "犁": 4917, "犊": 4918, "犍": 4919, "犒": 4920, "犛": 4921, "犧": 4922, "犬": 4923, "犯": 4924, "状": 4925, "犷": 4926, "犹": 4927, "狀": 4928, "狂": 4929, "狄": 4930, "狈": 4931, "狐": 4932, "狗": 4933, "狙": 4934, "狞": 4935, "狠": 4936, "狡": 4937, "狨": 4938, "狩": 4939, "独": 4940, "狭": 4941, "狮": 4942, "狰": 4943, "狱": 4944, "狷": 4945, "狸": 4946, "狹": 4947, "狼": 4948, "猎": 4949, "猕": 4950, "猖": 4951, "猗": 4952, "猛": 4953, "猜": 4954, "猝": 4955, "猥": 4956, "猩": 4957, "猪": 4958, "猫": 4959, "猬": 4960, "献": 4961, "猴": 4962, "猶": 4963, "猷": 4964, "猾": 4965, "猿": 4966, "獄": 4967, "獅": 4968, "獎": 4969, "獐": 4970, "獗": 4971, "獠": 4972, "獣": 4973, "獨": 4974, "獭": 4975, "獲": 4976, "獴": 4977, "獵": 4978, "獸": 4979, "獺": 4980, "獻": 4981, "獾": 4982, "玄": 4983, "率": 4984, "玉": 4985, "王": 4986, "玎": 4987, "玑": 4988, "玕": 4989, "玖": 4990, "玘": 4991, "玛": 4992, "玟": 4993, "玠": 4994, "玥": 4995, "玦": 4996, "玩": 4997, "玫": 4998, "玮": 4999, "环": 5000, "现": 5001, "玲": 5002, "玷": 5003, "玺": 5004, "玻": 5005, "珀": 5006, "珂": 5007, "珅": 5008, "珈": 5009, "珉": 5010, "珊": 5011, "珍": 5012, "珏": 5013, "珑": 5014, "珙": 5015, "珞": 5016, "珠": 5017, "珣": 5018, "珥": 5019, "珩": 5020, "珪": 5021, "班": 5022, "珮": 5023, "珲": 5024, "珺": 5025, "現": 5026, "球": 5027, "琅": 5028, "理": 5029, "琇": 5030, "琉": 5031, "琊": 5032, "琏": 5033, "琐": 5034, "琚": 5035, "琛": 5036, "琢": 5037, "琥": 5038, "琦": 5039, "琨": 5040, "琪": 5041, "琫": 5042, "琬": 5043, "琮": 5044, "琰": 5045, "琳": 5046, "琴": 5047, "琵": 5048, "琶": 5049, "琼": 5050, "瑀": 5051, "瑄": 5052, "瑋": 5053, "瑕": 5054, "瑗": 5055, "瑙": 5056, "瑚": 5057, "瑛": 5058, "瑜": 5059, "瑞": 5060, "瑟": 5061, "瑠": 5062, "瑣": 5063, "瑤": 5064, "瑩": 5065, "瑪": 5066, "瑭": 5067, "瑯": 5068, "瑰": 5069, "瑶": 5070, "瑷": 5071, "瑾": 5072, "璀": 5073, "璁": 5074, "璃": 5075, "璇": 5076, "璉": 5077, "璋": 5078, "璎": 5079, "璐": 5080, "璘": 5081, "璜": 5082, "璝": 5083, "璞": 5084, "璟": 5085, "璠": 5086, "璧": 5087, "璨": 5088, "璩": 5089, "環": 5090, "璽": 5091, "璿": 5092, "瓊": 5093, "瓏": 5094, "瓒": 5095, "瓔": 5096, "瓘": 5097, "瓚": 5098, "瓜": 5099, "瓠": 5100, "瓢": 5101, "瓣": 5102, "瓦": 5103, "瓮": 5104, "瓯": 5105, "瓴": 5106, "瓶": 5107, "瓷": 5108, "甄": 5109, "甑": 5110, "甕": 5111, "甘": 5112, "甙": 5113, "甚": 5114, "甜": 5115, "生": 5116, "產": 5117, "産": 5118, "甥": 5119, "甦": 5120, "用": 5121, "甩": 5122, "甫": 5123, "甬": 5124, "甯": 5125, "田": 5126, "由": 5127, "甲": 5128, "申": 5129, "电": 5130, "男": 5131, "甸": 5132, "町": 5133, "画": 5134, "甾": 5135, "畅": 5136, "畈": 5137, "畋": 5138, "界": 5139, "畏": 5140, "畑": 5141, "畔": 5142, "留": 5143, "畜": 5144, "畝": 5145, "畠": 5146, "畢": 5147, "畤": 5148, "略": 5149, "畦": 5150, "番": 5151, "畫": 5152, "異": 5153, "畲": 5154, "畴": 5155, "當": 5156, "畸": 5157, "畹": 5158, "畿": 5159, "疆": 5160, "疇": 5161, "疊": 5162, "疏": 5163, "疑": 5164, "疗": 5165, "疙": 5166, "疚": 5167, "疝": 5168, "疟": 5169, "疡": 5170, "疣": 5171, "疤": 5172, "疥": 5173, "疫": 5174, "疬": 5175, "疮": 5176, "疯": 5177, "疱": 5178, "疲": 5179, "疳": 5180, "疴": 5181, "疵": 5182, "疸": 5183, "疹": 5184, "疼": 5185, "疽": 5186, "疾": 5187, "痂": 5188, "病": 5189, "症": 5190, "痈": 5191, "痉": 5192, "痊": 5193, "痍": 5194, "痒": 5195, "痔": 5196, "痕": 5197, "痘": 5198, "痛": 5199, "痞": 5200, "痢": 5201, "痣": 5202, "痤": 5203, "痪": 5204, "痫": 5205, "痰": 5206, "痴": 5207, "痹": 5208, "痼": 5209, "痿": 5210, "瘀": 5211, "瘁": 5212, "瘋": 5213, "瘓": 5214, "瘕": 5215, "瘘": 5216, "瘙": 5217, "瘜": 5218, "瘟": 5219, "瘠": 5220, "瘡": 5221, "瘢": 5222, "瘤": 5223, "瘦": 5224, "瘩": 5225, "瘪": 5226, "瘫": 5227, "瘰": 5228, "瘴": 5229, "瘾": 5230, "療": 5231, "癆": 5232, "癌": 5233, "癒": 5234, "癔": 5235, "癖": 5236, "癜": 5237, "癡": 5238, "癢": 5239, "癣": 5240, "癥": 5241, "癫": 5242, "癮": 5243, "癱": 5244, "癲": 5245, "癸": 5246, "発": 5247, "登": 5248, "發": 5249, "白": 5250, "百": 5251, "癿": 5252, "皂": 5253, "的": 5254, "皆": 5255, "皇": 5256, "皈": 5257, "皋": 5258, "皎": 5259, "皓": 5260, "皖": 5261, "皙": 5262, "皞": 5263, "皮": 5264, "皱": 5265, "皴": 5266, "皺": 5267, "皿": 5268, "盂": 5269, "盃": 5270, "盆": 5271, "盈": 5272, "益": 5273, "盎": 5274, "盏": 5275, "盐": 5276, "监": 5277, "盒": 5278, "盔": 5279, "盖": 5280, "盗": 5281, "盘": 5282, "盛": 5283, "盜": 5284, "盟": 5285, "盡": 5286, "監": 5287, "盤": 5288, "盥": 5289, "盧": 5290, "盪": 5291, "目": 5292, "盯": 5293, "盱": 5294, "盲": 5295, "直": 5296, "相": 5297, "盼": 5298, "盾": 5299, "省": 5300, "眈": 5301, "眉": 5302, "看": 5303, "県": 5304, "眞": 5305, "真": 5306, "眠": 5307, "眨": 5308, "眩": 5309, "眶": 5310, "眷": 5311, "眸": 5312, "眺": 5313, "眼": 5314, "眾": 5315, "着": 5316, "睁": 5317, "睐": 5318, "睑": 5319, "睛": 5320, "睜": 5321, "睞": 5322, "睡": 5323, "睢": 5324, "督": 5325, "睦": 5326, "睫": 5327, "睬": 5328, "睹": 5329, "睺": 5330, "睽": 5331, "睾": 5332, "睿": 5333, "瞄": 5334, "瞎": 5335, "瞒": 5336, "瞞": 5337, "瞥": 5338, "瞧": 5339, "瞩": 5340, "瞪": 5341, "瞬": 5342, "瞭": 5343, "瞰": 5344, "瞳": 5345, "瞻": 5346, "瞽": 5347, "瞿": 5348, "矗": 5349, "矚": 5350, "矛": 5351, "矜": 5352, "矢": 5353, "矣": 5354, "知": 5355, "矩": 5356, "矫": 5357, "短": 5358, "矮": 5359, "矯": 5360, "石": 5361, "矶": 5362, "矸": 5363, "矽": 5364, "矾": 5365, "矿": 5366, "码": 5367, "砂": 5368, "砌": 5369, "砍": 5370, "研": 5371, "砖": 5372, "砚": 5373, "砜": 5374, "砝": 5375, "砟": 5376, "砣": 5377, "砥": 5378, "砦": 5379, "砧": 5380, "砭": 5381, "砲": 5382, "破": 5383, "砵": 5384, "砷": 5385, "砸": 5386, "砺": 5387, "砻": 5388, "砼": 5389, "砾": 5390, "础": 5391, "硅": 5392, "硏": 5393, "硐": 5394, "硒": 5395, "硕": 5396, "硝": 5397, "硤": 5398, "硫": 5399, "硬": 5400, "确": 5401, "硷": 5402, "硼": 5403, "碁": 5404, "碇": 5405, "碉": 5406, "碌": 5407, "碍": 5408, "碎": 5409, "碑": 5410, "碓": 5411, "碗": 5412, "碘": 5413, "碚": 5414, "碛": 5415, "碟": 5416, "碣": 5417, "碧": 5418, "碩": 5419, "碰": 5420, "碱": 5421, "碲": 5422, "碳": 5423, "確": 5424, "碼": 5425, "碾": 5426, "磁": 5427, "磅": 5428, "磊": 5429, "磋": 5430, "磐": 5431, "磕": 5432, "磚": 5433, "磡": 5434, "磨": 5435, "磬": 5436, "磯": 5437, "磴": 5438, "磷": 5439, "磺": 5440, "礁": 5441, "礎": 5442, "礙": 5443, "礦": 5444, "礫": 5445, "礴": 5446, "示": 5447, "礼": 5448, "社": 5449, "祀": 5450, "祁": 5451, "祂": 5452, "祇": 5453, "祈": 5454, "祉": 5455, "祎": 5456, "祐": 5457, "祕": 5458, "祖": 5459, "祗": 5460, "祚": 5461, "祛": 5462, "祜": 5463, "祝": 5464, "神": 5465, "祟": 5466, "祠": 5467, "祢": 5468, "祥": 5469, "票": 5470, "祭": 5471, "祯": 5472, "祷": 5473, "祸": 5474, "祺": 5475, "祿": 5476, "禀": 5477, "禁": 5478, "禄": 5479, "禅": 5480, "禍": 5481, "禎": 5482, "福": 5483, "禕": 5484, "禦": 5485, "禧": 5486, "禪": 5487, "禮": 5488, "禱": 5489, "禳": 5490, "禹": 5491, "禺": 5492, "离": 5493, "禽": 5494, "禾": 5495, "禿": 5496, "秀": 5497, "私": 5498, "秃": 5499, "秆": 5500, "秉": 5501, "秋": 5502, "种": 5503, "科": 5504, "秒": 5505, "秘": 5506, "租": 5507, "秣": 5508, "秤": 5509, "秦": 5510, "秧": 5511, "秩": 5512, "秭": 5513, "积": 5514, "称": 5515, "秸": 5516, "移": 5517, "秽": 5518, "稀": 5519, "稅": 5520, "程": 5521, "稍": 5522, "税": 5523, "稔": 5524, "稗": 5525, "稚": 5526, "稜": 5527, "稞": 5528, "稟": 5529, "稠": 5530, "稣": 5531, "種": 5532, "稱": 5533, "稲": 5534, "稳": 5535, "稷": 5536, "稹": 5537, "稻": 5538, "稼": 5539, "稽": 5540, "稿": 5541, "穀": 5542, "穂": 5543, "穆": 5544, "穌": 5545, "積": 5546, "穎": 5547, "穑": 5548, "穗": 5549, "穩": 5550, "穫": 5551, "穰": 5552, "穴": 5553, "究": 5554, "穷": 5555, "穹": 5556, "空": 5557, "穿": 5558, "突": 5559, "窃": 5560, "窄": 5561, "窈": 5562, "窋": 5563, "窍": 5564, "窑": 5565, "窒": 5566, "窕": 5567, "窖": 5568, "窗": 5569, "窘": 5570, "窜": 5571, "窝": 5572, "窟": 5573, "窠": 5574, "窥": 5575, "窦": 5576, "窩": 5577, "窪": 5578, "窮": 5579, "窯": 5580, "窺": 5581, "窿": 5582, "竄": 5583, "竇": 5584, "竊": 5585, "立": 5586, "竑": 5587, "竖": 5588, "站": 5589, "竜": 5590, "竞": 5591, "竟": 5592, "章": 5593, "竣": 5594, "童": 5595, "竭": 5596, "端": 5597, "競": 5598, "竹": 5599, "竺": 5600, "竽": 5601, "竿": 5602, "笃": 5603, "笄": 5604, "笆": 5605, "笈": 5606, "笋": 5607, "笏": 5608, "笑": 5609, "笔": 5610, "笙": 5611, "笛": 5612, "笞": 5613, "笠": 5614, "笥": 5615, "符": 5616, "笨": 5617, "第": 5618, "笳": 5619, "笹": 5620, "笺": 5621, "笼": 5622, "筆": 5623, "等": 5624, "筋": 5625, "筌": 5626, "筍": 5627, "筏": 5628, "筐": 5629, "筑": 5630, "筒": 5631, "答": 5632, "策": 5633, "筚": 5634, "筛": 5635, "筝": 5636, "筠": 5637, "筦": 5638, "筮": 5639, "筱": 5640, "筵": 5641, "筷": 5642, "筹": 5643, "签": 5644, "简": 5645, "箍": 5646, "箐": 5647, "箔": 5648, "箕": 5649, "算": 5650, "箝": 5651, "管": 5652, "箫": 5653, "箭": 5654, "箱": 5655, "箴": 5656, "箸": 5657, "節": 5658, "篁": 5659, "範": 5660, "篆": 5661, "篇": 5662, "築": 5663, "篑": 5664, "篓": 5665, "篠": 5666, "篡": 5667, "篤": 5668, "篩": 5669, "篪": 5670, "篮": 5671, "篱": 5672, "篷": 5673, "簇": 5674, "簋": 5675, "簠": 5676, "簡": 5677, "簧": 5678, "簪": 5679, "簷": 5680, "簸": 5681, "簽": 5682, "簾": 5683, "簿": 5684, "籀": 5685, "籁": 5686, "籃": 5687, "籌": 5688, "籍": 5689, "籠": 5690, "籤": 5691, "籬": 5692, "籲": 5693, "米": 5694, "籴": 5695, "类": 5696, "籼": 5697, "籽": 5698, "粉": 5699, "粑": 5700, "粒": 5701, "粕": 5702, "粗": 5703, "粘": 5704, "粟": 5705, "粤": 5706, "粥": 5707, "粪": 5708, "粮": 5709, "粱": 5710, "粲": 5711, "粳": 5712, "粵": 5713, "粹": 5714, "粽": 5715, "精": 5716, "粿": 5717, "糅": 5718, "糊": 5719, "糕": 5720, "糖": 5721, "糙": 5722, "糜": 5723, "糞": 5724, "糟": 5725, "糠": 5726, "糧": 5727, "糯": 5728, "糰": 5729, "糸": 5730, "系": 5731, "糾": 5732, "紀": 5733, "約": 5734, "紅": 5735, "紊": 5736, "紋": 5737, "納": 5738, "紐": 5739, "紓": 5740, "純": 5741, "紗": 5742, "紘": 5743, "紙": 5744, "級": 5745, "紛": 5746, "素": 5747, "紡": 5748, "索": 5749, "紧": 5750, "紫": 5751, "紮": 5752, "累": 5753, "細": 5754, "紳": 5755, "紹": 5756, "終": 5757, "組": 5758, "経": 5759, "結": 5760, "絕": 5761, "絞": 5762, "絡": 5763, "絢": 5764, "給": 5765, "絨": 5766, "絮": 5767, "統": 5768, "絲": 5769, "絳": 5770, "絵": 5771, "絶": 5772, "絹": 5773, "綁": 5774, "綆": 5775, "綉": 5776, "綏": 5777, "經": 5778, "続": 5779, "綜": 5780, "綝": 5781, "綠": 5782, "綢": 5783, "綦": 5784, "綫": 5785, "綬": 5786, "維": 5787, "綮": 5788, "綱": 5789, "網": 5790, "綴": 5791, "綵": 5792, "綸": 5793, "綺": 5794, "綽": 5795, "綾": 5796, "綿": 5797, "緊": 5798, "緋": 5799, "総": 5800, "緑": 5801, "緒": 5802, "線": 5803, "緝": 5804, "緞": 5805, "締": 5806, "緣": 5807, "編": 5808, "緩": 5809, "緬": 5810, "緯": 5811, "練": 5812, "緹": 5813, "緻": 5814, "縄": 5815, "縉": 5816, "縛": 5817, "縣": 5818, "縫": 5819, "縮": 5820, "縱": 5821, "縻": 5822, "總": 5823, "績": 5824, "繁": 5825, "繆": 5826, "繇": 5827, "織": 5828, "繕": 5829, "繞": 5830, "繡": 5831, "繩": 5832, "繪": 5833, "繫": 5834, "繭": 5835, "繳": 5836, "繹": 5837, "繼": 5838, "纂": 5839, "續": 5840, "纏": 5841, "纓": 5842, "纖": 5843, "纜": 5844, "纠": 5845, "纡": 5846, "红": 5847, "纣": 5848, "纤": 5849, "纥": 5850, "约": 5851, "级": 5852, "纨": 5853, "纪": 5854, "纫": 5855, "纬": 5856, "纭": 5857, "纯": 5858, "纰": 5859, "纱": 5860, "纲": 5861, "纳": 5862, "纵": 5863, "纶": 5864, "纷": 5865, "纸": 5866, "纹": 5867, "纺": 5868, "纽": 5869, "纾": 5870, "线": 5871, "绀": 5872, "绂": 5873, "练": 5874, "组": 5875, "绅": 5876, "细": 5877, "织": 5878, "终": 5879, "绊": 5880, "绌": 5881, "绍": 5882, "绎": 5883, "经": 5884, "绑": 5885, "绒": 5886, "结": 5887, "绕": 5888, "绘": 5889, "给": 5890, "绚": 5891, "绛": 5892, "络": 5893, "绝": 5894, "绞": 5895, "统": 5896, "绢": 5897, "绣": 5898, "绥": 5899, "绦": 5900, "继": 5901, "绩": 5902, "绪": 5903, "绫": 5904, "续": 5905, "绮": 5906, "绯": 5907, "绰": 5908, "绳": 5909, "维": 5910, "绵": 5911, "绶": 5912, "绷": 5913, "绸": 5914, "综": 5915, "绽": 5916, "绾": 5917, "绿": 5918, "缀": 5919, "缁": 5920, "缄": 5921, "缅": 5922, "缆": 5923, "缈": 5924, "缉": 5925, "缎": 5926, "缐": 5927, "缓": 5928, "缔": 5929, "缕": 5930, "编": 5931, "缗": 5932, "缘": 5933, "缙": 5934, "缚": 5935, "缛": 5936, "缜": 5937, "缝": 5938, "缟": 5939, "缠": 5940, "缢": 5941, "缣": 5942, "缤": 5943, "缥": 5944, "缨": 5945, "缩": 5946, "缪": 5947, "缫": 5948, "缬": 5949, "缭": 5950, "缮": 5951, "缰": 5952, "缴": 5953, "缵": 5954, "缶": 5955, "缸": 5956, "缺": 5957, "缽": 5958, "罂": 5959, "罃": 5960, "罄": 5961, "罅": 5962, "罐": 5963, "网": 5964, "罔": 5965, "罕": 5966, "罗": 5967, "罘": 5968, "罚": 5969, "罡": 5970, "罢": 5971, "罩": 5972, "罪": 5973, "置": 5974, "罰": 5975, "署": 5976, "罵": 5977, "罷": 5978, "罹": 5979, "羁": 5980, "羅": 5981, "羈": 5982, "羊": 5983, "羌": 5984, "美": 5985, "羔": 5986, "羚": 5987, "羞": 5988, "羟": 5989, "羡": 5990, "羣": 5991, "群": 5992, "羥": 5993, "羧": 5994, "羨": 5995, "義": 5996, "羯": 5997, "羰": 5998, "羲": 5999, "羸": 6000, "羹": 6001, "羽": 6002, "羿": 6003, "翀": 6004, "翁": 6005, "翅": 6006, "翊": 6007, "翌": 6008, "翎": 6009, "習": 6010, "翔": 6011, "翕": 6012, "翘": 6013, "翟": 6014, "翠": 6015, "翡": 6016, "翥": 6017, "翦": 6018, "翩": 6019, "翰": 6020, "翱": 6021, "翳": 6022, "翹": 6023, "翻": 6024, "翼": 6025, "耀": 6026, "老": 6027, "考": 6028, "耄": 6029, "者": 6030, "耆": 6031, "耋": 6032, "而": 6033, "耍": 6034, "耐": 6035, "耒": 6036, "耕": 6037, "耗": 6038, "耘": 6039, "耙": 6040, "耜": 6041, "耦": 6042, "耳": 6043, "耶": 6044, "耸": 6045, "耻": 6046, "耽": 6047, "耿": 6048, "聂": 6049, "聃": 6050, "聆": 6051, "聊": 6052, "聋": 6053, "职": 6054, "联": 6055, "聖": 6056, "聘": 6057, "聚": 6058, "聞": 6059, "聡": 6060, "聩": 6061, "聪": 6062, "聯": 6063, "聰": 6064, "聲": 6065, "聶": 6066, "職": 6067, "聽": 6068, "聾": 6069, "聿": 6070, "肃": 6071, "肄": 6072, "肅": 6073, "肆": 6074, "肇": 6075, "肉": 6076, "肋": 6077, "肌": 6078, "肓": 6079, "肖": 6080, "肘": 6081, "肚": 6082, "肛": 6083, "肝": 6084, "肟": 6085, "肠": 6086, "股": 6087, "肢": 6088, "肤": 6089, "肥": 6090, "肩": 6091, "肪": 6092, "肮": 6093, "肯": 6094, "肱": 6095, "育": 6096, "肴": 6097, "肺": 6098, "肼": 6099, "肽": 6100, "肾": 6101, "肿": 6102, "胀": 6103, "胁": 6104, "胃": 6105, "胄": 6106, "胆": 6107, "背": 6108, "胍": 6109, "胎": 6110, "胖": 6111, "胙": 6112, "胚": 6113, "胛": 6114, "胜": 6115, "胝": 6116, "胞": 6117, "胡": 6118, "胤": 6119, "胥": 6120, "胧": 6121, "胪": 6122, "胫": 6123, "胬": 6124, "胭": 6125, "胯": 6126, "胰": 6127, "胱": 6128, "胳": 6129, "胶": 6130, "胸": 6131, "胺": 6132, "胼": 6133, "能": 6134, "脂": 6135, "脅": 6136, "脆": 6137, "脇": 6138, "脈": 6139, "脉": 6140, "脊": 6141, "脍": 6142, "脏": 6143, "脐": 6144, "脑": 6145, "脓": 6146, "脖": 6147, "脘": 6148, "脚": 6149, "脛": 6150, "脩": 6151, "脫": 6152, "脯": 6153, "脱": 6154, "脲": 6155, "脷": 6156, "脸": 6157, "脹": 6158, "脾": 6159, "腈": 6160, "腊": 6161, "腋": 6162, "腌": 6163, "腎": 6164, "腐": 6165, "腑": 6166, "腓": 6167, "腔": 6168, "腕": 6169, "腘": 6170, "腙": 6171, "腥": 6172, "腦": 6173, "腧": 6174, "腫": 6175, "腭": 6176, "腮": 6177, "腰": 6178, "腱": 6179, "腳": 6180, "腸": 6181, "腹": 6182, "腺": 6183, "腻": 6184, "腾": 6185, "腿": 6186, "膀": 6187, "膈": 6188, "膊": 6189, "膏": 6190, "膑": 6191, "膘": 6192, "膚": 6193, "膛": 6194, "膜": 6195, "膝": 6196, "膠": 6197, "膦": 6198, "膨": 6199, "膩": 6200, "膳": 6201, "膺": 6202, "膽": 6203, "臀": 6204, "臂": 6205, "臃": 6206, "臆": 6207, "臉": 6208, "臘": 6209, "臚": 6210, "臟": 6211, "臣": 6212, "臥": 6213, "臧": 6214, "臨": 6215, "自": 6216, "臬": 6217, "臭": 6218, "至": 6219, "致": 6220, "臵": 6221, "臺": 6222, "臻": 6223, "臼": 6224, "臾": 6225, "舀": 6226, "舂": 6227, "舅": 6228, "舆": 6229, "與": 6230, "興": 6231, "舉": 6232, "舊": 6233, "舌": 6234, "舍": 6235, "舎": 6236, "舒": 6237, "舔": 6238, "舖": 6239, "舘": 6240, "舛": 6241, "舜": 6242, "舞": 6243, "舟": 6244, "航": 6245, "舫": 6246, "般": 6247, "舰": 6248, "舱": 6249, "舵": 6250, "舶": 6251, "舷": 6252, "舸": 6253, "船": 6254, "舺": 6255, "艇": 6256, "艉": 6257, "艋": 6258, "艏": 6259, "艘": 6260, "艙": 6261, "艦": 6262, "艮": 6263, "良": 6264, "艰": 6265, "艱": 6266, "色": 6267, "艳": 6268, "艷": 6269, "艺": 6270, "艾": 6271, "艿": 6272, "节": 6273, "芃": 6274, "芊": 6275, "芋": 6276, "芍": 6277, "芎": 6278, "芒": 6279, "芙": 6280, "芜": 6281, "芝": 6282, "芡": 6283, "芥": 6284, "芦": 6285, "芩": 6286, "芪": 6287, "芬": 6288, "芭": 6289, "芮": 6290, "芯": 6291, "花": 6292, "芳": 6293, "芷": 6294, "芸": 6295, "芹": 6296, "芽": 6297, "芾": 6298, "苄": 6299, "苇": 6300, "苋": 6301, "苌": 6302, "苍": 6303, "苏": 6304, "苑": 6305, "苓": 6306, "苔": 6307, "苕": 6308, "苗": 6309, "苛": 6310, "苜": 6311, "苞": 6312, "苟": 6313, "苡": 6314, "苣": 6315, "若": 6316, "苦": 6317, "苧": 6318, "苫": 6319, "苯": 6320, "英": 6321, "苴": 6322, "苷": 6323, "苹": 6324, "苻": 6325, "茁": 6326, "茂": 6327, "范": 6328, "茄": 6329, "茅": 6330, "茉": 6331, "茌": 6332, "茎": 6333, "茏": 6334, "茗": 6335, "茜": 6336, "茧": 6337, "茨": 6338, "茫": 6339, "茬": 6340, "茭": 6341, "茯": 6342, "茱": 6343, "茲": 6344, "茴": 6345, "茵": 6346, "茶": 6347, "茸": 6348, "茹": 6349, "荀": 6350, "荃": 6351, "荆": 6352, "草": 6353, "荊": 6354, "荐": 6355, "荒": 6356, "荔": 6357, "荚": 6358, "荞": 6359, "荟": 6360, "荠": 6361, "荡": 6362, "荣": 6363, "荤": 6364, "荥": 6365, "荧": 6366, "荨": 6367, "荩": 6368, "荪": 6369, "荫": 6370, "药": 6371, "荳": 6372, "荷": 6373, "荻": 6374, "荼": 6375, "莅": 6376, "莆": 6377, "莉": 6378, "莊": 6379, "莎": 6380, "莒": 6381, "莓": 6382, "莖": 6383, "莘": 6384, "莞": 6385, "莠": 6386, "莢": 6387, "莨": 6388, "莪": 6389, "莫": 6390, "莱": 6391, "莲": 6392, "莴": 6393, "获": 6394, "莹": 6395, "莺": 6396, "莽": 6397, "菀": 6398, "菁": 6399, "菅": 6400, "菇": 6401, "菊": 6402, "菌": 6403, "菏": 6404, "菓": 6405, "菖": 6406, "菜": 6407, "菟": 6408, "菠": 6409, "菩": 6410, "菫": 6411, "華": 6412, "菰": 6413, "菱": 6414, "菲": 6415, "菴": 6416, "菸": 6417, "菽": 6418, "萃": 6419, "萄": 6420, "萇": 6421, "萊": 6422, "萌": 6423, "萍": 6424, "萎": 6425, "萘": 6426, "萜": 6427, "萝": 6428, "萤": 6429, "营": 6430, "萦": 6431, "萧": 6432, "萨": 6433, "萩": 6434, "萬": 6435, "萱": 6436, "萸": 6437, "萼": 6438, "落": 6439, "葆": 6440, "葉": 6441, "著": 6442, "葛": 6443, "葡": 6444, "董": 6445, "葦": 6446, "葩": 6447, "葫": 6448, "葬": 6449, "葱": 6450, "葵": 6451, "葺": 6452, "蒂": 6453, "蒋": 6454, "蒌": 6455, "蒐": 6456, "蒙": 6457, "蒜": 6458, "蒡": 6459, "蒨": 6460, "蒯": 6461, "蒲": 6462, "蒴": 6463, "蒸": 6464, "蒺": 6465, "蒼": 6466, "蒽": 6467, "蒿": 6468, "蓁": 6469, "蓄": 6470, "蓉": 6471, "蓋": 6472, "蓓": 6473, "蓖": 6474, "蓝": 6475, "蓟": 6476, "蓦": 6477, "蓬": 6478, "蓮": 6479, "蓼": 6480, "蓿": 6481, "蔑": 6482, "蔓": 6483, "蔔": 6484, "蔗": 6485, "蔚": 6486, "蔡": 6487, "蔣": 6488, "蔥": 6489, "蔫": 6490, "蔬": 6491, "蔭": 6492, "蔵": 6493, "蔷": 6494, "蔺": 6495, "蔻": 6496, "蔼": 6497, "蔽": 6498, "蕃": 6499, "蕈": 6500, "蕉": 6501, "蕊": 6502, "蕙": 6503, "蕨": 6504, "蕩": 6505, "蕪": 6506, "蕭": 6507, "蕲": 6508, "蕴": 6509, "蕾": 6510, "薄": 6511, "薅": 6512, "薇": 6513, "薈": 6514, "薊": 6515, "薏": 6516, "薑": 6517, "薔": 6518, "薙": 6519, "薛": 6520, "薦": 6521, "薨": 6522, "薩": 6523, "薪": 6524, "薫": 6525, "薮": 6526, "薯": 6527, "薰": 6528, "藁": 6529, "藉": 6530, "藍": 6531, "藏": 6532, "藐": 6533, "藓": 6534, "藔": 6535, "藕": 6536, "藜": 6537, "藝": 6538, "藤": 6539, "藥": 6540, "藩": 6541, "藪": 6542, "藻": 6543, "藿": 6544, "蘄": 6545, "蘅": 6546, "蘆": 6547, "蘇": 6548, "蘊": 6549, "蘋": 6550, "蘑": 6551, "蘖": 6552, "蘧": 6553, "蘭": 6554, "蘸": 6555, "蘿": 6556, "虎": 6557, "虏": 6558, "虐": 6559, "虑": 6560, "虔": 6561, "處": 6562, "虚": 6563, "虛": 6564, "虜": 6565, "虞": 6566, "號": 6567, "虢": 6568, "虧": 6569, "虫": 6570, "虬": 6571, "虱": 6572, "虹": 6573, "虻": 6574, "虽": 6575, "虾": 6576, "蚀": 6577, "蚁": 6578, "蚂": 6579, "蚊": 6580, "蚋": 6581, "蚌": 6582, "蚓": 6583, "蚕": 6584, "蚜": 6585, "蚣": 6586, "蚤": 6587, "蚩": 6588, "蚪": 6589, "蚯": 6590, "蚱": 6591, "蚴": 6592, "蚵": 6593, "蚶": 6594, "蛀": 6595, "蛇": 6596, "蛉": 6597, "蛊": 6598, "蛋": 6599, "蛎": 6600, "蛔": 6601, "蛙": 6602, "蛛": 6603, "蛟": 6604, "蛤": 6605, "蛭": 6606, "蛮": 6607, "蛰": 6608, "蛳": 6609, "蛴": 6610, "蛹": 6611, "蛺": 6612, "蛻": 6613, "蛾": 6614, "蜀": 6615, "蜂": 6616, "蜃": 6617, "蜇": 6618, "蜈": 6619, "蜊": 6620, "蜍": 6621, "蜒": 6622, "蜓": 6623, "蜕": 6624, "蜗": 6625, "蜘": 6626, "蜚": 6627, "蜜": 6628, "蜡": 6629, "蜢": 6630, "蜥": 6631, "蜱": 6632, "蜴": 6633, "蜻": 6634, "蜿": 6635, "蝇": 6636, "蝉": 6637, "蝌": 6638, "蝎": 6639, "蝕": 6640, "蝗": 6641, "蝙": 6642, "蝠": 6643, "蝦": 6644, "蝮": 6645, "蝰": 6646, "蝴": 6647, "蝶": 6648, "蝸": 6649, "蝼": 6650, "蝽": 6651, "螂": 6652, "螃": 6653, "螅": 6654, "螈": 6655, "融": 6656, "螟": 6657, "螢": 6658, "螨": 6659, "螫": 6660, "螬": 6661, "螭": 6662, "螯": 6663, "螳": 6664, "螺": 6665, "螽": 6666, "蟀": 6667, "蟋": 6668, "蟑": 6669, "蟒": 6670, "蟓": 6671, "蟠": 6672, "蟬": 6673, "蟲": 6674, "蟹": 6675, "蟻": 6676, "蟾": 6677, "蠅": 6678, "蠊": 6679, "蠍": 6680, "蠕": 6681, "蠟": 6682, "蠡": 6683, "蠢": 6684, "蠣": 6685, "蠱": 6686, "蠶": 6687, "蠹": 6688, "蠻": 6689, "血": 6690, "衄": 6691, "衅": 6692, "衆": 6693, "行": 6694, "衍": 6695, "術": 6696, "衔": 6697, "街": 6698, "衙": 6699, "衛": 6700, "衝": 6701, "衞": 6702, "衡": 6703, "衢": 6704, "衣": 6705, "补": 6706, "表": 6707, "衫": 6708, "衬": 6709, "衮": 6710, "衰": 6711, "衷": 6712, "衽": 6713, "袁": 6714, "袂": 6715, "袄": 6716, "袈": 6717, "袋": 6718, "袍": 6719, "袒": 6720, "袖": 6721, "袜": 6722, "袞": 6723, "袢": 6724, "袤": 6725, "被": 6726, "袭": 6727, "袱": 6728, "裁": 6729, "裂": 6730, "装": 6731, "裏": 6732, "裒": 6733, "裔": 6734, "裕": 6735, "裘": 6736, "裙": 6737, "補": 6738, "裝": 6739, "裟": 6740, "裡": 6741, "裤": 6742, "裨": 6743, "裱": 6744, "裳": 6745, "裴": 6746, "裸": 6747, "裹": 6748, "製": 6749, "褂": 6750, "複": 6751, "褐": 6752, "褒": 6753, "褚": 6754, "褥": 6755, "褪": 6756, "褫": 6757, "褲": 6758, "褶": 6759, "襄": 6760, "襞": 6761, "襟": 6762, "襦": 6763, "襪": 6764, "襯": 6765, "襲": 6766, "襻": 6767, "西": 6768, "要": 6769, "覃": 6770, "覆": 6771, "覇": 6772, "見": 6773, "規": 6774, "覓": 6775, "視": 6776, "覧": 6777, "親": 6778, "覲": 6779, "観": 6780, "覺": 6781, "覽": 6782, "觀": 6783, "见": 6784, "观": 6785, "觃": 6786, "规": 6787, "觅": 6788, "视": 6789, "览": 6790, "觉": 6791, "觊": 6792, "觎": 6793, "觐": 6794, "觑": 6795, "角": 6796, "觚": 6797, "觞": 6798, "解": 6799, "触": 6800, "觸": 6801, "言": 6802, "訂": 6803, "計": 6804, "訊": 6805, "討": 6806, "訓": 6807, "訕": 6808, "訖": 6809, "託": 6810, "記": 6811, "訝": 6812, "訟": 6813, "訢": 6814, "訣": 6815, "訥": 6816, "訪": 6817, "設": 6818, "許": 6819, "訳": 6820, "訴": 6821, "訶": 6822, "診": 6823, "註": 6824, "証": 6825, "詐": 6826, "詔": 6827, "評": 6828, "詛": 6829, "詞": 6830, "詠": 6831, "詢": 6832, "詣": 6833, "試": 6834, "詩": 6835, "詭": 6836, "詮": 6837, "話": 6838, "該": 6839, "詳": 6840, "詹": 6841, "誅": 6842, "誇": 6843, "誉": 6844, "誊": 6845, "誌": 6846, "認": 6847, "誓": 6848, "誕": 6849, "誘": 6850, "語": 6851, "誠": 6852, "誡": 6853, "誣": 6854, "誤": 6855, "誥": 6856, "誦": 6857, "說": 6858, "説": 6859, "読": 6860, "誰": 6861, "課": 6862, "誼": 6863, "調": 6864, "談": 6865, "請": 6866, "諏": 6867, "諒": 6868, "論": 6869, "諜": 6870, "諡": 6871, "諦": 6872, "諧": 6873, "諫": 6874, "諭": 6875, "諮": 6876, "諱": 6877, "諷": 6878, "諸": 6879, "諺": 6880, "諾": 6881, "謀": 6882, "謁": 6883, "謂": 6884, "謄": 6885, "謇": 6886, "謊": 6887, "謎": 6888, "謙": 6889, "謚": 6890, "講": 6891, "謝": 6892, "謠": 6893, "謨": 6894, "謫": 6895, "謬": 6896, "謹": 6897, "證": 6898, "譏": 6899, "識": 6900, "譚": 6901, "譜": 6902, "警": 6903, "譬": 6904, "譯": 6905, "議": 6906, "譴": 6907, "護": 6908, "譽": 6909, "讀": 6910, "變": 6911, "讓": 6912, "讚": 6913, "计": 6914, "订": 6915, "讣": 6916, "认": 6917, "讥": 6918, "讦": 6919, "讧": 6920, "讨": 6921, "让": 6922, "讫": 6923, "训": 6924, "议": 6925, "讯": 6926, "记": 6927, "讲": 6928, "讳": 6929, "讴": 6930, "讶": 6931, "讷": 6932, "许": 6933, "讹": 6934, "论": 6935, "讼": 6936, "讽": 6937, "设": 6938, "访": 6939, "诀": 6940, "证": 6941, "诂": 6942, "诃": 6943, "评": 6944, "诅": 6945, "识": 6946, "诈": 6947, "诉": 6948, "诊": 6949, "诋": 6950, "词": 6951, "诏": 6952, "译": 6953, "诒": 6954, "试": 6955, "诗": 6956, "诘": 6957, "诙": 6958, "诚": 6959, "诛": 6960, "话": 6961, "诞": 6962, "诟": 6963, "诠": 6964, "诡": 6965, "询": 6966, "诣": 6967, "诤": 6968, "该": 6969, "详": 6970, "诩": 6971, "诫": 6972, "诬": 6973, "语": 6974, "误": 6975, "诰": 6976, "诱": 6977, "诲": 6978, "说": 6979, "诵": 6980, "请": 6981, "诸": 6982, "诺": 6983, "读": 6984, "诽": 6985, "课": 6986, "诿": 6987, "谀": 6988, "谁": 6989, "调": 6990, "谄": 6991, "谅": 6992, "谆": 6993, "谈": 6994, "谊": 6995, "谋": 6996, "谌": 6997, "谍": 6998, "谎": 6999, "谏": 7000, "谐": 7001, "谑": 7002, "谒": 7003, "谓": 7004, "谔": 7005, "谕": 7006, "谗": 7007, "谘": 7008, "谙": 7009, "谚": 7010, "谛": 7011, "谜": 7012, "谟": 7013, "谢": 7014, "谣": 7015, "谤": 7016, "谥": 7017, "谦": 7018, "谧": 7019, "谨": 7020, "谩": 7021, "谪": 7022, "谬": 7023, "谭": 7024, "谯": 7025, "谱": 7026, "谲": 7027, "谴": 7028, "谵": 7029, "谶": 7030, "谷": 7031, "谿": 7032, "豁": 7033, "豆": 7034, "豇": 7035, "豈": 7036, "豊": 7037, "豌": 7038, "豎": 7039, "豐": 7040, "豔": 7041, "豕": 7042, "豚": 7043, "象": 7044, "豢": 7045, "豪": 7046, "豫": 7047, "豬": 7048, "豳": 7049, "豹": 7050, "貂": 7051, "貉": 7052, "貊": 7053, "貌": 7054, "貓": 7055, "貝": 7056, "貞": 7057, "負": 7058, "財": 7059, "貢": 7060, "貧": 7061, "貨": 7062, "販": 7063, "貪": 7064, "貫": 7065, "責": 7066, "貯": 7067, "貳": 7068, "貴": 7069, "貶": 7070, "買": 7071, "貸": 7072, "費": 7073, "貼": 7074, "貽": 7075, "貿": 7076, "賀": 7077, "賁": 7078, "賂": 7079, "賃": 7080, "賄": 7081, "資": 7082, "賈": 7083, "賊": 7084, "賑": 7085, "賓": 7086, "賜": 7087, "賞": 7088, "賠": 7089, "賡": 7090, "賢": 7091, "賣": 7092, "賤": 7093, "賦": 7094, "質": 7095, "賬": 7096, "賭": 7097, "賴": 7098, "賸": 7099, "賺": 7100, "購": 7101, "賽": 7102, "贈": 7103, "贊": 7104, "贏": 7105, "贓": 7106, "贖": 7107, "贛": 7108, "贝": 7109, "贞": 7110, "负": 7111, "贡": 7112, "财": 7113, "责": 7114, "贤": 7115, "败": 7116, "账": 7117, "货": 7118, "质": 7119, "贩": 7120, "贪": 7121, "贫": 7122, "贬": 7123, "购": 7124, "贮": 7125, "贯": 7126, "贰": 7127, "贱": 7128, "贲": 7129, "贴": 7130, "贵": 7131, "贷": 7132, "贸": 7133, "费": 7134, "贺": 7135, "贻": 7136, "贼": 7137, "贽": 7138, "贾": 7139, "贿": 7140, "赀": 7141, "赁": 7142, "赂": 7143, "赃": 7144, "资": 7145, "赅": 7146, "赈": 7147, "赉": 7148, "赊": 7149, "赋": 7150, "赌": 7151, "赎": 7152, "赏": 7153, "赐": 7154, "赓": 7155, "赔": 7156, "赖": 7157, "赘": 7158, "赙": 7159, "赚": 7160, "赛": 7161, "赜": 7162, "赝": 7163, "赞": 7164, "赟": 7165, "赠": 7166, "赡": 7167, "赢": 7168, "赣": 7169, "赤": 7170, "赦": 7171, "赫": 7172, "赭": 7173, "走": 7174, "赳": 7175, "赴": 7176, "赵": 7177, "赶": 7178, "起": 7179, "趁": 7180, "超": 7181, "越": 7182, "趋": 7183, "趕": 7184, "趙": 7185, "趟": 7186, "趣": 7187, "趨": 7188, "足": 7189, "趴": 7190, "趸": 7191, "趺": 7192, "趾": 7193, "跃": 7194, "跆": 7195, "跋": 7196, "跌": 7197, "跑": 7198, "跖": 7199, "跗": 7200, "跚": 7201, "跛": 7202, "距": 7203, "跟": 7204, "跡": 7205, "跤": 7206, "跨": 7207, "跪": 7208, "路": 7209, "跳": 7210, "践": 7211, "跷": 7212, "跸": 7213, "跻": 7214, "踊": 7215, "踌": 7216, "踏": 7217, "踐": 7218, "踔": 7219, "踝": 7220, "踞": 7221, "踢": 7222, "踩": 7223, "踪": 7224, "踵": 7225, "蹂": 7226, "蹄": 7227, "蹇": 7228, "蹈": 7229, "蹊": 7230, "蹒": 7231, "蹟": 7232, "蹤": 7233, "蹦": 7234, "蹬": 7235, "蹭": 7236, "蹲": 7237, "蹴": 7238, "蹶": 7239, "躁": 7240, "躇": 7241, "躍": 7242, "躏": 7243, "身": 7244, "躬": 7245, "躯": 7246, "躲": 7247, "躺": 7248, "軀": 7249, "車": 7250, "軋": 7251, "軌": 7252, "軍": 7253, "軒": 7254, "軟": 7255, "軫": 7256, "軸": 7257, "軼": 7258, "軾": 7259, "較": 7260, "輅": 7261, "載": 7262, "輒": 7263, "輓": 7264, "輔": 7265, "輕": 7266, "輛": 7267, "輝": 7268, "輟": 7269, "輩": 7270, "輪": 7271, "輯": 7272, "輸": 7273, "輻": 7274, "輾": 7275, "輿": 7276, "轄": 7277, "轉": 7278, "轍": 7279, "轎": 7280, "轟": 7281, "车": 7282, "轧": 7283, "轨": 7284, "轩": 7285, "轫": 7286, "转": 7287, "轭": 7288, "轮": 7289, "软": 7290, "轰": 7291, "轲": 7292, "轴": 7293, "轶": 7294, "轻": 7295, "轼": 7296, "载": 7297, "轿": 7298, "较": 7299, "辄": 7300, "辅": 7301, "辆": 7302, "辇": 7303, "辈": 7304, "辉": 7305, "辊": 7306, "辋": 7307, "辍": 7308, "辎": 7309, "辏": 7310, "辐": 7311, "辑": 7312, "输": 7313, "辕": 7314, "辖": 7315, "辗": 7316, "辙": 7317, "辛": 7318, "辜": 7319, "辞": 7320, "辟": 7321, "辣": 7322, "辦": 7323, "辨": 7324, "辩": 7325, "辫": 7326, "辭": 7327, "辯": 7328, "辰": 7329, "辱": 7330, "農": 7331, "边": 7332, "辺": 7333, "辻": 7334, "込": 7335, "辽": 7336, "达": 7337, "迁": 7338, "迂": 7339, "迄": 7340, "迅": 7341, "过": 7342, "迈": 7343, "迎": 7344, "运": 7345, "近": 7346, "迓": 7347, "返": 7348, "迕": 7349, "还": 7350, "这": 7351, "进": 7352, "远": 7353, "违": 7354, "连": 7355, "迟": 7356, "迢": 7357, "迤": 7358, "迥": 7359, "迦": 7360, "迨": 7361, "迩": 7362, "迪": 7363, "迫": 7364, "迭": 7365, "述": 7366, "迳": 7367, "迴": 7368, "迷": 7369, "迸": 7370, "迹": 7371, "迺": 7372, "追": 7373, "退": 7374, "送": 7375, "适": 7376, "逃": 7377, "逅": 7378, "逆": 7379, "选": 7380, "逊": 7381, "逋": 7382, "逍": 7383, "透": 7384, "逐": 7385, "逑": 7386, "递": 7387, "途": 7388, "逕": 7389, "逖": 7390, "逗": 7391, "這": 7392, "通": 7393, "逛": 7394, "逝": 7395, "逞": 7396, "速": 7397, "造": 7398, "逢": 7399, "連": 7400, "逮": 7401, "週": 7402, "進": 7403, "逵": 7404, "逸": 7405, "逻": 7406, "逼": 7407, "逾": 7408, "遁": 7409, "遂": 7410, "遇": 7411, "遊": 7412, "運": 7413, "遍": 7414, "過": 7415, "遏": 7416, "遐": 7417, "遑": 7418, "遒": 7419, "道": 7420, "達": 7421, "違": 7422, "遗": 7423, "遘": 7424, "遙": 7425, "遜": 7426, "遞": 7427, "遠": 7428, "遣": 7429, "遥": 7430, "遨": 7431, "適": 7432, "遭": 7433, "遮": 7434, "遲": 7435, "遴": 7436, "遵": 7437, "遷": 7438, "選": 7439, "遺": 7440, "遼": 7441, "遽": 7442, "避": 7443, "邀": 7444, "邁": 7445, "邂": 7446, "邃": 7447, "還": 7448, "邇": 7449, "邈": 7450, "邊": 7451, "邏": 7452, "邑": 7453, "邓": 7454, "邕": 7455, "邙": 7456, "邛": 7457, "邝": 7458, "邠": 7459, "邡": 7460, "邢": 7461, "那": 7462, "邦": 7463, "邨": 7464, "邪": 7465, "邬": 7466, "邮": 7467, "邯": 7468, "邰": 7469, "邱": 7470, "邳": 7471, "邵": 7472, "邸": 7473, "邹": 7474, "邺": 7475, "邻": 7476, "郁": 7477, "郊": 7478, "郎": 7479, "郐": 7480, "郑": 7481, "郓": 7482, "郗": 7483, "郝": 7484, "郡": 7485, "郢": 7486, "郤": 7487, "郦": 7488, "郧": 7489, "部": 7490, "郫": 7491, "郭": 7492, "郯": 7493, "郴": 7494, "郵": 7495, "郷": 7496, "郸": 7497, "都": 7498, "郾": 7499, "鄂": 7500, "鄉": 7501, "鄒": 7502, "鄔": 7503, "鄙": 7504, "鄜": 7505, "鄞": 7506, "鄠": 7507, "鄢": 7508, "鄧": 7509, "鄭": 7510, "鄰": 7511, "鄱": 7512, "鄲": 7513, "鄴": 7514, "鄺": 7515, "酆": 7516, "酈": 7517, "酉": 7518, "酋": 7519, "酌": 7520, "配": 7521, "酐": 7522, "酒": 7523, "酗": 7524, "酚": 7525, "酝": 7526, "酞": 7527, "酢": 7528, "酣": 7529, "酥": 7530, "酪": 7531, "酬": 7532, "酮": 7533, "酯": 7534, "酰": 7535, "酱": 7536, "酵": 7537, "酶": 7538, "酷": 7539, "酸": 7540, "酿": 7541, "醃": 7542, "醇": 7543, "醉": 7544, "醋": 7545, "醌": 7546, "醍": 7547, "醐": 7548, "醒": 7549, "醚": 7550, "醛": 7551, "醜": 7552, "醣": 7553, "醪": 7554, "醫": 7555, "醬": 7556, "醮": 7557, "醯": 7558, "醴": 7559, "釀": 7560, "釁": 7561, "釆": 7562, "采": 7563, "釉": 7564, "释": 7565, "釋": 7566, "里": 7567, "重": 7568, "野": 7569, "量": 7570, "釐": 7571, "金": 7572, "釗": 7573, "釘": 7574, "釜": 7575, "針": 7576, "釣": 7577, "釧": 7578, "鈉": 7579, "鈍": 7580, "鈎": 7581, "鈔": 7582, "鈕": 7583, "鈞": 7584, "鈣": 7585, "鈦": 7586, "鈴": 7587, "鈺": 7588, "鈾": 7589, "鉀": 7590, "鉄": 7591, "鉅": 7592, "鉉": 7593, "鉗": 7594, "鉛": 7595, "鉢": 7596, "鉤": 7597, "鉬": 7598, "鉴": 7599, "鉻": 7600, "銀": 7601, "銃": 7602, "銅": 7603, "銓": 7604, "銖": 7605, "銘": 7606, "銜": 7607, "銩": 7608, "銮": 7609, "銳": 7610, "銷": 7611, "鋁": 7612, "鋅": 7613, "鋇": 7614, "鋒": 7615, "鋤": 7616, "鋪": 7617, "鋯": 7618, "鋰": 7619, "鋸": 7620, "鋼": 7621, "錄": 7622, "錇": 7623, "錐": 7624, "錘": 7625, "錚": 7626, "錢": 7627, "錦": 7628, "錨": 7629, "錫": 7630, "錯": 7631, "録": 7632, "錶": 7633, "鍊": 7634, "鍋": 7635, "鍍": 7636, "鍛": 7637, "鍵": 7638, "鍾": 7639, "鎂": 7640, "鎊": 7641, "鎌": 7642, "鎏": 7643, "鎔": 7644, "鎖": 7645, "鎗": 7646, "鎚": 7647, "鎧": 7648, "鎬": 7649, "鎮": 7650, "鎳": 7651, "鏈": 7652, "鏖": 7653, "鏗": 7654, "鏘": 7655, "鏞": 7656, "鏡": 7657, "鏢": 7658, "鏤": 7659, "鏽": 7660, "鐘": 7661, "鐮": 7662, "鐳": 7663, "鐵": 7664, "鐸": 7665, "鑄": 7666, "鑑": 7667, "鑒": 7668, "鑛": 7669, "鑣": 7670, "鑫": 7671, "鑰": 7672, "鑲": 7673, "鑼": 7674, "鑽": 7675, "鑾": 7676, "鑿": 7677, "钆": 7678, "钇": 7679, "针": 7680, "钉": 7681, "钊": 7682, "钌": 7683, "钍": 7684, "钎": 7685, "钐": 7686, "钒": 7687, "钓": 7688, "钕": 7689, "钗": 7690, "钘": 7691, "钙": 7692, "钚": 7693, "钛": 7694, "钜": 7695, "钝": 7696, "钞": 7697, "钟": 7698, "钠": 7699, "钡": 7700, "钢": 7701, "钣": 7702, "钤": 7703, "钥": 7704, "钦": 7705, "钧": 7706, "钨": 7707, "钩": 7708, "钪": 7709, "钮": 7710, "钯": 7711, "钰": 7712, "钱": 7713, "钳": 7714, "钴": 7715, "钵": 7716, "钺": 7717, "钻": 7718, "钼": 7719, "钽": 7720, "钾": 7721, "钿": 7722, "铀": 7723, "铁": 7724, "铂": 7725, "铃": 7726, "铅": 7727, "铆": 7728, "铈": 7729, "铉": 7730, "铊": 7731, "铋": 7732, "铌": 7733, "铍": 7734, "铎": 7735, "铐": 7736, "铑": 7737, "铒": 7738, "铛": 7739, "铜": 7740, "铝": 7741, "铟": 7742, "铠": 7743, "铡": 7744, "铢": 7745, "铣": 7746, "铤": 7747, "铨": 7748, "铪": 7749, "铬": 7750, "铭": 7751, "铮": 7752, "铯": 7753, "铰": 7754, "铱": 7755, "铲": 7756, "铳": 7757, "铵": 7758, "银": 7759, "铷": 7760, "铸": 7761, "铺": 7762, "铼": 7763, "链": 7764, "铿": 7765, "销": 7766, "锁": 7767, "锂": 7768, "锄": 7769, "锅": 7770, "锆": 7771, "锈": 7772, "锉": 7773, "锋": 7774, "锌": 7775, "锏": 7776, "锐": 7777, "锑": 7778, "锕": 7779, "锗": 7780, "错": 7781, "锚": 7782, "锛": 7783, "锝": 7784, "锟": 7785, "锡": 7786, "锢": 7787, "锣": 7788, "锤": 7789, "锥": 7790, "锦": 7791, "锭": 7792, "键": 7793, "锯": 7794, "锰": 7795, "锲": 7796, "锴": 7797, "锵": 7798, "锶": 7799, "锷": 7800, "锺": 7801, "锻": 7802, "镀": 7803, "镁": 7804, "镂": 7805, "镇": 7806, "镉": 7807, "镊": 7808, "镌": 7809, "镍": 7810, "镐": 7811, "镑": 7812, "镒": 7813, "镓": 7814, "镕": 7815, "镖": 7816, "镗": 7817, "镛": 7818, "镜": 7819, "镝": 7820, "镞": 7821, "镣": 7822, "镦": 7823, "镧": 7824, "镭": 7825, "镯": 7826, "镰": 7827, "镳": 7828, "镶": 7829, "長": 7830, "长": 7831, "門": 7832, "閃": 7833, "閉": 7834, "開": 7835, "閏": 7836, "閑": 7837, "閒": 7838, "間": 7839, "閔": 7840, "閘": 7841, "関": 7842, "閣": 7843, "閤": 7844, "閥": 7845, "閨": 7846, "閩": 7847, "閱": 7848, "閲": 7849, "閻": 7850, "闆": 7851, "闇": 7852, "闈": 7853, "闊": 7854, "闋": 7855, "闐": 7856, "闕": 7857, "闖": 7858, "闘": 7859, "關": 7860, "闡": 7861, "闢": 7862, "门": 7863, "闩": 7864, "闪": 7865, "闫": 7866, "闭": 7867, "问": 7868, "闯": 7869, "闰": 7870, "闱": 7871, "闲": 7872, "闳": 7873, "间": 7874, "闵": 7875, "闷": 7876, "闸": 7877, "闹": 7878, "闺": 7879, "闻": 7880, "闼": 7881, "闽": 7882, "闾": 7883, "阀": 7884, "阁": 7885, "阂": 7886, "阅": 7887, "阆": 7888, "阇": 7889, "阈": 7890, "阉": 7891, "阎": 7892, "阐": 7893, "阑": 7894, "阔": 7895, "阕": 7896, "阖": 7897, "阗": 7898, "阙": 7899, "阚": 7900, "阜": 7901, "队": 7902, "阡": 7903, "阪": 7904, "阮": 7905, "阯": 7906, "阱": 7907, "防": 7908, "阳": 7909, "阴": 7910, "阵": 7911, "阶": 7912, "阻": 7913, "阿": 7914, "陀": 7915, "陂": 7916, "附": 7917, "际": 7918, "陆": 7919, "陇": 7920, "陈": 7921, "陉": 7922, "陋": 7923, "陌": 7924, "降": 7925, "限": 7926, "陕": 7927, "陛": 7928, "陜": 7929, "陝": 7930, "陞": 7931, "陟": 7932, "陡": 7933, "院": 7934, "陣": 7935, "除": 7936, "陨": 7937, "险": 7938, "陪": 7939, "陰": 7940, "陲": 7941, "陳": 7942, "陵": 7943, "陶": 7944, "陷": 7945, "陸": 7946, "険": 7947, "陽": 7948, "隅": 7949, "隆": 7950, "隈": 7951, "隊": 7952, "隋": 7953, "隍": 7954, "階": 7955, "随": 7956, "隐": 7957, "隔": 7958, "隕": 7959, "隗": 7960, "隘": 7961, "隙": 7962, "際": 7963, "障": 7964, "隧": 7965, "隨": 7966, "險": 7967, "隰": 7968, "隱": 7969, "隴": 7970, "隶": 7971, "隷": 7972, "隸": 7973, "隹": 7974, "隻": 7975, "隼": 7976, "隽": 7977, "难": 7978, "雀": 7979, "雁": 7980, "雄": 7981, "雅": 7982, "集": 7983, "雇": 7984, "雉": 7985, "雋": 7986, "雌": 7987, "雍": 7988, "雎": 7989, "雏": 7990, "雑": 7991, "雒": 7992, "雕": 7993, "雖": 7994, "雙": 7995, "雛": 7996, "雜": 7997, "雞": 7998, "雠": 7999, "離": 8000, "難": 8001, "雨": 8002, "雪": 8003, "雯": 8004, "雲": 8005, "雳": 8006, "零": 8007, "雷": 8008, "雹": 8009, "電": 8010, "雾": 8011, "需": 8012, "霁": 8013, "霄": 8014, "霆": 8015, "震": 8016, "霈": 8017, "霉": 8018, "霍": 8019, "霎": 8020, "霏": 8021, "霑": 8022, "霓": 8023, "霖": 8024, "霜": 8025, "霞": 8026, "霧": 8027, "霨": 8028, "霰": 8029, "露": 8030, "霸": 8031, "霹": 8032, "霾": 8033, "靂": 8034, "靈": 8035, "青": 8036, "靓": 8037, "靖": 8038, "静": 8039, "靚": 8040, "靛": 8041, "靜": 8042, "非": 8043, "靠": 8044, "靡": 8045, "面": 8046, "革": 8047, "靳": 8048, "靴": 8049, "靶": 8050, "靺": 8051, "靼": 8052, "鞅": 8053, "鞋": 8054, "鞍": 8055, "鞏": 8056, "鞑": 8057, "鞘": 8058, "鞠": 8059, "鞨": 8060, "鞫": 8061, "鞭": 8062, "韃": 8063, "韋": 8064, "韌": 8065, "韓": 8066, "韜": 8067, "韞": 8068, "韦": 8069, "韧": 8070, "韩": 8071, "韫": 8072, "韬": 8073, "韭": 8074, "音": 8075, "韵": 8076, "韶": 8077, "韻": 8078, "響": 8079, "頁": 8080, "頂": 8081, "頃": 8082, "項": 8083, "順": 8084, "須": 8085, "頌": 8086, "預": 8087, "頑": 8088, "頒": 8089, "頓": 8090, "頗": 8091, "領": 8092, "頜": 8093, "頡": 8094, "頤": 8095, "頫": 8096, "頭": 8097, "頰": 8098, "頷": 8099, "頸": 8100, "頹": 8101, "頻": 8102, "頼": 8103, "顆": 8104, "題": 8105, "額": 8106, "顎": 8107, "顏": 8108, "顒": 8109, "顔": 8110, "願": 8111, "顛": 8112, "類": 8113, "顥": 8114, "顧": 8115, "顫": 8116, "顯": 8117, "顱": 8118, "页": 8119, "顶": 8120, "顷": 8121, "项": 8122, "顺": 8123, "须": 8124, "顼": 8125, "顽": 8126, "顾": 8127, "顿": 8128, "颁": 8129, "颂": 8130, "预": 8131, "颅": 8132, "领": 8133, "颇": 8134, "颈": 8135, "颉": 8136, "颊": 8137, "颌": 8138, "颍": 8139, "颐": 8140, "频": 8141, "颓": 8142, "颔": 8143, "颖": 8144, "颗": 8145, "题": 8146, "颙": 8147, "颚": 8148, "颛": 8149, "颜": 8150, "额": 8151, "颞": 8152, "颠": 8153, "颢": 8154, "颤": 8155, "颧": 8156, "風": 8157, "颱": 8158, "颶": 8159, "飄": 8160, "飆": 8161, "风": 8162, "飒": 8163, "飓": 8164, "飘": 8165, "飙": 8166, "飚": 8167, "飛": 8168, "飞": 8169, "食": 8170, "飡": 8171, "飢": 8172, "飨": 8173, "飪": 8174, "飭": 8175, "飯": 8176, "飲": 8177, "飼": 8178, "飽": 8179, "飾": 8180, "餅": 8181, "餉": 8182, "養": 8183, "餌": 8184, "餐": 8185, "餓": 8186, "餘": 8187, "餚": 8188, "館": 8189, "餮": 8190, "餵": 8191, "饋": 8192, "饑": 8193, "饒": 8194, "饕": 8195, "饗": 8196, "饥": 8197, "饪": 8198, "饬": 8199, "饭": 8200, "饮": 8201, "饯": 8202, "饰": 8203, "饱": 8204, "饲": 8205, "饴": 8206, "饵": 8207, "饶": 8208, "饷": 8209, "饺": 8210, "饼": 8211, "饽": 8212, "饿": 8213, "馀": 8214, "馁": 8215, "馅": 8216, "馆": 8217, "馈": 8218, "馍": 8219, "馏": 8220, "馐": 8221, "馒": 8222, "馕": 8223, "首": 8224, "馗": 8225, "香": 8226, "馥": 8227, "馨": 8228, "馬": 8229, "馭": 8230, "馮": 8231, "馳": 8232, "馴": 8233, "駁": 8234, "駄": 8235, "駅": 8236, "駐": 8237, "駒": 8238, "駕": 8239, "駙": 8240, "駛": 8241, "駝": 8242, "駟": 8243, "駭": 8244, "駱": 8245, "駿": 8246, "騎": 8247, "騙": 8248, "騰": 8249, "騷": 8250, "驃": 8251, "驄": 8252, "驅": 8253, "驊": 8254, "驕": 8255, "驗": 8256, "驚": 8257, "驛": 8258, "驟": 8259, "驢": 8260, "驤": 8261, "驥": 8262, "驪": 8263, "马": 8264, "驭": 8265, "驮": 8266, "驯": 8267, "驰": 8268, "驱": 8269, "驳": 8270, "驴": 8271, "驶": 8272, "驷": 8273, "驸": 8274, "驹": 8275, "驻": 8276, "驼": 8277, "驾": 8278, "驿": 8279, "骁": 8280, "骂": 8281, "骄": 8282, "骅": 8283, "骆": 8284, "骇": 8285, "骈": 8286, "骊": 8287, "骋": 8288, "验": 8289, "骏": 8290, "骑": 8291, "骗": 8292, "骚": 8293, "骛": 8294, "骞": 8295, "骠": 8296, "骡": 8297, "骤": 8298, "骥": 8299, "骧": 8300, "骨": 8301, "骰": 8302, "骶": 8303, "骷": 8304, "骸": 8305, "骺": 8306, "骼": 8307, "髀": 8308, "髁": 8309, "髂": 8310, "髋": 8311, "髌": 8312, "髒": 8313, "髓": 8314, "體": 8315, "高": 8316, "髙": 8317, "髡": 8318, "髦": 8319, "髮": 8320, "髯": 8321, "髹": 8322, "髻": 8323, "鬃": 8324, "鬆": 8325, "鬓": 8326, "鬚": 8327, "鬟": 8328, "鬣": 8329, "鬥": 8330, "鬧": 8331, "鬱": 8332, "鬲": 8333, "鬻": 8334, "鬼": 8335, "魁": 8336, "魂": 8337, "魄": 8338, "魅": 8339, "魇": 8340, "魏": 8341, "魔": 8342, "魚": 8343, "魯": 8344, "魷": 8345, "鮎": 8346, "鮑": 8347, "鮫": 8348, "鮭": 8349, "鮮": 8350, "鯉": 8351, "鯊": 8352, "鯓": 8353, "鯖": 8354, "鯙": 8355, "鯛": 8356, "鯤": 8357, "鯨": 8358, "鯰": 8359, "鰂": 8360, "鰓": 8361, "鰭": 8362, "鰲": 8363, "鰻": 8364, "鱉": 8365, "鱊": 8366, "鱗": 8367, "鱲": 8368, "鱷": 8369, "鱸": 8370, "鱼": 8371, "鱿": 8372, "鲁": 8373, "鲈": 8374, "鲍": 8375, "鲑": 8376, "鲜": 8377, "鲟": 8378, "鲤": 8379, "鲧": 8380, "鲨": 8381, "鲫": 8382, "鲲": 8383, "鲵": 8384, "鲶": 8385, "鲸": 8386, "鲻": 8387, "鳃": 8388, "鳄": 8389, "鳅": 8390, "鳌": 8391, "鳍": 8392, "鳎": 8393, "鳏": 8394, "鳖": 8395, "鳗": 8396, "鳚": 8397, "鳝": 8398, "鳞": 8399, "鳥": 8400, "鳩": 8401, "鳳": 8402, "鳴": 8403, "鳶": 8404, "鴉": 8405, "鴞": 8406, "鴨": 8407, "鴻": 8408, "鴿": 8409, "鵑": 8410, "鵜": 8411, "鵝": 8412, "鵡": 8413, "鵬": 8414, "鵰": 8415, "鵲": 8416, "鵺": 8417, "鵾": 8418, "鶯": 8419, "鶴": 8420, "鶿": 8421, "鷄": 8422, "鷗": 8423, "鷲": 8424, "鷹": 8425, "鷺": 8426, "鸊": 8427, "鸕": 8428, "鸚": 8429, "鸛": 8430, "鸞": 8431, "鸟": 8432, "鸠": 8433, "鸡": 8434, "鸢": 8435, "鸣": 8436, "鸥": 8437, "鸦": 8438, "鸭": 8439, "鸮": 8440, "鸯": 8441, "鸱": 8442, "鸳": 8443, "鸷": 8444, "鸽": 8445, "鸾": 8446, "鸿": 8447, "鹃": 8448, "鹄": 8449, "鹅": 8450, "鹉": 8451, "鹊": 8452, "鹌": 8453, "鹏": 8454, "鹑": 8455, "鹗": 8456, "鹘": 8457, "鹜": 8458, "鹤": 8459, "鹦": 8460, "鹫": 8461, "鹭": 8462, "鹰": 8463, "鹳": 8464, "鹹": 8465, "鹼": 8466, "鹽": 8467, "鹿": 8468, "麂": 8469, "麒": 8470, "麓": 8471, "麗": 8472, "麝": 8473, "麟": 8474, "麥": 8475, "麦": 8476, "麴": 8477, "麵": 8478, "麸": 8479, "麻": 8480, "麼": 8481, "麽": 8482, "麾": 8483, "麿": 8484, "黃": 8485, "黄": 8486, "黍": 8487, "黎": 8488, "黏": 8489, "黑": 8490, "黒": 8491, "黔": 8492, "默": 8493, "黛": 8494, "黜": 8495, "黝": 8496, "點": 8497, "黟": 8498, "黨": 8499, "黩": 8500, "黯": 8501, "黴": 8502, "黻": 8503, "黼": 8504, "鼎": 8505, "鼐": 8506, "鼓": 8507, "鼠": 8508, "鼬": 8509, "鼯": 8510, "鼴": 8511, "鼷": 8512, "鼻": 8513, "鼾": 8514, "齊": 8515, "齋": 8516, "齐": 8517, "齒": 8518, "齡": 8519, "齣": 8520, "齦": 8521, "齿": 8522, "龄": 8523, "龈": 8524, "龋": 8525, "龍": 8526, "龐": 8527, "龔": 8528, "龕": 8529, "龙": 8530, "龚": 8531, "龛": 8532, "龜": 8533, "龟": 8534, "龢": 8535, "ꜣ": 8536, "가": 8537, "고": 8538, "공": 8539, "관": 8540, "구": 8541, "국": 8542, "기": 8543, "나": 8544, "내": 8545, "너": 8546, "년": 8547, "는": 8548, "니": 8549, "다": 8550, "대": 8551, "도": 8552, "동": 8553, "드": 8554, "라": 8555, "레": 8556, "로": 8557, "를": 8558, "리": 8559, "마": 8560, "만": 8561, "면": 8562, "명": 8563, "문": 8564, "미": 8565, "민": 8566, "법": 8567, "보": 8568, "부": 8569, "비": 8570, "사": 8571, "서": 8572, "선": 8573, "성": 8574, "세": 8575, "소": 8576, "속": 8577, "수": 8578, "스": 8579, "시": 8580, "신": 8581, "아": 8582, "안": 8583, "야": 8584, "양": 8585, "어": 8586, "에": 8587, "여": 8588, "영": 8589, "오": 8590, "요": 8591, "우": 8592, "운": 8593, "원": 8594, "월": 8595, "유": 8596, "은": 8597, "을": 8598, "의": 8599, "이": 8600, "인": 8601, "일": 8602, "자": 8603, "장": 8604, "전": 8605, "정": 8606, "제": 8607, "조": 8608, "주": 8609, "중": 8610, "지": 8611, "진": 8612, "치": 8613, "타": 8614, "통": 8615, "하": 8616, "한": 8617, "해": 8618, "행": 8619, "호": 8620, "": 8621, "": 8622, "": 8623, "": 8624, "": 8625, "": 8626, "": 8627, "論": 8628, "不": 8629, "略": 8630, "力": 8631, "理": 8632, "fi": 8633, "fl": 8634, "️": 8635, "︐": 8636, "︰": 8637, "︱": 8638, "﹐": 8639, "﹑": 8640, "﹒": 8641, "﹔": 8642, "﹕": 8643, "﹙": 8644, "﹚": 8645, "﹝": 8646, "﹞": 8647, "﹢": 8648, "﹣": 8649, "﹥": 8650, "": 8651, "!": 8652, """: 8653, "#": 8654, "%": 8655, "&": 8656, "'": 8657, "(": 8658, ")": 8659, "*": 8660, "+": 8661, ",": 8662, "-": 8663, ".": 8664, "/": 8665, "0": 8666, "1": 8667, "2": 8668, "3": 8669, "4": 8670, "5": 8671, "6": 8672, "7": 8673, "8": 8674, "9": 8675, ":": 8676, ";": 8677, "<": 8678, "=": 8679, ">": 8680, "?": 8681, "A": 8682, "B": 8683, "C": 8684, "D": 8685, "E": 8686, "F": 8687, "G": 8688, "H": 8689, "I": 8690, "J": 8691, "K": 8692, "L": 8693, "M": 8694, "N": 8695, "O": 8696, "P": 8697, "Q": 8698, "R": 8699, "S": 8700, "T": 8701, "U": 8702, "V": 8703, "W": 8704, "X": 8705, "Y": 8706, "[": 8707, "\": 8708, "]": 8709, "a": 8710, "b": 8711, "c": 8712, "d": 8713, "e": 8714, "f": 8715, "g": 8716, "h": 8717, "i": 8718, "j": 8719, "l": 8720, "m": 8721, "n": 8722, "o": 8723, "p": 8724, "q": 8725, "r": 8726, "s": 8727, "t": 8728, "u": 8729, "v": 8730, "w": 8731, "x": 8732, "y": 8733, "|": 8734, "~": 8735, "。": 8736, "」": 8737, "、": 8738, "・": 8739, "¥": 8740, "�": 8741, "𐌠": 8742, "𐨯": 8743, "𒀀": 8744, "𒀭": 8745, "𒀸": 8746, "𒁀": 8747, "𒁕": 8748, "𒂍": 8749, "𒂗": 8750, "𒅆": 8751, "𒆠": 8752, "𒆤": 8753, "𒈗": 8754, "𒈠": 8755, "𒈬": 8756, "𒋀": 8757, "𒌨": 8758, "𒍑": 8759, "𝗮": 8760, "𝗲": 8761, "𝗿": 8762, "𝛽": 8763, "🌍": 8764, "🌟": 8765, "🎉": 8766, "👉": 8767, "💪": 8768, "📍": 8769, "😉": 8770, "😊": 8771, "😎": 8772, "🙂": 8773, "🚀": 8774, "𤒹": 8775, "𫖮": 8776, "𫖯": 8777, "▁t": 8778, "in": 8779, "he": 8780, "▁a": 8781, "re": 8782, "on": 8783, "er": 8784, "at": 8785, ",▁": 8786, "▁the": 8787, "or": 8788, "▁s": 8789, "an": 8790, "en": 8791, "es": 8792, "▁c": 8793, "▁o": 8794, "al": 8795, "it": 8796, "is": 8797, "ing": 8798, "ed": 8799, "▁w": 8800, "▁p": 8801, ".▁": 8802, "ar": 8803, "▁f": 8804, "ou": 8805, "▁of": 8806, "▁b": 8807, "▁in": 8808, "nd": 8809, "ic": 8810, "ion": 8811, "▁m": 8812, "▁to": 8813, "▁d": 8814, "le": 8815, "as": 8816, "ro": 8817, "▁and": 8818, "ent": 8819, "ct": 8820, "▁h": 8821, "il": 8822, "om": 8823, "▁e": 8824, "st": 8825, "▁th": 8826, "▁re": 8827, "el": 8828, "▁l": 8829, "et": 8830, "ol": 8831, "\n\n": 8832, "▁n": 8833, "ation": 8834, "iv": 8835, "and": 8836, "im": 8837, "id": 8838, "us": 8839, "ra": 8840, "ly": 8841, "ch": 8842, "ur": 8843, "ig": 8844, "ow": 8845, "▁g": 8846, "ce": 8847, "ot": 8848, "ut": 8849, "▁is": 8850, "am": 8851, "ir": 8852, "▁▁": 8853, "▁st": 8854, "▁be": 8855, "The": 8856, "ers": 8857, "▁for": 8858, "ul": 8859, "ate": 8860, "▁S": 8861, "the": 8862, "ay": 8863, "▁C": 8864, "▁on": 8865, "ad": 8866, "ith": 8867, "▁(": 8868, "se": 8869, "th": 8870, "▁y": 8871, "un": 8872, "▁that": 8873, "ve": 8874, "▁A": 8875, "if": 8876, "ver": 8877, "ter": 8878, "▁con": 8879, "▁as": 8880, "▁pro": 8881, "▁with": 8882, "ag": 8883, "ist": 8884, "od": 8885, "um": 8886, "em": 8887, "▁an": 8888, "ies": 8889, "op": 8890, "▁M": 8891, "res": 8892, "▁al": 8893, "our": 8894, "ab": 8895, "ess": 8896, "▁are": 8897, "发展": 8898, "▁he": 8899, "ect": 8900, "ac": 8901, "ere": 8902, "▁ex": 8903, "▁P": 8904, "ity": 8905, "▁v": 8906, "os": 8907, "▁or": 8908, "▁com": 8909, "ill": 8910, "ory": 8911, "ts": 8912, "ec": 8913, "ore": 8914, "oc": 8915, "▁it": 8916, "rom": 8917, "qu": 8918, "ment": 8919, "ain": 8920, "--": 8921, "igh": 8922, "ke": 8923, "pp": 8924, "▁B": 8925, "est": 8926, "ive": 8927, "ud": 8928, "▁by": 8929, ":▁": 8930, "▁was": 8931, "▁wh": 8932, "ial": 8933, "ld": 8934, "▁at": 8935, "中国": 8936, "▁ch": 8937, "ure": 8938, "▁R": 8939, "社会": 8940, "ri": 8941, "▁de": 8942, "all": 8943, "▁from": 8944, "ant": 8945, "rou": 8946, "▁D": 8947, "▁I": 8948, "▁us": 8949, "▁su": 8950, "ical": 8951, "-▁": 8952, "og": 8953, "经济": 8954, ")▁": 8955, "art": 8956, "nt": 8957, "▁T": 8958, "ort": 8959, "▁can": 8960, "ew": 8961, "▁le": 8962, "▁r": 8963, "her": 8964, "ateg": 8965, "▁E": 8966, "▁H": 8967, "研究": 8968, "ions": 8969, "▁L": 8970, "ap": 8971, "▁en": 8972, "▁ha": 8973, "ine": 8974, "▁G": 8975, "▁sp": 8976, "ell": 8977, "▁F": 8978, "ard": 8979, "技术": 8980, "ge": 8981, "ategory": 8982, "▁sh": 8983, "gh": 8984, "▁you": 8985, "▁N": 8986, "ear": 8987, "pl": 8988, "Category": 8989, "ated": 8990, "▁pl": 8991, "are": 8992, "ight": 8993, "可以": 8994, "ther": 8995, "du": 8996, "▁W": 8997, "▁u": 8998, "▁se": 8999, "▁ab": 9000, "ich": 9001, "ak": 9002, "act": 9003, "per": 9004, "进行": 9005, "▁int": 9006, "iz": 9007, "ome": 9008, "out": 9009, "ff": 9010, "▁wor": 9011, "ans": 9012, "一个": 9013, "企业": 9014, "ip": 9015, "▁im": 9016, "ast": 9017, "ost": 9018, "ust": 9019, "▁their": 9020, "ong": 9021, "ous": 9022, "数据": 9023, "管理": 9024, "pt": 9025, "ia": 9026, "In": 9027, "end": 9028, "学生": 9029, "▁have": 9030, "国家": 9031, "ations": 9032, "问题": 9033, "Th": 9034, "ide": 9035, "ib": 9036, "ould": 9037, "▁your": 9038, "▁not": 9039, "ary": 9040, "▁this": 9041, "so": 9042, "ks": 9043, "age": 9044, "教育": 9045, "通过": 9046, "orm": 9047, "▁comp": 9048, "ru": 9049, "系统": 9050, "▁ad": 9051, "cl": 9052, "hen": 9053, "▁k": 9054, "ents": 9055, "ep": 9056, "▁J": 9057, "▁cont": 9058, "▁dis": 9059, "▁res": 9060, "vel": 9061, "ult": 9062, "ood": 9063, "av": 9064, "信息": 9065, "ance": 9066, "cc": 9067, "ign": 9068, "ber": 9069, "ire": 9070, "▁we": 9071, "ater": 9072, "ind": 9073, "ces": 9074, "ual": 9075, "主义": 9076, "ach": 9077, "----": 9078, "ry": 9079, "wh": 9080, "工作": 9081, "ass": 9082, "▁un": 9083, "重要": 9084, "▁cl": 9085, "we": 9086, "able": 9087, "▁ne": 9088, "ress": 9089, "▁U": 9090, "ild": 9091, "one": 9092, "ence": 9093, "oo": 9094, "建设": 9095, "▁te": 9096, "ice": 9097, "ction": 9098, "ang": 9099, "主要": 9100, "▁all": 9101, "ord": 9102, "▁O": 9103, "ue": 9104, "ish": 9105, "reat": 9106, "ition": 9107, "人民": 9108, "ors": 9109, "▁more": 9110, "ens": 9111, "ub": 9112, "▁other": 9113, "▁also": 9114, "▁me": 9115, "方面": 9116, "ack": 9117, "▁they": 9118, "ame": 9119, "实现": 9120, "ase": 9121, "ian": 9122, "基础": 9123, "ph": 9124, "过程": 9125, "▁has": 9126, "服务": 9127, "▁will": 9128, "ile": 9129, "市场": 9130, "▁were": 9131, "but": 9132, "fere": 9133, "▁imp": 9134, "ely": 9135, "ric": 9136, "▁do": 9137, "▁about": 9138, "ime": 9139, "能力": 9140, "ie": 9141, "文化": 9142, "安全": 9143, "▁per": 9144, "需要": 9145, "▁St": 9146, "rit": 9147, "▁ar": 9148, "我们": 9149, "ace": 9150, "▁▁▁▁": 9151, "▁app": 9152, "▁j": 9153, "使用": 9154, "ake": 9155, "\"▁": 9156, "方法": 9157, "form": 9158, "ike": 9159, "mer": 9160, "▁man": 9161, "▁pre": 9162, "教学": 9163, "ound": 9164, "▁K": 9165, "▁out": 9166, ";▁": 9167, "This": 9168, "own": 9169, "▁his": 9170, "中的": 9171, "It": 9172, "ings": 9173, "▁\"": 9174, "不同": 9175, "ose": 9176, "生产": 9177, "▁them": 9178, "ount": 9179, "very": 9180, "nder": 9181, "tern": 9182, "▁stud": 9183, "环境": 9184, "te": 9185, "aus": 9186, "科学": 9187, "具有": 9188, "分析": 9189, "制度": 9190, "▁ev": 9191, "学习": 9192, "影响": 9193, "我国": 9194, "应用": 9195, "提供": 9196, "ons": 9197, "olog": 9198, "rough": 9199, "政府": 9200, "创新": 9201, "▁sc": 9202, "eop": 9203, "组织": 9204, "▁one": 9205, "),▁": 9206, "erv": 9207, "▁into": 9208, "▁its": 9209, "ond": 9210, "▁sy": 9211, "▁up": 9212, "▁comm": 9213, "网络": 9214, "ite": 9215, "▁tra": 9216, "ail": 9217, "ree": 9218, "▁ro": 9219, "low": 9220, "ov": 9221, "ates": 9222, "eople": 9223, "ities": 9224, "作用": 9225, "–▁": 9226, "理论": 9227, "here": 9228, "ays": 9229, "关系": 9230, "▁part": 9231, "公司": 9232, "ific": 9233, "基本": 9234, "以及": 9235, "体系": 9236, "king": 9237, "要求": 9238, "可能": 9239, "clud": 9240, "lect": 9241, "▁rec": 9242, "ne": 9243, "▁Ch": 9244, "▁qu": 9245, "ob": 9246, "▁bet": 9247, "uring": 9248, "结构": 9249, "ys": 9250, "▁bec": 9251, "资源": 9252, "ove": 9253, "les": 9254, "设计": 9255, "irst": 9256, "▁col": 9257, "ious": 9258, "产业": 9259, "方式": 9260, "▁V": 9261, "ating": 9262, "ren": 9263, "提高": 9264, "ough": 9265, "round": 9266, "ms": 9267, "知识": 9268, "▁these": 9269, "作为": 9270, "▁dif": 9271, "ally": 9272, "改革": 9273, "世界": 9274, "▁tr": 9275, "▁act": 9276, "包括": 9277, "▁under": 9278, "▁kn": 9279, "ning": 9280, "ple": 9281, "形成": 9282, "▁so": 9283, "row": 9284, "ool": 9285, "▁over": 9286, "▁year": 9287, "▁time": 9288, "▁may": 9289, "▁ag": 9290, "同时": 9291, "历史": 9292, "▁than": 9293, "▁–▁": 9294, "一种": 9295, "lp": 9296, "国际": 9297, "ath": 9298, "which": 9299, "yp": 9300, "法律": 9301, "ular": 9302, "▁who": 9303, "hed": 9304, "▁when": 9305, "ced": 9306, "相关": 9307, "▁some": 9308, "▁des": 9309, "这些": 9310, "lic": 9311, "red": 9312, "ational": 9313, "ics": 9314, "存在": 9315, "fter": 9316, "▁people": 9317, "**": 9318, "ark": 9319, "规定": 9320, "部分": 9321, "over": 9322, "▁ra": 9323, "alth": 9324, "内容": 9325, "ll": 9326, "▁new": 9327, "细胞": 9328, "行为": 9329, "保护": 9330, "als": 9331, "▁tw": 9332, "int": 9333, "ures": 9334, "ject": 9335, "▁like": 9336, "因此": 9337, "▁our": 9338, "▁help": 9339, "活动": 9340, "ased": 9341, "eth": 9342, "金融": 9343, "ex": 9344, "▁through": 9345, "▁cons": 9346, "▁inc": 9347, "▁been": 9348, "▁-▁": 9349, "没有": 9350, "产品": 9351, "oth": 9352, "velop": 9353, "政治": 9354, "▁fe": 9355, "其他": 9356, "成为": 9357, "ng": 9358, "▁how": 9359, "建立": 9360, "▁spec": 9361, "标准": 9362, "ful": 9363, "现代": 9364, "就是": 9365, "政策": 9366, "ments": 9367, "stem": 9368, "old": 9369, "ffect": 9370, "ient": 9371, "提出": 9372, "▁use": 9373, "实践": 9374, "uc": 9375, "ft": 9376, "▁rel": 9377, "▁which": 9378, "ook": 9379, "思想": 9380, "▁acc": 9381, "目标": 9382, "ause": 9383, "控制": 9384, "Wh": 9385, "利用": 9386, "▁had": 9387, "▁bl": 9388, "▁gen": 9389, "▁first": 9390, "iss": 9391, "价值": 9392, "ative": 9393, "aw": 9394, "uch": 9395, "计算": 9396, "发生": 9397, "▁ind": 9398, "▁need": 9399, "情况": 9400, "▁rep": 9401, "ivers": 9402, "▁differe": 9403, "erm": 9404, "ween": 9405, "时间": 9406, "▁exp": 9407, "▁work": 9408, "▁em": 9409, "▁am": 9410, "▁reg": 9411, "之间": 9412, "处理": 9413, "ract": 9414, "领域": 9415, "风险": 9416, "ied": 9417, "第一": 9418, "to": 9419, "▁used": 9420, "land": 9421, "根据": 9422, "质量": 9423, "▁pr": 9424, "对于": 9425, "▁off": 9426, "ility": 9427, "数字": 9428, "▁Un": 9429, "有效": 9430, "rop": 9431, "▁ass": 9432, "▁inv": 9433, "人的": 9434, "▁ph": 9435, "必须": 9436, "产生": 9437, "▁two": 9438, "社会主义": 9439, "He": 9440, "--------": 9441, ").▁": 9442, "▁ac": 9443, "这种": 9444, "功能": 9445, "ise": 9446, "▁produ": 9447, "▁would": 9448, "水平": 9449, "ss": 9450, "▁between": 9451, "ife": 9452, "its": 9453, ".\"": 9454, "tain": 9455, "解决": 9456, "生活": 9457, "ef": 9458, "iet": 9459, "▁dec": 9460, "▁sur": 9461, "ting": 9462, "oss": 9463, "”▁": 9464, "▁prov": 9465, "▁develop": 9466, "劳动": 9467, "ram": 9468, "传统": 9469, "▁what": 9470, "▁child": 9471, "St": 9472, "cy": 9473, "智能": 9474, "全面": 9475, "▁her": 9476, "chool": 9477, "机制": 9478, "ins": 9479, "模式": 9480, "▁any": 9481, "dition": 9482, "gan": 9483, "ily": 9484, "ict": 9485, "不断": 9486, "ont": 9487, "?▁": 9488, "项目": 9489, "专业": 9490, "ick": 9491, "认为": 9492, "▁most": 9493, "由于": 9494, "投资": 9495, "ited": 9496, "wn": 9497, "▁sa": 9498, "ade": 9499, "oy": 9500, "▁rem": 9501, "ower": 9502, "ident": 9503, "hes": 9504, "ines": 9505, "ever": 9506, "美国": 9507, "eg": 9508, "chn": 9509, "▁sm": 9510, "条件": 9511, "中心": 9512, "▁fl": 9513, "工程": 9514, "人员": 9515, "▁system": 9516, "meric": 9517, "▁Y": 9518, "机构": 9519, "ange": 9520, "变化": 9521, "▁exam": 9522, "。▁": 9523, "▁bu": 9524, "get": 9525, "cess": 9526, "教师": 9527, "▁such": 9528, "▁ob": 9529, "ural": 9530, "城市": 9531, "▁inf": 9532, "民族": 9533, "ible": 9534, "com": 9535, "ered": 9536, "如果": 9537, "课程": 9538, "▁includ": 9539, "能够": 9540, "实施": 9541, "▁trans": 9542, "ten": 9543, "cer": 9544, "行政": 9545, "自己": 9546, "aking": 9547, "▁inst": 9548, "ble": 9549, "▁sub": 9550, "性的": 9551, "How": 9552, "io": 9553, "实验": 9554, "▁att": 9555, "elf": 9556, "▁In": 9557, "时代": 9558, "发展的": 9559, "这一": 9560, "ists": 9561, "arch": 9562, "培养": 9563, "实际": 9564, "▁could": 9565, "大学": 9566, "▁only": 9567, "推动": 9568, "定的": 9569, "▁no": 9570, "▁sign": 9571, "地区": 9572, "other": 9573, "科技": 9574, "上的": 9575, "ward": 9576, "所有": 9577, "第二": 9578, "ata": 9579, "hip": 9580, "urn": 9581, "需求": 9582, "全球": 9583, "发现": 9584, "▁lear": 9585, "出现": 9586, "▁var": 9587, "▁different": 9588, "▁pat": 9589, "▁play": 9590, "大的": 9591, "ature": 9592, "▁if": 9593, "▁inter": 9594, "结合": 9595, "ues": 9596, "As": 9597, "ives": 9598, "ology": 9599, "any": 9600, "或者": 9601, "ink": 9602, "▁during": 9603, "生态": 9604, "fore": 9605, "▁pers": 9606, "▁pol": 9607, "▁many": 9608, "..": 9609, "▁there": 9610, "vent": 9611, "推进": 9612, "生物": 9613, ").": 9614, "一些": 9615, "▁“": 9616, "▁exper": 9617, "resent": 9618, "▁supp": 9619, "▁mod": 9620, "ience": 9621, "▁cre": 9622, "sp": 9623, "代表": 9624, "合作": 9625, "促进": 9626, "▁po": 9627, "增加": 9628, "他们": 9629, "ection": 9630, "不能": 9631, "责任": 9632, "ps": 9633, "▁num": 9634, "共同": 9635, "▁disc": 9636, "▁loc": 9637, "▁well": 9638, "ants": 9639, "▁form": 9640, "的发展": 9641, "▁high": 9642, "▁go": 9643, "增长": 9644, "▁water": 9645, "ness": 9646, "支持": 9647, "▁sim": 9648, "|▁": 9649, "ollow": 9650, "工业": 9651, "ev": 9652, "orn": 9653, "精神": 9654, "战略": 9655, "▁years": 9656, "▁ear": 9657, "中央": 9658, "▁found": 9659, "自然": 9660, "阶段": 9661, "iqu": 9662, "▁health": 9663, "We": 9664, "stand": 9665, "农业": 9666, "开发": 9667, "They": 9668, "一步": 9669, "核心": 9670, "加强": 9671, "arm": 9672, "cent": 9673, "新的": 9674, "ism": 9675, "▁every": 9676, "提升": 9677, "For": 9678, "!▁": 9679, "结果": 9680, "ork": 9681, "they": 9682, "let": 9683, "Al": 9684, "▁import": 9685, "\",": 9686, "▁med": 9687, "ix": 9688, "形式": 9689, "部门": 9690, "of": 9691, "成本": 9692, "ages": 9693, "▁after": 9694, "▁resp": 9695, "资本": 9696, "▁call": 9697, "imes": 9698, "ruct": 9699, "Ch": 9700, "▁commun": 9701, "ically": 9702, "党的": 9703, "▁cent": 9704, "ds": 9705, "ices": 9706, "▁car": 9707, "ck": 9708, "erg": 9709, "的是": 9710, "▁get": 9711, "▁det": 9712, "空间": 9713, "已经": 9714, "目前": 9715, "ized": 9716, "▁typ": 9717, "关键": 9718, "▁know": 9719, "ually": 9720, "个人": 9721, "设备": 9722, "选择": 9723, "▁co": 9724, "▁dist": 9725, "坚持": 9726, "ential": 9727, "这个": 9728, "iew": 9729, "化的": 9730, "ize": 9731, "▁each": 9732, "▁ke": 9733, "▁fam": 9734, "原则": 9735, "ik": 9736, "▁rese": 9737, "▁effect": 9738, "的一": 9739, "eng": 9740, "inal": 9741, "直接": 9742, "ran": 9743, "因素": 9744, "过程中": 9745, "综合": 9746, "con": 9747, "其中": 9748, "▁expl": 9749, "cept": 9750, "▁set": 9751, "导致": 9752, "ug": 9753, "▁techn": 9754, "▁Americ": 9755, "保障": 9756, "▁str": 9757, "持续": 9758, "单位": 9759, "人才": 9760, "的重要": 9761, "ax": 9762, "第三": 9763, "▁sk": 9764, "合同": 9765, "运动": 9766, "▁art": 9767, "▁using": 9768, "led": 9769, "raph": 9770, "omm": 9771, "进一步": 9772, "oh": 9773, "▁sec": 9774, "up": 9775, "ale": 9776, "人类": 9777, "全国": 9778, "积极": 9779, "▁prog": 9780, "formation": 9781, "▁cell": 9782, "模型": 9783, "也是": 9784, "▁where": 9785, "具体": 9786, "▁long": 9787, "▁lar": 9788, "tle": 9789, "oun": 9790, "ien": 9791, "主体": 9792, "ral": 9793, "If": 9794, "平台": 9795, "不是": 9796, "▁bel": 9797, "iel": 9798, "ee": 9799, "开放": 9800, "如何": 9801, "▁those": 9802, "*▁": 9803, "范围": 9804, "▁make": 9805, "▁hum": 9806, "治理": 9807, "),": 9808, "ional": 9809, "领导": 9810, "These": 9811, "ather": 9812, "▁incre": 9813, "▁ext": 9814, "ron": 9815, "ases": 9816, "▁ed": 9817, "ier": 9818, "特色": 9819, "获得": 9820, "材料": 9821, "”,": 9822, "ivid": 9823, "中华": 9824, "▁ent": 9825, "一般": 9826, "feren": 9827, "▁world": 9828, "▁mem": 9829, "参与": 9830, "得到": 9831, "有关": 9832, "An": 9833, "▁process": 9834, "明确": 9835, "意义": 9836, "▁grou": 9837, "iron": 9838, "air": 9839, "联网": 9840, "▁The": 9841, "▁should": 9842, "评价": 9843, "从而": 9844, "制造": 9845, "ock": 9846, "▁back": 9847, "程序": 9848, "ody": 9849, "▁but": 9850, "完善": 9851, "资产": 9852, "▁even": 9853, "▁life": 9854, "消费": 9855, "能源": 9856, "▁gener": 9857, "way": 9858, "▁count": 9859, "因为": 9860, "ublic": 9861, "▁way": 9862, "各种": 9863, "ead": 9864, "治疗": 9865, "▁fact": 9866, "▁show": 9867, "采用": 9868, "▁val": 9869, "▁soc": 9870, "▁serv": 9871, "▁follow": 9872, "▁fun": 9873, "发挥": 9874, "be": 9875, "ars": 9876, "表现": 9877, "▁just": 9878, "ah": 9879, "开始": 9880, "▁own": 9881, "学校": 9882, "▁lead": 9883, "with": 9884, "ave": 9885, "▁being": 9886, "xt": 9887, "▁study": 9888, "cri": 9889, "▁hist": 9890, "▁pop": 9891, "▁char": 9892, "iversity": 9893, "▁find": 9894, "ished": 9895, "利益": 9896, "ality": 9897, "▁see": 9898, "ince": 9899, "任务": 9900, "▁activ": 9901, "▁level": 9902, "for": 9903, "▁around": 9904, "▁min": 9905, "特征": 9906, "▁ref": 9907, "ury": 9908, "充分": 9909, "ribut": 9910, "There": 9911, "开展": 9912, "▁school": 9913, "rain": 9914, "公共": 9915, "els": 9916, "iving": 9917, "行业": 9918, "▁before": 9919, "经营": 9920, "患者": 9921, "▁mon": 9922, "但是": 9923, "uss": 9924, "▁main": 9925, "不仅": 9926, "▁both": 9927, "ution": 9928, "olv": 9929, "革命": 9930, "▁grow": 9931, "▁made": 9932, "什么": 9933, "pr": 9934, "ared": 9935, "▁Ar": 9936, "ross": 9937, "基于": 9938, "随着": 9939, "地方": 9940, "▁cur": 9941, "▁end": 9942, "统一": 9943, "und": 9944, "▁def": 9945, "%▁": 9946, "▁design": 9947, "重点": 9948, "outh": 9949, "▁read": 9950, "NA": 9951, "▁requ": 9952, "计划": 9953, "ision": 9954, "确定": 9955, "Ex": 9956, "应当": 9957, "▁par": 9958, "read": 9959, "▁data": 9960, "ty": 9961, "ering": 9962, "akes": 9963, "▁children": 9964, "▁som": 9965, "pro": 9966, "▁aut": 9967, "规划": 9968, "▁person": 9969, "健康": 9970, "竞争": 9971, "ands": 9972, "▁add": 9973, "▁important": 9974, "规模": 9975, "▁care": 9976, "hem": 9977, "为了": 9978, "'▁": 9979, "程度": 9980, "两个": 9981, "When": 9982, "用于": 9983, "▁again": 9984, "银行": 9985, "But": 9986, "执行": 9987, "关于": 9988, "gg": 9989, "区域": 9990, "▁small": 9991, "职业": 9992, "农村": 9993, "ok": 9994, "来的": 9995, "ulation": 9996, "you": 9997, "ted": 9998, "▁writ": 9999, "by": 10000, "时期": 10001, "▁dep": 10002, "▁within": 10003, "▁then": 10004, "——": 10005, "日本": 10006, "构建": 10007, "rol": 10008, "ined": 10009, "达到": 10010, "man": 10011, "▁understand": 10012, "▁partic": 10013, "viron": 10014, "完成": 10015, "iver": 10016, "创造": 10017, "▁because": 10018, "irect": 10019, "例如": 10020, "au": 10021, "▁gl": 10022, "▁example": 10023, "=▁": 10024, "比较": 10025, "▁might": 10026, "操作": 10027, "▁my": 10028, "▁she": 10029, "▁down": 10030, "ash": 10031, "重大": 10032, "业务": 10033, "On": 10034, "▁mus": 10035, "概念": 10036, "▁Pro": 10037, "umb": 10038, "▁cap": 10039, "特点": 10040, "de": 10041, "▁food": 10042, "az": 10043, "▁information": 10044, "电子": 10045, "意识": 10046, "认识": 10047, "▁day": 10048, "oci": 10049, "▁ser": 10050, "收入": 10051, "ouse": 10052, "这样": 10053, "ital": 10054, "基因": 10055, "amp": 10056, "理解": 10057, "overn": 10058, "itions": 10059, "lish": 10060, "方向": 10061, "▁students": 10062, "pect": 10063, "You": 10064, "▁does": 10065, "ement": 10066, "▁called": 10067, "▁very": 10068, "决定": 10069, "ets": 10070, "ides": 10071, "规范": 10072, "之间的": 10073, "所以": 10074, "交易": 10075, "por": 10076, "▁while": 10077, "▁prot": 10078, "▁much": 10079, "表示": 10080, "▁est": 10081, "▁av": 10082, "lex": 10083, "▁ins": 10084, "To": 10085, "omen": 10086, "cing": 10087, "方案": 10088, "▁build": 10089, "建筑": 10090, "特别": 10091, "性和": 10092, "ium": 10093, "是否": 10094, "▁three": 10095, "的人": 10096, "降低": 10097, "▁br": 10098, "权利": 10099, "造成": 10100, "What": 10101, "ividual": 10102, "稳定": 10103, "▁class": 10104, "▁gu": 10105, "der": 10106, "aj": 10107, "指导": 10108, "取得": 10109, "acter": 10110, "▁same": 10111, "世纪": 10112, "▁often": 10113, "Re": 10114, "However": 10115, "ired": 10116, "ients": 10117, "),": 10118, "▁pract": 10119, "▁elect": 10120, "效率": 10121, "pen": 10122, "▁adv": 10123, "之一": 10124, "▁New": 10125, "ames": 10126, "hers": 10127, "sh": 10128, "ton": 10129, "▁start": 10130, "量的": 10131, "▁him": 10132, "bers": 10133, "减少": 10134, "▁organ": 10135, "马克": 10136, "▁number": 10137, "▁dise": 10138, "学科": 10139, "ories": 10140, "目的": 10141, "体现": 10142, "▁▁▁▁▁▁▁▁": 10143, "优势": 10144, "”。": 10145, "orth": 10146, "▁treat": 10147, "▁sol": 10148, "进入": 10149, "▁ris": 10150, "货币": 10151, "▁di": 10152, "ights": 10153, "▁gra": 10154, "▁less": 10155, "inc": 10156, "▁lit": 10157, "的基本": 10158, "▁mat": 10159, "ergy": 10160, "oot": 10161, "▁proble": 10162, "ograph": 10163, "自由": 10164, "vironment": 10165, "angu": 10166, "reen": 10167, "gen": 10168, "ull": 10169, "措施": 10170, "▁known": 10171, "国内": 10172, "法院": 10173, "▁power": 10174, "▁▁▁": 10175, "iety": 10176, "这是": 10177, "报告": 10178, "▁met": 10179, "更加": 10180, "人们": 10181, "day": 10182, "了解": 10183, "好的": 10184, "ason": 10185, "马克思": 10186, "以下": 10187, "艺术": 10188, "par": 10189, "成果": 10190, "有的": 10191, "includ": 10192, "▁occ": 10193, "共产": 10194, "ven": 10195, "▁learn": 10196, "运行": 10197, "&▁": 10198, "反应": 10199, "民主": 10200, "经验": 10201, "状态": 10202, "学生的": 10203, "ffic": 10204, "保险": 10205, "长期": 10206, "物质": 10207, "til": 10208, "▁allow": 10209, "▁ident": 10210, "用户": 10211, "▁good": 10212, "▁vis": 10213, "ean": 10214, "eb": 10215, "▁eng": 10216, "ains": 10217, "\".": 10218, "▁contin": 10219, "而且": 10220, "ively": 10221, "ret": 10222, "ources": 10223, "的研究": 10224, "port": 10225, "▁equ": 10226, "line": 10227, "的基础": 10228, "▁dr": 10229, "增强": 10230, "ann": 10231, "▁pot": 10232, "▁take": 10233, "▁body": 10234, "ults": 10235, "复杂": 10236, "ization": 10237, "▁individual": 10238, "▁cult": 10239, "By": 10240, "合理": 10241, "▁ret": 10242, "贸易": 10243, "▁const": 10244, "▁redu": 10245, "及其": 10246, "▁research": 10247, "str": 10248, "原因": 10249, "ived": 10250, "语言": 10251, "▁support": 10252, "ern": 10253, "一定": 10254, "不同的": 10255, "ately": 10256, "ox": 10257, "ield": 10258, "委员": 10259, "▁common": 10260, "是在": 10261, "aterial": 10262, "▁poss": 10263, "体制": 10264, "rent": 10265, "资金": 10266, "人口": 10267, "riend": 10268, "including": 10269, "体的": 10270, "评估": 10271, "ider": 10272, "▁conf": 10273, "文明": 10274, "ats": 10275, "ify": 10276, "ger": 10277, "ior": 10278, "组成": 10279, "▁did": 10280, "▁beh": 10281, "任何": 10282, "bs": 10283, "▁Sc": 10284, "掌握": 10285, "强调": 10286, "▁=▁": 10287, "▁ele": 10288, "▁fil": 10289, "只有": 10290, "改变": 10291, "是指": 10292, "ethod": 10293, "▁signific": 10294, "▁pos": 10295, "ining": 10296, "ym": 10297, "▁Ind": 10298, "相互": 10299, "itive": 10300, "▁cor": 10301, "ination": 10302, "▁cle": 10303, "未来": 10304, "where": 10305, "调整": 10306, "ently": 10307, "esp": 10308, "▁human": 10309, "ability": 10310, "▁said": 10311, "ids": 10312, "许多": 10313, "nect": 10314, "ially": 10315, "的问题": 10316, "制定": 10317, "▁area": 10318, "ferences": 10319, "指出": 10320, "▁appro": 10321, "ilar": 10322, "agn": 10323, "orts": 10324, "there": 10325, "严重": 10326, "设施": 10327, "年的": 10328, "rap": 10329, "ording": 10330, "▁state": 10331, "▁perform": 10332, "土地": 10333, "价格": 10334, "以来": 10335, "按照": 10336, "重要的": 10337, "ling": 10338, "ember": 10339, "▁pres": 10340, "▁prof": 10341, "osed": 10342, "针对": 10343, "受到": 10344, "现代化": 10345, "更多": 10346, "erest": 10347, "▁&▁": 10348, "ills": 10349, "都是": 10350, "ves": 10351, "One": 10352, "优化": 10353, "sc": 10354, "lu": 10355, "中国特色": 10356, "atic": 10357, "运用": 10358, "参考": 10359, "应该": 10360, "融合": 10361, "▁now": 10362, "ina": 10363, "ccess": 10364, "监督": 10365, "▁chang": 10366, "oms": 10367, "iness": 10368, "化学": 10369, "▁include": 10370, "探索": 10371, "自己的": 10372, "▁Al": 10373, "lished": 10374, "对象": 10375, "根本": 10376, "通常": 10377, "保证": 10378, "手段": 10379, "▁air": 10380, "考虑": 10381, "内部": 10382, "ner": 10383, "的新": 10384, "veral": 10385, "▁quest": 10386, "eral": 10387, "神经": 10388, "iven": 10389, "才能": 10390, "互联网": 10391, "▁want": 10392, "▁Eng": 10393, "蛋白": 10394, "less": 10395, "地位": 10396, "||": 10397, "机关": 10398, "分子": 10399, "▁anal": 10400, "系列": 10401, "▁Sp": 10402, "决策": 10403, "商业": 10404, "▁prom": 10405, "独立": 10406, "思维": 10407, "tt": 10408, "iod": 10409, "的影响": 10410, "。”": 10411, "相对": 10412, "▁pass": 10413, "明显": 10414, "▁American": 10415, "rodu": 10416, "广泛": 10417, "▁test": 10418, "And": 10419, "人工": 10420, "▁plan": 10421, "非常": 10422, "▁Th": 10423, "arc": 10424, "app": 10425, "▁various": 10426, "▁iss": 10427, "ration": 10428, "现实": 10429, "▁imm": 10430, "▁eas": 10431, "以上": 10432, "▁group": 10433, "▁place": 10434, "ians": 10435, "ples": 10436, "ething": 10437, "▁bre": 10438, "首先": 10439, "会计": 10440, "▁University": 10441, "成立": 10442, "联系": 10443, "▁dem": 10444, "ute": 10445, "----------------": 10446, "omp": 10447, "提供了": 10448, "ression": 10449, "类型": 10450, "医疗": 10451, "▁ide": 10452, "ns": 10453, "ental": 10454, "▁impro": 10455, "cial": 10456, "心理": 10457, "ards": 10458, "▁tem": 10459, "检测": 10460, "加快": 10461, "▁material": 10462, "ocus": 10463, "现象": 10464, "isc": 10465, "Ad": 10466, "▁real": 10467, "近平": 10468, "not": 10469, "▁cells": 10470, "ption": 10471, ",\"▁": 10472, "▁rele": 10473, "物理": 10474, "信号": 10475, "监管": 10476, "当前": 10477, "ique": 10478, "▁creat": 10479, "习近平": 10480, "群众": 10481, "vers": 10482, "保持": 10483, "ving": 10484, "orld": 10485, "such": 10486, "▁still": 10487, "ological": 10488, "▁better": 10489, "▁family": 10490, "▁sym": 10491, "事件": 10492, "一方面": 10493, "ances": 10494, "▁sit": 10495, "▁against": 10496, "▁Sh": 10497, "▁ess": 10498, "的主要": 10499, "满足": 10500, "une": 10501, "▁present": 10502, "维护": 10503, "▁hand": 10504, "▁educ": 10505, "▁another": 10506, "法治": 10507, "So": 10508, ",▁\"": 10509, "▁project": 10510, "力的": 10511, ".▁▁": 10512, "测试": 10513, "引导": 10514, "完全": 10515, "自身": 10516, "无法": 10517, "北京": 10518, "资料": 10519, "▁due": 10520, "ries": 10521, "工具": 10522, "▁though": 10523, "▁several": 10524, "它们": 10525, "▁significant": 10526, "▁direct": 10527, "甚至": 10528, "不可": 10529, "▁change": 10530, "ank": 10531, "适应": 10532, "▁development": 10533, "ense": 10534, "疾病": 10535, "理念": 10536, "者的": 10537, "农民": 10538, "交通": 10539, "ditional": 10540, "力量": 10541, "效果": 10542, "诉讼": 10543, "urther": 10544, ".,▁": 10545, "▁oper": 10546, "▁fac": 10547, "▁environment": 10548, "▁govern": 10549, "▁ant": 10550, "▁cour": 10551, "▁United": 10552, "▁home": 10553, "▁pur": 10554, "yn": 10555, "▁Col": 10556, "▁must": 10557, "财政": 10558, "▁create": 10559, "软件": 10560, "关注": 10561, "▁early": 10562, "▁feel": 10563, "II": 10564, "rist": 10565, "anguage": 10566, "深入": 10567, "▁bir": 10568, "ths": 10569, "ogn": 10570, "cle": 10571, "▁pain": 10572, "构成": 10573, "系统的": 10574, "▁opp": 10575, ")。": 10576, "年代": 10577, "ways": 10578, "▁public": 10579, "ole": 10580, "▁anim": 10581, "▁second": 10582, "▁open": 10583, "▁happ": 10584, "规律": 10585, "正确": 10586, "▁near": 10587, "数学": 10588, "▁Is": 10589, "ified": 10590, "▁ben": 10591, "▁disease": 10592, "▁sl": 10593, "▁without": 10594, "▁based": 10595, "▁energy": 10596, "采取": 10597, "▁del": 10598, "引起": 10599, "▁meas": 10600, "成功": 10601, "▁method": 10602, "rem": 10603, "▁bas": 10604, "▁top": 10605, "表明": 10606, "快速": 10607, "外部": 10608, "▁large": 10609, "▁right": 10610, "▁interest": 10611, "表达": 10612, "计算机": 10613, "ode": 10614, "##": 10615, "ided": 10616, "的最": 10617, "▁become": 10618, "self": 10619, "帮助": 10620, "▁phys": 10621, "限制": 10622, "▁control": 10623, "ajor": 10624, "▁great": 10625, "的大": 10626, "▁learning": 10627, "yl": 10628, "atural": 10629, "▁saf": 10630, "▁others": 10631, "br": 10632, "▁Z": 10633, "▁team": 10634, "作品": 10635, "属于": 10636, "Now": 10637, "▁Cl": 10638, "gether": 10639, "▁together": 10640, "ternal": 10641, "▁result": 10642, "分布": 10643, "▁fin": 10644, "▁name": 10645, "▁mar": 10646, "▁caus": 10647, "▁orig": 10648, "性能": 10649, "商品": 10650, "指标": 10651, "绿色": 10652, "ware": 10653, "▁move": 10654, "共产党": 10655, "▁look": 10656, "▁product": 10657, "ention": 10658, "ission": 10659, "要素": 10660, "整体": 10661, "▁associ": 10662, "With": 10663, "年来": 10664, "香港": 10665, "eed": 10666, "▁until": 10667, "称为": 10668, "中国特色社会主义": 10669, "临床": 10670, "▁list": 10671, "集中": 10672, "▁stand": 10673, "▁States": 10674, "▁something": 10675, "SA": 10676, "▁too": 10677, "自动": 10678, "▁chall": 10679, "▁involv": 10680, "技能": 10681, "解释": 10682, "▁old": 10683, "was": 10684, "虽然": 10685, "▁friend": 10686, "Im": 10687, "gin": 10688, "分配": 10689, "▁don": 10690, "▁risk": 10691, "▁belie": 10692, "ball": 10693, "此外": 10694, "▁mark": 10695, "情况下": 10696, "依据": 10697, "ator": 10698, "就业": 10699, "▁history": 10700, "接受": 10701, "▁local": 10702, "协议": 10703, "会议": 10704, "▁among": 10705, "▁light": 10706, "显示": 10707, "▁sing": 10708, "hor": 10709, "物的": 10710, "速度": 10711, "After": 10712, "分为": 10713, "马克思主义": 10714, "涉及": 10715, "符合": 10716, "wards": 10717, "事业": 10718, "Un": 10719, "联合": 10720, "乡村": 10721, "是一个": 10722, "aut": 10723, "min": 10724, "ots": 10725, "书记": 10726, "司法": 10727, "▁function": 10728, "▁gr": 10729, "▁Se": 10730, "ert": 10731, "That": 10732, "▁'": 10733, "▁proper": 10734, "▁few": 10735, "▁species": 10736, "污染": 10737, "alk": 10738, "ley": 10739, "▁keep": 10740, "▁mult": 10741, "注意": 10742, "like": 10743, "▁rest": 10744, "委员会": 10745, "view": 10746, "rag": 10747, "while": 10748, "who": 10749, "▁manag": 10750, "abor": 10751, "imate": 10752, "规则": 10753, "调查": 10754, "道德": 10755, "urop": 10756, "丰富": 10757, "协调": 10758, "ones": 10759, "mber": 10760, "并且": 10761, "▁best": 10762, "▁program": 10763, "是一": 10764, "函数": 10765, "犯罪": 10766, "At": 10767, "▁struct": 10768, "that": 10769, "▁De": 10770, "超过": 10771, "▁ve": 10772, "自主": 10773, "ooks": 10774, "分别": 10775, "▁leg": 10776, "▁following": 10777, "定义": 10778, "▁dev": 10779, "确保": 10780, "oid": 10781, "Some": 10782, "▁Q": 10783, "oring": 10784, "ape": 10785, "通信": 10786, "ertain": 10787, "▁later": 10788, "课堂": 10789, "▁potential": 10790, "▁things": 10791, "高度": 10792, "反映": 10793, "ris": 10794, "方面的": 10795, "▁blood": 10796, "▁bus": 10797, "▁focus": 10798, "▁provide": 10799, "交流": 10800, "供应": 10801, "▁women": 10802, "▁$": 10803, "aces": 10804, "ohn": 10805, "—▁": 10806, "▁areas": 10807, "智慧": 10808, "▁Con": 10809, "how": 10810, "学院": 10811, "整个": 10812, "af": 10813, "企业的": 10814, "义务": 10815, "▁four": 10816, "ved": 10817, "this": 10818, "ditions": 10819, "illion": 10820, "▁social": 10821, "rict": 10822, "’▁": 10823, "▁patients": 10824, "挑战": 10825, "ane": 10826, ",\"": 10827, "病毒": 10828, "acc": 10829, "aster": 10830, "▁cal": 10831, "上海": 10832, "ote": 10833, "iam": 10834, "▁specific": 10835, "▁run": 10836, "问题的": 10837, "转型": 10838, "算法": 10839, "是一种": 10840, "▁che": 10841, "conom": 10842, "▁connect": 10843, "▁role": 10844, "▁tre": 10845, "文件": 10846, "▁Pl": 10847, "▁affect": 10848, "▁law": 10849, "之后": 10850, "▁means": 10851, "oad": 10852, "omet": 10853, "▁record": 10854, "▁bro": 10855, "▁fre": 10856, "统计": 10857, "▁fore": 10858, "有利": 10859, "ication": 10860, "经过": 10861, "▁access": 10862, "▁occur": 10863, "差异": 10864, "ray": 10865, "aper": 10866, "▁mov": 10867, "扩大": 10868, "osp": 10869, "▁report": 10870, "ource": 10871, "财产": 10872, "ung": 10873, "最终": 10874, "px": 10875, "my": 10876, "idence": 10877, "▁across": 10878, "ending": 10879, "▁levels": 10880, "tal": 10881, "▁along": 10882, "起来": 10883, "动力": 10884, "分类": 10885, "▁indu": 10886, "use": 10887, "▁Can": 10888, "▁became": 10889, "在于": 10890, "▁descri": 10891, "数量": 10892, ",”▁": 10893, "▁ter": 10894, "▁enc": 10895, "▁period": 10896, "生命": 10897, "三个": 10898, "▁bo": 10899, "▁times": 10900, "inks": 10901, "▁head": 10902, "ended": 10903, "性质": 10904, "还是": 10905, "承担": 10906, "▁success": 10907, "IS": 10908, "aid": 10909, "必要": 10910, "atory": 10911, "ales": 10912, "▁mean": 10913, "矛盾": 10914, "Con": 10915, "work": 10916, "▁el": 10917, "面临": 10918, "免疫": 10919, "然而": 10920, "▁non": 10921, "agine": 10922, "right": 10923, "机器": 10924, "▁Comm": 10925, "ained": 10926, "``": 10927, "有限": 10928, "oint": 10929, "earch": 10930, "▁special": 10931, "转变": 10932, "▁death": 10933, "▁hig": 10934, "证明": 10935, "原理": 10936, "行动": 10937, "ternational": 10938, "▁major": 10939, "__": 10940, "人工智能": 10941, "▁turn": 10942, "家庭": 10943, "继续": 10944, "▁rece": 10945, "改善": 10946, "多种": 10947, "▁estab": 10948, "▁avail": 10949, "文献": 10950, "作出": 10951, "▁Cent": 10952, ":\"": 10953, "ortun": 10954, "▁crit": 10955, "▁Re": 10956, "来说": 10957, "道路": 10958, "ised": 10959, "she": 10960, "▁low": 10961, "趋势": 10962, "▁line": 10963, "▁land": 10964, "识别": 10965, "作者": 10966, "now": 10967, "很多": 10968, "训练": 10969, "配置": 10970, "重视": 10971, "检查": 10972, "atch": 10973, "raw": 10974, "CA": 10975, "▁mil": 10976, "事实": 10977, "though": 10978, "▁He": 10979, "策略": 10980, "来源": 10981, "ery": 10982, "了一": 10983, "▁National": 10984, "▁current": 10985, "相应": 10986, "idd": 10987, "▁last": 10988, "大量": 10989, "icro": 10990, "共和": 10991, "cul": 10992, "thumb": 10993, "rel": 10994, "观察": 10995, "团队": 10996, "▁Ex": 10997, "||▁": 10998, "sel": 10999, "▁war": 11000, "▁character": 11001, "使得": 11002, "yd": 11003, "▁impact": 11004, "▁similar": 11005, "▁object": 11006, "▁benef": 11007, "▁press": 11008, "环节": 11009, "意见": 11010, "▁works": 11011, "简单": 11012, "传播": 11013, "▁bi": 11014, "建议": 11015, "权的": 11016, "显著": 11017, "▁lim": 11018, "▁book": 11019, "She": 11020, "ring": 11021, "▁age": 11022, "ored": 11023, "特殊": 11024, "▁ens": 11025, "▁point": 11026, "债务": 11027, "ober": 11028, "▁type": 11029, "ivity": 11030, "案件": 11031, "ploy": 11032, "oph": 11033, "法规": 11034, "强化": 11035, "形态": 11036, "ried": 11037, "共享": 11038, "教授": 11039, "▁cause": 11040, "负责": 11041, "ilt": 11042, "▁wee": 11043, "▁diff": 11044, "国民": 11045, "新时代": 11046, "rans": 11047, "支付": 11048, "reg": 11049, "▁plant": 11050, "的数据": 11051, "一是": 11052, "位置": 11053, "ott": 11054, "循环": 11055, "背景": 11056, "第四": 11057, "atures": 11058, "side": 11059, "▁World": 11060, "▁comb": 11061, "高校": 11062, "face": 11063, "避免": 11064, "下的": 11065, "每个": 11066, "后的": 11067, "References": 11068, "高的": 11069, "▁think": 11070, ".(": 11071, "▁An": 11072, "技术的": 11073, "▁post": 11074, "ai": 11075, "财务": 11076, "ument": 11077, "amm": 11078, "哲学": 11079, "most": 11080, "试验": 11081, "立法": 11082, "iting": 11083, "▁appear": 11084, "突出": 11085, "数字化": 11086, "amed": 11087, "▁comput": 11088, "监测": 11089, "▁invest": 11090, "ipp": 11091, "肿瘤": 11092, "下降": 11093, "▁flow": 11094, "▁pe": 11095, "iation": 11096, "▁language": 11097, "ilities": 11098, "izing": 11099, "ae": 11100, "主动": 11101, "▁possible": 11102, "比如": 11103, "ured": 11104, "氧化": 11105, "bed": 11106, "处于": 11107, "ope": 11108, "期间": 11109, "ush": 11110, "▁protect": 11111, "▁community": 11112, "Pro": 11113, "ours": 11114, "▁War": 11115, "▁prevent": 11116, "尤其": 11117, "fric": 11118, "自我": 11119, "观点": 11120, "而言": 11121, "▁young": 11122, "▁sw": 11123, "ols": 11124, "深化": 11125, ".▁(": 11126, ".”": 11127, "平衡": 11128, "▁men": 11129, "角度": 11130, "erc": 11131, "层次": 11132, ":“": 11133, "存储": 11134, "ued": 11135, "培训": 11136, "出版": 11137, "准确": 11138, "Ar": 11139, "有机": 11140, "申请": 11141, "及时": 11142, "转移": 11143, "sy": 11144, "Sp": 11145, "▁determ": 11146, "实行": 11147, "当事": 11148, "▁Ph": 11149, "平均": 11150, "▁systems": 11151, "▁short": 11152, "说明": 11153, "进程": 11154, "的方法": 11155, "伟大": 11156, "▁strong": 11157, "ators": 11158, "▁contribut": 11159, "两种": 11160, "While": 11161, "▁Te": 11162, "aring": 11163, "▁respons": 11164, "iences": 11165, "▁polit": 11166, "▁treatment": 11167, "▁Le": 11168, "真正": 11169, "att": 11170, "介绍": 11171, "二是": 11172, "逐步": 11173, "逻辑": 11174, "ests": 11175, "▁since": 11176, "▁results": 11177, "serv": 11178, "ysis": 11179, "uture": 11180, "流动": 11181, ",“": 11182, "stit": 11183, "▁available": 11184, "▁Ad": 11185, "战争": 11186, "thern": 11187, "ival": 11188, "那么": 11189, "▁certain": 11190, "往往": 11191, "▁natural": 11192, "▁here": 11193, "正常": 11194, "▁nec": 11195, "不足": 11196, "▁represent": 11197, "enn": 11198, "▁cir": 11199, "西方": 11200, "▁able": 11201, "设置": 11202, "ems": 11203, "为主": 11204, "讨论": 11205, "+▁": 11206, "▁why": 11207, "支撑": 11208, "asing": 11209, "▁hard": 11210, "中国共产党": 11211, "▁ey": 11212, "带来": 11213, "▁government": 11214, "olution": 11215, "▁cancer": 11216, "▁discuss": 11217, "落实": 11218, "并不": 11219, "▁complex": 11220, "then": 11221, "▁story": 11222, "etic": 11223, "▁relations": 11224, "put": 11225, "经济发展": 11226, "▁order": 11227, "提出了": 11228, "发布": 11229, "▁Europ": 11230, "成员": 11231, "▁come": 11232, "▁rad": 11233, "学术": 11234, "▁Bl": 11235, "先进": 11236, "ER": 11237, "相同": 11238, "▁percent": 11239, "汽车": 11240, "卫生": 11241, "缺乏": 11242, "▁influ": 11243, "▁opt": 11244, "Sh": 11245, "居民": 11246, "duct": 11247, "part": 11248, "ables": 11249, "▁profess": 11250, "from": 11251, "用的": 11252, "预测": 11253, "val": 11254, "▁space": 11255, "▁whe": 11256, "▁behav": 11257, "istic": 11258, "投入": 11259, "▁lik": 11260, "oll": 11261, "素质": 11262, "ey": 11263, "到了": 11264, "aps": 11265, "▁key": 11266, "vious": 11267, "▁words": 11268, "ches": 11269, "omes": 11270, "ibr": 11271, "而是": 11272, "▁cost": 11273, "lection": 11274, "ney": 11275, "多数": 11276, "ream": 11277, "药物": 11278, "感染": 11279, "连接": 11280, "▁Res": 11281, "进行了": 11282, "ze": 11283, "▁scient": 11284, "特别是": 11285, "现在": 11286, "美元": 11287, "ledge": 11288, "Pl": 11289, "ints": 11290, "▁Count": 11291, "▁view": 11292, "具备": 11293, "上述": 11294, "med": 11295, "▁sugg": 11296, "测量": 11297, "▁vol": 11298, "eter": 11299, "观念": 11300, "pos": 11301, "▁econom": 11302, "逐渐": 11303, ".▁\"": 11304, "Cl": 11305, "▁changes": 11306, "icult": 11307, "文学": 11308, "oman": 11309, "lement": 11310, "ird": 11311, "信用": 11312, "包含": 11313, "mon": 11314, "%,": 11315, "New": 11316, "sw": 11317, "融资": 11318, "▁ill": 11319, "▁population": 11320, "突破": 11321, "▁country": 11322, "aves": 11323, "ency": 11324, "iding": 11325, "的一个": 11326, "ourn": 11327, "▁ways": 11328, "che": 11329, "▁Brit": 11330, "转化": 11331, "供给": 11332, "产权": 11333, "ask": 11334, "▁challeng": 11335, "fer": 11336, "▁music": 11337, "证据": 11338, "▁vir": 11339, "▁conditions": 11340, "thing": 11341, "▁left": 11342, "内的": 11343, "表面": 11344, "多个": 11345, "icle": 11346, "总体": 11347, "最高": 11348, "▁essential": 11349, "▁step": 11350, "when": 11351, "中华民族": 11352, "除了": 11353, "▁days": 11354, "selves": 11355, "最大": 11356, "努力": 11357, "流程": 11358, "▁try": 11359, "augh": 11360, "▁let": 11361, "然后": 11362, "ext": 11363, "审计": 11364, "▁century": 11365, "效应": 11366, "▁case": 11367, "▁sound": 11368, "mp": 11369, "▁members": 11370, "依法": 11371, "aren": 11372, "▁skills": 11373, "周期": 11374, "ruction": 11375, "▁foot": 11376, "有利于": 11377, "科研": 11378, "专家": 11379, "的方式": 11380, "▁problems": 11381, "▁vers": 11382, "▁brain": 11383, "▁say": 11384, "ably": 11385, "ww": 11386, "▁types": 11387, "医学": 11388, "▁prim": 11389, "apt": 11390, "▁Afric": 11391, "ened": 11392, "▁away": 11393, "▁associated": 11394, "普遍": 11395, "状况": 11396, "判断": 11397, "▁past": 11398, "▁temper": 11399, "bum": 11400, "rim": 11401, "mit": 11402, "难以": 11403, "履行": 11404, "完整": 11405, "思考": 11406, "进步": 11407, "本身": 11408, "当时": 11409, "协同": 11410, "还有": 11411, "》,": 11412, "教材": 11413, "rad": 11414, "▁Car": 11415, "▁gre": 11416, "▁city": 11417, "iple": 11418, "▁heart": 11419, "正在": 11420, "来自": 11421, "客观": 11422, "ither": 11423, "yle": 11424, "ography": 11425, "高质量": 11426, "物流": 11427, "▁links": 11428, "一致": 11429, "▁experience": 11430, "损害": 11431, "ID": 11432, "▁init": 11433, "Sc": 11434, "oon": 11435, "▁working": 11436, "▁dam": 11437, "▁School": 11438, "▁resources": 11439, "▁business": 11440, "公平": 11441, "温度": 11442, "urch": 11443, "▁technology": 11444, "基础设施": 11445, "overed": 11446, "发表": 11447, "▁little": 11448, "动态": 11449, "记录": 11450, "容易": 11451, "hips": 11452, "hib": 11453, "▁side": 11454, "▁understanding": 11455, "raft": 11456, "▁mot": 11457, "epend": 11458, "损失": 11459, "高等": 11460, "应对": 11461, "多样": 11462, "深度": 11463, "▁Or": 11464, "国有": 11465, "深刻": 11466, "高效": 11467, "▁groups": 11468, "一定的": 11469, "地理": 11470, "▁particular": 11471, "osis": 11472, "▁sens": 11473, "比例": 11474, "来越": 11475, "▁activities": 11476, "▁throughout": 11477, "总书记": 11478, "来看": 11479, "▁problem": 11480, "▁—▁": 11481, "▁next": 11482, "客户": 11483, "oes": 11484, "Let": 11485, "越来越": 11486, "最后": 11487, "儿童": 11488, "▁cy": 11489, "chie": 11490, "All": 11491, "▁York": 11492, "▁single": 11493, "arth": 11494, "▁building": 11495, "elling": 11496, "aching": 11497, "▁exist": 11498, ")、": 11499, "illed": 11500, "▁put": 11501, "的历史": 11502, "▁norm": 11503, "▁concer": 11504, "英国": 11505, "rug": 11506, "压力": 11507, "▁pred": 11508, "asc": 11509, "▁studies": 11510, "不得": 11511, "AR": 11512, "▁far": 11513, "本质": 11514, "▁er": 11515, "oney": 11516, "▁improve": 11517, "当事人": 11518, "▁Christ": 11519, "研发": 11520, "ged": 11521, "经济学": 11522, "▁enough": 11523, "play": 11524, "ster": 11525, "▁unique": 11526, "危机": 11527, "▁free": 11528, "注重": 11529, "也有": 11530, "inking": 11531, "大数据": 11532, "iction": 11533, ")、": 11534, "的关系": 11535, "▁education": 11536, "/▁": 11537, "之前": 11538, "▁makes": 11539, "uation": 11540, "出的": 11541, "apan": 11542, "ges": 11543, "仍然": 11544, "▁Med": 11545, "▁future": 11546, "alf": 11547, "▁higher": 11548, "▁having": 11549, "ires": 11550, "▁pattern": 11551, "正式": 11552, "ES": 11553, "把握": 11554, "atives": 11555, "层面": 11556, "lying": 11557, ".\"▁": 11558, "▁issues": 11559, "▁created": 11560, "▁further": 11561, "▁big": 11562, "clus": 11563, "传输": 11564, "▁net": 11565, "的作用": 11566, "案例": 11567, "bo": 11568, "bl": 11569, "▁given": 11570, "▁growth": 11571, "诊断": 11572, "▁today": 11573, "▁differen": 11574, "▁effects": 11575, "ected": 11576, "]▁": 11577, "一直": 11578, "ibility": 11579, "▁En": 11580, "的社会": 11581, "sequ": 11582, "▁ground": 11583, "AC": 11584, "▁always": 11585, "inter": 11586, "▁series": 11587, "▁plants": 11588, "aging": 11589, "aving": 11590, "▁kind": 11591, "▁applic": 11592, "▁English": 11593, "ustral": 11594, "贡献": 11595, "共和国": 11596, "▁event": 11597, "中小": 11598, "▁Mar": 11599, "▁factors": 11600, "ification": 11601, "基金": 11602, "▁needs": 11603, "一次": 11604, "acy": 11605, "出口": 11606, "全部": 11607, "▁histor": 11608, "anu": 11609, "▁term": 11610, "相比": 11611, "植物": 11612, "传感": 11613, "ils": 11614, "▁teac": 11615, "▁making": 11616, "ecially": 11617, "▁exc": 11618, "▁self": 11619, "ma": 11620, "各个": 11621, "可持续": 11622, "加工": 11623, "对外": 11624, "▁collect": 11625, "istory": 11626, "▁pub": 11627, "二十": 11628, "▁maintain": 11629, "▁activity": 11630, "适用": 11631, "co": 11632, "更好": 11633, "和发展": 11634, "真实": 11635, "严格": 11636, "旅游": 11637, "▁individuals": 11638, "▁particip": 11639, "ows": 11640, "参数": 11641, "just": 11642, "▁begin": 11643, "▁prote": 11644, "light": 11645, "ada": 11646, "▁strateg": 11647, "中国的": 11648, "more": 11649, "▁model": 11650, "ptoms": 11651, "▁ask": 11652, "alt": 11653, "▁dig": 11654, "和社会": 11655, "aim": 11656, "ese": 11657, "iques": 11658, "ising": 11659, "海洋": 11660, "ips": 11661, "鼓励": 11662, "▁consid": 11663, "论文": 11664, "▁necess": 11665, "roll": 11666, "▁town": 11667, "人民法院": 11668, "▁path": 11669, "贷款": 11670, "双方": 11671, "▁consum": 11672, "收益": 11673, "的能力": 11674, "ooking": 11675, "▁introdu": 11676, "CD": 11677, "▁give": 11678, "▁increase": 11679, "参加": 11680, "chan": 11681, "▁ep": 11682, "必然": 11683, "▁coll": 11684, "▁sum": 11685, "▁‘": 11686, "▁full": 11687, "▁helps": 11688, "他的": 11689, "描述": 11690, "出了": 11691, "▁range": 11692, "集体": 11693, "升级": 11694, "总结": 11695, "▁difficult": 11696, "不会": 11697, "法的": 11698, "▁million": 11699, "lor": 11700, "食品": 11701, "工艺": 11702, "plic": 11703, "媒体": 11704, "especially": 11705, "obal": 11706, "▁South": 11707, "erson": 11708, "▁author": 11709, "anced": 11710, "▁return": 11711, "olic": 11712, "AP": 11713, "获取": 11714, "eor": 11715, "▁course": 11716, "▁z": 11717, "》、": 11718, "ister": 11719, "▁recogn": 11720, "▁someone": 11721, "Ph": 11722, "ene": 11723, "健全": 11724, "▁May": 11725, "各类": 11726, "▁eff": 11727, "工作的": 11728, "can": 11729, "based": 11730, "▁offic": 11731, "rams": 11732, "变革": 11733, "ites": 11734, "archers": 11735, "▁house": 11736, "aken": 11737, "新型": 11738, "aced": 11739, "▁tru": 11740, "fully": 11741, "CO": 11742, "▁stat": 11743, "AT": 11744, "ecause": 11745, "抑制": 11746, "途径": 11747, "恢复": 11748, "权益": 11749, "▁likely": 11750, "▁field": 11751, "▁opportun": 11752, "▁contain": 11753, "电池": 11754, "▁require": 11755, "▁observ": 11756, "rec": 11757, "阶级": 11758, "▁clear": 11759, "rig": 11760, "普通": 11761, "一起": 11762, "#▁": 11763, "量子": 11764, "排放": 11765, "社区": 11766, "uck": 11767, "▁||▁": 11768, "欧洲": 11769, "lege": 11770, "动物": 11771, "▁usually": 11772, "产生的": 11773, "依赖": 11774, "▁countries": 11775, "音乐": 11776, "▁value": 11777, "\",▁": 11778, "中共": 11779, "▁North": 11780, "困难": 11781, "▁paper": 11782, "血管": 11783, "▁production": 11784, "▁began": 11785, "fact": 11786, "拥有": 11787, "认知": 11788, "机械": 11789, "▁consider": 11790, "定位": 11791, "▁ann": 11792, "国家的": 11793, "改革开放": 11794, "权力": 11795, "各国": 11796, "▁lay": 11797, "民事": 11798, "ences": 11799, "▁County": 11800, "面积": 11801, "ump": 11802, "▁practice": 11803, "▁popular": 11804, "气候": 11805, "yth": 11806, "ming": 11807, "su": 11808, "==": 11809, "▁chem": 11810, "利率": 11811, "▁Germ": 11812, "ening": 11813, "▁address": 11814, "时候": 11815, "的基础上": 11816, "▁tri": 11817, "IP": 11818, "▁phot": 11819, "▁mind": 11820, "标志": 11821, "bon": 11822, "▁[": 11823, "AS": 11824, "▁sun": 11825, "▁materials": 11826, "▁lower": 11827, "▁sure": 11828, "▁upon": 11829, "销售": 11830, "▁X": 11831, "驱动": 11832, "▁questions": 11833, "经济的": 11834, "第十": 11835, "CP": 11836, "整合": 11837, "费用": 11838, "生成": 11839, "▁live": 11840, "重新": 11841, "▁Man": 11842, "gest": 11843, "rown": 11844, "早期": 11845, "abit": 11846, "集团": 11847, "▁towards": 11848, "一体": 11849, "▁surface": 11850, "框架": 11851, "典型": 11852, "某些": 11853, "十分": 11854, "▁increased": 11855, "特性": 11856, "inn": 11857, "▁loss": 11858, "度的": 11859, "ground": 11860, "▁Gu": 11861, "从事": 11862, "另外": 11863, "▁season": 11864, "ele": 11865, "▁knowledge": 11866, "▁subject": 11867, "go": 11868, "ores": 11869, "物联网": 11870, "ety": 11871, "▁five": 11872, "DP": 11873, "ystem": 11874, "制造业": 11875, "▁site": 11876, "集成": 11877, "税收": 11878, "ront": 11879, "ference": 11880, "▁physical": 11881, "错误": 11882, "调节": 11883, "▁simple": 11884, "青年": 11885, "始终": 11886, "格局": 11887, "▁achie": 11888, "阅读": 11889, "aling": 11890, "助于": 11891, "实体": 11892, "运营": 11893, "arr": 11894, "▁employ": 11895, "另一方面": 11896, "▁events": 11897, "大会": 11898, "IT": 11899, "过去": 11900, "urb": 11901, "覆盖": 11902, "▁game": 11903, "▁cases": 11904, "德国": 11905, "尽管": 11906, "相关的": 11907, "estern": 11908, "▁hold": 11909, "安排": 11910, "准备": 11911, "理想": 11912, "图像": 11913, "▁living": 11914, "▁interact": 11915, "的主": 11916, "erve": 11917, "军事": 11918, "学者": 11919, "传感器": 11920, "解放": 11921, "ison": 11922, "▁quick": 11923, "▁wind": 11924, "▁animals": 11925, "inary": 11926, "▁comes": 11927, "Americ": 11928, "▁neg": 11929, "▁frequ": 11930, "See": 11931, "所谓": 11932, "▁personal": 11933, "▁text": 11934, "ails": 11935, "可靠": 11936, "转换": 11937, "习近平总书记": 11938, "sych": 11939, "acks": 11940, "▁friends": 11941, "特定": 11942, "arget": 11943, "文章": 11944, "▁company": 11945, "效益": 11946, "ille": 11947, "▁therap": 11948, "▁famil": 11949, "▁modern": 11950, "arl": 11951, "相当": 11952, "上升": 11953, "ender": 11954, "oose": 11955, "行的": 11956, "教育的": 11957, "mb": 11958, "是由": 11959, "平等": 11960, "▁compet": 11961, "▁film": 11962, "前提": 11963, "▁meet": 11964, "▁engine": 11965, "障碍": 11966, "城乡": 11967, "aff": 11968, "社会的": 11969, "▁port": 11970, "发达": 11971, "During": 11972, "▁repl": 11973, "身份": 11974, "▁song": 11975, "吸收": 11976, "ugust": 11977, "城镇": 11978, "等方面": 11979, "▁general": 11980, "Step": 11981, "▁parts": 11982, "me": 11983, "ideo": 11984, "iate": 11985, "本文": 11986, "even": 11987, "▁came": 11988, "场景": 11989, "ched": 11990, "▁indic": 11991, "making": 11992, "▁pressure": 11993, "合法": 11994, "▁themselves": 11995, "▁above": 11996, "orpor": 11997, "▁symptoms": 11998, "公民": 11999, "▁arr": 12000, "领域的": 12001, "请求": 12002, "▁question": 12003, "▁word": 12004, "icip": 12005, "fficient": 12006, "▁red": 12007, "ony": 12008, "Section": 12009, "idge": 12010, "//": 12011, "Acc": 12012, "ules": 12013, "追求": 12014, "Res": 12015, "aries": 12016, "▁deg": 12017, "意味": 12018, "arents": 12019, "▁took": 12020, "人物": 12021, "干部": 12022, "however": 12023, "一样": 12024, "▁Be": 12025, "▁album": 12026, "同样": 12027, "AN": 12028, "▁color": 12029, "实验室": 12030, "dom": 12031, "iol": 12032, "His": 12033, "创业": 12034, "▁super": 12035, "orks": 12036, "▁US": 12037, "▁addition": 12038, "它的": 12039, "▁built": 12040, "▁emer": 12041, "Many": 12042, "虚拟": 12043, "ops": 12044, "oor": 12045, "utions": 12046, "收集": 12047, "▁science": 12048, "▁least": 12049, "adem": 12050, "▁clos": 12051, "urs": 12052, "ters": 12053, "amb": 12054, "More": 12055, "ino": 12056, "leep": 12057, "pts": 12058, "▁arch": 12059, "▁micro": 12060, "▁sent": 12061, "eration": 12062, "多元": 12063, "只能": 12064, "Ind": 12065, "▁liter": 12066, "股东": 12067, "astic": 12068, "部署": 12069, "onstr": 12070, "col": 12071, "▁fund": 12072, "▁developed": 12073, "▁quality": 12074, "卫星": 12075, "债权": 12076, "无论": 12077, "uly": 12078, "的过程": 12079, "▁fall": 12080, "只是": 12081, "▁needed": 12082, "路径": 12083, "▁named": 12084, "的高": 12085, "和谐": 12086, "rect": 12087, "▁As": 12088, "▁aspect": 12089, "ule": 12090, "\"▁(": 12091, "移动": 12092, "中华人民": 12093, "也可以": 12094, "▁jo": 12095, "▁suggest": 12096, "▁polic": 12097, "美國": 12098, "itud": 12099, "off": 12100, "ague": 12101, "ivil": 12102, "▁emot": 12103, "▁America": 12104, "布局": 12105, "mar": 12106, "▁soft": 12107, "▁communities": 12108, "▁national": 12109, "专利": 12110, "的关键": 12111, "IN": 12112, "体育": 12113, "lands": 12114, "验证": 12115, "hel": 12116, "交换": 12117, "Here": 12118, "死亡": 12119, "wo": 12120, "距离": 12121, "▁whether": 12122, "▁bar": 12123, "▁Rep": 12124, "预防": 12125, "设立": 12126, "网络安全": 12127, "▁complet": 12128, "运输": 12129, "▁analysis": 12130, "的信息": 12131, "元素": 12132, "十八": 12133, "▁seen": 12134, "erous": 12135, "oice": 12136, "▁State": 12137, "▁size": 12138, "组合": 12139, "面对": 12140, "utes": 12141, "rench": 12142, "▁Ass": 12143, "▁thought": 12144, "▁cut": 12145, "的工作": 12146, "▁share": 12147, "连续": 12148, "reng": 12149, "▁fig": 12150, "▁God": 12151, "fl": 12152, "首次": 12153, "▁flu": 12154, "▁online": 12155, "传统的": 12156, "ready": 12157, "生长": 12158, "▁nature": 12159, "在此": 12160, "Imagine": 12161, "ype": 12162, "优秀": 12163, "bor": 12164, "No": 12165, "ctor": 12166, "ging": 12167, "赔偿": 12168, "rum": 12169, "▁ever": 12170, "都有": 12171, "...": 12172, "▁stories": 12173, "是对": 12174, "aches": 12175, "激发": 12176, "anuary": 12177, "固定": 12178, "国务": 12179, "uk": 12180, "▁deep": 12181, "▁doc": 12182, "itor": 12183, "▁once": 12184, "▁methods": 12185, "希望": 12186, "角色": 12187, "icles": 12188, "迅速": 12189, "istance": 12190, "verage": 12191, "ournal": 12192, "认定": 12193, "▁previous": 12194, "▁services": 12195, "ana": 12196, "onse": 12197, "▁never": 12198, "输入": 12199, "En": 12200, "▁amount": 12201, "呈现": 12202, "机会": 12203, "uel": 12204, "近年来": 12205, "▁started": 12206, "fect": 12207, "▁products": 12208, "就会": 12209, "PS": 12210, "宏观": 12211, "IV": 12212, "以后": 12213, "▁regular": 12214, "▁going": 12215, "udd": 12216, "▁nut": 12217, "的要求": 12218, "ptember": 12219, "ends": 12220, "▁circ": 12221, "ler": 12222, "pril": 12223, "加大": 12224, "▁entire": 12225, "eak": 12226, "▁stress": 12227, "自治": 12228, "防止": 12229, "aily": 12230, "办法": 12231, "引领": 12232, "nown": 12233, "▁rate": 12234, "▁techniques": 12235, "▁week": 12236, "公开": 12237, "na": 12238, "▁cr": 12239, "amin": 12240, "数据库": 12241, "▁break": 12242, "▁white": 12243, "ulations": 12244, "ume": 12245, "these": 12246, "▁British": 12247, "类似": 12248, "太阳": 12249, "左右": 12250, ".▁“": 12251, "▁designed": 12252, "hood": 12253, "iddle": 12254, "▁reduce": 12255, "elt": 12256, "hold": 12257, "常见": 12258, "▁everyone": 12259, "▁ensure": 12260, "员工": 12261, "ises": 12262, "▁traditional": 12263, "访问": 12264, "疫情": 12265, "预算": 12266, "加速": 12267, "▁John": 12268, "良好的": 12269, "oles": 12270, "Se": 12271, "CR": 12272, "位于": 12273, "公众": 12274, "▁abs": 12275, "▁lab": 12276, "▁assess": 12277, "illiam": 12278, "▁region": 12279, "破坏": 12280, "有效的": 12281, "▁dom": 12282, "证券": 12283, "模拟": 12284, "规定的": 12285, "iment": 12286, "学的": 12287, "主要是": 12288, "加入": 12289, "▁Cal": 12290, "itary": 12291, "金属": 12292, "▁-": 12293, "职能": 12294, "知道": 12295, "数据的": 12296, "eds": 12297, "MS": 12298, "让学生": 12299, "▁allows": 12300, "几个": 12301, "▁considered": 12302, "意味着": 12303, "▁original": 12304, "》、《": 12305, "出发": 12306, "lev": 12307, "lear": 12308, "兴趣": 12309, "▁six": 12310, "模块": 12311, "第五": 12312, "审查": 12313, "▁medical": 12314, "minist": 12315, "imately": 12316, "国务院": 12317, "日益": 12318, "avor": 12319, "地球": 12320, "運動": 12321, "▁mechan": 12322, "▁skin": 12323, "▁prop": 12324, "▁mass": 12325, "born": 12326, "De": 12327, "▁management": 12328, "iverse": 12329, "inally": 12330, "▁evidence": 12331, "▁exerc": 12332, "中华人民共和国": 12333, "奋斗": 12334, "urity": 12335, "能量": 12336, "实时": 12337, "活性": 12338, "Not": 12339, "OS": 12340, "内涵": 12341, "ample": 12342, "▁King": 12343, "优先": 12344, "培育": 12345, "亿元": 12346, "▁City": 12347, "istics": 12348, "AI": 12349, "体验": 12350, "相结合": 12351, "围绕": 12352, "Be": 12353, "其次": 12354, "▁anc": 12355, "如此": 12356, "消费者": 12357, "artment": 12358, "基地": 12359, "▁answ": 12360, "American": 12361, "▁below": 12362, "▁provides": 12363, "▁II": 12364, "▁drug": 12365, "From": 12366, "back": 12367, "主张": 12368, "利润": 12369, "刑事": 12370, "▁harm": 12371, "▁bal": 12372, "的经济": 12373, "=\"": 12374, "如下": 12375, "▁compon": 12376, "▁Soc": 12377, "Can": 12378, "有所": 12379, "▁Austral": 12380, "改造": 12381, "▁surv": 12382, "统筹": 12383, "成熟": 12384, "BC": 12385, "由此": 12386, "▁related": 12387, "改进": 12388, "▁idea": 12389, "▁encou": 12390, "▁integ": 12391, "atter": 12392, "三是": 12393, "Is": 12394, "节点": 12395, "▁healthy": 12396, "▁involved": 12397, "pre": 12398, "enc": 12399, "的内容": 12400, "ctober": 12401, "▁ability": 12402, "复兴": 12403, "▁included": 12404, "▁Comp": 12405, "▁published": 12406, "▁lives": 12407, "尤其是": 12408, "▁react": 12409, "%,": 12410, "▁mix": 12411, "Although": 12412, "://": 12413, "ari": 12414, "▁station": 12415, "▁players": 12416, "▁ver": 12417, "▁express": 12418, "英语": 12419, "▁target": 12420, "CT": 12421, "irl": 12422, "大多数": 12423, "▁relig": 12424, "▁refer": 12425, "▁shows": 12426, "▁reading": 12427, "lete": 12428, "文字": 12429, "电力": 12430, "itation": 12431, "▁`": 12432, "urg": 12433, "▁measure": 12434, "中国人民": 12435, "信息化": 12436, "医院": 12437, "gar": 12438, "看到": 12439, "法国": 12440, "▁multiple": 12441, "▁already": 12442, "ronic": 12443, "分离": 12444, "▁student": 12445, "有助于": 12446, "一切": 12447, "症状": 12448, "子的": 12449, "新闻": 12450, "▁climate": 12451, "更为": 12452, "joy": 12453, "▁inside": 12454, "▁total": 12455, "相应的": 12456, "▁months": 12457, "▁Earth": 12458, "继承": 12459, "▁won": 12460, "电路": 12461, "个人信息": 12462, "參考": 12463, "▁instance": 12464, "ached": 12465, "▁vari": 12466, "▁culture": 12467, "▁princ": 12468, "▁coun": 12469, "▁webs": 12470, "attle": 12471, "▁identify": 12472, "进而": 12473, "▁researchers": 12474, "▁computer": 12475, "异常": 12476, "▁regard": 12477, "实践中": 12478, "According": 12479, "▁tell": 12480, "和平": 12481, "攻击": 12482, "▁Pr": 12483, "aun": 12484, "▁experiences": 12485, "的教学": 12486, "输出": 12487, "宣传": 12488, "购买": 12489, "允许": 12490, "rew": 12491, "架构": 12492, "▁seem": 12493, "Us": 12494, "混合": 12495, "▁black": 12496, "▁really": 12497, "▁Japan": 12498, "▁established": 12499, "创建": 12500, "也就是": 12501, "实际上": 12502, "课题": 12503, "avy": 12504, "公里": 12505, "▁features": 12506, "专门": 12507, "因而": 12508, "▁market": 12509, "ift": 12510, "群体": 12511, "▁insp": 12512, "的规定": 12513, "External": 12514, "▁fem": 12515, "基层": 12516, "▁inj": 12517, "▁explore": 12518, "order": 12519, "▁aim": 12520, "▁River": 12521, "▁diet": 12522, "cember": 12523, "▁diagn": 12524, "▁green": 12525, "的变化": 12526, "▁tools": 12527, "▁required": 12528, "研究人员": 12529, "▁challenges": 12530, "▁cover": 12531, "▁dest": 12532, "▁elements": 12533, "个体": 12534, "▁pict": 12535, "ords": 12536, "▁hours": 12537, "no": 12538, "▁action": 12539, "vey": 12540, "▁March": 12541, ")。": 12542, "duc": 12543, "▁position": 12544, "ctions": 12545, "作业": 12546, "▁either": 12547, "▁remain": 12548, "人力": 12549, "ellow": 12550, "的行为": 12551, "▁necessary": 12552, "推广": 12553, "▁effective": 12554, "四个": 12555, "调控": 12556, "贯彻": 12557, "▁half": 12558, "形成了": 12559, "stead": 12560, "▁cust": 12561, "形势": 12562, "认证": 12563, "▁rou": 12564, "事务": 12565, "▁review": 12566, "▁separ": 12567, "▁money": 12568, "▁led": 12569, "▁source": 12570, "这里": 12571, "扩展": 12572, "登记": 12573, "、\"": 12574, "▁structure": 12575, "▁consist": 12576, "nov": 12577, "▁fail": 12578, "生态环境": 12579, "▁includes": 12580, "▁conduct": 12581, "▁demonstr": 12582, "anc": 12583, "面向": 12584, "▁mor": 12585, "文化的": 12586, "商标": 12587, "aul": 12588, "▁pay": 12589, "▁books": 12590, "water": 12591, "ovember": 12592, "▁love": 12593, "▁cru": 12594, "aged": 12595, "▁mach": 12596, "oved": 12597, "ensive": 12598, "▁schools": 12599, "Other": 12600, "▁rights": 12601, "宪法": 12602, "同一": 12603, "单元": 12604, "▁service": 12605, "▁squ": 12606, "生存": 12607, "经济社会": 12608, "是以": 12609, "said": 12610, "CC": 12611, "▁uses": 12612, "ura": 12613, "cont": 12614, "Bl": 12615, "区别": 12616, "▁taken": 12617, "一系列": 12618, "▁late": 12619, "vere": 12620, "的同时": 12621, "实现了": 12622, "做到": 12623, "经济增长": 12624, "确认": 12625, "▁Wh": 12626, "▁prob": 12627, "这样的": 12628, "素养": 12629, "ford": 12630, "▁produce": 12631, "arent": 12632, "▁sat": 12633, "()": 12634, "▁clean": 12635, "rick": 12636, "▁somet": 12637, "istor": 12638, "ply": 12639, "研究的": 12640, "▁vill": 12641, "▁capt": 12642, "▁ste": 12643, "ivate": 12644, "毕业": 12645, "time": 12646, "十二": 12647, "▁et": 12648, "产品的": 12649, "管理的": 12650, "▁weight": 12651, "▁actually": 12652, "探究": 12653, "进展": 12654, "▁approach": 12655, "▁June": 12656, "▁writing": 12657, "斗争": 12658, "cons": 12659, "▁attention": 12660, "。《": 12661, "▁bur": 12662, "等等": 12663, "毛泽": 12664, "▁|▁": 12665, "Sim": 12666, "▁streng": 12667, "▁recomm": 12668, "条件下": 12669, "频率": 12670, "毛泽东": 12671, "……": 12672, "Int": 12673, "很大": 12674, "▁Pol": 12675, "游戏": 12676, "▁training": 12677, "幼儿": 12678, "主任": 12679, "▁investig": 12680, "▁smo": 12681, "ham": 12682, "经历": 12683, "危险": 12684, "遗产": 12685, "Am": 12686, "器的": 12687, "▁fish": 12688, "劳动者": 12689, "▁response": 12690, "▁positive": 12691, "监控": 12692, "rast": 12693, "▁travel": 12694, "▁job": 12695, "▁political": 12696, "Our": 12697, "考试": 12698, "Or": 12699, "刺激": 12700, "约束": 12701, "head": 12702, "检验": 12703, "▁/▁": 12704, "▁done": 12705, "▁August": 12706, "some": 12707, "▁select": 12708, "拓展": 12709, "▁camp": 12710, "多的": 12711, "▁located": 12712, "古代": 12713, "▁instead": 12714, "强的": 12715, "▁ut": 12716, "▁behavior": 12717, "▁global": 12718, "AM": 12719, "▁prec": 12720, "大力": 12721, "铁路": 12722, "▁medic": 12723, "▁close": 12724, "DNA": 12725, "rs": 12726, "遗传": 12727, "建设的": 12728, "itch": 12729, "▁arg": 12730, "▁extra": 12731, "ustr": 12732, "▁says": 12733, "▁performance": 12734, "%.": 12735, "ara": 12736, "可能会": 12737, "▁div": 12738, "▁face": 12739, "▁sometimes": 12740, ")▁(": 12741, "ength": 12742, "展示": 12743, "olve": 12744, "修改": 12745, "▁Park": 12746, "引入": 12747, "土壤": 12748, "宗教": 12749, "▁lot": 12750, "成就": 12751, "小组": 12752, "isions": 12753, "ropri": 12754, "apter": 12755, "做好": 12756, "opy": 12757, "离子": 12758, "制度的": 12759, "也不": 12760, "rior": 12761, "打造": 12762, "巨大": 12763, "▁surround": 12764, "▁star": 12765, "预期": 12766, "化和": 12767, "```": 12768, "同志": 12769, "ST": 12770, "set": 12771, "Te": 12772, "iforn": 12773, "▁novel": 12774, "。“": 12775, "生的": 12776, "reet": 12777, "▁offer": 12778, "各级": 12779, "情感": 12780, "▁West": 12781, "AD": 12782, "▁reason": 12783, "▁whole": 12784, "合成": 12785, "确立": 12786, "实质": 12787, "▁Health": 12788, "▁temperature": 12789, "tra": 12790, "▁July": 12791, "博士": 12792, "▁forms": 12793, "▁played": 12794, "▁account": 12795, "▁values": 12796, "主题": 12797, "激励": 12798, "▁Co": 12799, "key": 12800, "known": 12801, "cks": 12802, "思路": 12803, "的一种": 12804, "▁ge": 12805, "▁emb": 12806, "当地": 12807, "可见": 12808, "的应用": 12809, "密切": 12810, "▁caused": 12811, "▁outside": 12812, "精准": 12813, "omb": 12814, "▁programs": 12815, "do": 12816, "给予": 12817, "▁ones": 12818, "▁Gen": 12819, "yt": 12820, "▁normal": 12821, "▁patterns": 12822, "科学家": 12823, "stry": 12824, "▁written": 12825, "imal": 12826, "▁tit": 12827, "的技术": 12828, "▁mess": 12829, "的不": 12830, "),": 12831, "\"\"": 12832, "rance": 12833, "▁points": 12834, "cil": 12835, "allow": 12836, "的情况下": 12837, "▁Act": 12838, "▁primary": 12839, "ervation": 12840, "▁soil": 12841, "▁Su": 12842, "形象": 12843, "建成": 12844, ",▁“": 12845, "互动": 12846, "▁condition": 12847, "▁behind": 12848, "▁sense": 12849, "fort": 12850, "▁distribut": 12851, "▁fire": 12852, "▁rather": 12853, "▁oil": 12854, "ades": 12855, "▁January": 12856, "lin": 12857, ")▁": 12858, "▁draw": 12859, "秩序": 12860, "国的": 12861, "探讨": 12862, "供应链": 12863, "信息技术": 12864, "结论": 12865, "▁enjoy": 12866, "unction": 12867, "▁critical": 12868, "▁member": 12869, "发行": 12870, "▁numbers": 12871, "▁heat": 12872, "▁sources": 12873, "▁environmental": 12874, "▁taking": 12875, "知识产权": 12876, "▁Fran": 12877, "争议": 12878, "人民币": 12879, "▁clin": 12880, "▁parents": 12881, "efore": 12882, "、“": 12883, "Over": 12884, "▁respect": 12885, "ifornia": 12886, "▁compared": 12887, "ief": 12888, "▁fat": 12889, "Just": 12890, "代理": 12891, ":**": 12892, "iter": 12893, "金融机构": 12894, "Each": 12895, "▁mom": 12896, "isms": 12897, "▁Reg": 12898, "▁suff": 12899, "▁doing": 12900, "之外": 12901, "pe": 12902, "导向": 12903, "广大": 12904, "资源的": 12905, "anies": 12906, "人大": 12907, "▁image": 12908, "注册": 12909, "所在": 12910, "▁produced": 12911, "oming": 12912, "▁gas": 12913, "▁Bar": 12914, "属性": 12915, "统治": 12916, "的理论": 12917, "纳入": 12918, "▁average": 12919, "▁September": 12920, "ension": 12921, "▁spread": 12922, "中國": 12923, "ebru": 12924, "法定": 12925, "hing": 12926, "成长": 12927, "情形": 12928, "检察": 12929, "▁All": 12930, "rage": 12931, "百年": 12932, "日常": 12933, "ebruary": 12934, "▁bring": 12935, "的概念": 12936, "关联": 12937, "生产力": 12938, "▁benefits": 12939, "潜在": 12940, "▁itself": 12941, "izations": 12942, "的时间": 12943, "各地": 12944, "所得": 12945, "▁feed": 12946, "振兴": 12947, "ials": 12948, "▁video": 12949, "uild": 12950, "》(": 12951, "Most": 12952, "cles": 12953, "▁daily": 12954, "arily": 12955, "▁Part": 12956, "▁takes": 12957, "▁increasing": 12958, "▁states": 12959, "▁broad": 12960, "udents": 12961, "▁《": 12962, "▁society": 12963, "当代": 12964, "▁independ": 12965, "▁terms": 12966, "▁April": 12967, "。\"": 12968, "▁link": 12969, "市场经济": 12970, "ometimes": 12971, "ET": 12972, "高速": 12973, "事故": 12974, "能力的": 12975, "ED": 12976, "▁tiss": 12977, "comp": 12978, "abet": 12979, "▁threat": 12980, "▁eval": 12981, "itect": 12982, "Why": 12983, "▁promot": 12984, "▁overall": 12985, "航空": 12986, "▁warm": 12987, "▁slow": 12988, "▁card": 12989, "强度": 12990, "▁beaut": 12991, "的法律": 12992, "▁longer": 12993, "即使": 12994, "odies": 12995, "First": 12996, "▁cool": 12997, "态度": 12998, "▁sou": 12999, "inct": 13000, "公司的": 13001, "故事": 13002, "有些": 13003, "`▁": 13004, "▁,▁": 13005, "▁football": 13006, "des": 13007, "▁yourself": 13008, "可以通过": 13009, "范围内": 13010, "ica": 13011, "▁held": 13012, "▁sleep": 13013, "▁damage": 13014, "▁protein": 13015, "▁aud": 13016, "贫困": 13017, "有着": 13018, "stitute": 13019, "适当": 13020, "存在的": 13021, "onom": 13022, "▁quickly": 13023, "较大": 13024, "▁wild": 13025, "在中国": 13026, "▁forest": 13027, "amples": 13028, "职责": 13029, "▁cross": 13030, "▁practices": 13031, "▁fru": 13032, "igen": 13033, "US": 13034, "ricult": 13035, "▁served": 13036, "▁safety": 13037, "他人": 13038, "Once": 13039, "oe": 13040, "Eng": 13041, "哪些": 13042, "展开": 13043, "▁Rec": 13044, "人才培养": 13045, "研究所": 13046, "▁dog": 13047, "ington": 13048, "而不是": 13049, "积累": 13050, "rand": 13051, "担保": 13052, "▁standard": 13053, "alls": 13054, "▁altern": 13055, "mm": 13056, "沟通": 13057, "▁sex": 13058, "Another": 13059, "▁chemical": 13060, "irit": 13061, "遵循": 13062, "▁Har": 13063, "▁provided": 13064, "▁earl": 13065, "John": 13066, "出来": 13067, "当然": 13068, "▁stop": 13069, "约定": 13070, "威胁": 13071, "▁concept": 13072, "更新": 13073, "standing": 13074, "较为": 13075, "▁matter": 13076, "▁enh": 13077, "▁October": 13078, "▁farm": 13079, "▁reve": 13080, "IC": 13081, "再次": 13082, "维持": 13083, "▁released": 13084, "porary": 13085, ",▁": 13086, "参考文献": 13087, "养老": 13088, "他们的": 13089, "▁expression": 13090, "补偿": 13091, "民间": 13092, "大利": 13093, "内在": 13094, "▁kids": 13095, "ership": 13096, "▁patient": 13097, "我们的": 13098, "到的": 13099, "▁stru": 13100, "▁cat": 13101, "绩效": 13102, "ederal": 13103, "▁content": 13104, "▁(": 13105, "acters": 13106, "另一": 13107, "ha": 13108, "创作": 13109, "▁psych": 13110, "团结": 13111, "的核心": 13112, "▁yet": 13113, "▁Ed": 13114, "▁reflect": 13115, "▁cultural": 13116, "overy": 13117, "alled": 13118, "危害": 13119, "usic": 13120, "商务": 13121, "  ": 13122, "新兴": 13123, "▁humans": 13124, "▁Ab": 13125, "▁subst": 13126, "RNA": 13127, "###▁": 13128, "ondon": 13129, "大部分": 13130, "▁added": 13131, "life": 13132, "之中": 13133, "价值观": 13134, "ama": 13135, "市场的": 13136, "▁safe": 13137, "▁log": 13138, "▁media": 13139, "▁lines": 13140, "施工": 13141, "用人": 13142, "▁final": 13143, "new": 13144, "▁Par": 13145, "力度": 13146, "并在": 13147, "▁causes": 13148, "强制": 13149, "制作": 13150, "理性": 13151, "▁wood": 13152, "OR": 13153, "将其": 13154, "uro": 13155, "rought": 13156, "ibrary": 13157, "各项": 13158, "▁road": 13159, "esc": 13160, "密度": 13161, "▁ox": 13162, "▁games": 13163, "缺陷": 13164, "osing": 13165, "依靠": 13166, "最佳": 13167, "对应": 13168, "▁shown": 13169, "变量": 13170, "oud": 13171, "▁rev": 13172, "▁Min": 13173, "上市": 13174, "那些": 13175, "▁avoid": 13176, "▁sust": 13177, "转让": 13178, "▁habit": 13179, "▁stay": 13180, "渠道": 13181, "电流": 13182, "asons": 13183, "▁Am": 13184, "▁French": 13185, "▁third": 13186, "冲突": 13187, "补充": 13188, "考核": 13189, "示范": 13190, "▁recent": 13191, "非法": 13192, "ON": 13193, "EP": 13194, "而不": 13195, "used": 13196, "iff": 13197, "\".▁": 13198, "▁greater": 13199, "Bob": 13200, "▁doesn": 13201, "▁exact": 13202, "under": 13203, "接触": 13204, "党中央": 13205, "Dr": 13206, "▁easy": 13207, "引发": 13208, "pper": 13209, "ditionally": 13210, "▁tree": 13211, "形成的": 13212, "osition": 13213, "协商": 13214, "▁importance": 13215, "see": 13216, "支出": 13217, "▁including": 13218, "▁talk": 13219, "ogen": 13220, "ius": 13221, "▁implement": 13222, "room": 13223, "纤维": 13224, "尊重": 13225, "违法": 13226, "ror": 13227, "Le": 13228, "%。": 13229, "加以": 13230, "ternet": 13231, "anks": 13232, "People": 13233, "ears": 13234, "为什么": 13235, "坚定": 13236, "替代": 13237, "orthern": 13238, "▁December": 13239, "oma": 13240, "其它": 13241, "▁movement": 13242, "经常": 13243, "▁visual": 13244, "▁Dr": 13245, "iber": 13246, "》,": 13247, "App": 13248, "▁Dep": 13249, "反对": 13250, "▁ideas": 13251, "程度上": 13252, "人民群众": 13253, "ties": 13254, "ico": 13255, "、▁": 13256, "iece": 13257, "合物": 13258, "正是": 13259, "▁aff": 13260, "干扰": 13261, "▁establish": 13262, "资本主义": 13263, "▁electric": 13264, "rote": 13265, "▁wa": 13266, "▁syn": 13267, "▁Europe": 13268, "习惯": 13269, "▁night": 13270, "alking": 13271, "▁mag": 13272, "▁sold": 13273, "响应": 13274, "因子": 13275, "▁.": 13276, "空气": 13277, "▁significantly": 13278, "add": 13279, "有了": 13280, "vention": 13281, "pose": 13282, "▁High": 13283, "▁died": 13284, "走向": 13285, "▁historical": 13286, "▁progress": 13287, "主席": 13288, "最大的": 13289, "▁sil": 13290, "ancial": 13291, "几乎": 13292, "面的": 13293, "行使": 13294, "▁career": 13295, "著作": 13296, "院校": 13297, ".”▁": 13298, "只要": 13299, "的安全": 13300, "▁industry": 13301, "▁former": 13302, "更好地": 13303, "atively": 13304, "▁cannot": 13305, "▁El": 13306, "某种": 13307, "ounds": 13308, "▁International": 13309, "▁developing": 13310, "odes": 13311, "resh": 13312, "gl": 13313, "平方": 13314, "做出": 13315, "ancy": 13316, "带来的": 13317, "予以": 13318, "▁extrem": 13319, "▁received": 13320, "資料": 13321, "营养": 13322, "ologies": 13323, "▁lands": 13324, "今天": 13325, "十四": 13326, "▁Qu": 13327, "足球": 13328, "▁hy": 13329, "ufact": 13330, "htt": 13331, "▁November": 13332, "iers": 13333, "▁host": 13334, "▁code": 13335, "活动的": 13336, "关系的": 13337, "时的": 13338, "▁north": 13339, "手术": 13340, "▁international": 13341, "损伤": 13342, "传递": 13343, "▁custom": 13344, "▁And": 13345, "可以在": 13346, "但在": 13347, "espite": 13348, "基础上": 13349, "Rec": 13350, "十九": 13351, "ky": 13352, "▁claim": 13353, "产业链": 13354, "iles": 13355, "芯片": 13356, "吸引": 13357, "释放": 13358, "):": 13359, "▁communication": 13360, "汇率": 13361, "▁House": 13362, "bit": 13363, "):▁": 13364, "▁true": 13365, "•▁": 13366, "少数": 13367, "Through": 13368, "指数": 13369, "▁animal": 13370, "不再": 13371, "▁larger": 13372, "▁European": 13373, "高级": 13374, "also": 13375, "良好": 13376, "网站": 13377, "改革的": 13378, "重复": 13379, "▁aware": 13380, "▁minutes": 13381, "人与": 13382, "▁growing": 13383, "ira": 13384, "的思想": 13385, "初步": 13386, "▁feature": 13387, ",《": 13388, "▁families": 13389, "term": 13390, "路线": 13391, "▁determine": 13392, "▁issue": 13393, "itude": 13394, ".▁**": 13395, "对其": 13396, "inated": 13397, "Col": 13398, "▁continue": 13399, "ios": 13400, "uff": 13401, "边缘": 13402, "iring": 13403, "步骤": 13404, "▁mental": 13405, "reek": 13406, "EM": 13407, "avid": 13408, "▁Center": 13409, "股权": 13410, "代谢": 13411, "after": 13412, "大學": 13413, "▁economic": 13414, "大型": 13415, "come": 13416, "学家": 13417, "▁almost": 13418, "和其他": 13419, "▁website": 13420, "品牌": 13421, "▁decre": 13422, "体系的": 13423, "▁page": 13424, "队伍": 13425, "▁Cont": 13426, "揭示": 13427, "▁went": 13428, "个性": 13429, "流通": 13430, "▁complete": 13431, "自觉": 13432, "服务器": 13433, "▁band": 13434, "启动": 13435, "原子": 13436, "iency": 13437, "▁concent": 13438, "▁magn": 13439, "▁variety": 13440, "粮食": 13441, "▁bacter": 13442, "ned": 13443, "采集": 13444, "大规模": 13445, "▁symb": 13446, "为核心": 13447, "▁active": 13448, "▁article": 13449, "思政": 13450, "▁meaning": 13451, "孩子": 13452, "职业教育": 13453, "ounts": 13454, "命运": 13455, "iny": 13456, "党员": 13457, "▁contact": 13458, "适合": 13459, "ously": 13460, "bes": 13461, "▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁": 13462, "更多的": 13463, "PP": 13464, "has": 13465, "▁reported": 13466, "CS": 13467, "eal": 13468, "iot": 13469, "人在": 13470, "唯一": 13471, "为基础": 13472, "Well": 13473, "▁basic": 13474, "▁images": 13475, "▁You": 13476, "▁base": 13477, "结束": 13478, "GDP": 13479, "▁strategies": 13480, "台灣": 13481, "侵权": 13482, "ula": 13483, "▁speed": 13484, "的结果": 13485, "▁shap": 13486, "▁accept": 13487, "▁Sw": 13488, "ocal": 13489, "▁Gl": 13490, "同步": 13491, "服务的": 13492, "uries": 13493, "被告": 13494, "▁places": 13495, "▁feet": 13496, "uth": 13497, "充分发挥": 13498, "大量的": 13499, "Do": 13500, "表现为": 13501, "▁discovered": 13502, "▁opportunities": 13503, "enge": 13504, "▁sn": 13505, "条款": 13506, "科技创新": 13507, "应急": 13508, "Since": 13509, "atform": 13510, "力和": 13511, "▁believe": 13512, "▁creating": 13513, "的学习": 13514, "不少": 13515, "Under": 13516, "▁Dist": 13517, "高质量发展": 13518, "anish": 13519, "▁processes": 13520, "▁asked": 13521, "ying": 13522, "大小": 13523, "▁foods": 13524, "原始": 13525, "▁additional": 13526, "▁correct": 13527, "批准": 13528, "ulate": 13529, "了一个": 13530, "Alice": 13531, "agement": 13532, "▁appl": 13533, "年度": 13534, "▁network": 13535, "▁Me": 13536, "care": 13537, "ulated": 13538, "izes": 13539, "▁diseases": 13540, "**:▁": 13541, "resident": 13542, "▁achieve": 13543, "▁easily": 13544, "▁eth": 13545, "ildren": 13546, "▁via": 13547, "浙江": 13548, "▁eye": 13549, "▁continued": 13550, "▁lif": 13551, "road": 13552, "间的": 13553, "▁appropri": 13554, "▁crucial": 13555, "接收": 13556, "授权": 13557, "辐射": 13558, "▁hor": 13559, "主导": 13560, "▁everything": 13561, "Ab": 13562, "issions": 13563, "每年": 13564, "▁Stud": 13565, "Comp": 13566, "独特": 13567, "ether": 13568, "装置": 13569, ">▁": 13570, "▁collabor": 13571, "差距": 13572, "▁shape": 13573, "▁attem": 13574, "▁Art": 13575, "omas": 13576, "▁print": 13577, "灵活": 13578, "uable": 13579, "son": 13580, "劳动合同": 13581, "▁viol": 13582, "▁lo": 13583, "敏感": 13584, "▁veget": 13585, "▁Sec": 13586, "相似": 13587, "|-": 13588, "▁trees": 13589, "▁prep": 13590, "使用的": 13591, "▁eat": 13592, "▁cele": 13593, "之路": 13594, "idents": 13595, "有限公司": 13596, "▁virus": 13597, "lead": 13598, "Then": 13599, "纳米": 13600, "▁goal": 13601, "事项": 13602, "fess": 13603, "vest": 13604, "▁visit": 13605, "▁analy": 13606, "▁simply": 13607, "rest": 13608, "▁document": 13609, "工资": 13610, "▁stri": 13611, "▁aspects": 13612, "▁mole": 13613, "▁getting": 13614, "蛋白质": 13615, "修复": 13616, "ections": 13617, "電影": 13618, "大幅": 13619, "Co": 13620, "▁influence": 13621, "ields": 13622, "通道": 13623, "▁remains": 13624, "ros": 13625, "▁south": 13626, "Gen": 13627, "▁carbon": 13628, "▁manufact": 13629, "▁ec": 13630, "▁becomes": 13631, "iar": 13632, "的特点": 13633, "▁eyes": 13634, "▁characters": 13635, "cean": 13636, "现有": 13637, "ython": 13638, "AL": 13639, "▁ang": 13640, "不过": 13641, "视频": 13642, "rid": 13643, "▁For": 13644, "▁breat": 13645, "▁hands": 13646, "▁efforts": 13647, "oday": 13648, "期限": 13649, "BS": 13650, "▁version": 13651, "ipl": 13652, "一代": 13653, "▁x": 13654, "bre": 13655, "orders": 13656, "老师": 13657, "用人单位": 13658, "equ": 13659, "召开": 13660, "sec": 13661, "ald": 13662, "许可": 13663, "yond": 13664, "链接": 13665, "▁mother": 13666, "igned": 13667, "Further": 13668, "▁hot": 13669, "Mar": 13670, "文物": 13671, "▁structures": 13672, "辅助": 13673, "浓度": 13674, "▁Russ": 13675, "▁commit": 13676, "外的": 13677, "投资者": 13678, "自动化": 13679, "roup": 13680, "岗位": 13681, "债券": 13682, "▁Canada": 13683, "edi": 13684, "Even": 13685, "代码": 13686, "年人": 13687, "▁thing": 13688, "党和": 13689, "十一": 13690, "考察": 13691, "制约": 13692, "仲裁": 13693, "ceed": 13694, "试点": 13695, "职工": 13696, "纠纷": 13697, "▁guid": 13698, "大大": 13699, "istry": 13700, "外交": 13701, "电压": 13702, "電視": 13703, "详细": 13704, "▁check": 13705, "▁transport": 13706, "▁tax": 13707, "均衡": 13708, "紧密": 13709, "aint": 13710, "通知": 13711, "成分": 13712, "▁fram": 13713, "这就": 13714, "▁favor": 13715, "imum": 13716, "▁relationship": 13717, "的风险": 13718, "▁sea": 13719, "▁Africa": 13720, "▁neigh": 13721, "Cont": 13722, ":▁\"": 13723, "组成部分": 13724, "wide": 13725, "随机": 13726, "▁lost": 13727, "▁calcul": 13728, "many": 13729, "iful": 13730, "智能化": 13731, "▁wond": 13732, "抵押": 13733, "组织的": 13734, "illing": 13735, "olit": 13736, "aur": 13737, "气体": 13738, "ydro": 13739, "▁stage": 13740, "▁hyp": 13741, "phas": 13742, "编制": 13743, "were": 13744, "▁Tra": 13745, "iec": 13746, "osure": 13747, "十三": 13748, "▁poll": 13749, "十年": 13750, "信息的": 13751, "▁Science": 13752, "▁German": 13753, "▁ancient": 13754, "▁College": 13755, "有一": 13756, "EN": 13757, "writ": 13758, "为中心": 13759, "▁shared": 13760, "▁Ac": 13761, "学会": 13762, "伦理": 13763, "▁front": 13764, "▁bab": 13765, "罗斯": 13766, "▁central": 13767, "▁gard": 13768, "▁February": 13769, "atin": 13770, "▁rules": 13771, "微生物": 13772, "ocr": 13773, "地产": 13774, "融入": 13775, "军队": 13776, "men": 13777, "编码": 13778, "▁African": 13779, "航天": 13780, "董事": 13781, "IL": 13782, "也会": 13783, "etc": 13784, "craft": 13785, "ux": 13786, "Don": 13787, "值得": 13788, "少年": 13789, "▁decided": 13790, "ett": 13791, "▁der": 13792, "第一次": 13793, "que": 13794, "▁decision": 13795, "▁companies": 13796, "▁tum": 13797, "机器人": 13798, "采购": 13799, "resp": 13800, "▁emp": 13801, "left": 13802, "环保": 13803, "▁looking": 13804, "opt": 13805, "▁Institute": 13806, "办公": 13807, "地区的": 13808, "PC": 13809, "若干": 13810, "▁pack": 13811, "chol": 13812, "uman": 13813, "大学生": 13814, "发电": 13815, "▁described": 13816, "rab": 13817, "印度": 13818, "Their": 13819, "▁isn": 13820, "eorge": 13821, "在线": 13822, "▁convers": 13823, "▁born": 13824, "▁transl": 13825, "▁else": 13826, "方程": 13827, "▁Associ": 13828, "inese": 13829, "▁beyond": 13830, "高中": 13831, "▁length": 13832, "▁Air": 13833, "  ": 13834, "gn": 13835, "▁East": 13836, "▁situ": 13837, "▁force": 13838, "发生的": 13839, "My": 13840, "▁sett": 13841, "并非": 13842, "使命": 13843, "单一": 13844, "ception": 13845, "▁severe": 13846, "一旦": 13847, "进口": 13848, "▁Per": 13849, "▁Mc": 13850, "uge": 13851, "接口": 13852, "vant": 13853, "▁Day": 13854, "区块": 13855, "配合": 13856, "节能": 13857, "局部": 13858, "电影": 13859, "▁acid": 13860, "Cons": 13861, "解决方案": 13862, "今年": 13863, "▁sus": 13864, "iples": 13865, "ducation": 13866, "▁projects": 13867, "mission": 13868, "\"。": 13869, "▁attack": 13870, "传承": 13871, "▁thinking": 13872, "▁mount": 13873, "上下": 13874, "▁difference": 13875, "视觉": 13876, "▁App": 13877, "▁ful": 13878, "装备": 13879, "▁Jew": 13880, "▁devices": 13881, "Comm": 13882, "体现了": 13883, "using": 13884, "▁screen": 13885, "▁rock": 13886, "股票": 13887, "发育": 13888, "轨道": 13889, "itar": 13890, "共同体": 13891, "▁fight": 13892, "执法": 13893, "zz": 13894, "pid": 13895, "硬件": 13896, "▁Ang": 13897, "▁sal": 13898, "▁objects": 13899, "▁digital": 13900, "国家安全": 13901, "假设": 13902, "至少": 13903, "clusion": 13904, "方针": 13905, "绝对": 13906, "的形式": 13907, "▁History": 13908, "ipment": 13909, "because": 13910, "记忆": 13911, "▁models": 13912, "PD": 13913, "使学生": 13914, "▁proced": 13915, "▁reach": 13916, "era": 13917, "▁wid": 13918, "▁steps": 13919, "西部": 13920, "uments": 13921, "▁responsible": 13922, "unicip": 13923, "短期": 13924, "接近": 13925, "▁successful": 13926, "▁scientists": 13927, "台湾": 13928, "▁son": 13929, "▁lack": 13930, "编辑": 13931, "现状": 13932, "▁At": 13933, "lim": 13934, ":**▁": 13935, "SS": 13936, "条例": 13937, "▁agre": 13938, "还要": 13939, "▁valuable": 13940, "股份": 13941, "EC": 13942, "▁differences": 13943, "▁involves": 13944, "ynam": 13945, "▁birth": 13946, "▁perspect": 13947, "▁center": 13948, "违反": 13949, "▁Research": 13950, "irm": 13951, "urrent": 13952, "著名": 13953, "审判": 13954, "▁room": 13955, "class": 13956, "近代": 13957, "wood": 13958, "May": 13959, "▁administ": 13960, "▁earth": 13961, "org": 13962, "着力": 13963, "abetes": 13964, "year": 13965, "▁components": 13966, "▁quant": 13967, "airs": 13968, "urt": 13969, "不到": 13970, "cre": 13971, "▁Rev": 13972, "同意": 13973, "met": 13974, "的教育": 13975, "扩张": 13976, "▁deb": 13977, "活力": 13978, "▁Serv": 13979, "胜利": 13980, "宇宙": 13981, "▁ing": 13982, "umn": 13983, "则是": 13984, "▁strugg": 13985, "出台": 13986, "Su": 13987, "ospital": 13988, "▁infl": 13989, "清楚": 13990, "挖掘": 13991, "▁sustain": 13992, "▁worked": 13993, "gu": 13994, "ashington": 13995, "ero": 13996, "▁therapy": 13997, "发射": 13998, "www": 13999, "▁professional": 14000, "提出的": 14001, "____": 14002, "第六": 14003, "bal": 14004, "▁instit": 14005, "ancing": 14006, "▁ast": 14007, "ocks": 14008, "▁contains": 14009, "事物": 14010, "再生": 14011, "电视": 14012, "▁soon": 14013, "▁release": 14014, "观测": 14015, "红色": 14016, "身体": 14017, "▁saw": 14018, "▁male": 14019, "▁directly": 14020, "▁infection": 14021, "▁op": 14022, "明朝": 14023, "leg": 14024, "▁Bo": 14025, "消除": 14026, "▁cou": 14027, "ampions": 14028, "▁veh": 14029, "怎样": 14030, "▁incorpor": 14031, "新技术": 14032, "”、“": 14033, "竞争力": 14034, "▁ice": 14035, "▁expect": 14036, "Rem": 14037, "▁England": 14038, "▁powerful": 14039, "切实": 14040, "load": 14041, "学习的": 14042, "emporary": 14043, "▁software": 14044, "▁India": 14045, "oration": 14046, "▁Mon": 14047, "▁track": 14048, "条规定": 14049, "century": 14050, "所需": 14051, "adian": 14052, "记者": 14053, "▁Indian": 14054, "spec": 14055, "年龄": 14056, "ifically": 14057, "▁dry": 14058, "▁poor": 14059, "指挥": 14060, "what": 14061, "itis": 14062, "感知": 14063, "ought": 14064, "▁dang": 14065, "ieces": 14066, "dis": 14067, "▁weeks": 14068, "功率": 14069, "▁innov": 14070, "▁adults": 14071, "gency": 14072, "天然": 14073, "故障": 14074, "▁estim": 14075, "第一个": 14076, "找到": 14077, "usion": 14078, "教学中": 14079, "品种": 14080, "▁System": 14081, "是中国": 14082, "小时": 14083, "执政": 14084, "▁har": 14085, "大气": 14086, "▁rates": 14087, "全会": 14088, "得以": 14089, "咨询": 14090, "”“": 14091, "财富": 14092, "强国": 14093, "▁earlier": 14094, "人为": 14095, "▁rob": 14096, "itiz": 14097, "而在": 14098, "情境": 14099, "lymp": 14100, "▁theory": 14101, "的原则": 14102, "▁search": 14103, "报道": 14104, "样本": 14105, "一带": 14106, "划分": 14107, "▁dou": 14108, "▁vit": 14109, "抽象": 14110, "呼吸": 14111, "▁diverse": 14112, "aught": 14113, "▁tool": 14114, "▁speak": 14115, "\"、\"": 14116, "垄断": 14117, "▁predict": 14118, "▁requires": 14119, "树立": 14120, "序列": 14121, "▁village": 14122, "▁relationships": 14123, "icular": 14124, "pat": 14125, "▁conce": 14126, "▁fa": 14127, "▁und": 14128, "准则": 14129, "▁playing": 14130, "ias": 14131, "▁hon": 14132, "▁write": 14133, "万元": 14134, "语文": 14135, "南京": 14136, "aly": 14137, "劳动力": 14138, "cast": 14139, "▁ago": 14140, "▁cam": 14141, "▁leaves": 14142, "视为": 14143, "▁ir": 14144, "cell": 14145, "▁showed": 14146, "负债": 14147, "avig": 14148, "高于": 14149, "复杂的": 14150, "▁defin": 14151, "机遇": 14152, "等级": 14153, "▁location": 14154, "vert": 14155, "ij": 14156, "以前": 14157, "人文": 14158, "▁William": 14159, "多次": 14160, "▁trying": 14161, "▁vacc": 14162, "渗透": 14163, "能力和": 14164, "vis": 14165, "board": 14166, "▁according": 14167, "▁moved": 14168, "ander": 14169, "公路": 14170, "▁limited": 14171, "巨大的": 14172, "经典": 14173, "我们党": 14174, "出现了": 14175, "巩固": 14176, "sm": 14177, "突变": 14178, "干预": 14179, "oyal": 14180, "▁gain": 14181, "nection": 14182, "▁section": 14183, "▁fit": 14184, "合并": 14185, "▁Church": 14186, "民法": 14187, "可持续发展": 14188, "▁serious": 14189, "▁encourag": 14190, "它是": 14191, "的时候": 14192, "▁table": 14193, "的情况": 14194, "ilos": 14195, "人体": 14196, "▁Val": 14197, "成了": 14198, "gram": 14199, "▁findings": 14200, "取得了": 14201, "冲击": 14202, "带动": 14203, "使其": 14204, "家族": 14205, "动机": 14206, "ament": 14207, "Pre": 14208, "▁gradu": 14209, "▁items": 14210, "得到了": 14211, "MP": 14212, "inating": 14213, "▁experien": 14214, "▁civil": 14215, "▁+▁": 14216, "数字经济": 14217, "ensity": 14218, "个月": 14219, "结构的": 14220, "▁quite": 14221, "ras": 14222, "疫苗": 14223, "五年": 14224, "▁month": 14225, "gy": 14226, "Additionally": 14227, "▁dark": 14228, "▁colon": 14229, "▁scientific": 14230, "▁device": 14231, "zh": 14232, "应用于": 14233, "▁bra": 14234, "线性": 14235, "发病": 14236, "适用于": 14237, "中间": 14238, "▁prior": 14239, "▁generally": 14240, "itable": 14241, "edic": 14242, "▁conflic": 14243, "ners": 14244, "的政治": 14245, "清晰": 14246, "含量": 14247, "▁exercise": 14248, "▁smaller": 14249, "ael": 14250, "用来": 14251, "不良": 14252, "处罚": 14253, "coh": 14254, "的目标": 14255, "货币政策": 14256, "低于": 14257, "▁balance": 14258, "激活": 14259, "激光": 14260, "尚未": 14261, "防治": 14262, "现场": 14263, "▁learned": 14264, "对此": 14265, "▁examples": 14266, "成绩": 14267, "房地产": 14268, "▁mut": 14269, "▁sequ": 14270, "对比": 14271, "▁memory": 14272, "自信": 14273, "有效地": 14274, "ny": 14275, "▁platform": 14276, "区的": 14277, "鉴定": 14278, "book": 14279, "Her": 14280, "▁wide": 14281, "行为的": 14282, "▁cho": 14283, "change": 14284, "▁perfect": 14285, "是不": 14286, "中有": 14287, "formed": 14288, "▁mid": 14289, ";(": 14290, "▁piece": 14291, "useum": 14292, "资格": 14293, "▁construct": 14294, "办理": 14295, "▁ord": 14296, "▁collection": 14297, "▁context": 14298, "林匹": 14299, "知识的": 14300, "▁club": 14301, "所示": 14302, "▁got": 14303, "》(": 14304, "ste": 14305, "levision": 14306, "富裕": 14307, "sk": 14308, "▁Your": 14309, "工人": 14310, "hemat": 14311, "*▁**": 14312, "being": 14313, "▁largest": 14314, "▁thous": 14315, "比重": 14316, "解除": 14317, "▁style": 14318, "alities": 14319, "ville": 14320, "▁applications": 14321, "探测": 14322, "安装": 14323, "▁League": 14324, "Tra": 14325, "▁teachers": 14326, "▁obtain": 14327, "▁financial": 14328, "▁egg": 14329, "▁pan": 14330, "大家": 14331, "▁carry": 14332, "▁offers": 14333, "更高": 14334, "秘密": 14335, "蒙古": 14336, "复合": 14337, "haps": 14338, "▁clinical": 14339, "三角": 14340, "承包": 14341, "▁fast": 14342, "较低": 14343, "东北": 14344, "▁goals": 14345, "DA": 14346, "ximately": 14347, "▁tend": 14348, "SP": 14349, "各自": 14350, "林匹克": 14351, "hens": 14352, "▁architect": 14353, "品质": 14354, "▁didn": 14355, "法官": 14356, "▁formed": 14357, "生理": 14358, "提高了": 14359, "的国家": 14360, "Your": 14361, "保留": 14362, "低碳": 14363, "背景下": 14364, "公正": 14365, "有力": 14366, "Its": 14367, "》。": 14368, "▁China": 14369, "▁display": 14370, "▁famous": 14371, "▁respond": 14372, "igr": 14373, "▁mention": 14374, "▁Im": 14375, "▁highly": 14376, "▁military": 14377, "Pr": 14378, "苏联": 14379, "交互": 14380, "▁contribute": 14381, "▁ult": 14382, "▁regarding": 14383, "农产品": 14384, "char": 14385, "的管理": 14386, "东西": 14387, "wise": 14388, "▁father": 14389, "载体": 14390, "ida": 14391, "▁Techn": 14392, "ta": 14393, "反馈": 14394, "▁negative": 14395, "稳定性": 14396, "▁construction": 14397, "▁CO": 14398, "▁evalu": 14399, "后来": 14400, "▁bad": 14401, "区块链": 14402, "Per": 14403, "▁ten": 14404, "▁Sm": 14405, "无线": 14406, "▁hous": 14407, "▁integr": 14408, "▁Hol": 14409, "hors": 14410, "的功能": 14411, "▁remember": 14412, "▁summer": 14413, "▁hom": 14414, "related": 14415, "委托": 14416, "▁Cons": 14417, "的原因": 14418, "▁Ant": 14419, "通过对": 14420, "三年": 14421, "地址": 14422, "▁appropriate": 14423, "▁Coun": 14424, "field": 14425, "放在": 14426, "的科学": 14427, "▁factor": 14428, "封建": 14429, "的目的": 14430, "▁industr": 14431, "和管理": 14432, "ften": 14433, "一项": 14434, "名称": 14435, "iated": 14436, "公共服务": 14437, "天下": 14438, "转化为": 14439, "运动员": 14440, "▁block": 14441, "inate": 14442, "▁interesting": 14443, "隐私": 14444, "▁bit": 14445, "▁teaching": 14446, "有序": 14447, "意志": 14448, "▁box": 14449, "评论": 14450, "▁leading": 14451, "政府的": 14452, "raz": 14453, "Using": 14454, "一体化": 14455, "膨胀": 14456, "▁capac": 14457, "trans": 14458, "rong": 14459, "本书": 14460, "▁behavi": 14461, "的价值": 14462, "roph": 14463, "▁San": 14464, "▁Commun": 14465, "works": 14466, "签订": 14467, "一路": 14468, "▁forces": 14469, "档案": 14470, "▁religious": 14471, "变得": 14472, "其实": 14473, "国外": 14474, "版本": 14475, "▁unit": 14476, "▁round": 14477, "▁typically": 14478, "▁protection": 14479, "并没有": 14480, "▁Ital": 14481, "多年": 14482, "▁bound": 14483, "▁cred": 14484, "▁acqu": 14485, "伟大复兴": 14486, "och": 14487, "外国": 14488, "全体": 14489, "▁nuc": 14490, "▁constit": 14491, "符号": 14492, "aled": 14493, "▁:▁": 14494, "▁performed": 14495, "ares": 14496, "ding": 14497, "▁Island": 14498, "▁sites": 14499, "ML": 14500, "的需求": 14501, "分工": 14502, "▁tissue": 14503, "▁waste": 14504, "▁miss": 14505, "tic": 14506, "至今": 14507, "▁California": 14508, "三种": 14509, "的过程中": 14510, "▁fair": 14511, "▁gold": 14512, "asks": 14513, "▁answer": 14514, "定了": 14515, "区分": 14516, "ingu": 14517, "倾向": 14518, "--▁": 14519, "▁purpose": 14520, "▁teacher": 14521, "▁situation": 14522, "公布": 14523, "分解": 14524, "▁belief": 14525, "▁ball": 14526, "▁news": 14527, "▁detail": 14528, "▁spirit": 14529, "。(": 14530, "借鉴": 14531, "▁Press": 14532, "▁exposure": 14533, "局限": 14534, "▁mis": 14535, "▁rat": 14536, "先后": 14537, "一年": 14538, "小学": 14539, "▁Australia": 14540, "细菌": 14541, "点的": 14542, "制的": 14543, "▁policy": 14544, "icate": 14545, "urban": 14546, "▁choose": 14547, "▁tests": 14548, "动脉": 14549, "ava": 14550, "Act": 14551, "▁Great": 14552, "成為": 14553, "Cal": 14554, "▁cand": 14555, "▁trust": 14556, "imens": 14557, "Because": 14558, "atur": 14559, "▁rapid": 14560, "有可能": 14561, "▁Association": 14562, "Also": 14563, "病人": 14564, "fe": 14565, ");": 14566, "▁autom": 14567, "PR": 14568, "▁serve": 14569, "笔者": 14570, "▁District": 14571, "服务业": 14572, "式的": 14573, "▁doctor": 14574, "▁Tr": 14575, "連結": 14576, "oper": 14577, "传统文化": 14578, "ician": 14579, "▁vict": 14580, "undred": 14581, "▁jud": 14582, "velopment": 14583, "車站": 14584, "anguages": 14585, "▁Red": 14586, "▁Christian": 14587, "居住": 14588, "▁exhib": 14589, "出版社": 14590, "百分": 14591, "▁older": 14592, "▁jour": 14593, "边界": 14594, "▁involve": 14595, "olving": 14596, "Sm": 14597, "▁brought": 14598, "emic": 14599, "▁properties": 14600, "IM": 14601, "发展和": 14602, "流行": 14603, "▁deaths": 14604, "提取": 14605, "就可以": 14606, "增速": 14607, "▁Society": 14608, "▁Fl": 14609, "▁exactly": 14610, "TC": 14611, "▁private": 14612, "aste": 14613, "▁bott": 14614, "广东": 14615, "▁player": 14616, "▁actions": 14617, "转向": 14618, "宣布": 14619, "ocial": 14620, "▁scen": 14621, "极大": 14622, "三大": 14623, "技术和": 14624, "较高": 14625, "▁challenge": 14626, "十六": 14627, "曲线": 14628, "简称": 14629, "isl": 14630, "▁wrote": 14631, "▁options": 14632, "cular": 14633, "aters": 14634, "▁births": 14635, "还可以": 14636, "▁win": 14637, "地的": 14638, "文本": 14639, "Qu": 14640, "mosp": 14641, "很难": 14642, "▁affected": 14643, "▁distinct": 14644, "ube": 14645, "PA": 14646, "▁details": 14647, "行星": 14648, "elines": 14649, "have": 14650, "although": 14651, "▁functions": 14652, "rees": 14653, "催化": 14654, "延伸": 14655, "欧盟": 14656, "Des": 14657, "▁fresh": 14658, "▁No": 14659, "Use": 14660, "comes": 14661, "ago": 14662, "▁stra": 14663, "▁sports": 14664, "▁equipment": 14665, "amil": 14666, "▁application": 14667, "▁identified": 14668, "organ": 14669, "纳税": 14670, "SD": 14671, "rical": 14672, "house": 14673, "这项": 14674, "▁celebr": 14675, "SC": 14676, "借助": 14677, "▁transfer": 14678, "大陆": 14679, "社会主义现代化": 14680, "▁pieces": 14681, "▁himself": 14682, "ref": 14683, "rition": 14684, "▁numerous": 14685, "方的": 14686, "▁efficient": 14687, "▁Ag": 14688, "according": 14689, "both": 14690, "ellig": 14691, "等问题": 14692, "中共中央": 14693, "▁beautiful": 14694, "mark": 14695, "oses": 14696, "第二节": 14697, "周围": 14698, "▁female": 14699, "▁solution": 14700, "房屋": 14701, "乡村振兴": 14702, "诸多": 14703, "禁止": 14704, "▁weather": 14705, "细胞的": 14706, "ouch": 14707, "负担": 14708, "信贷": 14709, "ken": 14710, "抗体": 14711, "合理的": 14712, "igenous": 14713, "▁surrounding": 14714, "▁Char": 14715, "▁labor": 14716, "建立了": 14717, "流量": 14718, "eper": 14719, "外汇": 14720, "▁wanted": 14721, "▁girl": 14722, "认真": 14723, "科学院": 14724, "▁useful": 14725, "举措": 14726, "我国的": 14727, "rome": 14728, "▁Int": 14729, "▁status": 14730, "▁reduced": 14731, "▁supply": 14732, "obert": 14733, "▁solar": 14734, "▁church": 14735, "acing": 14736, "▁onto": 14737, "ii": 14738, "发明": 14739, "运作": 14740, "▁measures": 14741, "▁mill": 14742, "ecut": 14743, "认同": 14744, "▁teach": 14745, "审美": 14746, "anging": 14747, "共识": 14748, "人群": 14749, "place": 14750, "roy": 14751, "▁purch": 14752, "▁London": 14753, "第一节": 14754, "▁Party": 14755, "▁connections": 14756, "▁adapt": 14757, "▁Union": 14758, "强烈": 14759, "▁expand": 14760, "▁Ser": 14761, "种类": 14762, "▁placed": 14763, "▁appe": 14764, "核算": 14765, "▁explain": 14766, "翻译": 14767, "Part": 14768, "森林": 14769, "▁nation": 14770, "淋巴": 14771, "斯特": 14772, "well": 14773, "▁receive": 14774, "概括": 14775, "▁users": 14776, "antly": 14777, "判决": 14778, "添加": 14779, "发达国家": 14780, "align": 14781, "ya": 14782, "的精神": 14783, "在一起": 14784, "产生了": 14785, "▁graph": 14786, "ifying": 14787, "▁forward": 14788, "▁rare": 14789, "plications": 14790, "▁coast": 14791, "▁Em": 14792, "另一个": 14793, "▁teeth": 14794, "防范": 14795, "交叉": 14796, "并不是": 14797, "担任": 14798, "的具体": 14799, "arly": 14800, "▁beginning": 14801, "▁Trans": 14802, "pped": 14803, "▁controll": 14804, "▁Roman": 14805, "▁DNA": 14806, "工厂": 14807, "▁organizations": 14808, "全局": 14809, "amily": 14810, "▁currently": 14811, "▁rich": 14812, "inf": 14813, "Despite": 14814, "▁advant": 14815, "联邦": 14816, "为例": 14817, "pret": 14818, "二氧化": 14819, "容量": 14820, "是什么": 14821, "心脏": 14822, "」,": 14823, "的不同": 14824, "▁anti": 14825, "▁costs": 14826, "▁allowed": 14827, "overnment": 14828, "某一": 14829, "hest": 14830, "▁continu": 14831, "car": 14832, "加密": 14833, "▁detect": 14834, "俄罗斯": 14835, "Ke": 14836, "直到": 14837, "的文化": 14838, "回答": 14839, "Ret": 14840, "▁apprec": 14841, "扶贫": 14842, "Moreover": 14843, "▁district": 14844, "中国家": 14845, "urning": 14846, "國家": 14847, "含义": 14848, "▁thr": 14849, "▁file": 14850, "亿美元": 14851, "Ed": 14852, "的小": 14853, "女性": 14854, "▁river": 14855, "世界上": 14856, "▁literature": 14857, "aign": 14858, "▁security": 14859, "Instead": 14860, "的设计": 14861, "cohol": 14862, "▁Com": 14863, "ressive": 14864, "mun": 14865, "为此": 14866, "依然": 14867, "oster": 14868, "▁testing": 14869, "成效": 14870, "▁occurs": 14871, "iced": 14872, "精度": 14873, "state": 14874, "▁property": 14875, "▁agricult": 14876, "▁picture": 14877, "AB": 14878, "理论和": 14879, "定期": 14880, "riev": 14881, "波动": 14882, "▁Department": 14883, "普及": 14884, "▁decl": 14885, "福利": 14886, "▁initial": 14887, "▁benefit": 14888, "分散": 14889, "abilities": 14890, "权威": 14891, "所有的": 14892, "encies": 14893, "每一个": 14894, "透明": 14895, "▁background": 14896, "(),": 14897, "opp": 14898, "▁Cong": 14899, "▁attempt": 14900, "山东": 14901, "Me": 14902, "推荐": 14903, "正确的": 14904, "▁consequ": 14905, "▁stim": 14906, "整理": 14907, "▁dat": 14908, "命令": 14909, "olved": 14910, "小的": 14911, "▁narr": 14912, "▁wear": 14913, "匹配": 14914, "水平的": 14915, "生活的": 14916, "▁rail": 14917, "RI": 14918, "可能是": 14919, "估计": 14920, "eters": 14921, "athy": 14922, "论述": 14923, "▁Mod": 14924, "慢性": 14925, "▁probably": 14926, "建构": 14927, "▁bacteria": 14928, "▁presence": 14929, "消耗": 14930, "增值": 14931, "▁We": 14932, "sect": 14933, "中全会": 14934, "▁user": 14935, "reating": 14936, "稳定的": 14937, "附近": 14938, "十八大": 14939, "效力": 14940, "▁workers": 14941, "外部連結": 14942, "全球化": 14943, "也可": 14944, "people": 14945, "ightly": 14946, "方便": 14947, "unt": 14948, "风格": 14949, "▁sugar": 14950, "▁bul": 14951, "AA": 14952, "位於": 14953, "增加了": 14954, "van": 14955, "新发展": 14956, "\t\t": 14957, "保存": 14958, "博物": 14959, "一条": 14960, "变动": 14961, "▁commer": 14962, "▁▁▁▁▁": 14963, "ilit": 14964, "bing": 14965, "onic": 14966, "▁accur": 14967, "bec": 14968, "都会": 14969, "达成": 14970, "GB": 14971, "中华民族伟大复兴": 14972, "足够": 14973, "▁cold": 14974, "方位": 14975, "概率": 14976, "mat": 14977, "的权利": 14978, "将会": 14979, "人士": 14980, "▁organization": 14981, "▁max": 14982, "za": 14983, "gra": 14984, "Today": 14985, "委会": 14986, "糖尿": 14987, "====": 14988, "相互作用": 14989, "▁moment": 14990, "图书": 14991, "▁.▁": 14992, "协作": 14993, "▁middle": 14994, "尝试": 14995, "▁Chinese": 14996, "▁names": 14997, "▁goes": 14998, "long": 14999, "目的是": 15000, "▁laun": 15001, "irection": 15002, "rupt": 15003, "lam": 15004, "▁gene": 15005, "最近": 15006, "▁Education": 15007, "不利": 15008, "▁figure": 15009, "的使用": 15010, "▁Black": 15011, "出生": 15012, "引导学生": 15013, "▁immune": 15014, "▁store": 15015, "协会": 15016, "必要的": 15017, "批判": 15018, "标准化": 15019, "寻找": 15020, "▁resistance": 15021, "▁date": 15022, "▁eight": 15023, "后果": 15024, "▁party": 15025, "Sec": 15026, "的有效": 15027, "有人": 15028, "▁filled": 15029, "男子": 15030, "edia": 15031, "▁capital": 15032, "已成为": 15033, "ees": 15034, "rief": 15035, "▁i": 15036, "联合国": 15037, "$▁": 15038, "存在着": 15039, "▁Br": 15040, "▁Mex": 15041, "产物": 15042, "estic": 15043, "ibly": 15044, "信仰": 15045, "▁swe": 15046, "配套": 15047, "▁plays": 15048, "住房": 15049, "antic": 15050, "ams": 15051, "othes": 15052, "精确": 15053, "▁buildings": 15054, "gery": 15055, "▁map": 15056, "车辆": 15057, "聚焦": 15058, "▁rout": 15059, "Similar": 15060, "顺序": 15061, "▁concerns": 15062, "Reg": 15063, "总量": 15064, "研究院": 15065, "▁genetic": 15066, "写作": 15067, "于是": 15068, "生态文明": 15069, "▁alone": 15070, "\"(": 15071, "▁emphas": 15072, "rael": 15073, "繁荣": 15074, "▁contract": 15075, "知识和": 15076, "失去": 15077, "itz": 15078, "概述": 15079, "ademic": 15080, "Gu": 15081, "overs": 15082, "▁assist": 15083, "▁moving": 15084, "▁regions": 15085, "▁identity": 15086, "▁birds": 15087, "▁Ne": 15088, "发送": 15089, "人民的": 15090, "难题": 15091, "▁pow": 15092, "EL": 15093, "iology": 15094, "课堂教学": 15095, "▁Museum": 15096, "ounced": 15097, "▁Pre": 15098, "此时": 15099, "被称为": 15100, "相反": 15101, "营销": 15102, "享有": 15103, "▁Go": 15104, "onds": 15105, "▁illustr": 15106, "▁observed": 15107, "Go": 15108, "Com": 15109, "糖尿病": 15110, "平面": 15111, "gor": 15112, "eech": 15113, "▁anything": 15114, "omy": 15115, "仪器": 15116, "aughter": 15117, "国内外": 15118, "万人": 15119, "▁Mount": 15120, "▁antib": 15121, "▁Cour": 15122, "▁miles": 15123, "旨在": 15124, "》▁": 15125, "动作": 15126, "▁demand": 15127, "管理和": 15128, "▁discover": 15129, "",": 15130, "▁expected": 15131, "Both": 15132, "大脑": 15133, "依托": 15134, "以上的": 15135, "TO": 15136, "指南": 15137, "▁decisions": 15138, "▁bodies": 15139, "云计算": 15140, "已有": 15141, "orial": 15142, "潜力": 15143, "做法": 15144, "批评": 15145, "berg": 15146, "赋予": 15147, "刑法": 15148, "▁existing": 15149, "▁promote": 15150, "病变": 15151, "allowing": 15152, "▁web": 15153, "立场": 15154, "your": 15155, "▁principles": 15156, "▁Council": 15157, "有时": 15158, "的多": 15159, "his": 15160, "存款": 15161, "GF": 15162, "▁office": 15163, "小康": 15164, "幸福": 15165, "▁sounds": 15166, "▁changed": 15167, "▁signs": 15168, "美术": 15169, "食物": 15170, "▁helped": 15171, "民生": 15172, "高等教育": 15173, "Before": 15174, "▁planet": 15175, "数据中心": 15176, "患者的": 15177, "▁concepts": 15178, "struct": 15179, "▁eventually": 15180, "▁reasons": 15181, "▁equal": 15182, "▁legal": 15183, "前沿": 15184, "证书": 15185, "▁board": 15186, "科学技术": 15187, "▁guide": 15188, "▁glass": 15189, "的认识": 15190, "中小企业": 15191, "prov": 15192, "官方": 15193, "远程": 15194, "地震": 15195, "视角": 15196, "地區": 15197, "thes": 15198, "▁Republic": 15199, "▁machine": 15200, "▁introduced": 15201, "ka": 15202, "打破": 15203, "▁virt": 15204, "间接": 15205, "一批": 15206, "理由": 15207, "MA": 15208, "计量": 15209, "▁trade": 15210, "astern": 15211, "意思": 15212, "测定": 15213, "rehens": 15214, "ographic": 15215, "失败": 15216, "▁limit": 15217, "初期": 15218, "以便": 15219, "主观": 15220, "颗粒": 15221, "▁Des": 15222, "▁comfort": 15223, "血液": 15224, "引起的": 15225, "▁tour": 15226, "癌症": 15227, "Every": 15228, "取决": 15229, "irgin": 15230, "多样性": 15231, "semb": 15232, "▁Pal": 15233, "III": 15234, "▁records": 15235, "▁Western": 15236, "也要": 15237, "侵犯": 15238, "立足": 15239, "▁gives": 15240, "History": 15241, "腐败": 15242, "▁citiz": 15243, "驾驶": 15244, "exas": 15245, "iance": 15246, "遵守": 15247, "inding": 15248, "中学": 15249, "》《": 15250, "▁mouth": 15251, "与其他": 15252, "产量": 15253, "仅仅": 15254, "价值的": 15255, "排名": 15256, "停止": 15257, "▁Port": 15258, "▁laws": 15259, "专项": 15260, "Read": 15261, "与此": 15262, "▁solutions": 15263, "能否": 15264, "也在": 15265, "inger": 15266, "大于": 15267, "▁colors": 15268, "nam": 15269, "▁eating": 15270, "▁felt": 15271, "器官": 15272, "四川": 15273, "有一个": 15274, "的市场": 15275, "▁turned": 15276, "ygen": 15277, "▁title": 15278, "▁fuel": 15279, "回归": 15280, "通用": 15281, "▁recently": 15282, "本科": 15283, "主义的": 15284, "▁util": 15285, "更是": 15286, "def": 15287, "El": 15288, "可能性": 15289, "实用": 15290, "iant": 15291, "▁experim": 15292, "▁connected": 15293, "作物": 15294, "大国": 15295, "▁corn": 15296, "提供的": 15297, "force": 15298, "▁journey": 15299, "▁pregn": 15300, "医药": 15301, "▁CD": 15302, "▁attract": 15303, "发生了": 15304, "优质": 15305, "法人": 15306, "公益": 15307, "IF": 15308, "asts": 15309, "查询": 15310, "▁dynam": 15311, "▁lived": 15312, "ded": 15313, "取决于": 15314, "前景": 15315, "▁distance": 15316, "特定的": 15317, "rich": 15318, "參考資料": 15319, "enty": 15320, "夏季": 15321, "mod": 15322, "强大": 15323, "变更": 15324, "▁nearly": 15325, "▁radio": 15326, "所有权": 15327, "斯坦": 15328, "uilding": 15329, "阐述": 15330, "不可能": 15331, "ogether": 15332, "lease": 15333, "的环境": 15334, "系数": 15335, "aud": 15336, "▁hundred": 15337, "选举": 15338, "ichael": 15339, "▁UK": 15340, "Em": 15341, "▁risks": 15342, "▁ap": 15343, "▁Her": 15344, "两者": 15345, "▁woman": 15346, "地下": 15347, "unk": 15348, "无效": 15349, "▁beg": 15350, "▁effort": 15351, "练习": 15352, "▁degree": 15353, "indu": 15354, "▁Street": 15355, "过程的": 15356, "地面": 15357, "▁happens": 15358, "▁leave": 15359, "...▁": 15360, "最早": 15361, "▁essay": 15362, "▁Phil": 15363, "▁tim": 15364, "西北": 15365, "取代": 15366, "▁diabetes": 15367, "超越": 15368, "对称": 15369, "联盟": 15370, "年前": 15371, "▁bran": 15372, "▁effectively": 15373, "复制": 15374, "依照": 15375, "▁passed": 15376, "以此": 15377, "石油": 15378, "▁landsc": 15379, "cription": 15380, "电网": 15381, "▁core": 15382, "▁opportunity": 15383, "▁gets": 15384, "灾害": 15385, "▁connection": 15386, "鲜明": 15387, "丰富的": 15388, "▁rise": 15389, "▁providing": 15390, "熟悉": 15391, "▁Cor": 15392, "现金": 15393, "借款": 15394, "了中国": 15395, "爆发": 15396, "进行的": 15397, "▁easier": 15398, "▁told": 15399, "▁watch": 15400, ");▁": 15401, "▁ur": 15402, "their": 15403, "國際": 15404, "女子": 15405, "▁alternative": 15406, "▁recorded": 15407, "正义": 15408, "音樂": 15409, "▁Law": 15410, "局面": 15411, "▁pet": 15412, "▁hair": 15413, "▁cop": 15414, "▁crop": 15415, "返回": 15416, "不够": 15417, "货物": 15418, "▁Japanese": 15419, "▁atmosp": 15420, "asion": 15421, "分享": 15422, "▁winter": 15423, "急性": 15424, "ctors": 15425, "▁root": 15426, "帝国": 15427, "共有": 15428, "国防": 15429, "培养学生": 15430, "参考资料": 15431, "体现在": 15432, "至关": 15433, "消息": 15434, "cript": 15435, "▁standards": 15436, "可用": 15437, "衔接": 15438, "west": 15439, "亚洲": 15440, "抗日": 15441, "zing": 15442, "xiety": 15443, "▁Div": 15444, "辩证": 15445, "▁illness": 15446, "▁operations": 15447, "的发生": 15448, "的中国": 15449, "一带一路": 15450, "基因组": 15451, "积极性": 15452, "iable": 15453, "▁Olymp": 15454, "開始": 15455, "历史上": 15456, "Rep": 15457, "esus": 15458, "].": 15459, "意识形态": 15460, "▁divid": 15461, "▁appoint": 15462, "▁Dem": 15463, "代表大会": 15464, "▁plans": 15465, "icularly": 15466, "text": 15467, "▁artists": 15468, "rese": 15469, "税务": 15470, "债权人": 15471, "▁capacity": 15472, "ognitive": 15473, "EE": 15474, "部队": 15475, "thlet": 15476, "运算": 15477, "▁fully": 15478, "第七": 15479, "主管": 15480, "器件": 15481, "▁effic": 15482, "主持": 15483, "pected": 15484, "aker": 15485, "▁Inter": 15486, "▁France": 15487, "▁Sou": 15488, "nel": 15489, "orage": 15490, "Furthermore": 15491, "武器": 15492, "▁believed": 15493, "无人": 15494, "集群": 15495, "icians": 15496, "ache": 15497, "一方": 15498, "交往": 15499, "违约": 15500, "造成的": 15501, "储备": 15502, "may": 15503, "iveness": 15504, "事情": 15505, "▁mission": 15506, "自身的": 15507, "mitted": 15508, "大多": 15509, "alle": 15510, "▁dead": 15511, "▁cities": 15512, "▁Road": 15513, "▁distribution": 15514, "展现": 15515, "▁inflamm": 15516, "▁surpr": 15517, "编写": 15518, "最为": 15519, "TV": 15520, "有权": 15521, "▁drugs": 15522, "前进": 15523, "分析和": 15524, "▁fix": 15525, "气象": 15526, "▁depend": 15527, "▁inhib": 15528, "▁heavy": 15529, "▁languages": 15530, "mean": 15531, "系统中": 15532, "公式": 15533, "▁commonly": 15534, "erate": 15535, "edom": 15536, "人力资源": 15537, "日期": 15538, "▁phen": 15539, "范畴": 15540, "resents": 15541, "思想政治": 15542, "法律法规": 15543, "演变": 15544, "▁running": 15545, "过程中的": 15546, "▁planning": 15547, "▁navig": 15548, "类型的": 15549, "▁television": 15550, "\b\b": 15551, "ado": 15552, "▁secret": 15553, "SO": 15554, "arian": 15555, "染色": 15556, "要在": 15557, "人格": 15558, "▁Americans": 15559, "bet": 15560, "▁technique": 15561, "▁heard": 15562, "Finally": 15563, "▁populations": 15564, "ouis": 15565, "忽视": 15566, "新能源": 15567, "力学": 15568, "▁feelings": 15569, "过度": 15570, "感觉": 15571, "情绪": 15572, "▁epis": 15573, "▁absor": 15574, "环境的": 15575, "PL": 15576, "▁basis": 15577, "创造性": 15578, "▁advanced": 15579, "▁My": 15580, "▁returned": 15581, "?\"": 15582, "长的": 15583, "▁mo": 15584, "终端": 15585, "命名": 15586, "反思": 15587, "▁staff": 15588, "iament": 15589, "▁situations": 15590, "他在": 15591, "条件的": 15592, "press": 15593, "场所": 15594, "▁hope": 15595, "▁federal": 15596, "最初": 15597, "科学的": 15598, "脱贫": 15599, "▁On": 15600, "杂志": 15601, "医生": 15602, "地方政府": 15603, "编程": 15604, "▁fasc": 15605, ".《": 15606, "排除": 15607, "▁cry": 15608, "怎么": 15609, "only": 15610, "▁blue": 15611, "▁ingred": 15612, "▁opened": 15613, "学生在": 15614, "这类": 15615, "▁President": 15616, "▁sess": 15617, "CH": 15618, "▁completed": 15619, "▁followed": 15620, "视野": 15621, "rian": 15622, "想象": 15623, "win": 15624, "eding": 15625, "iest": 15626, "▁element": 15627, "▁mel": 15628, "po": 15629, "▁liqu": 15630, "可靠性": 15631, "的结构": 15632, "应用程序": 15633, "▁toward": 15634, "现代化的": 15635, "减轻": 15636, "起源": 15637, "误差": 15638, "新时代中国特色社会主义": 15639, "rog": 15640, "不变": 15641, "以往": 15642, "▁approximately": 15643, "center": 15644, "ria": 15645, "ework": 15646, "▁ship": 15647, "itors": 15648, "通讯": 15649, "▁belong": 15650, "....": 15651, "▁sharing": 15652, "▁separate": 15653, "认可": 15654, "bert": 15655, "Sometimes": 15656, "攻坚": 15657, "▁king": 15658, "▁load": 15659, "加上": 15660, "」。": 15661, "歌曲": 15662, "缓解": 15663, ".)": 15664, "商业银行": 15665, "▁tasks": 15666, "▁applied": 15667, "提交": 15668, "▁journal": 15669, "人民政府": 15670, "统一的": 15671, "▁completely": 15672, "强大的": 15673, "udden": 15674, "▁cook": 15675, "推出": 15676, "otes": 15677, "▁lung": 15678, "▁match": 15679, "leading": 15680, "eline": 15681, "▁deal": 15682, "function": 15683, "▁adult": 15684, "▁native": 15685, "▁frequently": 15686, "▁seems": 15687, "RS": 15688, "▁cast": 15689, "▁fol": 15690, "ario": 15691, "▁instruct": 15692, "▁adjust": 15693, "obile": 15694, "Students": 15695, "▁enter": 15696, "租赁": 15697, "▁technologies": 15698, "TP": 15699, "Lear": 15700, "says": 15701, "ston": 15702, "图形": 15703, "干细胞": 15704, "显然": 15705, "tee": 15706, "particularly": 15707, "遗址": 15708, "无论是": 15709, "▁breast": 15710, "ogle": 15711, "燃料": 15712, "▁lessons": 15713, "▁municip": 15714, "不确定": 15715, "each": 15716, "▁seven": 15717, "民众": 15718, "▁park": 15719, "rows": 15720, "的生产": 15721, "处置": 15722, "ycl": 15723, "生物学": 15724, "先生": 15725, "的国际": 15726, "▁tox": 15727, "▁imag": 15728, "▁excess": 15729, "国有企业": 15730, "▁Washington": 15731, "▁setting": 15732, "感受": 15733, "▁Dis": 15734, "撤销": 15735, "河南": 15736, "▁occup": 15737, "down": 15738, "自行": 15739, "▁immun": 15740, "便利": 15741, "园区": 15742, "▁peace": 15743, "审理": 15744, "ittle": 15745, "的根本": 15746, "high": 15747, "▁authors": 15748, "反射": 15749, "分布式": 15750, "出来的": 15751, "▁profession": 15752, "发展中国家": 15753, "dent": 15754, "▁previously": 15755, "记载": 15756, "disc": 15757, "Sw": 15758, "▁island": 15759, "▁hydro": 15760, "数的": 15761, "未成": 15762, "ishing": 15763, "新冠": 15764, "NF": 15765, "▁fruit": 15766, "信任": 15767, "▁apply": 15768, "▁spect": 15769, "▁injury": 15770, "olid": 15771, "enry": 15772, "▁input": 15773, "▁nutri": 15774, "▁thoughts": 15775, "彻底": 15776, "第三节": 15777, "▁hit": 15778, "rd": 15779, "CL": 15780, "▁court": 15781, "ini": 15782, "gorith": 15783, "发性": 15784, "ager": 15785, "婚姻": 15786, "Trans": 15787, "▁gave": 15788, "坚决": 15789, "▁muscle": 15790, "地域": 15791, "指令": 15792, "的中": 15793, "部位": 15794, "▁repe": 15795, "▁outcomes": 15796, "工业化": 15797, "实例": 15798, "osen": 15799, "经理": 15800, "ilosoph": 15801, "▁Arch": 15802, "▁rh": 15803, "公园": 15804, "产业发展": 15805, "▁Sur": 15806, "▁bone": 15807, "▁baby": 15808, "即可": 15809, "going": 15810, "占有": 15811, "十五": 15812, "▁compar": 15813, "每一": 15814, "性与": 15815, "团体": 15816, "研究员": 15817, "\n\t": 15818, "roduction": 15819, "▁coming": 15820, "内容的": 15821, "世界的": 15822, "Hz": 15823, "▁metal": 15824, "▁scale": 15825, "ala": 15826, "众多": 15827, "清洁": 15828, "构造": 15829, "▁deliver": 15830, "重要作用": 15831, "气候变化": 15832, "▁disorders": 15833, "▁save": 15834, "分割": 15835, "政权": 15836, "▁gender": 15837, "▁vary": 15838, "uit": 15839, "臺灣": 15840, "的企业": 15841, "这就是": 15842, "know": 15843, "ilm": 15844, "儒家": 15845, "样品": 15846, "▁rule": 15847, "大众": 15848, "互相": 15849, "▁election": 15850, "▁finding": 15851, "例子": 15852, "CI": 15853, "azing": 15854, "▁direction": 15855, "关节": 15856, "▁den": 15857, "▁race": 15858, "olar": 15859, "▁urban": 15860, "皇帝": 15861, "▁plastic": 15862, "成像": 15863, "ascular": 15864, "特异": 15865, "▁strength": 15866, "谈判": 15867, "()": 15868, "的角度": 15869, "拒绝": 15870, "▁recommend": 15871, "▁Green": 15872, "流域": 15873, "▁mentioned": 15874, "维度": 15875, "▁subjects": 15876, "主要包括": 15877, "承诺": 15878, "時間": 15879, "凝聚": 15880, "ologist": 15881, "单独": 15882, "oke": 15883, "克服": 15884, "▁dram": 15885, "·▁": 15886, "▁Lake": 15887, "▁spot": 15888, "▁spent": 15889, "MD": 15890, "否则": 15891, "▁vess": 15892, "▁appears": 15893, "umber": 15894, "爱国": 15895, "▁cultures": 15896, "▁layer": 15897, "等方面的": 15898, "Have": 15899, "葡萄": 15900, "▁relevant": 15901, "简单的": 15902, "▁Cup": 15903, "irt": 15904, "▁heav": 15905, "▁topics": 15906, "严重的": 15907, "ports": 15908, "▁deeper": 15909, "心理学": 15910, "活动中": 15911, "扫描": 15912, "日起": 15913, "▁experiment": 15914, "▁esc": 15915, "burg": 15916, "▁independent": 15917, "常规": 15918, "事实上": 15919, "▁,": 15920, "▁garden": 15921, "apers": 15922, "不要": 15923, "▁fields": 15924, "育人": 15925, "取消": 15926, "诱导": 15927, "plant": 15928, "通货": 15929, "▁refers": 15930, "声明": 15931, "Ne": 15932, "http": 15933, "▁fib": 15934, "▁hear": 15935, "ocol": 15936, "移植": 15937, "修正": 15938, "Car": 15939, "之下": 15940, "歷史": 15941, "osh": 15942, "治理体系": 15943, "作战": 15944, "当今": 15945, "律师": 15946, "也就": 15947, "▁Pat": 15948, "营造": 15949, "▁presented": 15950, "uls": 15951, "侵害": 15952, "▁Que": 15953, "ulum": 15954, "ki": 15955, "▁films": 15956, "▁starting": 15957, "常见的": 15958, "▁official": 15959, "方法的": 15960, "▁territ": 15961, "在我国": 15962, "相同的": 15963, "分泌": 15964, "西南": 15965, "未来的": 15966, "dep": 15967, "目标的": 15968, "▁contrast": 15969, "公安": 15970, "共同富裕": 15971, "并发": 15972, "手机": 15973, "种植": 15974, "ructure": 15975, "Think": 15976, "▁homes": 15977, "得主": 15978, "▁Bay": 15979, "▁upd": 15980, "▁letter": 15981, "present": 15982, "的形成": 15983, "▁pen": 15984, "▁counter": 15985, "▁voc": 15986, "▁--▁": 15987, "Of": 15988, "主要有": 15989, "▁temperatures": 15990, "▁college": 15991, "▁#": 15992, "▁prepar": 15993, "norm": 15994, "▁aren": 15995, "Two": 15996, "▁characteristics": 15997, "▁trig": 15998, "▁favorite": 15999, "物体": 16000, "明显的": 16001, "▁solid": 16002, "▁Sch": 16003, "▁<": 16004, "具体的": 16005, "▁focused": 16006, "▁Mor": 16007, "难度": 16008, "la": 16009, "证实": 16010, "▁articles": 16011, "▁James": 16012, "党的领导": 16013, "垃圾": 16014, "▁thousands": 16015, "举办": 16016, "碳排放": 16017, "\u0007\u0007": 16018, "ota": 16019, "ypes": 16020, "体制改革": 16021, "pport": 16022, "othing": 16023, "重建": 16024, "得出": 16025, "差别": 16026, "版权": 16027, "▁emotional": 16028, "深圳": 16029, "▁recip": 16030, "▁president": 16031, "校园": 16032, "iled": 16033, "den": 16034, "Expl": 16035, "ector": 16036, "▁Spanish": 16037, "▁increases": 16038, "along": 16039, "▁emotions": 16040, "andom": 16041, "lar": 16042, "飞行": 16043, "▁Champions": 16044, "BN": 16045, "▁studied": 16046, "▁readers": 16047, "起到": 16048, "列表": 16049, "Man": 16050, "Disc": 16051, "的一部分": 16052, "▁roles": 16053, "▁task": 16054, "防护": 16055, "过渡": 16056, "市镇": 16057, "▁lat": 16058, "信念": 16059, "如图": 16060, "引进": 16061, "▁happen": 16062, "含有": 16063, "节约": 16064, "推行": 16065, "rieved": 16066, "進行": 16067, "本地": 16068, "助力": 16069, "初始": 16070, "管辖": 16071, "▁leaders": 16072, "▁Nor": 16073, "实习": 16074, "国家和": 16075, "安全性": 16076, "提示": 16077, "年至": 16078, "rac": 16079, "▁recept": 16080, "▁societ": 16081, "▁happened": 16082, "办学": 16083, "同时也": 16084, ")▁–▁": 16085, "党的十八大": 16086, "促使": 16087, "化合物": 16088, "ements": 16089, "职务": 16090, "li": 16091, "OT": 16092, "政策的": 16093, "▁medicine": 16094, "是我国": 16095, "▁minor": 16096, "年间": 16097, "粒子": 16098, "在这": 16099, "▁resource": 16100, "中国经济": 16101, "ensus": 16102, "天津": 16103, "分化": 16104, "▁approaches": 16105, "ena": 16106, "依法治": 16107, "▁notes": 16108, "▁wrong": 16109, "考古": 16110, "人和": 16111, "的知识": 16112, "Key": 16113, "▁leads": 16114, "▁genes": 16115, "▁stream": 16116, "常用": 16117, "者和": 16118, "▁consumption": 16119, "我们可以": 16120, "▁nearby": 16121, "包装": 16122, "更大": 16123, "随后": 16124, "▁majority": 16125, "▁TV": 16126, "长江": 16127, "专题": 16128, "的相关": 16129, "和服务": 16130, "▁master": 16131, "▁experienced": 16132, "ulner": 16133, "太空": 16134, "▁educational": 16135, "▁highest": 16136, "就能": 16137, "物权": 16138, "小平": 16139, "▁lett": 16140, "多少": 16141, "anges": 16142, "▁General": 16143, "found": 16144, "▁campaign": 16145, "调解": 16146, "顺利": 16147, "▁advance": 16148, "[@": 16149, "州市": 16150, "国情": 16151, "集合": 16152, "设备的": 16153, "ca": 16154, "▁Germany": 16155, "km": 16156, "▁cere": 16157, "ientists": 16158, "Char": 16159, "▁sand": 16160, "后者": 16161, "最低": 16162, "师生": 16163, "反复": 16164, "—▁▁": 16165, "rix": 16166, "▁alt": 16167, "审批": 16168, "标记": 16169, "▁awareness": 16170, "▁walk": 16171, "实力": 16172, "sub": 16173, "ags": 16174, "承认": 16175, "osa": 16176, "▁rot": 16177, "gypt": 16178, "是通过": 16179, "分辨": 16180, "为核心的": 16181, "中所": 16182, "作家": 16183, "ologists": 16184, "一部分": 16185, "▁choice": 16186, "城镇化": 16187, "线的": 16188, "ulf": 16189, "lo": 16190, "和技术": 16191, "未能": 16192, "enced": 16193, "otal": 16194, "▁closely": 16195, "two": 16196, "▁Mal": 16197, "annel": 16198, "▁appeared": 16199, "▁Central": 16200, "和完善": 16201, "▁Sun": 16202, "球員": 16203, "ndrome": 16204, "跟踪": 16205, "▁formation": 16206, "重组": 16207, "sequently": 16208, "▁becoming": 16209, "结构性": 16210, "色彩": 16211, "福建": 16212, "name": 16213, "iling": 16214, "的光": 16215, "▁treated": 16216, "otic": 16217, "项目的": 16218, "▁manage": 16219, "itoring": 16220, "▁classroom": 16221, "并将": 16222, "Red": 16223, "ped": 16224, "▁brother": 16225, "唯物": 16226, "优点": 16227, "在其": 16228, "内存": 16229, "HD": 16230, "bi": 16231, "cious": 16232, "▁suppl": 16233, "下列": 16234, "调动": 16235, "古典": 16236, "江苏": 16237, "成的": 16238, "层的": 16239, "预警": 16240, "uration": 16241, "▁policies": 16242, "的前提": 16243, "电子商务": 16244, "历程": 16245, "带来了": 16246, "人均": 16247, "百姓": 16248, "▁explained": 16249, "▁schol": 16250, "▁feeling": 16251, "indows": 16252, "Thus": 16253, "意大利": 16254, "▁Congress": 16255, "▁inh": 16256, "▁remained": 16257, "带领": 16258, "经济社会发展": 16259, "全过程": 16260, "指定": 16261, "oving": 16262, "▁participants": 16263, "▁pick": 16264, "实训": 16265, "研制": 16266, "大约": 16267, "期的": 16268, "主体的": 16269, "every": 16270, "肺炎": 16271, "▁trend": 16272, "active": 16273, "Mod": 16274, "olf": 16275, "▁replace": 16276, "IR": 16277, "下来": 16278, "演員": 16279, "▁commercial": 16280, "某个": 16281, "地质": 16282, "▁cycle": 16283, "arsh": 16284, "▁vital": 16285, "▁concentr": 16286, "新中国": 16287, "▁Sum": 16288, "分钟": 16289, "agon": 16290, "▁units": 16291, "提起": 16292, "修订": 16293, "rm": 16294, "的重大": 16295, "破产": 16296, "升高": 16297, "▁fer": 16298, "话语": 16299, "法制": 16300, "usiness": 16301, "cel": 16302, "▁west": 16303, "▁▁(": 16304, "在一定": 16305, "部的": 16306, "rapy": 16307, "的需要": 16308, "▁changing": 16309, "ersonal": 16310, "也就是说": 16311, "▁pal": 16312, "▁Aut": 16313, "ropical": 16314, "▁dial": 16315, "中華": 16316, "市场化": 16317, "防控": 16318, "生动": 16319, "电源": 16320, "National": 16321, "为代表": 16322, "sur": 16323, "▁contemporary": 16324, "海外": 16325, "▁\\": 16326, "called": 16327, "nic": 16328, "▁bed": 16329, "▁Alex": 16330, "▁weak": 16331, "CE": 16332, "anned": 16333, "样的": 16334, "▁sem": 16335, "erved": 16336, "▁note": 16337, "数字化转型": 16338, "Like": 16339, "▁sexual": 16340, "▁carefully": 16341, "▁Sam": 16342, "▁east": 16343, "▁gather": 16344, "}-": 16345, "▁comprehens": 16346, "都要": 16347, "▁improved": 16348, "rish": 16349, "▁immedi": 16350, "ato": 16351, "lorida": 16352, "▁reached": 16353, "since": 16354, "Gl": 16355, "可以说": 16356, "UN": 16357, "kin": 16358, "▁alcohol": 16359, "目录": 16360, "失业": 16361, "小鼠": 16362, "follow": 16363, "▁smooth": 16364, "反映了": 16365, "acific": 16366, "▁creation": 16367, "佛教": 16368, "小说": 16369, "ictor": 16370, "经费": 16371, "正当": 16372, "enth": 16373, "▁chronic": 16374, "▁defined": 16375, "will": 16376, "调研": 16377, "等人": 16378, "一個": 16379, "衡量": 16380, "党委": 16381, "idden": 16382, "requ": 16383, "与社会": 16384, "isher": 16385, "打击": 16386, "▁emissions": 16387, "是最": 16388, "▁insights": 16389, "总统": 16390, "▁conducted": 16391, "与发展": 16392, "账户": 16393, ".)▁": 16394, "▁proposed": 16395, "iox": 16396, "在国际": 16397, "和方法": 16398, "前的": 16399, "学位": 16400, "▁oxygen": 16401, "hand": 16402, "▁elev": 16403, "Har": 16404, "▁du": 16405, "所得税": 16406, "ultural": 16407, "美好": 16408, "的可": 16409, "举行": 16410, "青少年": 16411, "ichard": 16412, "回收": 16413, "▁spring": 16414, "▁disorder": 16415, "eaking": 16416, "无疑": 16417, "部件": 16418, "▁George": 16419, "Che": 16420, "▁sample": 16421, "太平": 16422, "▁pu": 16423, "出现的": 16424, "▁actual": 16425, "asp": 16426, "格式": 16427, "▁billion": 16428, "Therefore": 16429, "之所以": 16430, "▁hyper": 16431, "ella": 16432, "▁voice": 16433, "fessor": 16434, "▁degrees": 16435, "师范": 16436, "变成": 16437, "第二次": 16438, "完整的": 16439, "▁Mus": 16440, "▁immediately": 16441, "▁Israel": 16442, "讲话": 16443, "bour": 16444, "影像": 16445, "net": 16446, "Remember": 16447, "在这个": 16448, "Germ": 16449, "炎症": 16450, "解读": 16451, "akers": 16452, "▁suggests": 16453, "一段": 16454, "对照": 16455, "▁exploring": 16456, "确定的": 16457, "▁requirements": 16458, "etry": 16459, "图片": 16460, "▁isol": 16461, "▁vision": 16462, "仿真": 16463, "转载": 16464, "▁anyone": 16465, "ona": 16466, "导体": 16467, "had": 16468, "与其": 16469, "杠杆": 16470, "战斗": 16471, "▁Public": 16472, "民营": 16473, "▁David": 16474, "▁whose": 16475, "飾演": 16476, "flow": 16477, "▁interpret": 16478, "央行": 16479, "Def": 16480, "atholic": 16481, "较高的": 16482, "是从": 16483, "年底": 16484, "金额": 16485, "材料的": 16486, "▁motor": 16487, "抓住": 16488, "▁worldwide": 16489, "噪声": 16490, "▁advent": 16491, "Similarly": 16492, "线上": 16493, "):": 16494, "▁samples": 16495, "ye": 16496, "type": 16497, "▁joined": 16498, "▁iron": 16499, "ola": 16500, "十七": 16501, "我们要": 16502, "▁covered": 16503, "▁bottom": 16504, "信心": 16505, "湖南": 16506, "▁challenging": 16507, "▁cardi": 16508, "OM": 16509, "▁Are": 16510, "的特征": 16511, "教育部": 16512, "乃至": 16513, "▁wall": 16514, "list": 16515, "▁chance": 16516, "eck": 16517, "irginia": 16518, "edicated": 16519, "oral": 16520, "邓小平": 16521, "试图": 16522, "分裂": 16523, "▁economy": 16524, "抗原": 16525, "披露": 16526, "皮肤": 16527, "▁wonder": 16528, "▁reality": 16529, "▁electricity": 16530, "osc": 16531, "同年": 16532, "▁businesses": 16533, "信托": 16534, "迁移": 16535, "▁volume": 16536, "▁Mart": 16537, "ano": 16538, "▁proteins": 16539, "urd": 16540, "elligence": 16541, "Pat": 16542, "▁label": 16543, "▁Medic": 16544, "▁paint": 16545, "政党": 16546, "iders": 16547, "▁command": 16548, "容器": 16549, "之间的关系": 16550, "看出": 16551, "▁Service": 16552, "立即": 16553, "▁mathemat": 16554, "暴露": 16555, "▁citizens": 16556, "▁looked": 16557, "几何": 16558, "ht": 16559, "▁Life": 16560, "受体": 16561, "orough": 16562, "非洲": 16563, "運動員": 16564, "▁Web": 16565, "elect": 16566, "Spec": 16567, "ymph": 16568, "妇女": 16569, "▁faced": 16570, "▁Paul": 16571, "很大的": 16572, "vironments": 16573, "三维": 16574, "形式的": 16575, "尺寸": 16576, "两大": 16577, "▁processing": 16578, "RA": 16579, "▁buy": 16580, "▁milk": 16581, "▁expert": 16582, "的生活": 16583, "respond": 16584, "▁unf": 16585, "▁La": 16586, "Writ": 16587, "raction": 16588, "密集": 16589, "飞机": 16590, "▁surgery": 16591, "(,": 16592, "都在": 16593, "▁Carol": 16594, "互联": 16595, "▁habitat": 16596, "丧失": 16597, "全国人大": 16598, "▁prefer": 16599, "level": 16600, "企业在": 16601, "占比": 16602, "ums": 16603, "▁income": 16604, "▁Plan": 16605, "▁minim": 16606, "▁initi": 16607, "加拿": 16608, "Keep": 16609, "▁Greek": 16610, "List": 16611, "edy": 16612, "寿命": 16613, "的组织": 16614, ":(": 16615, "放大": 16616, "icks": 16617, "Follow": 16618, "较大的": 16619, "python": 16620, "▁Met": 16621, "Med": 16622, "速率": 16623, "文化遗产": 16624, "▁upper": 16625, "等领域": 16626, "▁represents": 16627, "ship": 16628, "理论的": 16629, "血压": 16630, "cers": 16631, "神经元": 16632, "▁fear": 16633, "▁appearance": 16634, "界定": 16635, "▁tiny": 16636, "文艺": 16637, "标准的": 16638, "▁figures": 16639, "利息": 16640, "归纳": 16641, "▁classes": 16642, "▁thick": 16643, "研究中": 16644, "政协": 16645, "▁southern": 16646, "運動會": 16647, "加强对": 16648, "Sub": 16649, "药品": 16650, "看来": 16651, "涵盖": 16652, "英國": 16653, "尽可能": 16654, "BM": 16655, "ocratic": 16656, "条约": 16657, "发出": 16658, "▁married": 16659, "▁relatively": 16660, "父母": 16661, "▁Canadian": 16662, "数据安全": 16663, "▁combination": 16664, "▁algorith": 16665, "Make": 16666, "令人": 16667, "新疆": 16668, "▁Hall": 16669, "▁meeting": 16670, "▁First": 16671, "▁output": 16672, "ait": 16673, "▁Leg": 16674, "▁insect": 16675, "▁letters": 16676, "线程": 16677, "密码": 16678, "倡导": 16679, "rant": 16680, "ademy": 16681, "资源配置": 16682, "牌得主": 16683, "▁foreign": 16684, "osystem": 16685, "▁Company": 16686, "传染": 16687, "真理": 16688, "殖民": 16689, "inations": 16690, "fered": 16691, "orking": 16692, "▁Group": 16693, "band": 16694, "▁imagine": 16695, "▁Off": 16696, ":▁": 16697, "pha": 16698, "▁message": 16699, "▁possess": 16700, "vironmental": 16701, "解析": 16702, "同学": 16703, "ysical": 16704, "roke": 16705, "王朝": 16706, "▁Prot": 16707, "▁price": 16708, "▁widely": 16709, "▁Court": 16710, "等的": 16711, "▁particularly": 16712, "最新": 16713, "▁install": 16714, "的地方": 16715, "icial": 16716, "▁assessment": 16717, "▁slightly": 16718, "而非": 16719, "电磁": 16720, "▁wasn": 16721, "▁elected": 16722, "▁speech": 16723, "often": 16724, "English": 16725, "▁Music": 16726, "▁assum": 16727, "认识到": 16728, "▁mechanisms": 16729, "▁▁-▁": 16730, "▁cra": 16731, "▁enhance": 16732, "指示": 16733, "▁reducing": 16734, "expl": 16735, "不受": 16736, "▁desp": 16737, "重要的是": 16738, "的最大": 16739, "▁vent": 16740, "▁movements": 16741, "工商": 16742, "\u0005\u0006": 16743, "沒有": 16744, "▁carried": 16745, "环境保护": 16746, "博物馆": 16747, "▁train": 16748, "▁trou": 16749, "▁Found": 16750, "▁generation": 16751, "的制度": 16752, "▁tow": 16753, "暴力": 16754, "▁failure": 16755, "▁determined": 16756, "补贴": 16757, "行政机关": 16758, "研究生": 16759, "▁arm": 16760, "Art": 16761, "▁Fore": 16762, "South": 16763, "▁award": 16764, "▁remove": 16765, "寻求": 16766, "热点": 16767, "ressed": 16768, "之处": 16769, "截至": 16770, "ani": 16771, "等于": 16772, "tical": 16773, "▁flood": 16774, "health": 16775, "atal": 16776, "free": 16777, "体内": 16778, "新时代中国特色社会主义思想": 16779, "要有": 16780, "▁sets": 16781, "▁Rail": 16782, "预计": 16783, "度和": 16784, "▁involving": 16785, "William": 16786, "教师的": 16787, "合适": 16788, "▁songs": 16789, "ulin": 16790, "供应商": 16791, "▁qual": 16792, "RE": 16793, "▁sac": 16794, "▁removed": 16795, "Fran": 16796, "四是": 16797, "▁batter": 16798, "未经": 16799, "在这种": 16800, "电气": 16801, "技术创新": 16802, "inent": 16803, "▁household": 16804, "▁math": 16805, "生平": 16806, "并未": 16807, ",《": 16808, "▁Bel": 16809, "atically": 16810, "Chapter": 16811, "ortunately": 16812, "光学": 16813, "▁consequences": 16814, "▁northern": 16815, "病理": 16816, "▁tail": 16817, "▁hospital": 16818, "常常": 16819, "▁faith": 16820, "在一个": 16821, "难点": 16822, "▁Army": 16823, "ogue": 16824, "环境中": 16825, "▁Jewish": 16826, "▁roll": 16827, "arah": 16828, "▁Gra": 16829, "到达": 16830, "▁stations": 16831, "等方式": 16832, "▁candid": 16833, "sim": 16834, "Fe": 16835, "▁mist": 16836, "生素": 16837, "▁ocean": 16838, "▁destroy": 16839, "可分为": 16840, "▁square": 16841, "osph": 16842, "买卖": 16843, "▁primarily": 16844, "▁kid": 16845, "▁List": 16846, "▁healthcare": 16847, "asure": 16848, "▁maintaining": 16849, "▁engage": 16850, "生活中": 16851, "▁symbol": 16852, "▁survey": 16853, "▁touch": 16854, "▁meant": 16855, "riage": 16856, "verse": 16857, "arn": 16858, "▁signal": 16859, "”(": 16860, "▁instrum": 16861, "尼亚": 16862, "▁academic": 16863, "▁Atl": 16864, "▁evolution": 16865, "roid": 16866, "poses": 16867, "▁vulner": 16868, "▁studying": 16869, "生产的": 16870, "▁internal": 16871, "漏洞": 16872, "▁environments": 16873, "▁specifically": 16874, "决定了": 16875, "TS": 16876, "前往": 16877, "produ": 16878, "上涨": 16879, "护理": 16880, "▁Program": 16881, "▁horm": 16882, "创意": 16883, "中等": 16884, "through": 16885, "流动性": 16886, "人员的": 16887, "ivation": 16888, "▁creative": 16889, "形状": 16890, "▁agg": 16891, "▁ju": 16892, "弹性": 16893, "面临的": 16894, "更高的": 16895, "▁facilit": 16896, "othe": 16897, "▁thus": 16898, "---": 16899, "设计的": 16900, "igration": 16901, "▁tooth": 16902, "▁Royal": 16903, "被认为": 16904, "▁Mont": 16905, "系统性": 16906, "用途": 16907, "▁Mark": 16908, "ua": 16909, "中和": 16910, "▁themes": 16911, "合格": 16912, "razil": 16913, "防御": 16914, "▁ready": 16915, "▁height": 16916, "PM": 16917, "▁worth": 16918, "abase": 16919, "▁examine": 16920, "▁Year": 16921, "▁bow": 16922, "▁param": 16923, "-{": 16924, "技巧": 16925, "uma": 16926, "充满": 16927, "合规": 16928, "建设和": 16929, "▁Cap": 16930, "▁straight": 16931, "eria": 16932, "▁annual": 16933, "现行": 16934, "实体经济": 16935, "hether": 16936, "▁Mat": 16937, "anta": 16938, "▁offered": 16939, "康复": 16940, "alysis": 16941, "weight": 16942, "的学生": 16943, "▁bird": 16944, "▁elim": 16945, "struction": 16946, "决议": 16947, "的标准": 16948, "内外": 16949, "▁Jesus": 16950, "国民党": 16951, "社会保障": 16952, "组件": 16953, "▁storage": 16954, "ipped": 16955, "▁grand": 16956, "是有": 16957, "bel": 16958, "对话": 16959, "值的": 16960, "▁metab": 16961, "arter": 16962, "ishes": 16963, "获得了": 16964, "▁parent": 16965, "▁decades": 16966, "HL": 16967, "的水": 16968, "▁Tur": 16969, "广告": 16970, "比赛": 16971, "▁leader": 16972, "太阳能": 16973, "▁reference": 16974, "▁la": 16975, "微观": 16976, "信息系统": 16977, "riculum": 16978, "▁seeds": 16979, "网络空间": 16980, "模式的": 16981, "私人": 16982, "制备": 16983, "放射": 16984, "estival": 16985, "满意": 16986, "单纯": 16987, "纪律": 16988, "通货膨胀": 16989, "▁drive": 16990, "共建": 16991, "支配": 16992, "与此同时": 16993, "utch": 16994, "▁battle": 16995, "▁Kore": 16996, "▁Class": 16997, "时期的": 16998, "Understanding": 16999, "▁conservation": 17000, "?\"▁": 17001, "省级": 17002, "官员": 17003, "▁amounts": 17004, "武装": 17005, "调用": 17006, "▁estimated": 17007, "▁ri": 17008, "yles": 17009, "隔离": 17010, "▁Ge": 17011, "yr": 17012, "print": 17013, "caus": 17014, "通胀": 17015, "国民经济": 17016, "about": 17017, "▁reports": 17018, "▁eggs": 17019, "RF": 17020, "▁mice": 17021, "▁rain": 17022, "certain": 17023, "▁rul": 17024, "▁flex": 17025, "需要的": 17026, "rics": 17027, "似乎": 17028, "unte": 17029, "总额": 17030, "促进了": 17031, "注入": 17032, "ml": 17033, "▁Old": 17034, "全方位": 17035, "本网": 17036, "时代的": 17037, "伤害": 17038, "裁判": 17039, "▁Mil": 17040, "▁spl": 17041, "征收": 17042, "论证": 17043, "▁Histor": 17044, "如今": 17045, "bran": 17046, "▁linked": 17047, "▁*": 17048, "▁Time": 17049, "".": 17050, "审核": 17051, "▁Development": 17052, "Stud": 17053, "▁Kingdom": 17054, "▁Mary": 17055, "▁nothing": 17056, "▁Mac": 17057, "▁sav": 17058, "oul": 17059, "cm": 17060, "▁pul": 17061, "Mon": 17062, "独立的": 17063, "HE": 17064, "更好的": 17065, "DC": 17066, "生态系统": 17067, "▁drop": 17068, "坚实": 17069, "▁Bro": 17070, "▁properly": 17071, "anda": 17072, "新增": 17073, "di": 17074, "▁spaces": 17075, "公元": 17076, "答案": 17077, "声音": 17078, "▁colle": 17079, "对接": 17080, "Next": 17081, "静脉": 17082, "▁Sen": 17083, "▁closed": 17084, "▁excell": 17085, "委員": 17086, "▁lesson": 17087, "▁chapter": 17088, "▁Sal": 17089, "研究中心": 17090, "▁conver": 17091, "建造": 17092, "对方": 17093, "书面": 17094, "Ass": 17095, "贯穿": 17096, "的重要性": 17097, "纪念": 17098, "▁helping": 17099, "▁neuro": 17100, "▁interview": 17101, "政务": 17102, "玻璃": 17103, "▁atmosphere": 17104, "▁Ber": 17105, "rey": 17106, "▁therefore": 17107, "累计": 17108, "清朝": 17109, "南北": 17110, "一级": 17111, "出资": 17112, "▁survival": 17113, "▁pages": 17114, "▁mit": 17115, "美国的": 17116, "ault": 17117, "iller": 17118, "▁huge": 17119, "工程师": 17120, "▁grass": 17121, "▁notice": 17122, "打印": 17123, "▁especially": 17124, "▁giving": 17125, "NS": 17126, "表现出": 17127, "弘扬": 17128, "Oh": 17129, "▁depression": 17130, "因為": 17131, "▁dedicated": 17132, "引用": 17133, "▁▁▁▁▁▁": 17134, "饮食": 17135, "山西": 17136, "后期": 17137, "ventional": 17138, "物品": 17139, "▁exposed": 17140, "▁coord": 17141, "unch": 17142, "BA": 17143, "相当于": 17144, "全党": 17145, "hire": 17146, "物种": 17147, "▁finally": 17148, "war": 17149, "不断提高": 17150, "激素": 17151, "▁encourage": 17152, "重庆": 17153, "▁engineering": 17154, "sometimes": 17155, "azine": 17156, "不开": 17157, "apping": 17158, "icago": 17159, "High": 17160, "▁pictures": 17161, "运动会": 17162, "主权": 17163, "溶液": 17164, "缺失": 17165, "sembly": 17166, "reland": 17167, "ohns": 17168, "▁selected": 17169, "▁Net": 17170, "出血": 17171, "终止": 17172, "名义": 17173, "▁conv": 17174, "ented": 17175, "chers": 17176, "▁categ": 17177, "point": 17178, "uh": 17179, "dem": 17180, "commun": 17181, "Dep": 17182, "外资": 17183, "赋能": 17184, "加拿大": 17185, "▁consists": 17186, "▁apart": 17187, "产能": 17188, "党和国家": 17189, "▁combined": 17190, "后续": 17191, "arrow": 17192, "起诉": 17193, "▁strategy": 17194, "Av": 17195, "量化": 17196, "清单": 17197, "▁extremely": 17198, "▁looks": 17199, "毕业生": 17200, "▁Che": 17201, "▁containing": 17202, "▁transform": 17203, "Vol": 17204, "颁布": 17205, "车站": 17206, "▁killed": 17207, "Ac": 17208, "生效": 17209, "人数": 17210, "▁traffic": 17211, "oz": 17212, "SM": 17213, "▁grade": 17214, "▁Latin": 17215, "肌肉": 17216, "▁interests": 17217, "▁liver": 17218, "遇到": 17219, "▁wife": 17220, "转录": 17221, "United": 17222, "▁advoc": 17223, "消失": 17224, "lick": 17225, "功能的": 17226, "▁brief": 17227, "▁format": 17228, "党内": 17229, "化解": 17230, "hemical": 17231, "朝鲜": 17232, "▁library": 17233, "路由": 17234, "anged": 17235, "脂肪": 17236, "spect": 17237, "▁Pen": 17238, "享受": 17239, "OC": 17240, "▁ingredients": 17241, "体积": 17242, "ek": 17243, "合法权益": 17244, "研究和": 17245, "▁origin": 17246, "▁anxiety": 17247, "致力": 17248, "年夏季": 17249, "担当": 17250, "ootball": 17251, "▁moist": 17252, "▁conflict": 17253, "▁tal": 17254, "标的": 17255, "Brit": 17256, "带有": 17257, "爆炸": 17258, "▁circum": 17259, "▁industrial": 17260, "▁referred": 17261, "的战略": 17262, "地图": 17263, "权限": 17264, "▁regularly": 17265, "演化": 17266, "电话": 17267, "unct": 17268, "▁Australian": 17269, "▁Mexico": 17270, "Par": 17271, "▁closer": 17272, "▁recommended": 17273, "说的": 17274, "对外开放": 17275, "Ag": 17276, "▁prepared": 17277, "iana": 17278, "stream": 17279, "▁diagnosis": 17280, "▁topic": 17281, "设定": 17282, "负载": 17283, "mas": 17284, "eorg": 17285, "▁continues": 17286, "uses": 17287, "在内的": 17288, "搭建": 17289, "inet": 17290, "或是": 17291, "▁pret": 17292, "待遇": 17293, "的政策": 17294, "▁discussion": 17295, "更大的": 17296, "mic": 17297, "▁flowers": 17298, "债务人": 17299, "▁frequency": 17300, "媒介": 17301, "▁liquid": 17302, "▁operation": 17303, "体制机制": 17304, "肯定": 17305, "增大": 17306, "冠軍": 17307, "▁Town": 17308, "既是": 17309, "的分析": 17310, "▁burn": 17311, "ibilities": 17312, "奠定了": 17313, "情节": 17314, "▁Water": 17315, "▁inform": 17316, "▁hun": 17317, "搜索": 17318, "istant": 17319, "黄河": 17320, "塑造": 17321, "▁radiation": 17322, "表演": 17323, "Ge": 17324, "uan": 17325, "对中国": 17326, "▁generations": 17327, "▁muscles": 17328, "▁Project": 17329, "名为": 17330, "▁manufacture": 17331, "▁vast": 17332, "▁Mag": 17333, "▁guidelines": 17334, "模糊": 17335, "▁follows": 17336, "公约": 17337, "公有": 17338, "动能": 17339, "▁describe": 17340, "▁cars": 17341, "▁Do": 17342, "▁opin": 17343, "▁dro": 17344, "▁Direct": 17345, "▁yellow": 17346, "协助": 17347, "市民": 17348, "▁bank": 17349, "相信": 17350, "Fl": 17351, "bur": 17352, "个别": 17353, "这一点": 17354, "',▁": 17355, "工作中": 17356, "其中的": 17357, "▁AD": 17358, "高端": 17359, "▁Gold": 17360, "arp": 17361, "任意": 17362, "gment": 17363, "▁director": 17364, "曾经": 17365, "信息安全": 17366, "告诉": 17367, "▁Ben": 17368, "▁vegetables": 17369, "asy": 17370, "又称": 17371, "ferent": 17372, "坚持以": 17373, "urance": 17374, "aval": 17375, "的前": 17376, "活跃": 17377, "▁raised": 17378, "▁teams": 17379, "协定": 17380, "ls": 17381, "主教": 17382, "▁experts": 17383, "人生": 17384, "▁storm": 17385, "▁Asia": 17386, "▁indicate": 17387, "标签": 17388, "▁settle": 17389, "诈骗": 17390, "聚集": 17391, "RC": 17392, "VD": 17393, "民国": 17394, "历史的": 17395, "▁barri": 17396, "▁professionals": 17397, "之後": 17398, "期刊": 17399, "獲得": 17400, "▁random": 17401, "ora": 17402, "确实": 17403, "的患者": 17404, "▁clim": 17405, "▁choices": 17406, "▁cognitive": 17407, "▁option": 17408, "▁particles": 17409, "考虑到": 17410, "▁beliefs": 17411, "▁pric": 17412, "ulture": 17413, "氛围": 17414, "就是要": 17415, "科学发展": 17416, "东南": 17417, "isation": 17418, "iration": 17419, "▁nutrition": 17420, "主流": 17421, "利益的": 17422, "▁worry": 17423, "▁accurate": 17424, "erse": 17425, "▁aircraft": 17426, "▁collected": 17427, "▁lies": 17428, "▁periods": 17429, "充分利用": 17430, "Ant": 17431, "用地": 17432, "党的十八大以来": 17433, "遊戲": 17434, "▁treatments": 17435, "cking": 17436, "▁Egypt": 17437, "▁nuclear": 17438, "▁Miss": 17439, "▁sides": 17440, "减排": 17441, "\b\u0006": 17442, "机器学习": 17443, "oseph": 17444, "▁Lab": 17445, "作为一种": 17446, "PE": 17447, "伙伴": 17448, "aks": 17449, "▁sustainable": 17450, "▁HIV": 17451, "压缩": 17452, "不仅仅": 17453, "人身": 17454, "▁reaction": 17455, "研究成果": 17456, "负责人": 17457, "类的": 17458, ":▁“": 17459, "经济发展的": 17460, "icing": 17461, "今后": 17462, "▁roots": 17463, "五个": 17464, "▁impacts": 17465, "什么是": 17466, "▁familiar": 17467, "标识": 17468, "▁Franc": 17469, "▁artist": 17470, "dec": 17471, "during": 17472, "▁dangerous": 17473, "有关的": 17474, "还需要": 17475, "它们的": 17476, "▁Journal": 17477, "金融危机": 17478, "▁responses": 17479, "North": 17480, "▁copy": 17481, "善于": 17482, "河北": 17483, "▁cris": 17484, "lig": 17485, "▁It": 17486, "cher": 17487, "▁Zeal": 17488, "结算": 17489, "引擎": 17490, "▁execut": 17491, "▁Lear": 17492, "▁disp": 17493, "模型的": 17494, "▁Rad": 17495, "pping": 17496, "扩散": 17497, "▁keeping": 17498, "▁faster": 17499, "病例": 17500, "产业结构": 17501, "ita": 17502, "isp": 17503, "Japan": 17504, "overty": 17505, "eless": 17506, "ups": 17507, "订立": 17508, "▁univers": 17509, "理论与": 17510, "ulating": 17511, "dr": 17512, "高职": 17513, "都可以": 17514, "▁centuries": 17515, "▁institutions": 17516, "▁plot": 17517, "▁Catholic": 17518, "▁infections": 17519, "开启": 17520, "▁tumor": 17521, "延长": 17522, "▁suggested": 17523, "▁pip": 17524, "friend": 17525, "ican": 17526, "obe": 17527, "定量": 17528, "工业互联网": 17529, "▁Sing": 17530, "几种": 17531, "被动": 17532, "▁increasingly": 17533, "▁announced": 17534, "算力": 17535, "正如": 17536, "▁noted": 17537, "▁violence": 17538, "▁meat": 17539, "提前": 17540, "所述": 17541, "rence": 17542, "教学的": 17543, "了对": 17544, "▁statement": 17545, "第八": 17546, "…▁": 17547, "▁amazing": 17548, "规章": 17549, "▁efficiency": 17550, "ingly": 17551, "调度": 17552, "▁Academy": 17553, "阿尔": 17554, "▁diversity": 17555, "初级": 17556, "faces": 17557, "zym": 17558, "▁incred": 17559, "first": 17560, "instead": 17561, "变化的": 17562, "就要": 17563, "▁Prov": 17564, "红军": 17565, "ependent": 17566, ")▁-▁": 17567, "日报": 17568, "ette": 17569, "的一项": 17570, "各方": 17571, "很少": 17572, "irds": 17573, "oom": 17574, "LE": 17575, "原料": 17576, "▁prem": 17577, "推理": 17578, "認為": 17579, "▁hearing": 17580, "expected": 17581, "天文": 17582, "夫妻": 17583, "▁Civil": 17584, "▁regional": 17585, "▁taught": 17586, "Christ": 17587, "▁stem": 17588, "时空": 17589, "机理": 17590, "▁vs": 17591, "的性质": 17592, "▁Mem": 17593, "▁neighbor": 17594, "他們": 17595, "建模": 17596, "表述": 17597, "交付": 17598, "同比": 17599, "arliament": 17600, "▁founded": 17601, "作了": 17602, "朋友": 17603, "需求的": 17604, "▁pollution": 17605, "▁creates": 17606, "二者": 17607, "孔子": 17608, "的重要组成部分": 17609, "部长": 17610, "▁operating": 17611, "▁begins": 17612, "▁Records": 17613, "Add": 17614, "▁stars": 17615, "报表": 17616, "▁Emp": 17617, "▁legisl": 17618, "界面": 17619, "▁ecosystem": 17620, "▁Zealand": 17621, "▁aid": 17622, "天气": 17623, "研究者": 17624, "▁mort": 17625, "fit": 17626, "西藏": 17627, "关心": 17628, "起点": 17629, "FC": 17630, "临时": 17631, "▁measured": 17632, "oly": 17633, "▁Britain": 17634, "▁News": 17635, "▁Out": 17636, "家长": 17637, "不动": 17638, "中文": 17639, "enses": 17640, "\",\"": 17641, "已知": 17642, "第三方": 17643, "多元化": 17644, "ses": 17645, "主要的": 17646, "oves": 17647, "疼痛": 17648, "删除": 17649, "家的": 17650, "态势": 17651, "▁mm": 17652, "火箭": 17653, "▁syndrome": 17654, "加剧": 17655, "既要": 17656, "gr": 17657, "读者": 17658, "▁phase": 17659, "受益": 17660, "企业和": 17661, "▁phenomen": 17662, "来实现": 17663, "▁networks": 17664, "智力": 17665, "监察": 17666, "开设": 17667, "▁hour": 17668, "opes": 17669, "周边": 17670, "▁stone": 17671, "HO": 17672, "▁Spec": 17673, "▁Rel": 17674, "▁disapp": 17675, "最小": 17676, "故意": 17677, "发生在": 17678, "晶体": 17679, "▁poly": 17680, "▁fort": 17681, "数值": 17682, "▁valid": 17683, "orph": 17684, "▁motion": 17685, "Who": 17686, "▁significance": 17687, "对抗": 17688, "▁adop": 17689, "▁component": 17690, "创造了": 17691, "网上": 17692, "icious": 17693, "▁revealed": 17694, "▁compos": 17695, "诚信": 17696, "▁row": 17697, "村民": 17698, "既有": 17699, "跨境": 17700, "▁priv": 17701, "长度": 17702, "▁References": 17703, "不久": 17704, "kins": 17705, "不但": 17706, "限度": 17707, "代替": 17708, "线路": 17709, "快速发展": 17710, "▁joint": 17711, "han": 17712, "inder": 17713, "ptions": 17714, "▁compl": 17715, "落后": 17716, "PI": 17717, "▁realized": 17718, "Inter": 17719, "程度的": 17720, "▁chosen": 17721, "将在": 17722, "二次": 17723, "oto": 17724, "anted": 17725, "期望": 17726, "orter": 17727, "上是": 17728, "istan": 17729, "▁double": 17730, "ching": 17731, "aying": 17732, "和应用": 17733, "Example": 17734, "网络的": 17735, "cules": 17736, "建築": 17737, "街道": 17738, "▁professor": 17739, "help": 17740, "▁divided": 17741, "np": 17742, "▁fine": 17743, "数额": 17744, "▁fruits": 17745, "的存在": 17746, "▁defic": 17747, "▁association": 17748, "Such": 17749, "可再生": 17750, "▁depending": 17751, "IG": 17752, "领先": 17753, "落地": 17754, "▁brown": 17755, "年轻": 17756, "颜色": 17757, "高温": 17758, "二氧化碳": 17759, "loc": 17760, "ells": 17761, ":《": 17762, "Fig": 17763, "rastructure": 17764, "习近平新时代中国特色社会主义思想": 17765, "Mean": 17766, "负面": 17767, "已经成为": 17768, "▁clearly": 17769, "退出": 17770, "生涯": 17771, "方式的": 17772, "农业生产": 17773, "▁nerv": 17774, "▁freedom": 17775, "老年": 17776, "▁Test": 17777, "矩阵": 17778, "的现象": 17779, "大致": 17780, "▁Pacific": 17781, "极端": 17782, "▁renew": 17783, "的范围": 17784, "剩余": 17785, "taining": 17786, "变异": 17787, "院士": 17788, "库存": 17789, "▁,": 17790, "rolog": 17791, "ications": 17792, "顾客": 17793, "光伏": 17794, "和实践": 17795, "在不同": 17796, "occ": 17797, "▁vehicle": 17798, "▁occurred": 17799, "▁mal": 17800, "Living": 17801, "▁Library": 17802, "kes": 17803, "▁secure": 17804, "當時": 17805, "简介": 17806, "▁girls": 17807, "▁dogs": 17808, "style": 17809, "指引": 17810, "兴起": 17811, "▁loved": 17812, "缺少": 17813, "▁despite": 17814, "▁files": 17815, "典型的": 17816, "Research": 17817, "在新": 17818, "部门的": 17819, "首要": 17820, "theast": 17821, "广州": 17822, "▁spiritual": 17823, "境内": 17824, "gal": 17825, "▁chemicals": 17826, "的第一": 17827, "管制": 17828, "▁perspectives": 17829, "▁fascinating": 17830, "直观": 17831, "▁enable": 17832, "▁electrical": 17833, "人对": 17834, "在全球": 17835, "意义上": 17836, "意图": 17837, "特异性": 17838, "▁muse": 17839, "韩国": 17840, "子女": 17841, "单个": 17842, "很快": 17843, "▁Division": 17844, "▁replaced": 17845, "▁external": 17846, "尽量": 17847, "respect": 17848, "▁parties": 17849, "外部链接": 17850, "▁reb": 17851, "分支": 17852, "▁starts": 17853, "的所有": 17854, "▁settings": 17855, "發展": 17856, "ested": 17857, "▁Club": 17858, "IA": 17859, "nes": 17860, "开辟": 17861, "▁floor": 17862, "降低了": 17863, "▁knew": 17864, "型的": 17865, "▁dra": 17866, "Up": 17867, "▁extract": 17868, "World": 17869, "▁bright": 17870, "较少": 17871, "体系建设": 17872, "▁calc": 17873, "▁One": 17874, "▁adding": 17875, "▁residents": 17876, "起来的": 17877, "▁Tor": 17878, "化石": 17879, "ictionary": 17880, "联动": 17881, "疗法": 17882, "▁Hill": 17883, "类别": 17884, "▁diss": 17885, "不需要": 17886, "▁Angel": 17887, "深化改革": 17888, "北京市": 17889, "▁opening": 17890, "▁recognize": 17891, "ificial": 17892, "该研究": 17893, "此类": 17894, "之为": 17895, "我们在": 17896, "▁Internet": 17897, "Web": 17898, "缩小": 17899, "Retrieved": 17900, "cycl": 17901, "▁waters": 17902, "oviet": 17903, "法学": 17904, "建立健全": 17905, "教学内容": 17906, "组成的": 17907, "工作者": 17908, "▁practical": 17909, "广阔": 17910, "最重要的": 17911, "▁smart": 17912, "综合征": 17913, "不应": 17914, "的时代": 17915, "▁western": 17916, "百分点": 17917, "eff": 17918, "专用": 17919, "oted": 17920, "民法典": 17921, "和分析": 17922, "iform": 17923, "▁kept": 17924, "bridge": 17925, "还原": 17926, "soft": 17927, "民國": 17928, "Are": 17929, "由於": 17930, "▁attribut": 17931, "▁morning": 17932, "bra": 17933, "▁managed": 17934, "▁Grand": 17935, "ounter": 17936, "▁facilities": 17937, "▁organic": 17938, "▁justice": 17939, "▁craft": 17940, "能耗": 17941, "全社会": 17942, "▁Russian": 17943, "iro": 17944, "▁competition": 17945, "▁Pe": 17946, "▁procedure": 17947, "并对": 17948, "社会主义核心": 17949, "top": 17950, "依赖于": 17951, "▁perspective": 17952, "▁firm": 17953, "分别为": 17954, "▁traditions": 17955, "上市公司": 17956, "半导体": 17957, "▁White": 17958, "季度": 17959, "▁runs": 17960, "▁neur": 17961, "英雄": 17962, "ushing": 17963, "到底": 17964, "广泛的": 17965, "跨越": 17966, "▁discovery": 17967, "电极": 17968, "产业的": 17969, "University": 17970, "能在": 17971, "▁sen": 17972, "▁era": 17973, "▁represented": 17974, "TA": 17975, "▁Rock": 17976, "▁Texas": 17977, "英文": 17978, "云南": 17979, "keep": 17980, "变换": 17981, "常态": 17982, "▁index": 17983, "▁Thomas": 17984, "进化": 17985, "▁nutrients": 17986, "\u0007\u0006": 17987, "▁purposes": 17988, "hav": 17989, "生育": 17990, "▁She": 17991, "▁constant": 17992, "奧林匹克": 17993, "Get": 17994, "学生的学习": 17995, "Rel": 17996, "那样": 17997, "nut": 17998, "▁programming": 17999, "▁forests": 18000, "eling": 18001, "omin": 18002, "附加": 18003, "阻碍": 18004, "长远": 18005, "着眼": 18006, "这次": 18007, "▁Space": 18008, "▁Sl": 18009, "DS": 18010, "▁advantage": 18011, "零售": 18012, "▁Commission": 18013, "一轮": 18014, "结构和": 18015, "abil": 18016, "受害": 18017, "▁highlight": 18018, "希腊": 18019, "▁exchange": 18020, "规定了": 18021, "明了": 18022, "▁collaboration": 18023, "▁stages": 18024, "创新的": 18025, "▁charge": 18026, "光谱": 18027, "可视": 18028, "Bel": 18029, "垂直": 18030, "▁computers": 18031, "▁walls": 18032, "eterm": 18033, "▁phone": 18034, "abits": 18035, "▁spend": 18036, "放弃": 18037, "▁Sea": 18038, "▁bud": 18039, "对立": 18040, "阶段的": 18041, "几年": 18042, "▁fab": 18043, "行政区": 18044, "结合起来": 18045, "▁toxic": 18046, "▁interactions": 18047, "▁intended": 18048, "接入": 18049, "广播": 18050, "劳务": 18051, "▁Management": 18052, "复习": 18053, "▁Carolina": 18054, "风险的": 18055, "明确了": 18056, "▁rein": 18057, "▁affects": 18058, "▁snow": 18059, "itt": 18060, "inity": 18061, "至关重要": 18062, "don": 18063, "▁partners": 18064, "▁Award": 18065, "方法和": 18066, "社會": 18067, "▁talking": 18068, "▁responsibility": 18069, "为主要": 18070, "中山": 18071, "资产阶级": 18072, "LS": 18073, "二年": 18074, "Last": 18075, "▁correspond": 18076, "演出": 18077, "▁layers": 18078, "人类社会": 18079, "▁goods": 18080, "run": 18081, "肠道": 18082, "itness": 18083, "收购": 18084, "▁Social": 18085, ",▁(": 18086, "的外": 18087, "对学生": 18088, "级别": 18089, "▁inflammation": 18090, "▁Games": 18091, "CN": 18092, "ima": 18093, "▁Cast": 18094, "▁join": 18095, "扎实": 18096, "小于": 18097, "▁discrim": 18098, "▁interested": 18099, "▁sudden": 18100, "包容": 18101, "▁behaviors": 18102, "征程": 18103, "▁Middle": 18104, "简化": 18105, "剂量": 18106, "▁seek": 18107, "incre": 18108, "机构的": 18109, "表现在": 18110, "对待": 18111, "vol": 18112, "ads": 18113, "▁optim": 18114, "Where": 18115, "现有的": 18116, "▁mountain": 18117, "DR": 18118, "plicated": 18119, "▁Ter": 18120, "rat": 18121, "ulting": 18122, "彼此": 18123, "嵌入": 18124, "▁resil": 18125, "高达": 18126, "igan": 18127, "总是": 18128, "▁mainly": 18129, "Yes": 18130, "▁dream": 18131, "igital": 18132, "▁fluid": 18133, "启发": 18134, "个性化": 18135, "▁mer": 18136, "xts": 18137, "效能": 18138, "▁god": 18139, "Cre": 18140, "ventions": 18141, "人民代表大会": 18142, "▁Times": 18143, "的理解": 18144, "取向": 18145, "当中": 18146, "real": 18147, "uke": 18148, "▁Smith": 18149, "▁supported": 18150, "全民": 18151, "质量和": 18152, "创新能力": 18153, "种子": 18154, "电解": 18155, "tenance": 18156, "下面": 18157, "▁mostly": 18158, "(▁": 18159, "并通过": 18160, "Less": 18161, "uing": 18162, "▁monitoring": 18163, "▁solve": 18164, "了一系列": 18165, "▁III": 18166, "时刻": 18167, "的定义": 18168, "▁maximum": 18169, "走出": 18170, "▁philosoph": 18171, "▁medium": 18172, "管理体系": 18173, "习近平同志": 18174, "QL": 18175, "或其他": 18176, "擔任": 18177, "▁generate": 18178, "meaning": 18179, "汉语": 18180, "检索": 18181, "Alex": 18182, "esis": 18183, "▁injuries": 18184, "梳理": 18185, "困境": 18186, "建立在": 18187, "▁showing": 18188, "▁Sim": 18189, "▁Sk": 18190, "▁salt": 18191, "▁designs": 18192, "Mc": 18193, "中断": 18194, "▁Pan": 18195, "▁relax": 18196, "▁To": 18197, "David": 18198, "▁Arab": 18199, "reatment": 18200, "▁Parliament": 18201, "▁shel": 18202, "RT": 18203, "至于": 18204, "▁victim": 18205, "▁Book": 18206, "▁ax": 18207, "又是": 18208, "定律": 18209, "▁unexpected": 18210, "ady": 18211, "FS": 18212, "amental": 18213, "Mr": 18214, "claim": 18215, "住宅": 18216, "▁facts": 18217, "▁truth": 18218, "▁suitable": 18219, "iat": 18220, "ao": 18221, "▁flat": 18222, "第二个": 18223, "未成年人": 18224, "脉冲": 18225, "Austral": 18226, "▁defe": 18227, "病的": 18228, "▁appointed": 18229, "学说": 18230, "离婚": 18231, "常委会": 18232, "舞蹈": 18233, "耕地": 18234, "个百分点": 18235, "吸附": 18236, "的位置": 18237, "aturally": 18238, "▁harmful": 18239, "awa": 18240, "▁shapes": 18241, "Among": 18242, "Current": 18243, "创设": 18244, "率的": 18245, "▁recon": 18246, "解决问题": 18247, "▁chain": 18248, "巴黎": 18249, "建筑物": 18250, "設計": 18251, "▁Foundation": 18252, "▁recognized": 18253, "▁seed": 18254, "redu": 18255, "▁unknown": 18256, "imagine": 18257, "VID": 18258, "诞生": 18259, "clusive": 18260, "▁couldn": 18261, "超声": 18262, "转型升级": 18263, "▁ourselves": 18264, "Aut": 18265, "omer": 18266, "▁excellent": 18267, "▁wealth": 18268, "▁youth": 18269, "等多": 18270, "▁landscape": 18271, "▁jobs": 18272, "▁kinds": 18273, "Take": 18274, "body": 18275, "https": 18276, "itivity": 18277, "ishop": 18278, "致力于": 18279, "stone": 18280, "▁rural": 18281, "acts": 18282, "▁die": 18283, "▁lic": 18284, "等因素": 18285, "增多": 18286, "▁turns": 18287, "开创": 18288, "Ste": 18289, "學校": 18290, "▁NA": 18291, "知名": 18292, "▁thin": 18293, "▁fif": 18294, "illa": 18295, "▁potentially": 18296, "依法治国": 18297, "rison": 18298, "系統": 18299, "可在": 18300, "PT": 18301, "传导": 18302, "命题": 18303, "ifferent": 18304, "ifications": 18305, "▁procedures": 18306, "▁Scott": 18307, "上看": 18308, "介质": 18309, "▁waves": 18310, "脱离": 18311, "电阻": 18312, "▁Cam": 18313, "年在": 18314, "▁phr": 18315, "▁kil": 18316, "▁assign": 18317, "开关": 18318, "▁helpful": 18319, "uty": 18320, "▁relative": 18321, "武汉": 18322, "静态": 18323, "▁promoting": 18324, "elled": 18325, "文獻": 18326, "▁guidance": 18327, "▁capable": 18328, "期货": 18329, "迫切": 18330, "发现了": 18331, "▁ideal": 18332, ":▁(": 18333, "限于": 18334, "▁originally": 18335, "▁wait": 18336, "usually": 18337, "▁Italian": 18338, "製作": 18339, "▁Di": 18340, "以外": 18341, "回到": 18342, "德育": 18343, "rors": 18344, "其在": 18345, "▁frag": 18346, "优惠": 18347, "pet": 18348, "oir": 18349, "▁Engine": 18350, "尺度": 18351, "ifies": 18352, "▁causing": 18353, "本站": 18354, "asty": 18355, "▁reduction": 18356, "aming": 18357, "报酬": 18358, "舆论": 18359, "离不开": 18360, "时间的": 18361, "双重": 18362, "感到": 18363, "东方": 18364, "持有": 18365, "▁ran": 18366, "清算": 18367, "思想的": 18368, "中的应用": 18369, "不存在": 18370, "heim": 18371, "onomy": 18372, "参见": 18373, "班牙": 18374, "西班牙": 18375, "ISBN": 18376, "从严": 18377, "不仅是": 18378, "▁hero": 18379, "浪费": 18380, "自然科学": 18381, "▁Wild": 18382, "▁lots": 18383, "▁truly": 18384, "处分": 18385, "激烈": 18386, "▁abilities": 18387, "rate": 18388, "專輯": 18389, "Cent": 18390, "▁serves": 18391, "df": 18392, "▁satis": 18393, "▁seat": 18394, "!\"": 18395, "gely": 18396, "细化": 18397, "纠正": 18398, "▁sensitive": 18399, "延迟": 18400, "前者": 18401, "图书馆": 18402, "▁coal": 18403, "▁wet": 18404, "▁obs": 18405, "▁aimed": 18406, "wa": 18407, "Bar": 18408, "▁nor": 18409, "▁score": 18410, "rogen": 18411, "▁vehicles": 18412, "经济体": 18413, "sex": 18414, "▁signed": 18415, "幅度": 18416, "OL": 18417, "▁extreme": 18418, "▁forced": 18419, "奧林匹克運動會": 18420, "▁Mad": 18421, "fig": 18422, "estion": 18423, "▁concentration": 18424, "fish": 18425, "月球": 18426, "▁ban": 18427, "▁neut": 18428, "▁Commit": 18429, "▁critic": 18430, "▁Columb": 18431, "罗马": 18432, "开拓": 18433, "最高人民法院": 18434, "non": 18435, "基准": 18436, "▁pil": 18437, "地点": 18438, "azz": 18439, "enny": 18440, "▁perman": 18441, "\",": 18442, "lines": 18443, "水利": 18444, "各方面": 18445, "陷入": 18446, "中介": 18447, "▁density": 18448, "▁drink": 18449, "会导致": 18450, "便于": 18451, "命运共同体": 18452, "Time": 18453, "▁tested": 18454, "aph": 18455, "凸显": 18456, "和经济": 18457, "不平衡": 18458, "高水平": 18459, "的实践": 18460, "可行": 18461, "燃烧": 18462, "▁ST": 18463, "ione": 18464, "apes": 18465, "James": 18466, "水的": 18467, "▁catch": 18468, "▁tips": 18469, "都能": 18470, "▁route": 18471, "▁Medicine": 18472, "争取": 18473, "▁marked": 18474, "GA": 18475, "煤炭": 18476, "史上": 18477, "▁satell": 18478, "▁trial": 18479, "办公室": 18480, "安徽": 18481, "cou": 18482, "▁Robert": 18483, "供给侧": 18484, "CM": 18485, "▁Don": 18486, "▁vitamin": 18487, "HT": 18488, "一名": 18489, "asive": 18490, "ultane": 18491, "较多": 18492, "此次": 18493, "▁stronger": 18494, "▁emergency": 18495, "要把": 18496, "这也是": 18497, "het": 18498, "sem": 18499, "锻炼": 18500, "▁ign": 18501, "lers": 18502, "介绍了": 18503, "▁tun": 18504, "发展战略": 18505, "ansion": 18506, "stood": 18507, "液体": 18508, "ublished": 18509, "▁Bas": 18510, "lets": 18511, "理事": 18512, "收缩": 18513, "制度和": 18514, "相适应": 18515, "耦合": 18516, "HS": 18517, "—▁▁—▁▁": 18518, "estyle": 18519, "▁Government": 18520, "营业": 18521, "申报": 18522, "在全国": 18523, "利亚": 18524, "等多种": 18525, "▁Tre": 18526, "▁depth": 18527, "▁alongside": 18528, "Ref": 18529, "率先": 18530, "要求的": 18531, "▁obtained": 18532, "▁km": 18533, "▁mixed": 18534, "源于": 18535, "聚合": 18536, "情景": 18537, "定价": 18538, "▁writers": 18539, "法和": 18540, "▁Ste": 18541, "pass": 18542, "新生": 18543, "这两个": 18544, "初中": 18545, "▁Tri": 18546, "研究表明": 18547, "元件": 18548, "的实际": 18549, "电信": 18550, "▁wel": 18551, "▁oral": 18552, "▁improving": 18553, "▁newsp": 18554, "实现中华民族伟大复兴": 18555, "▁listed": 18556, "▁seeking": 18557, "▁Valley": 18558, "▁remaining": 18559, "个人的": 18560, "可再生能源": 18561, "▁whom": 18562, "▁tradition": 18563, "维修": 18564, "ih": 18565, "安全的": 18566, "▁underlying": 18567, "▁except": 18568, "招生": 18569, "▁Dan": 18570, "▁locations": 18571, "▁Islam": 18572, "▁interaction": 18573, "ori": 18574, "Set": 18575, "无限": 18576, "stein": 18577, "▁Read": 18578, "▁documents": 18579, "▁gar": 18580, "▁suc": 18581, "▁horse": 18582, "▁writer": 18583, "students": 18584, "▁Land": 18585, "全面建成": 18586, "极为": 18587, "组织和": 18588, "雷达": 18589, "准入": 18590, "▁musical": 18591, "West": 18592, "stances": 18593, "光纤": 18594, "Data": 18595, "▁cards": 18596, "▁controlled": 18597, "eries": 18598, "院长": 18599, "智慧城市": 18600, "▁daughter": 18601, "▁resulting": 18602, "新一代": 18603, "▁saying": 18604, "▁||": 18605, "。(": 18606, "▁signals": 18607, "erving": 18608, "▁walking": 18609, "警察": 18610, "▁haz": 18611, "▁platforms": 18612, "ohnson": 18613, "ture": 18614, "Mark": 18615, "行政管理": 18616, "揭示了": 18617, "▁ren": 18618, "▁extended": 18619, "▁demonstrate": 18620, "充电": 18621, "沉积": 18622, "电脑": 18623, "▁vaccine": 18624, "▁foundation": 18625, "行业的": 18626, "▁Del": 18627, "main": 18628, "是为了": 18629, "▁Technology": 18630, "▁ple": 18631, "▁substant": 18632, "▁scri": 18633, "jo": 18634, "▁accomp": 18635, "▁diam": 18636, "过于": 18637, "La": 18638, "党的十九": 18639, "lishing": 18640, "同時": 18641, "治党": 18642, "数字技术": 18643, "更有": 18644, "舞台": 18645, "▁doll": 18646, "▁Sy": 18647, "immy": 18648, "ellect": 18649, "▁Camp": 18650, "▁introduction": 18651, "thetic": 18652, "意愿": 18653, "站在": 18654, "▁machines": 18655, "▁Power": 18656, "Mem": 18657, "▁Henry": 18658, "▁exercises": 18659, "本土": 18660, "▁Organ": 18661, "▁Elect": 18662, "经营者": 18663, "raining": 18664, "遭受": 18665, "演唱": 18666, "校长": 18667, "深远": 18668, "▁Paris": 18669, "▁rapidly": 18670, "司令": 18671, "▁concern": 18672, "earing": 18673, "一流": 18674, "bar": 18675, "eli": 18676, "美丽": 18677, "EF": 18678, "Early": 18679, "中期": 18680, "▁Ireland": 18681, "自治区": 18682, "▁texts": 18683, "▁AI": 18684, "social": 18685, "相对于": 18686, "▁Charles": 18687, "▁mac": 18688, "creating": 18689, "变迁": 18690, "▁Stand": 18691, "▁guitar": 18692, "outs": 18693, "本章": 18694, "▁Frank": 18695, "▁decide": 18696, "DL": 18697, "延续": 18698, "血糖": 18699, "事业单位": 18700, "意义的": 18701, "umin": 18702, "cal": 18703, "▁drinking": 18704, "▁fiction": 18705, "为止": 18706, "hent": 18707, "▁chart": 18708, "▁Victor": 18709, "▁arms": 18710, "▁edge": 18711, "ompl": 18712, "▁ancest": 18713, "也将": 18714, "明确的": 18715, "率为": 18716, "纲要": 18717, "▁houses": 18718, "学生对": 18719, "盈利": 18720, "▁od": 18721, "研讨": 18722, "自然资源": 18723, "社会主义市场经济": 18724, "iological": 18725, "stitution": 18726, "▁bridge": 18727, "▁audience": 18728, "恶性": 18729, "Those": 18730, "上有": 18731, "加坡": 18732, "▁swim": 18733, "从中": 18734, "▁handle": 18735, "Consider": 18736, "ractice": 18737, "▁finished": 18738, "ipping": 18739, "▁supporting": 18740, "▁Def": 18741, "总之": 18742, "离开": 18743, "ilation": 18744, "承载": 18745, "实务": 18746, "回顾": 18747, "具有重要": 18748, "▁acts": 18749, "▁noticed": 18750, "word": 18751, "Sam": 18752, "▁Ev": 18753, "thus": 18754, "▁typical": 18755, "educ": 18756, "umes": 18757, "设计和": 18758, "▁fle": 18759, "▁biological": 18760, "▁Dec": 18761, "▁plate": 18762, "▁communicate": 18763, "▁sort": 18764, "农户": 18765, "小康社会": 18766, "硕士": 18767, "腺癌": 18768, "Water": 18769, "的效果": 18770, "比特": 18771, "try": 18772, "▁experiments": 18773, "▁tells": 18774, "的本质": 18775, "的空间": 18776, "列入": 18777, "▁hypothes": 18778, "▁consistent": 18779, "的意义": 18780, "参照": 18781, "▁leadership": 18782, "原本": 18783, "▁decrease": 18784, "封闭": 18785, "欢迎": 18786, "▁portion": 18787, "▁+": 18788, "转变为": 18789, "▁attacks": 18790, "rus": 18791, "before": 18792, "hered": 18793, "江西": 18794, "▁capture": 18795, "▁messages": 18796, "▁array": 18797, "尽快": 18798, "彰显": 18799, "British": 18800, "用水": 18801, "節目": 18802, "▁Scot": 18803, "污水": 18804, "阿拉": 18805, "▁instruments": 18806, "▁flight": 18807, "过错": 18808, "Form": 18809, "%)▁": 18810, "uous": 18811, "生命周期": 18812, "▁Form": 18813, "mes": 18814, "Ben": 18815, "oting": 18816, "▁Fin": 18817, "起义": 18818, "消化": 18819, "高原": 18820, "无关": 18821, "選舉": 18822, "iano": 18823, "▁visible": 18824, "Histor": 18825, "▁inspired": 18826, "▁doub": 18827, "呈现出": 18828, "▁herit": 18829, ")▁▁": 18830, "▁conclud": 18831, "▁nations": 18832, "ossible": 18833, "onia": 18834, "追究": 18835, "▁lose": 18836, "指向": 18837, "大批": 18838, "书中": 18839, "消灭": 18840, "▁narratives": 18841, "应用的": 18842, "中小学": 18843, "▁younger": 18844, "data": 18845, "▁cert": 18846, "解决了": 18847, "▁Lord": 18848, "组建": 18849, "化工": 18850, "比賽": 18851, "▁foss": 18852, "agues": 18853, "权和": 18854, "每天": 18855, "增长的": 18856, "解放军": 18857, "▁wants": 18858, "四大": 18859, "血清": 18860, "污染物": 18861, "一位": 18862, "▁cm": 18863, "南方": 18864, "操作系统": 18865, "▁secondary": 18866, "sug": 18867, "ctic": 18868, "orrow": 18869, "▁credit": 18870, "▁amb": 18871, "night": 18872, "Paul": 18873, "rust": 18874, "▁sky": 18875, "▁tried": 18876, "erb": 18877, "四年": 18878, "▁subs": 18879, "▁comment": 18880, "DM": 18881, "坐标": 18882, "▁recovery": 18883, "践行": 18884, "大报告": 18885, "\b\u0005": 18886, "治国": 18887, "▁internet": 18888, "LA": 18889, "isease": 18890, "导航": 18891, "全面建设": 18892, "的各种": 18893, "▁grown": 18894, "▁ongoing": 18895, "▁advice": 18896, "▁grew": 18897, "log": 18898, "▁gained": 18899, "▁taste": 18900, "onal": 18901, "普惠": 18902, "进行分析": 18903, "出于": 18904, "检察院": 18905, "▁cooking": 18906, "hi": 18907, "causing": 18908, "▁arrived": 18909, "扮演": 18910, "venue": 18911, "iberal": 18912, "多媒体": 18913, "▁Data": 18914, "▁gun": 18915, "▁movie": 18916, "▁cart": 18917, "oil": 18918, "金融市场": 18919, "▁UN": 18920, "赢得": 18921, "throp": 18922, "降解": 18923, "深度融合": 18924, "的建设": 18925, "▁shif": 18926, "变形": 18927, "$$": 18928, "年以来": 18929, "上海市": 18930, "aine": 18931, "此后": 18932, "集聚": 18933, "合同的": 18934, "以为": 18935, "和非": 18936, "持久": 18937, "▁intelligence": 18938, "▁pair": 18939, "▁dive": 18940, "遭到": 18941, "▁molecules": 18942, "▁dim": 18943, "频繁": 18944, "中国科学院": 18945, "ylvan": 18946, "工作人员": 18947, "终身": 18948, "生产经营": 18949, "BI": 18950, "ighter": 18951, "本课程": 18952, "▁allerg": 18953, "缺点": 18954, "onomic": 18955, "former": 18956, "▁wis": 18957, "澳大利": 18958, "神经网络": 18959, "入侵": 18960, "▁mere": 18961, "▁slowly": 18962, "▁Sub": 18963, "缩短": 18964, "▁Rob": 18965, "▁derived": 18966, "gent": 18967, "▁functional": 18968, "▁Northern": 18969, "学习和": 18970, "reme": 18971, "▁scene": 18972, "▁hidden": 18973, "否定": 18974, "▁Minister": 18975, "占据": 18976, "筛选": 18977, "性疾病": 18978, "▁stret": 18979, "sen": 18980, "互通": 18981, "》:": 18982, "又有": 18983, "机的": 18984, "▁religion": 18985, "TR": 18986, "▁accompl": 18987, "但由于": 18988, "时间内": 18989, "▁painting": 18990, "▁albums": 18991, "gs": 18992, "小结": 18993, "▁technical": 18994, "常用的": 18995, "PU": 18996, "▁intervention": 18997, "独特的": 18998, "注射": 18999, "tery": 19000, "aturing": 19001, "前后": 19002, "Second": 19003, "▁membran": 19004, "▁ensures": 19005, "▁edition": 19006, "早在": 19007, "在经济": 19008, "hat": 19009, "Elect": 19010, "ket": 19011, "自愿": 19012, "amine": 19013, "心肌": 19014, "▁abuse": 19015, "发起": 19016, "论坛": 19017, "ISO": 19018, "erals": 19019, "▁listen": 19020, "参与者": 19021, "产出": 19022, "章程": 19023, "▁athlet": 19024, "▁happy": 19025, "第九": 19026, "▁rough": 19027, "▁Care": 19028, "▁fant": 19029, "LC": 19030, "zen": 19031, "泄露": 19032, "二级": 19033, "▁recycl": 19034, "步伐": 19035, "产业化": 19036, "的一般": 19037, "▁pregnancy": 19038, "相關": 19039, "发的": 19040, "%、": 19041, "宗旨": 19042, "学派": 19043, "▁Super": 19044, "逝世": 19045, "的部分": 19046, "▁multi": 19047, "不同于": 19048, "兄弟": 19049, "十四五": 19050, "适当的": 19051, "NO": 19052, "ostering": 19053, "讲解": 19054, "▁composition": 19055, "业态": 19056, "流转": 19057, "万吨": 19058, "金融服务": 19059, "▁Tem": 19060, "▁arts": 19061, "对策": 19062, "vision": 19063, "▁Empire": 19064, "aked": 19065, "Learn": 19066, "才是": 19067, "美的": 19068, "▁mechanism": 19069, "▁sole": 19070, "性地": 19071, "援助": 19072, "射线": 19073, "eut": 19074, "▁volunte": 19075, "诉讼法": 19076, "▁definition": 19077, "fortunately": 19078, "▁stick": 19079, "▁curriculum": 19080, "▁wildlife": 19081, "whereas": 19082, "▁Star": 19083, "cut": 19084, "▁virtual": 19085, "一下": 19086, "另一种": 19087, "idae": 19088, "zed": 19089, "综合性": 19090, "保密": 19091, "lean": 19092, "rot": 19093, "▁twice": 19094, "创新创业": 19095, "的选择": 19096, "utional": 19097, "▁enzym": 19098, "▁Committee": 19099, "hop": 19100, "校友": 19101, "▁accident": 19102, "▁employed": 19103, "原告": 19104, "思政课": 19105, "北方": 19106, "面临着": 19107, "室内": 19108, "▁switch": 19109, "有力的": 19110, "教育教学": 19111, "诗歌": 19112, "▁window": 19113, "▁Up": 19114, "▁Office": 19115, "Dec": 19116, "▁transition": 19117, "作為": 19118, "水稻": 19119, "▁Inf": 19120, "alse": 19121, "isco": 19122, "少数民族": 19123, "opulation": 19124, "固体": 19125, "▁Hel": 19126, "▁selection": 19127, "忽略": 19128, "lder": 19129, "塑料": 19130, "的总": 19131, "▁Mr": 19132, "imp": 19133, "ashion": 19134, "▁driving": 19135, "收到": 19136, "ili": 19137, "span": 19138, "成人": 19139, "direct": 19140, "▁employees": 19141, "收支": 19142, "▁demonstrated": 19143, "▁participate": 19144, "直至": 19145, "wan": 19146, "作曲": 19147, "顶层": 19148, "▁fundamental": 19149, "良性": 19150, "培养学生的": 19151, "▁childhood": 19152, "aped": 19153, "鉴别": 19154, "世界经济": 19155, "researchers": 19156, "复苏": 19157, "高度重视": 19158, "的主体": 19159, "▁existence": 19160, "Ps": 19161, "重的": 19162, "▁flo": 19163, "▁Virginia": 19164, "▁gall": 19165, "留下": 19166, "Vis": 19167, "MO": 19168, "▁prepare": 19169, "第四节": 19170, "治理能力": 19171, "均匀": 19172, "制定的": 19173, "以下几个": 19174, "▁Soviet": 19175, "社会科学": 19176, "sequent": 19177, "▁initially": 19178, "全面发展": 19179, "nce": 19180, "icking": 19181, "HA": 19182, "▁innovative": 19183, "▁notable": 19184, "▁Southern": 19185, "也为": 19186, "效率和": 19187, "rh": 19188, "draw": 19189, "oding": 19190, "afety": 19191, "根本上": 19192, "短板": 19193, "的责任": 19194, "世界各国": 19195, "▁speaking": 19196, "Children": 19197, "ostic": 19198, "inux": 19199, "▁din": 19200, "ban": 19201, "rather": 19202, "chnology": 19203, "平方公里": 19204, "景观": 19205, "▁Play": 19206, "rize": 19207, "▁fellow": 19208, "▁inches": 19209, "结果表明": 19210, "voc": 19211, "▁sick": 19212, "▁agricultural": 19213, "▁infected": 19214, "▁vessels": 19215, "的话": 19216, "索引": 19217, "战略性": 19218, "陕西": 19219, "来源于": 19220, "▁creatures": 19221, "成都": 19222, "▁assistance": 19223, "▁instructions": 19224, "绘画": 19225, "作用的": 19226, "也能": 19227, "服務": 19228, "▁leaf": 19229, "▁architecture": 19230, "▁farmers": 19231, "▁send": 19232, "▁wire": 19233, "▁generated": 19234, "▁wave": 19235, "▁organized": 19236, "一家": 19237, "春秋": 19238, "源头": 19239, "发布的": 19240, "ricts": 19241, "欧元": 19242, "abul": 19243, "rovers": 19244, "▁missing": 19245, "境外": 19246, "资本市场": 19247, "动员": 19248, "ylvania": 19249, "Hel": 19250, "Black": 19251, "vity": 19252, "愿意": 19253, "立体": 19254, "▁inject": 19255, "Did": 19256, "ester": 19257, "在此基础上": 19258, "万亿元": 19259, "]。": 19260, "▁engaging": 19261, ")(": 19262, "▁police": 19263, "▁army": 19264, "MR": 19265, "在美国": 19266, "▁university": 19267, "▁sentence": 19268, "越大": 19269, "▁perhaps": 19270, "阻止": 19271, "▁poverty": 19272, "▁neighborhood": 19273, "▁ic": 19274, "文书": 19275, "原有": 19276, "期待": 19277, "▁crops": 19278, "▁blocks": 19279, "发动": 19280, "演进": 19281, "▁protected": 19282, "發現": 19283, "在对": 19284, "▁styles": 19285, "之上": 19286, "▁therm": 19287, "▁ratio": 19288, "缓慢": 19289, "▁:": 19290, "▁tall": 19291, "无需": 19292, "olester": 19293, "chen": 19294, "▁Post": 19295, "人们的": 19296, "排列": 19297, "省份": 19298, "心血管": 19299, "amps": 19300, "导致的": 19301, "基本的": 19302, "成員": 19303, "](": 19304, "▁largely": 19305, "介入": 19306, "],▁": 19307, "▁scholars": 19308, "▁Olympics": 19309, "无形": 19310, "负荷": 19311, "真正的": 19312, "周年": 19313, "及其他": 19314, "▁overl": 19315, "界的": 19316, "▁recognition": 19317, "發行": 19318, "ji": 19319, "ograp": 19320, "▁breath": 19321, "Min": 19322, "▁define": 19323, "orous": 19324, "▁boundaries": 19325, "▁regulations": 19326, "▁electronic": 19327, "▁Control": 19328, "▁positions": 19329, "▁distingu": 19330, "最多": 19331, "习题": 19332, "保健": 19333, "California": 19334, "▁skill": 19335, "uter": 19336, "恶意": 19337, "前期": 19338, "对手": 19339, "▁cup": 19340, "所未": 19341, "薄弱": 19342, "每次": 19343, "奥林匹克": 19344, "aser": 19345, "抵抗": 19346, "病原": 19347, "▁expressed": 19348, "▁authority": 19349, "▁infrastructure": 19350, "▁administration": 19351, "▁everyday": 19352, "基本上": 19353, "能够在": 19354, "获得的": 19355, "thesis": 19356, "show": 19357, "农药": 19358, "▁agreed": 19359, "Following": 19360, "▁Human": 19361, "irus": 19362, "Life": 19363, "▁ships": 19364, "荧光": 19365, "高考": 19366, "新加坡": 19367, "oston": 19368, "▁heritage": 19369, "表征": 19370, "法律规定": 19371, "草案": 19372, "但其": 19373, "奖励": 19374, "严峻": 19375, "湖北": 19376, "coming": 19377, "▁matters": 19378, "▁succeed": 19379, "老年人": 19380, "较强的": 19381, "▁prison": 19382, "▁detailed": 19383, "弥补": 19384, "▁inner": 19385, "▁proport": 19386, "Sch": 19387, "经历了": 19388, "会上": 19389, "磁场": 19390, "黄金": 19391, "adium": 19392, "▁facing": 19393, "近期": 19394, "▁Po": 19395, "▁massive": 19396, "▁Line": 19397, "本国": 19398, "党史": 19399, "两国": 19400, "▁Fe": 19401, "▁featured": 19402, "遥感": 19403, "uracy": 19404, "atre": 19405, "国土": 19406, "储存": 19407, "▁customers": 19408, "those": 19409, "effect": 19410, "出售": 19411, "▁Vol": 19412, "▁division": 19413, "年起": 19414, "契约": 19415, "中国式": 19416, "▁couple": 19417, "iral": 19418, "▁pig": 19419, "DF": 19420, "▁pit": 19421, "台北": 19422, "流感": 19423, "资产的": 19424, "▁sequence": 19425, "▁views": 19426, "在实际": 19427, "race": 19428, "▁Food": 19429, "特殊的": 19430, "ocyt": 19431, "▁tro": 19432, "高压": 19433, "国际化": 19434, "ivalent": 19435, "▁entirely": 19436, "广义": 19437, "▁astron": 19438, "consider": 19439, "完成了": 19440, "▁instruction": 19441, "▁habits": 19442, "fficial": 19443, "永远": 19444, "Dem": 19445, "残疾": 19446, "omething": 19447, "建立起": 19448, "双向": 19449, "Ident": 19450, "偏差": 19451, "的条件": 19452, "作出了": 19453, "▁variables": 19454, "▁manip": 19455, "▁struggle": 19456, "hy": 19457, "专业的": 19458, "made": 19459, "exp": 19460, "▁soldiers": 19461, "Only": 19462, "随时": 19463, "元年": 19464, "giving": 19465, "ideos": 19466, "打开": 19467, "美学": 19468, "▁naturally": 19469, "▁administr": 19470, "▁Chicago": 19471, "称之为": 19472, "▁indigenous": 19473, "草原": 19474, "▁department": 19475, "▁sell": 19476, "着重": 19477, "学生学习": 19478, "▁fly": 19479, "科院": 19480, "hus": 19481, "ocation": 19482, "Inc": 19483, "anes": 19484, "▁weap": 19485, "▁controls": 19486, "▁molecular": 19487, "ipal": 19488, "▁bones": 19489, "▁conventional": 19490, "▁kit": 19491, "lements": 19492, "▁narrow": 19493, "智能制造": 19494, "▁Bank": 19495, "Though": 19496, "▁attend": 19497, "osite": 19498, "工会": 19499, "战役": 19500, "关闭": 19501, "▁millions": 19502, "▁prices": 19503, "很好": 19504, "▁fell": 19505, "▁street": 19506, "语音": 19507, "基督": 19508, "是实现": 19509, "带宽": 19510, "本案": 19511, "突发": 19512, "要坚持": 19513, "ING": 19514, "在这一": 19515, "▁inters": 19516, "kg": 19517, "细节": 19518, "授予": 19519, "和数据": 19520, "提到": 19521, "▁calls": 19522, "▁Medical": 19523, "▁With": 19524, "▁answers": 19525, "近日": 19526, "评审": 19527, "科学发展观": 19528, "水资源": 19529, "▁sections": 19530, "▁Mer": 19531, "保护的": 19532, "研究发现": 19533, "▁nurs": 19534, "Bet": 19535, "▁af": 19536, "CB": 19537, "重要的作用": 19538, "与之": 19539, "动力学": 19540, "人类的": 19541, "▁nine": 19542, "合约": 19543, "资助": 19544, "Any": 19545, "anger": 19546, "▁comprehensive": 19547, "gers": 19548, "是因为": 19549, "势力": 19550, "和创新": 19551, "教师在": 19552, "▁acknow": 19553, "isk": 19554, "▁shot": 19555, "▁appreciate": 19556, "改变了": 19557, "▁investment": 19558, "▁drawing": 19559, "初心": 19560, "会有": 19561, "做了": 19562, "encing": 19563, "▁covers": 19564, "kl": 19565, "▁desired": 19566, "书法": 19567, "inning": 19568, "月份": 19569, "Click": 19570, "▁sufficient": 19571, "▁fewer": 19572, "▁vibr": 19573, "otype": 19574, "新华": 19575, "摘要": 19576, "第三人": 19577, "▁revolution": 19578, "▁enem": 19579, "forming": 19580, "▁Work": 19581, "增值税": 19582, "▁cutting": 19583, "asters": 19584, "Open": 19585, "在一": 19586, "▁consult": 19587, "▁sector": 19588, "要以": 19589, "与管理": 19590, "的网络": 19591, "▁feedback": 19592, "xford": 19593, "▁seemed": 19594, "▁serving": 19595, "color": 19596, "志愿": 19597, "抗战": 19598, "▁trials": 19599, "▁confir": 19600, "Examples": 19601, "▁jump": 19602, "▁Jud": 19603, "阶层": 19604, "君主": 19605, "▁circumstances": 19606, "▁intake": 19607, "▁stored": 19608, "va": 19609, "isters": 19610, "所需的": 19611, "▁sweet": 19612, "Rev": 19613, "▁Budd": 19614, "▁gluc": 19615, "fin": 19616, "▁representation": 19617, "rument": 19618, "▁simpl": 19619, "參考文獻": 19620, "▁rub": 19621, "法律的": 19622, "改为": 19623, "▁conversation": 19624, "产阶级": 19625, "▁mobile": 19626, "责任的": 19627, "热情": 19628, "结核": 19629, "和文化": 19630, "itudes": 19631, "▁domin": 19632, "分辨率": 19633, "本人": 19634, "action": 19635, "▁Bill": 19636, "▁string": 19637, "▁Centre": 19638, "▁simultane": 19639, "▁schem": 19640, "瓶颈": 19641, "▁kill": 19642, "毫米": 19643, "▁successfully": 19644, "还能": 19645, "▁somew": 19646, "tw": 19647, "全身": 19648, "发挥了": 19649, "▁instrument": 19650, "▁stands": 19651, "我的": 19652, "olesterol": 19653, "▁centre": 19654, "▁fold": 19655, "▁bond": 19656, "有益": 19657, "里的": 19658, "▁monitor": 19659, "inds": 19660, "▁meals": 19661, "进程中": 19662, "受理": 19663, "George": 19664, "共产主义": 19665, "FL": 19666, "壮大": 19667, "变为": 19668, "▁paid": 19669, "Meanwhile": 19670, "▁alter": 19671, "格尔": 19672, "各族": 19673, "甲基": 19674, "已被": 19675, "对企业": 19676, "March": 19677, "▁survive": 19678, "▁raise": 19679, "影响的": 19680, "olitical": 19681, "achers": 19682, "有望": 19683, "▁explan": 19684, "鐵路": 19685, "ali": 19686, "实证": 19687, "极其": 19688, "Resear": 19689, "▁evaluate": 19690, "侦查": 19691, "过剩": 19692, "著作权": 19693, "VI": 19694, "▁coff": 19695, "高等学校": 19696, "小行星": 19697, "▁latest": 19698, "优良": 19699, "祖国": 19700, "运动的": 19701, "▁suffering": 19702, "▁teen": 19703, "辅导": 19704, "紧张": 19705, "管理制度": 19706, "▁photos": 19707, "映射": 19708, "▁ven": 19709, "▁transportation": 19710, "\"▁|▁": 19711, "牺牲": 19712, "摩擦": 19713, "rons": 19714, "▁eastern": 19715, "omic": 19716, "▁claims": 19717, "超级": 19718, "▁regul": 19719, "▁ble": 19720, "▁migr": 19721, "▁brings": 19722, "稱為": 19723, "提倡": 19724, "▁prevention": 19725, "▁ended": 19726, "重构": 19727, "ibl": 19728, "分组": 19729, "▁dys": 19730, "Mat": 19731, "uis": 19732, "较小": 19733, "▁mamm": 19734, "東京": 19735, "nsylvania": 19736, "管理系统": 19737, "▁Just": 19738, "▁ends": 19739, "湿地": 19740, "基础设施建设": 19741, "▁tur": 19742, "▁door": 19743, "▁Florida": 19744, "stud": 19745, "▁noise": 19746, "▁persist": 19747, "互补": 19748, "有关部门": 19749, "的世界": 19750, "▁bill": 19751, "▁beauty": 19752, "ichigan": 19753, "加深": 19754, "不确定性": 19755, "roat": 19756, "涉及到": 19757, "中医": 19758, "的支持": 19759, "▁Gard": 19760, "teen": 19761, "Unfortunately": 19762, "接种": 19763, "▁extensive": 19764, "一套": 19765, "Sur": 19766, "▁pretty": 19767, "▁Big": 19768, "丝绸": 19769, "相继": 19770, "人们对": 19771, "术语": 19772, "签署": 19773, "实现的": 19774, "▁Squ": 19775, "▁sed": 19776, "染色体": 19777, "▁usage": 19778, "发动机": 19779, "注意的是": 19780, "due": 19781, "▁cloud": 19782, "的观点": 19783, "还没有": 19784, "ellectual": 19785, "最後": 19786, "旋转": 19787, "▁Nations": 19788, "itative": 19789, "多样化": 19790, "所谓的": 19791, "▁expectations": 19792, "▁Brazil": 19793, "▁reactions": 19794, "就有": 19795, "并发症": 19796, "顺应": 19797, "Find": 19798, "北部": 19799, "Commun": 19800, "▁shell": 19801, "▁agriculture": 19802, "选取": 19803, "对象的": 19804, "would": 19805, "照片": 19806, "全面推进": 19807, "派遣": 19808, "phone": 19809, "期間": 19810, "▁deliv": 19811, "零件": 19812, "▁Irish": 19813, "▁Energy": 19814, "▁org": 19815, "解决问题的": 19816, "境界": 19817, "box": 19818, "atus": 19819, "冷却": 19820, "是为": 19821, "▁propos": 19822, "▁horiz": 19823, "▁brand": 19824, "connect": 19825, "质的": 19826, "\"▁–▁": 19827, "▁pray": 19828, "▁describes": 19829, "▁Peter": 19830, "管控": 19831, "fts": 19832, "▁Second": 19833, "▁(\"": 19834, "▁remark": 19835, "代价": 19836, "革命的": 19837, "唯物主义": 19838, "公有制": 19839, "▁Arts": 19840, ");": 19841, "法庭": 19842, "发展的重要": 19843, "▁thorough": 19844, "lif": 19845, "ivated": 19846, "▁lymph": 19847, "Orig": 19848, "在该": 19849, "▁medications": 19850, "illy": 19851, "国际贸易": 19852, "omach": 19853, "▁Mel": 19854, "摆脱": 19855, "▁border": 19856, "▁focuses": 19857, "ba": 19858, "▁Bur": 19859, "建立的": 19860, "教育和": 19861, "阳性": 19862, "▁Ke": 19863, "▁politics": 19864, "▁understood": 19865, "这意味着": 19866, "▁hundreds": 19867, "law": 19868, "▁deeply": 19869, "page": 19870, "时效": 19871, "回应": 19872, "约为": 19873, "选用": 19874, "opping": 19875, "▁versions": 19876, "esh": 19877, "ulpt": 19878, "▁Russia": 19879, "▁achieved": 19880, "作为一个": 19881, "▁Str": 19882, "▁Haw": 19883, "UR": 19884, "▁sod": 19885, "▁dance": 19886, "去年": 19887, "ucky": 19888, "等技术": 19889, "izer": 19890, "▁Board": 19891, "▁Revolution": 19892, "riz": 19893, "oli": 19894, "男性": 19895, "致使": 19896, "About": 19897, "da": 19898, "物价": 19899, "宏观经济": 19900, "ansas": 19901, "▁maintenance": 19902, "诸如": 19903, "迭代": 19904, "▁bot": 19905, "▁manner": 19906, "▁reprodu": 19907, "体会": 19908, "不得不": 19909, "的非": 19910, "usual": 19911, "▁confidence": 19912, "EA": 19913, "▁Aust": 19914, "▁adopt": 19915, "\";": 19916, "quality": 19917, ")(": 19918, "test": 19919, "的质量": 19920, "环境下": 19921, "温室": 19922, "巴士": 19923, "实物": 19924, "comfort": 19925, "iratory": 19926, "平稳": 19927, "隧道": 19928, "救济": 19929, "本专业": 19930, "▁domestic": 19931, "iosity": 19932, "cin": 19933, "▁Saint": 19934, "▁Wood": 19935, "having": 19936, "电动": 19937, "所有制": 19938, "和企业": 19939, "优秀传统文化": 19940, "▁/": 19941, "东部": 19942, "积分": 19943, "世紀": 19944, "▁pull": 19945, "etts": 19946, "▁pump": 19947, "ecess": 19948, "▁paralle": 19949, "储能": 19950, "影响力": 19951, "▁supports": 19952, "世界大": 19953, "小型": 19954, "aired": 19955, "决定的": 19956, "▁legs": 19957, "先行": 19958, "Bi": 19959, "▁maps": 19960, "abulary": 19961, "人心": 19962, "ND": 19963, "▁launched": 19964, "stract": 19965, "▁Ocean": 19966, "▁camera": 19967, "Men": 19968, "存在于": 19969, "ón": 19970, "私有": 19971, "▁nit": 19972, "退休": 19973, "cribed": 19974, "▁database": 19975, "▁steel": 19976, "两次": 19977, "等地": 19978, "日在": 19979, "▁Not": 19980, "实际情况": 19981, "▁transmission": 19982, "▁stre": 19983, "▁Love": 19984, "碰撞": 19985, "焦点": 19986, "创立": 19987, "海上": 19988, "随之": 19989, "红外": 19990, "奋斗目标": 19991, "inson": 19992, "Europ": 19993, "▁moon": 19994, "▁standing": 19995, "▁governments": 19996, "制订": 19997, "集中在": 19998, "桥梁": 19999, "Back": 20000, "▁Mass": 20001, "▁adequ": 20002, "▁fighting": 20003, "▁rely": 20004, "混凝": 20005, "分析了": 20006, "▁abnorm": 20007, "▁tissues": 20008, "因果": 20009, "▁download": 20010, "idential": 20011, "rue": 20012, "使之": 20013, "兼顾": 20014, "要点": 20015, "\u0007\u0005": 20016, "uce": 20017, "为一": 20018, "著名的": 20019, "eorgia": 20020, "▁shift": 20021, "”,▁": 20022, "Green": 20023, "份额": 20024, "西安": 20025, "▁stock": 20026, "▁discipl": 20027, "Out": 20028, "多项": 20029, "▁email": 20030, "▁partner": 20031, "opl": 20032, "名字": 20033, "事物的": 20034, "arant": 20035, "看法": 20036, "▁surfaces": 20037, "国家级": 20038, "▁ages": 20039, "行为人": 20040, "管理者": 20041, "▁county": 20042, "▁Fort": 20043, "▁butter": 20044, "opic": 20045, "▁funding": 20046, "沿海": 20047, "需要在": 20048, "▁encount": 20049, "氨基": 20050, "abling": 20051, "为代表的": 20052, "天地": 20053, "▁careful": 20054, "▁substance": 20055, "▁restrict": 20056, "我国经济": 20057, "是如何": 20058, "Researchers": 20059, "滥用": 20060, "▁align": 20061, "客户端": 20062, "▁variable": 20063, "理工": 20064, "rie": 20065, "uality": 20066, "印刷": 20067, "▁improvement": 20068, "中美": 20069, "▁courses": 20070, "▁afford": 20071, "恐怖": 20072, "显得": 20073, "专业化": 20074, "克斯": 20075, "API": 20076, "後來": 20077, "ovascular": 20078, "”.▁": 20079, "▁doctors": 20080, "隐患": 20081, "和新": 20082, "▁les": 20083, "▁heavily": 20084, "▁repeated": 20085, "养殖": 20086, "玉米": 20087, "城市的": 20088, "▁perce": 20089, "▁▁\"": 20090, "▁Eastern": 20091, "会在": 20092, "紧急": 20093, "bury": 20094, "▁optimal": 20095, "enger": 20096, "乡镇": 20097, "滞后": 20098, "conf": 20099, "通路": 20100, "world": 20101, "▁electron": 20102, "bu": 20103, "▁discussions": 20104, "▁engaged": 20105, "▁otherwise": 20106, "健康发展": 20107, "历史性": 20108, "▁Cross": 20109, "Later": 20110, "”▁(": 20111, "without": 20112, "为学生": 20113, "贯彻落实": 20114, "人与自然": 20115, "▁Sil": 20116, "eek": 20117, "Thomas": 20118, "必需": 20119, "▁analyze": 20120, "▁fill": 20121, "herent": 20122, "性问题": 20123, "侧重": 20124, "将军": 20125, "下游": 20126, "审议": 20127, "职权": 20128, "旗帜": 20129, "电商": 20130, "理论上": 20131, "▁seeing": 20132, "▁tropical": 20133, "ervative": 20134, "标志着": 20135, "▁discussed": 20136, "纷纷": 20137, "▁prominent": 20138, "意义上的": 20139, "疾病的": 20140, "活動": 20141, "▁budget": 20142, "▁formal": 20143, "人权": 20144, "总理": 20145, "的新型": 20146, "▁asking": 20147, "投票": 20148, "▁breathing": 20149, "孪生": 20150, "合金": 20151, "的创新": 20152, "▁pool": 20153, "stra": 20154, "abeth": 20155, "aska": 20156, "城市化": 20157, "韓國": 20158, "▁adopted": 20159, "教科": 20160, "▁trip": 20161, "].▁": 20162, "▁insulin": 20163, "ogs": 20164, "中药": 20165, "突然": 20166, "▁Conf": 20167, "▁managing": 20168, "易于": 20169, "pring": 20170, "有必要": 20171, "推动了": 20172, "固定资产": 20173, "海关": 20174, "中毒": 20175, "mary": 20176, "▁comfortable": 20177, "ami": 20178, "crete": 20179, "▁▁||▁": 20180, "人人": 20181, "▁Design": 20182, "▁greatest": 20183, "▁preval": 20184, "▁Michael": 20185, "农民工": 20186, "义务教育": 20187, "衍生": 20188, "▁newly": 20189, "追溯": 20190, "▁Labor": 20191, "▁Summer": 20192, "host": 20193, "▁damaged": 20194, "eting": 20195, "▁extent": 20196, "启示": 20197, "也没有": 20198, "▁ahead": 20199, "▁categories": 20200, "uten": 20201, "的保护": 20202, "长征": 20203, "的活动": 20204, "使用权": 20205, "资本的": 20206, "▁invent": 20207, "可以看出": 20208, "▁circuit": 20209, "mond": 20210, "▁entry": 20211, "之大": 20212, "是将": 20213, "科学研究": 20214, "▁crow": 20215, "small": 20216, "▁Ob": 20217, "管理人员": 20218, "留在": 20219, "▁Navy": 20220, "▁sales": 20221, "▁susp": 20222, "▁ultimately": 20223, "很大程度上": 20224, "给出": 20225, "▁Louis": 20226, "uber": 20227, "首都": 20228, "Robert": 20229, "▁decreased": 20230, "服装": 20231, "的因素": 20232, "大学的": 20233, "idity": 20234, "▁stated": 20235, "▁decor": 20236, "唐朝": 20237, "的一个重要": 20238, "借贷": 20239, "养老保险": 20240, "平成": 20241, "學家": 20242, "并行": 20243, "可以将": 20244, "影響": 20245, "▁ment": 20246, "▁agreement": 20247, "▁san": 20248, "sl": 20249, "处的": 20250, "是国家": 20251, "aria": 20252, "胰岛": 20253, "受损": 20254, "监督管理": 20255, "▁Tom": 20256, "▁accepted": 20257, "▁Learning": 20258, "注明": 20259, "加重": 20260, "从根本上": 20261, "商业秘密": 20262, "机动": 20263, "▁Pers": 20264, "▁historic": 20265, "▁argument": 20266, "▁nerve": 20267, "Met": 20268, "杆菌": 20269, "count": 20270, "党组织": 20271, "发掘": 20272, "▁guess": 20273, "二维": 20274, "保守": 20275, "▁accounts": 20276, "▁Station": 20277, "%)": 20278, "school": 20279, "▁manufacturing": 20280, "劳动关系": 20281, "▁medication": 20282, "Care": 20283, "ressing": 20284, "▁=": 20285, "▁informed": 20286, "ova": 20287, "prom": 20288, "aka": 20289, "的产品": 20290, "企业家": 20291, "他认为": 20292, "another": 20293, "▁magnetic": 20294, ","": 20295, "GS": 20296, "achus": 20297, "▁(▁": 20298, "▁theme": 20299, "istical": 20300, "eutic": 20301, "感情": 20302, "▁subsequent": 20303, "加热": 20304, "制品": 20305, "abel": 20306, "Net": 20307, "%;": 20308, "共赢": 20309, "作风": 20310, "种种": 20311, "领导干部": 20312, "水平和": 20313, "▁addressing": 20314, "oken": 20315, "ailed": 20316, "无产阶级": 20317, "▁Fre": 20318, "民俗": 20319, "生产要素": 20320, "文物保护": 20321, "政策和": 20322, "ensuring": 20323, "溶解": 20324, "fulness": 20325, "Select": 20326, "▁listening": 20327, "普查": 20328, "为其": 20329, "▁symbols": 20330, "_{": 20331, "▁corpor": 20332, "oices": 20333, "▁beneficial": 20334, "的可能性": 20335, "▁error": 20336, "▁Battle": 20337, "▁marriage": 20338, "光子": 20339, "造型": 20340, "横向": 20341, "Based": 20342, "▁cort": 20343, "直线": 20344, "▁sport": 20345, "▁aw": 20346, "▁fourth": 20347, "▁adap": 20348, "被告人": 20349, "脱贫攻坚": 20350, "▁gal": 20351, "▁Sciences": 20352, "▁fract": 20353, "▁emerged": 20354, "中部": 20355, "Access": 20356, "General": 20357, "▁rhyth": 20358, "▁rig": 20359, "▁imaging": 20360, "taking": 20361, "▁holds": 20362, "▁meal": 20363, "enh": 20364, "监视": 20365, "▁passion": 20366, "中最": 20367, "▁Information": 20368, "先进的": 20369, "cover": 20370, "▁constructed": 20371, "▁lake": 20372, "科目": 20373, "复杂性": 20374, "的数量": 20375, "催化剂": 20376, "▁。": 20377, "便是": 20378, "定制": 20379, "疗效": 20380, "与应用": 20381, "▁Mo": 20382, "排序": 20383, "Dis": 20384, "▁forget": 20385, "Together": 20386, "扶持": 20387, "实事": 20388, "这时": 20389, "▁correl": 20390, "▁officials": 20391, "▁dynamics": 20392, "▁engagement": 20393, "exper": 20394, "Yet": 20395, "▁myth": 20396, "cor": 20397, "泡沫": 20398, "业绩": 20399, "不断地": 20400, "社会主义核心价值观": 20401, "测序": 20402, "▁rank": 20403, "▁{": 20404, "很好的": 20405, "▁broken": 20406, "范式": 20407, "▁Bible": 20408, "以其": 20409, "宝贵": 20410, "▁neighb": 20411, "被认为是": 20412, "rooms": 20413, "power": 20414, "天然气": 20415, "▁latter": 20416, "聯盟": 20417, "▁episode": 20418, "riminal": 20419, ";▁": 20420, "界限": 20421, "Note": 20422, "▁accum": 20423, "▁photograph": 20424, "Good": 20425, "London": 20426, "olk": 20427, "▁antibiot": 20428, "中原": 20429, "▁towns": 20430, "密钥": 20431, "▁universe": 20432, "▁depends": 20433, "战场": 20434, "rowing": 20435, "▁toler": 20436, "erry": 20437, "▁railway": 20438, "▁trends": 20439, "处在": 20440, "奥林匹克运动会": 20441, "estab": 20442, "法國": 20443, "▁marine": 20444, "Russ": 20445, "晚期": 20446, "Conclusion": 20447, "imm": 20448, "考查": 20449, "pread": 20450, "▁sessions": 20451, "▁Google": 20452, "救助": 20453, "取得的": 20454, "post": 20455, "▁Tw": 20456, "免费": 20457, "whose": 20458, "▁territory": 20459, "leaving": 20460, "mann": 20461, "▁enables": 20462, "▁opposite": 20463, "▁literary": 20464, "造成了": 20465, ";(": 20466, "▁electro": 20467, "控制的": 20468, "▁Home": 20469, "▁honor": 20470, "▁Rights": 20471, "就必须": 20472, "▁ske": 20473, "叫做": 20474, "▁resilience": 20475, "itle": 20476, "就像": 20477, "▁nom": 20478, "可视化": 20479, "越南": 20480, "▁dental": 20481, "gener": 20482, "acent": 20483, "afe": 20484, "谋划": 20485, "最大限度": 20486, "社会经济": 20487, "分级": 20488, "▁knows": 20489, "▁supplies": 20490, "成为了": 20491, "otion": 20492, "inv": 20493, "明确提出": 20494, "的培养": 20495, "实施的": 20496, "▁failed": 20497, "▁Long": 20498, "▁inn": 20499, "rays": 20500, "idespread": 20501, "Sever": 20502, "西亚": 20503, "前列": 20504, "鉴于": 20505, "议会": 20506, "▁diagnosed": 20507, "▁producing": 20508, "ects": 20509, "▁harvest": 20510, "两类": 20511, "▁influenced": 20512, "▁museum": 20513, "▁Us": 20514, "出現": 20515, "start": 20516, "指的是": 20517, "▁framework": 20518, "sts": 20519, "▁aer": 20520, "▁People": 20521, "ographical": 20522, "▁centers": 20523, "access": 20524, "形的": 20525, "宣告": 20526, "从而使": 20527, "公务": 20528, "关税": 20529, "▁obvious": 20530, "▁differently": 20531, "Try": 20532, "娱乐": 20533, "▁chief": 20534, "▁vulnerable": 20535, "▁insects": 20536, "不利于": 20537, "窗口": 20538, "ulty": 20539, "▁Mars": 20540, "票据": 20541, "为主的": 20542, "复议": 20543, "市场主体": 20544, "奥运": 20545, "等待": 20546, "specific": 20547, "▁debut": 20548, "▁observations": 20549, "▁fabric": 20550, "oval": 20551, "▁Asian": 20552, "▁delivery": 20553, "scale": 20554, "▁boy": 20555, "太平洋": 20556, "主管部门": 20557, "硬化": 20558, "working": 20559, "▁End": 20560, "▁attached": 20561, "最优": 20562, "icide": 20563, "------------": 20564, "▁independence": 20565, "▁htt": 20566, "▁accel": 20567, "▁conscious": 20568, "▁cycl": 20569, "ais": 20570, "▁Bi": 20571, "竞赛": 20572, "完备": 20573, "帮助学生": 20574, "▁habitats": 20575, "混凝土": 20576, "▁societal": 20577, "▁crisis": 20578, "机体": 20579, "ipher": 20580, "导致了": 20581, "▁decline": 20582, "▁pron": 20583, "▁aims": 20584, "▁detection": 20585, "GE": 20586, "侵略": 20587, "的系统": 20588, "Please": 20589, "很容易": 20590, "mg": 20591, "ourse": 20592, "▁Study": 20593, "lights": 20594, "▁witness": 20595, "▁broader": 20596, "▁evaluation": 20597, "andon": 20598, "▁NASA": 20599, "wing": 20600, "▁substances": 20601, "磷酸": 20602, "▁Islands": 20603, "▁implications": 20604, "根源": 20605, "的任务": 20606, "唐代": 20607, "方式和": 20608, "跨国": 20609, "▁-▁▁-▁": 20610, "▁raw": 20611, "▁reduces": 20612, "▁column": 20613, "▁minimum": 20614, "Canada": 20615, "▁dust": 20616, "理解和": 20617, "生产和": 20618, "▁Ann": 20619, "的利益": 20620, "▁expensive": 20621, "拉斯": 20622, "Sl": 20623, "极大地": 20624, "▁Ca": 20625, "olism": 20626, "▁Swed": 20627, "achusetts": 20628, "这也": 20629, "反而": 20630, "实践活动": 20631, "Class": 20632, "worth": 20633, "▁intric": 20634, "潮流": 20635, "▁Administ": 20636, "▁boost": 20637, "ivating": 20638, "▁vote": 20639, "物质的": 20640, "itter": 20641, "南部": 20642, "还会": 20643, "▁Christmas": 20644, "▁happening": 20645, "▁Best": 20646, "inois": 20647, "书写": 20648, "Non": 20649, "任命": 20650, "即将": 20651, "物资": 20652, "原材料": 20653, "▁·▁": 20654, "▁zone": 20655, "喜欢": 20656, "Ep": 20657, "unning": 20658, "▁compare": 20659, "ION": 20660, "词汇": 20661, "▁implementation": 20662, "阐释": 20663, "优越": 20664, "聯賽": 20665, "develop": 20666, "向量": 20667, "▁offering": 20668, "▁directed": 20669, "▁lip": 20670, "出租": 20671, "博弈": 20672, "Michael": 20673, "装饰": 20674, "▁Dev": 20675, "▁stability": 20676, "▁Moon": 20677, "前所未": 20678, "Cam": 20679, ".[": 20680, "▁phosph": 20681, "emia": 20682, "▁Gal": 20683, "een": 20684, "▁How": 20685, "多边": 20686, "崛起": 20687, "▁resulted": 20688, "ieties": 20689, "組織": 20690, "ambig": 20691, "实现对": 20692, "仍有": 20693, "端口": 20694, "esity": 20695, "▁apparent": 20696, "澳門": 20697, "Tax": 20698, "数量的": 20699, "螺旋": 20700, "虚假": 20701, "实践的": 20702, "支柱": 20703, "适宜": 20704, "手续": 20705, "的速度": 20706, "可以从": 20707, "SR": 20708, "racy": 20709, "▁Oper": 20710, "▁flav": 20711, "providing": 20712, "不当": 20713, "自贸": 20714, "从业": 20715, "新中国成立": 20716, "▁Italy": 20717, "▁yield": 20718, "日至": 20719, "来讲": 20720, "可通过": 20721, "▁Bre": 20722, "开发的": 20723, "不符合": 20724, "經濟": 20725, "风险管理": 20726, "合作社": 20727, "技术在": 20728, "数据集": 20729, "▁seconds": 20730, "cho": 20731, "▁resolution": 20732, "说法": 20733, "▁remote": 20734, "字母": 20735, "气管": 20736, "进攻": 20737, "OP": 20738, "▁sunlight": 20739, "完整性": 20740, "氨酸": 20741, "▁presentation": 20742, "▁Av": 20743, "▁agency": 20744, "▁moves": 20745, "术后": 20746, "网膜": 20747, "适度": 20748, "澳大利亚": 20749, "▁retain": 20750, "平行": 20751, "滤波": 20752, "年均": 20753, "▁Native": 20754, "▁Muslim": 20755, "▁mild": 20756, "ockey": 20757, "威廉": 20758, "angle": 20759, "司法解释": 20760, "核心技术": 20761, "永久": 20762, "Health": 20763, "的状态": 20764, "▁Federal": 20765, "不论": 20766, "控制系统": 20767, "的人口": 20768, "▁Good": 20769, "▁strict": 20770, "充足": 20771, "▁unusual": 20772, "歌手": 20773, "bro": 20774, "模仿": 20775, "要件": 20776, "▁Language": 20777, "不管": 20778, "辩护": 20779, "直接影响": 20780, "也不能": 20781, "pH": 20782, "▁commission": 20783, "▁convey": 20784, "ospit": 20785, "的产生": 20786, "▁poem": 20787, "▁threats": 20788, "物理学": 20789, "▁flag": 20790, "▁acquired": 20791, "的方向": 20792, "海军": 20793, "可以用": 20794, "irth": 20795, "▁installed": 20796, "董事会": 20797, "回报": 20798, "课程标准": 20799, "Unlike": 20800, "▁discrimination": 20801, "应在": 20802, "▁Network": 20803, "一点": 20804, "移民": 20805, "▁normally": 20806, "ieval": 20807, "Li": 20808, "▁reson": 20809, "厂商": 20810, "嫌疑": 20811, "關係": 20812, "▁fiber": 20813, "plete": 20814, "▁permanent": 20815, "▁fav": 20816, "▁indicates": 20817, "irty": 20818, "ediate": 20819, "储蓄": 20820, "不高": 20821, "too": 20822, "有害": 20823, "恒星": 20824, "贝尔": 20825, "政治人物": 20826, "▁BC": 20827, "▁Sir": 20828, "▁chrom": 20829, "▁occasion": 20830, "城区": 20831, "也可能": 20832, "green": 20833, "▁By": 20834, "▁receptor": 20835, "▁peak": 20836, "直径": 20837, "和产业": 20838, "见的": 20839, "▁Cur": 20840, "▁Rome": 20841, "last": 20842, "assion": 20843, "届三": 20844, "积极参与": 20845, "倡议": 20846, "ribution": 20847, "Post": 20848, "▁organisms": 20849, "语句": 20850, "perial": 20851, "名稱": 20852, "处理的": 20853, "fast": 20854, "aining": 20855, "Public": 20856, "又要": 20857, "▁enthus": 20858, "海南": 20859, "足够的": 20860, "是基于": 20861, "还包括": 20862, "秘书": 20863, "▁feels": 20864, "Ob": 20865, "为导向": 20866, "分成": 20867, "▁characterized": 20868, "tage": 20869, "izabeth": 20870, "etics": 20871, "羅斯": 20872, "▁Ill": 20873, "▁stable": 20874, "睡眠": 20875, "▁creativity": 20876, "▁Angeles": 20877, "lementary": 20878, "规制": 20879, "入手": 20880, "经济效益": 20881, "中央银行": 20882, "人之": 20883, "▁encounter": 20884, "▁municipality": 20885, "▁planned": 20886, "TE": 20887, "oT": 20888, "Gra": 20889, "▁exists": 20890, "起着": 20891, "的大小": 20892, "Create": 20893, "运维": 20894, "尤为": 20895, "为主体": 20896, "定性": 20897, "▁owned": 20898, "▁investigate": 20899, "贵族": 20900, "))": 20901, "列宁": 20902, "cies": 20903, "respectively": 20904, "布置": 20905, "制度改革": 20906, "发展新": 20907, "▁trained": 20908, "FA": 20909, "▁description": 20910, "▁encourages": 20911, "某某": 20912, "稳步": 20913, "自由贸易": 20914, "生产总": 20915, "中外": 20916, "dist": 20917, "▁funds": 20918, "便捷": 20919, "病情": 20920, "anning": 20921, "▁corner": 20922, "为核心的党中央": 20923, "野生": 20924, "▁nucle": 20925, "▁mg": 20926, "▁immediate": 20927, "bles": 20928, "教学方法": 20929, "是要": 20930, "和高": 20931, "社会学": 20932, "▁medal": 20933, "▁Of": 20934, "▁stores": 20935, "▁performing": 20936, "early": 20937, "▁Jews": 20938, "Long": 20939, "▁colour": 20940, "▁leaving": 20941, "▁branch": 20942, "Pol": 20943, "携带": 20944, "不易": 20945, "仓库": 20946, "LP": 20947, "有效性": 20948, "▁chair": 20949, "园林": 20950, "▁shall": 20951, "▁curren": 20952, "▁artificial": 20953, "arks": 20954, "这两种": 20955, "达到了": 20956, "这个问题": 20957, "atever": 20958, "次数": 20959, "▁Columbia": 20960, "▁nan": 20961, "体系中": 20962, "▁explains": 20963, "▁examination": 20964, "▁matrix": 20965, "▁exploration": 20966, "▁puzz": 20967, "▁channel": 20968, "asma": 20969, "明确规定": 20970, "交通运输": 20971, "▁detected": 20972, "是一项": 20973, "▁tracks": 20974, "▁abund": 20975, "▁foster": 20976, "▁holding": 20977, "▁entered": 20978, "▁Econom": 20979, "決賽": 20980, "▁compounds": 20981, "课程的": 20982, "▁friendly": 20983, "August": 20984, "攻关": 20985, "副主任": 20986, "收入分配": 20987, "修饰": 20988, "▁coffee": 20989, "uster": 20990, "▁industries": 20991, "▁suffer": 20992, "bot": 20993, "富有": 20994, "unc": 20995, "▁papers": 20996, "象征": 20997, "位的": 20998, "深度学习": 20999, "Est": 21000, "Several": 21001, "年中国": 21002, "平方米": 21003, "告知": 21004, "arity": 21005, "▁moments": 21006, "Play": 21007, "利用率": 21008, "与技术": 21009, "高效的": 21010, "▁cryst": 21011, "德國": 21012, "▁housing": 21013, "▁pup": 21014, "▁accuracy": 21015, "▁clothing": 21016, "笔者认为": 21017, "原来": 21018, "增进": 21019, "蕴含": 21020, "的成本": 21021, "科技成果": 21022, "多年来": 21023, "\"、": 21024, "▁Review": 21025, "年开始": 21026, "一定要": 21027, "▁Sol": 21028, "年级": 21029, "onym": 21030, "▁profile": 21031, "▁tub": 21032, "▁–": 21033, "▁vac": 21034, "▁arrang": 21035, "拉克": 21036, "▁controvers": 21037, "▁Children": 21038, "数字孪生": 21039, "一国": 21040, "异议": 21041, "杭州": 21042, "py": 21043, "iy": 21044, "减少了": 21045, "▁sheet": 21046, "resulting": 21047, "▁entertain": 21048, "icken": 21049, "绘制": 21050, "大使": 21051, "的对象": 21052, "▁manager": 21053, "年份": 21054, "▁recording": 21055, "peror": 21056, "流入": 21057, "远远": 21058, "生产率": 21059, "▁regulation": 21060, "社交": 21061, "OD": 21062, "oured": 21063, "▁introduce": 21064, "▁worse": 21065, "▁repair": 21066, "和对": 21067, "▁reserv": 21068, "Great": 21069, "▁Spain": 21070, "我们将": 21071, "▁affecting": 21072, "▁reveal": 21073, "▁colleagues": 21074, "Mart": 21075, "▁authorities": 21076, "Common": 21077, "Look": 21078, ";▁(": 21079, "whether": 21080, "协调发展": 21081, "预后": 21082, "公共卫生": 21083, "质疑": 21084, "▁outcome": 21085, "Louis": 21086, "▁criteria": 21087, "屬於": 21088, "是我们": 21089, "触发": 21090, "发现的": 21091, "▁Studies": 21092, "考生": 21093, "▁shaping": 21094, "师范大学": 21095, "▁smoke": 21096, "▁widespread": 21097, "可能的": 21098, "▁adj": 21099, "去除": 21100, "▁split": 21101, "Check": 21102, "▁acids": 21103, "▁politician": 21104, "▁agents": 21105, "▁aqu": 21106, "可控": 21107, "当下": 21108, "▁powers": 21109, "▁roof": 21110, "Throughout": 21111, "▁incredible": 21112, "ackson": 21113, "時期": 21114, "对应的": 21115, "插入": 21116, "必将": 21117, "一百": 21118, "▁Community": 21119, "arters": 21120, "▁Coast": 21121, "机床": 21122, "▁ceremon": 21123, "▁receiving": 21124, "陶瓷": 21125, "的指导": 21126, "▁healing": 21127, "urric": 21128, "Bo": 21129, "Mary": 21130, "常务": 21131, "▁destroyed": 21132, "▁cream": 21133, "姓名": 21134, "Bre": 21135, "▁Atlantic": 21136, "过的": 21137, "PV": 21138, "GC": 21139, "▁moral": 21140, "acles": 21141, "兼容": 21142, "局限性": 21143, "不在": 21144, "▁Ma": 21145, "▁Pet": 21146, "▁assigned": 21147, "▁routine": 21148, "▁simultaneously": 21149, "失效": 21150, "清除": 21151, "white": 21152, "HR": 21153, "▁hole": 21154, "▁bread": 21155, "dule": 21156, "▁ethical": 21157, "两年": 21158, "▁sight": 21159, "蔬菜": 21160, "教训": 21161, "的表达": 21162, "▁session": 21163, "▁authent": 21164, "▁silver": 21165, "▁laboratory": 21166, "振动": 21167, "处理器": 21168, "brid": 21169, "zy": 21170, "學院": 21171, "▁meters": 21172, "why": 21173, "BP": 21174, "客体": 21175, "▁accessible": 21176, "San": 21177, "▁poetry": 21178, "▁Wales": 21179, "Phil": 21180, "▁depos": 21181, "hma": 21182, "幼儿园": 21183, "找出": 21184, "了一种": 21185, "▁Women": 21186, "Science": 21187, "可以根据": 21188, "大力发展": 21189, "▁uns": 21190, "显微": 21191, "▁sought": 21192, "▁frame": 21193, "与中国": 21194, "环境和": 21195, "宽松": 21196, "ampl": 21197, "▁Creek": 21198, "HC": 21199, "ydr": 21200, "明代": 21201, "的前提下": 21202, "▁depart": 21203, "Activity": 21204, "▁Micro": 21205, "厚的": 21206, "会产生": 21207, "▁shoot": 21208, "annels": 21209, "▁examined": 21210, "伊斯": 21211, "句话": 21212, "tes": 21213, "河流": 21214, "▁barriers": 21215, "维生素": 21216, "壁垒": 21217, "不断完善": 21218, "碳中和": 21219, "Lesson": 21220, "电荷": 21221, "▁Dou": 21222, "▁Bra": 21223, "▁reform": 21224, "办事": 21225, "全省": 21226, "在社会": 21227, "新一轮": 21228, "nee": 21229, "时间和": 21230, "的比例": 21231, "可用于": 21232, "问题是": 21233, "▁Works": 21234, "▁orient": 21235, "根據": 21236, "▁Rh": 21237, "上级": 21238, "的出现": 21239, "新兴产业": 21240, "教学模式": 21241, "安全生产": 21242, "Dist": 21243, "▁expansion": 21244, "▁agencies": 21245, "未知": 21246, "▁conc": 21247, "employ": 21248, "Ang": 21249, "以下简称": 21250, "inus": 21251, "▁explo": 21252, "▁measurements": 21253, "的重点": 21254, "!\"▁": 21255, "▁merg": 21256, "ritis": 21257, "whel": 21258, "▁parameters": 21259, "▁Brown": 21260, "都需要": 21261, "控股": 21262, "▁operate": 21263, "▁visitors": 21264, "King": 21265, "author": 21266, "▁photo": 21267, "▁statistics": 21268, "ocket": 21269, "特別": 21270, "▁behaviour": 21271, "amber": 21272, "economic": 21273, "以习近平同志": 21274, "▁innovation": 21275, "otypes": 21276, "▁Represent": 21277, "inical": 21278, "▁purchase": 21279, "參與": 21280, "abs": 21281, "▁marg": 21282, "▁rivers": 21283, "▁females": 21284, "为中国": 21285, "修养": 21286, "国债": 21287, "徒刑": 21288, "▁advantages": 21289, "▁lights": 21290, "格斯": 21291, "不明": 21292, "Start": 21293, "严格的": 21294, "点和": 21295, "imensional": 21296, "▁glucose": 21297, "它在": 21298, "Mal": 21299, "▁bio": 21300, "裁定": 21301, "大纲": 21302, "的其他": 21303, "」(": 21304, "在一定程度上": 21305, "目标是": 21306, "▁stomach": 21307, "价值链": 21308, "损害赔偿": 21309, "全面深化改革": 21310, "▁>▁": 21311, "厘米": 21312, "会员": 21313, "▁drawn": 21314, "过滤": 21315, "atern": 21316, "Max": 21317, "多层次": 21318, "文化和": 21319, "▁fertil": 21320, "▁agree": 21321, "去世": 21322, "拓宽": 21323, "切除": 21324, "ersey": 21325, "▁branches": 21326, "ko": 21327, "▁obst": 21328, "合适的": 21329, "var": 21330, "isting": 21331, "▁crew": 21332, "▁adoles": 21333, "控制器": 21334, "ker": 21335, "▁tea": 21336, "▁holid": 21337, "千米": 21338, "▁Bob": 21339, "ntario": 21340, "▁province": 21341, "用电": 21342, "精神的": 21343, "多年的": 21344, "atial": 21345, "▁click": 21346, "▁warming": 21347, "igious": 21348, "节奏": 21349, "ema": 21350, "资源和": 21351, "▁epid": 21352, "▁Open": 21353, "届三中全会": 21354, "中的作用": 21355, "iability": 21356, "June": 21357, "icted": 21358, "首先要": 21359, "合一": 21360, "下一": 21361, "的全": 21362, "▁hem": 21363, "之間": 21364, "▁Disc": 21365, "▁pun": 21366, "半年": 21367, "先天": 21368, "抑制剂": 21369, "对该": 21370, "▁limits": 21371, "Micro": 21372, "▁complications": 21373, "ventually": 21374, "▁van": 21375, "▁gently": 21376, "奠定": 21377, "养成": 21378, "食品安全": 21379, "Port": 21380, "▁herself": 21381, "▁specialized": 21382, "讲授": 21383, "越来越多": 21384, "求是": 21385, "都市": 21386, "想法": 21387, "ito": 21388, "▁trouble": 21389, "China": 21390, "ediat": 21391, "并购": 21392, "文明的": 21393, "▁complicated": 21394, "學生": 21395, "看作": 21396, "Encou": 21397, "区间": 21398, "石墨": 21399, "毒性": 21400, "全面的": 21401, "里斯": 21402, "的优势": 21403, "CPU": 21404, "▁Richard": 21405, "abled": 21406, "承受": 21407, "▁dealing": 21408, "ommod": 21409, "MT": 21410, "▁mood": 21411, "▁ov": 21412, "与时": 21413, "管道": 21414, "▁contained": 21415, "idst": 21416, "▁Series": 21417, "ogenic": 21418, "▁||▁▁||▁": 21419, "▁zero": 21420, "MI": 21421, "丝绸之路": 21422, "▁equivalent": 21423, "组的": 21424, "和使用": 21425, "▁Ep": 21426, "函数的": 21427, "给学生": 21428, "意识和": 21429, "position": 21430, "▁captured": 21431, "▁flour": 21432, "▁lifestyle": 21433, "acher": 21434, "发挥着": 21435, "▁boys": 21436, "▁gro": 21437, "▁genus": 21438, "――": 21439, "▁percentage": 21440, "▁stimul": 21441, "Ev": 21442, "▁analys": 21443, "▁pure": 21444, "十年代": 21445, "ugh": 21446, "▁rocks": 21447, "敢于": 21448, "和控制": 21449, "▁formula": 21450, "holders": 21451, "比率": 21452, "是人类": 21453, "伴随着": 21454, "特征的": 21455, "所有者": 21456, "▁Scotland": 21457, "▁Acc": 21458, "▁cos": 21459, "▁insight": 21460, "当年": 21461, "日常生活": 21462, "农业农村": 21463, "合力": 21464, "Count": 21465, "▁advert": 21466, "ruit": 21467, "▁item": 21468, "文中": 21469, "钢铁": 21470, "不断发展": 21471, "GBT": 21472, "印象": 21473, "出身": 21474, "▁adventure": 21475, "▁Den": 21476, "绿色发展": 21477, "约定的": 21478, "在大": 21479, "的三": 21480, "▁See": 21481, "五大": 21482, "研究了": 21483, "Never": 21484, "▁activation": 21485, "成功的": 21486, "Social": 21487, "▁relief": 21488, "induced": 21489, "▁composed": 21490, "▁script": 21491, ":「": 21492, "纺织": 21493, "▁magazine": 21494, "▁bigger": 21495, "而上": 21496, "港口": 21497, "▁hus": 21498, "進士": 21499, "较好的": 21500, "其一": 21501, "▁negot": 21502, "itamin": 21503, "撰写": 21504, "▁)": 21505, "▁Hor": 21506, "施行": 21507, "浙江省": 21508, "制定了": 21509, "将来": 21510, "慈善": 21511, "rin": 21512, "技术与": 21513, "血症": 21514, "衰竭": 21515, "体系和": 21516, "对我国": 21517, "最好": 21518, "▁impossible": 21519, "▁ensuring": 21520, "病因": 21521, "▁drain": 21522, "▁mortality": 21523, "▁awarded": 21524, "▁league": 21525, "▁Step": 21526, "年初": 21527, "icit": 21528, "orado": 21529, "▁battery": 21530, "▁theore": 21531, "上世纪": 21532, "▁caught": 21533, "▁biggest": 21534, "▁smoking": 21535, "athered": 21536, "▁episodes": 21537, "必须在": 21538, "出现在": 21539, "▁fixed": 21540, "otton": 21541, "ador": 21542, "透过": 21543, "信号的": 21544, "ocolate": 21545, "Di": 21546, "ati": 21547, "▁category": 21548, "▁prev": 21549, "资产负债": 21550, "决定性": 21551, "▁rom": 21552, "▁influences": 21553, "Arch": 21554, "▁rice": 21555, "▁dish": 21556, "清代": 21557, "行政法规": 21558, "iti": 21559, "▁continuous": 21560, "的专业": 21561, "▁Team": 21562, "XX": 21563, "eoples": 21564, "aver": 21565, "▁crime": 21566, "▁Force": 21567, "▁fossil": 21568, "▁inhabit": 21569, "ja": 21570, "▁tack": 21571, "▁circle": 21572, "lessly": 21573, "农田": 21574, "represent": 21575, "定理": 21576, "入口": 21577, "oute": 21578, "natural": 21579, "▁nest": 21580, "▁Common": 21581, "贵州": 21582, "End": 21583, "Jo": 21584, "ustain": 21585, "▁trauma": 21586, "委員會": 21587, "\b\u0007": 21588, "举证": 21589, "越高": 21590, "破解": 21591, "澳门": 21592, "▁Airport": 21593, "▁External": 21594, "▁Nature": 21595, "ocracy": 21596, "▁produces": 21597, "两个方面": 21598, "甘肃": 21599, "umps": 21600, "children": 21601, "arg": 21602, "▁calcium": 21603, "▁spending": 21604, "door": 21605, "oln": 21606, "联储": 21607, "▁wisdom": 21608, "▁facility": 21609, "你的": 21610, "废水": 21611, "面前": 21612, "供电": 21613, "层级": 21614, "ycle": 21615, "的整体": 21616, "领导人": 21617, "灵魂": 21618, "mi": 21619, "▁Way": 21620, "▁reader": 21621, "ambiguation": 21622, "uted": 21623, "▁Eth": 21624, "onto": 21625, "▁Dutch": 21626, "的一些": 21627, "▁markets": 21628, "▁dishes": 21629, "▁expanded": 21630, "irc": 21631, "追踪": 21632, "税率": 21633, "柔性": 21634, "贬值": 21635, "人民检察院": 21636, "浏览": 21637, "otherapy": 21638, "只有在": 21639, "▁Hospital": 21640, "史料": 21641, "清华": 21642, "▁comparison": 21643, "▁mouse": 21644, "对社会": 21645, "▁efficiently": 21646, "的机会": 21647, "采用了": 21648, "▁tele": 21649, "▁Professor": 21650, "的一系列": 21651, "ude": 21652, "▁navigate": 21653, "特别是在": 21654, "stic": 21655, "Women": 21656, "体外": 21657, "各民族": 21658, "长期以来": 21659, "策划": 21660, "山水": 21661, "宣言": 21662, "oven": 21663, "原创": 21664, "▁subt": 21665, "▁cholesterol": 21666, "▁lect": 21667, "▁confirmed": 21668, "▁psychological": 21669, "党的建设": 21670, "▁Football": 21671, "▁Max": 21672, "°▁": 21673, "\")▁": 21674, "▁candidate": 21675, "pty": 21676, "Val": 21677, "▁stroke": 21678, "▁volcan": 21679, "▁certainly": 21680, "▁Disease": 21681, "SE": 21682, "▁mixture": 21683, "好处": 21684, "和政治": 21685, "ela": 21686, "mem": 21687, "▁regist": 21688, "熟练": 21689, "电机": 21690, "不断提升": 21691, "动手": 21692, "全新的": 21693, "▁sensitivity": 21694, "日的": 21695, "ocking": 21696, "法案": 21697, "▁、": 21698, "影响了": 21699, "灵活性": 21700, "同期": 21701, "全世界": 21702, "▁push": 21703, "▁videos": 21704, "▁Stat": 21705, "議員": 21706, "所致": 21707, "导师": 21708, "身心": 21709, "提升了": 21710, "Mil": 21711, "▁So": 21712, "yal": 21713, "▁reject": 21714, "想要": 21715, "words": 21716, "sis": 21717, "gian": 21718, "微信": 21719, "的传统": 21720, "均为": 21721, "▁Bet": 21722, "rolled": 21723, "求解": 21724, "▁meth": 21725, "消极": 21726, "积极的": 21727, "”、": 21728, "▁request": 21729, "empl": 21730, "tre": 21731, "pot": 21732, "時代": 21733, "BL": 21734, "俄国": 21735, "英格": 21736, "進入": 21737, "国企": 21738, "教师要": 21739, "发放": 21740, "创新发展": 21741, "▁examining": 21742, "▁surprise": 21743, "立方": 21744, "books": 21745, "极大的": 21746, "绝大多数": 21747, "新冠肺炎": 21748, "休闲": 21749, "make": 21750, "中華民國": 21751, "▁organs": 21752, "▁pra": 21753, "Maybe": 21754, "低温": 21755, "系统和": 21756, "发扬": 21757, "的实施": 21758, "▁constitu": 21759, "plement": 21760, "干涉": 21761, "▁islands": 21762, "▁bear": 21763, "family": 21764, "Music": 21765, "Mac": 21766, "▁angle": 21767, "▁Services": 21768, "adel": 21769, "▁basket": 21770, "▁ethnic": 21771, "agram": 21772, "▁allowing": 21773, "最終": 21774, "冬季": 21775, "▁sculpt": 21776, "确定了": 21777, "较好": 21778, "cyclop": 21779, "▁conversations": 21780, "政治局": 21781, "▁Dav": 21782, "枢纽": 21783, "▁dynamic": 21784, "單曲": 21785, "alling": 21786, "▁bat": 21787, "ometry": 21788, "International": 21789, "构成了": 21790, "lik": 21791, "准确性": 21792, "拓扑": 21793, "agen": 21794, "更快": 21795, "ega": 21796, "查看": 21797, "NT": 21798, "▁Oh": 21799, "战国": 21800, "========": 21801, "分数": 21802, "ongs": 21803, "▁reliable": 21804, "▁decade": 21805, "内蒙古": 21806, "▁satellite": 21807, "县级": 21808, "转基因": 21809, "或者其他": 21810, "保险公司": 21811, "Scientists": 21812, "▁returns": 21813, "▁facilitate": 21814, "▁Hot": 21815, "不知": 21816, "airy": 21817, "意外": 21818, "遭遇": 21819, "aylor": 21820, "▁Queen": 21821, "EV": 21822, "诉求": 21823, "以下几": 21824, "社会治理": 21825, "增殖": 21826, "▁preparation": 21827, "Prov": 21828, "▁contributed": 21829, "anic": 21830, "废弃": 21831, "救援": 21832, "高血压": 21833, "在这里": 21834, "机场": 21835, "itory": 21836, "▁Att": 21837, "▁fing": 21838, "hemistry": 21839, "alleng": 21840, "应用场景": 21841, "近似": 21842, "▁contributions": 21843, "neys": 21844, "▁participation": 21845, "▁knowing": 21846, "pes": 21847, "aya": 21848, "清偿": 21849, "和市场": 21850, ",▁▁": 21851, "phib": 21852, "演员": 21853, "的控制": 21854, "▁bron": 21855, "yes": 21856, ")\"": 21857, "分区": 21858, "列车": 21859, "党派": 21860, ":"": 21861, "为企业": 21862, "rier": 21863, "起了": 21864, "来进行": 21865, "▁fro": 21866, "▁sentences": 21867, "▁principle": 21868, "▁turb": 21869, "bell": 21870, "▁officer": 21871, "上面": 21872, "▁conflicts": 21873, "▁frequent": 21874, "纲领": 21875, "结构性改革": 21876, "必须坚持": 21877, "人力资本": 21878, "思想和": 21879, "发展中": 21880, "operation": 21881, "网格": 21882, "▁persons": 21883, "UK": 21884, "名单": 21885, "科普": 21886, "内核": 21887, "flamm": 21888, "确立了": 21889, "期徒刑": 21890, "▁dent": 21891, "占领": 21892, "▁Sund": 21893, "▁Martin": 21894, "美洲": 21895, "telling": 21896, "候选": 21897, "间隔": 21898, "和国家": 21899, "▁difficulties": 21900, "take": 21901, "还应": 21902, "敌人": 21903, "全球经济": 21904, "三个方面": 21905, "▁preserve": 21906, "alm": 21907, "▁desc": 21908, "▁disrupt": 21909, "合伙": 21910, "性别": 21911, "aret": 21912, "▁districts": 21913, "具有一定的": 21914, "战线": 21915, "不仅要": 21916, "检察机关": 21917, "ioxide": 21918, "▁troops": 21919, "一致性": 21920, "编译": 21921, "prot": 21922, "▁wheel": 21923, "▁objective": 21924, "aterials": 21925, "▁concrete": 21926, "关键技术": 21927, "各部门": 21928, "▁intense": 21929, "▁absol": 21930, "▁considering": 21931, "▁moisture": 21932, "▁quiet": 21933, "▁tap": 21934, "交易所": 21935, "数据处理": 21936, "Rad": 21937, "▁learners": 21938, "以外的": 21939, "▁strain": 21940, "▁▁▁▁▁▁▁": 21941, "break": 21942, "▁Family": 21943, "▁stuff": 21944, "三次": 21945, "机制的": 21946, "黑色": 21947, "▁experimental": 21948, "osion": 21949, "IDS": 21950, "全面从严": 21951, "夯实": 21952, "拉动": 21953, "问题和": 21954, "应该是": 21955, "yan": 21956, "▁Card": 21957, "▁strengthen": 21958, "划分为": 21959, "ila": 21960, "▁insurance": 21961, "▁concerned": 21962, "▁issued": 21963, "learning": 21964, "完善的": 21965, "核心素养": 21966, "为人民": 21967, "并不能": 21968, "冠状": 21969, "▁Secret": 21970, "为实现": 21971, "地说": 21972, "Three": 21973, "common": 21974, "▁combat": 21975, "French": 21976, "▁adm": 21977, "disambiguation": 21978, "ping": 21979, "印发": 21980, "合同法": 21981, "研究团队": 21982, "▁shut": 21983, "▁Championship": 21984, "ctu": 21985, "宿主": 21986, "▁Viet": 21987, "▁classic": 21988, "▁pursu": 21989, "数据和": 21990, "其主要": 21991, "▁fashion": 21992, "▁greatly": 21993, "财务管理": 21994, "授课": 21995, "恶化": 21996, "辽宁": 21997, "▁correctly": 21998, "广泛应用": 21999, "▁encouraged": 22000, "▁consumers": 22001, "所属": 22002, "失衡": 22003, "环境污染": 22004, "季节": 22005, "涌现": 22006, "二元": 22007, "▁Province": 22008, "Year": 22009, "RP": 22010, "actions": 22011, "监护": 22012, "FF": 22013, "▁collective": 22014, "▁kilomet": 22015, "▁males": 22016, "▁operated": 22017, "inch": 22018, "▁Ol": 22019, "在国家": 22020, "但不": 22021, "▁neurons": 22022, "osqu": 22023, "ragon": 22024, "▁greenhouse": 22025, "▁robot": 22026, "下行": 22027, "共生": 22028, "当局": 22029, "▁Rom": 22030, "\")": 22031, "Mass": 22032, "▁investigation": 22033, "burgh": 22034, "习近平总书记指出": 22035, "思潮": 22036, "会议上": 22037, "究竟": 22038, "以习近平同志为核心的党中央": 22039, "技术的发展": 22040, "despite": 22041, "SQL": 22042, "▁Guide": 22043, "陈述": 22044, "Br": 22045, "▁coach": 22046, "step": 22047, "opher": 22048, "这种方法": 22049, "胚胎": 22050, "量和": 22051, "think": 22052, "etime": 22053, "ypically": 22054, "▁solving": 22055, "集團": 22056, "在实践中": 22057, "密切相关": 22058, "采样": 22059, "▁Liter": 22060, "小麦": 22061, "▁therapeutic": 22062, "▁Writ": 22063, "vin": 22064, "▁researc": 22065, "▁owner": 22066, "读书": 22067, "关键词": 22068, "ymb": 22069, "▁unable": 22070, "bb": 22071, "▁emerging": 22072, "language": 22073, "大局": 22074, "会对": 22075, "的地": 22076, "▁ring": 22077, "也被": 22078, "yet": 22079, "▁nervous": 22080, "▁seasons": 22081, "▁faces": 22082, "提问": 22083, "▁manif": 22084, "▁ampl": 22085, "▁threatened": 22086, "alter": 22087, "case": 22088, "的表现": 22089, "申请人": 22090, "美联储": 22091, "当代中国": 22092, "▁integrated": 22093, "戏剧": 22094, "Leg": 22095, "▁accommod": 22096, "▁Los": 22097, "▁transp": 22098, "▁effectiveness": 22099, "用户的": 22100, "▁coastal": 22101, "▁identifying": 22102, "April": 22103, "数控": 22104, "Sarah": 22105, "而成": 22106, "▁finger": 22107, "▁hel": 22108, "ushed": 22109, "emet": 22110, "▁lens": 22111, "都不": 22112, "归属": 22113, "的有": 22114, "Develop": 22115, "▁exciting": 22116, "重大的": 22117, "视网膜": 22118, "学分": 22119, "语法": 22120, "bean": 22121, "在本": 22122, "Peter": 22123, "藝術": 22124, "▁traits": 22125, "inction": 22126, "erus": 22127, "自学": 22128, "這些": 22129, "单位的": 22130, "▁prove": 22131, "Windows": 22132, "▁giant": 22133, "Inf": 22134, "违背": 22135, "▁obesity": 22136, "是非常": 22137, "acebook": 22138, "▁abandon": 22139, "▁Er": 22140, "%,▁": 22141, "歐洲": 22142, "▁plane": 22143, "原型": 22144, "________": 22145, "父亲": 22146, "等内容": 22147, "▁discussing": 22148, "做的": 22149, "▁providers": 22150, "▁Age": 22151, "的计算": 22152, "▁complexity": 22153, "也需要": 22154, "一号": 22155, "发展趋势": 22156, "▁nic": 22157, "▁Young": 22158, "背后": 22159, "第一百": 22160, "考验": 22161, "保护和": 22162, "应力": 22163, "▁flower": 22164, "▁Blue": 22165, "汉字": 22166, "▁gram": 22167, "▁safely": 22168, "▁targets": 22169, "电站": 22170, "hard": 22171, "▁gap": 22172, "▁gent": 22173, "▁incorporate": 22174, "▁incorporating": 22175, "师资": 22176, "共产党的": 22177, "畅通": 22178, "意识到": 22179, "流失": 22180, "纵向": 22181, "真实性": 22182, "经济学家": 22183, "字符": 22184, "上了": 22185, "▁Korea": 22186, "▁empathy": 22187, "發生": 22188, "支援": 22189, "领导的": 22190, "政府部门": 22191, "出土": 22192, "大地": 22193, "的处理": 22194, "首席": 22195, "ussion": 22196, "▁adds": 22197, "▁Francisco": 22198, "在教学": 22199, "战后": 22200, "▁possibility": 22201, "▁turning": 22202, "薄膜": 22203, "▁Gr": 22204, "▁intest": 22205, "▁translation": 22206, "▁initiatives": 22207, "▁protective": 22208, "付款": 22209, "▁Gree": 22210, "▁membrane": 22211, "something": 22212, "贯通": 22213, "就没有": 22214, "three": 22215, "的重": 22216, "公告": 22217, "▁variations": 22218, "▁owners": 22219, "iva": 22220, "骨干": 22221, "这些问题": 22222, "再到": 22223, "原有的": 22224, "凭证": 22225, "▁keeps": 22226, "between": 22227, "elihood": 22228, "▁Hy": 22229, "卓越": 22230, "▁sister": 22231, "▁intellectual": 22232, "生活方式": 22233, "当事人的": 22234, "财经": 22235, "之日起": 22236, "NASA": 22237, "TT": 22238, "埃及": 22239, "得多": 22240, "线索": 22241, "▁escape": 22242, "mus": 22243, "为本": 22244, "不移": 22245, "运河": 22246, "▁exhibit": 22247, "▁passing": 22248, "减小": 22249, "▁stake": 22250, "▁Story": 22251, "大臣": 22252, "当时的": 22253, "thur": 22254, "ailing": 22255, "appro": 22256, "加快推进": 22257, "应有": 22258, "短缺": 22259, "灵敏": 22260, "▁evolved": 22261, "itage": 22262, "forcement": 22263, "har": 22264, "▁interventions": 22265, "among": 22266, "ishment": 22267, "具有重要意义": 22268, "pson": 22269, "erior": 22270, "▁hop": 22271, "直流": 22272, "高质量发展的": 22273, "▁minimize": 22274, "▁neck": 22275, "封装": 22276, "Java": 22277, "▁IV": 22278, "▁approved": 22279, "主義": 22280, "ibraries": 22281, "▁newspaper": 22282, "等一系列": 22283, "rous": 22284, "UTC": 22285, "▁thread": 22286, "▁earthqu": 22287, "itual": 22288, "DE": 22289, "▁overwhel": 22290, "海水": 22291, "did": 22292, "分之一": 22293, "▁mathematical": 22294, "不予": 22295, "中国式现代化": 22296, "萎缩": 22297, "领土": 22298, "规范化": 22299, "日军": 22300, "Plus": 22301, "干燥": 22302, "ga": 22303, "MC": 22304, "▁hydrogen": 22305, "▁tens": 22306, "▁artistic": 22307, "▁Windows": 22308, "sign": 22309, "▁guard": 22310, "法则": 22311, "的一切": 22312, "▁IP": 22313, "▁commitment": 22314, "Having": 22315, "▁Cat": 22316, "十三五": 22317, "人事": 22318, "前瞻": 22319, "传授": 22320, "削弱": 22321, "融合发展": 22322, "塞尔": 22323, "那里": 22324, "类似于": 22325, "Cor": 22326, "发生变化": 22327, "▁dose": 22328, "▁spots": 22329, "isode": 22330, "incoln": 22331, "orses": 22332, "▁shad": 22333, "hum": 22334, "以来的": 22335, "开展了": 22336, "▁tel": 22337, "fessional": 22338, "▁grid": 22339, "▁frog": 22340, "▁tube": 22341, "未有": 22342, "▁Film": 22343, "▁filter": 22344, "党建": 22345, "省委": 22346, "乾隆": 22347, "构筑": 22348, "ocument": 22349, "▁Under": 22350, "列为": 22351, "▁contamin": 22352, "ruption": 22353, "ontal": 22354, "scientists": 22355, "until": 22356, "▁tip": 22357, "▁websites": 22358, "▁memories": 22359, "▁scores": 22360, "Main": 22361, "新征程": 22362, "配备": 22363, "▁outer": 22364, "道理": 22365, "他们在": 22366, "▁meaningful": 22367, "cribe": 22368, "▁opinion": 22369, "论的": 22370, "lt": 22371, "▁waiting": 22372, "▁earn": 22373, "起步": 22374, "▁calculate": 22375, "主角": 22376, "斯基": 22377, "atching": 22378, "▁Indigenous": 22379, "SL": 22380, "▁pharm": 22381, "▁watching": 22382, "▁emotion": 22383, "yo": 22384, "学历": 22385, "议题": 22386, "国际合作": 22387, "知识点": 22388, "▁difficulty": 22389, "一部": 22390, "可以是": 22391, "演示": 22392, "weet": 22393, "Being": 22394, "iodiversity": 22395, "千年": 22396, "缓存": 22397, "▁expressions": 22398, "服从": 22399, "靶向": 22400, "混乱": 22401, "习近平总书记在": 22402, "数据分析": 22403, "umni": 22404, "inners": 22405, "▁ru": 22406, "Miss": 22407, "into": 22408, "▁measurement": 22409, "Fin": 22410, "stery": 22411, "运转": 22412, "▁racial": 22413, "灾难": 22414, "文档": 22415, "    ": 22416, "▁Bul": 22417, "▁gradually": 22418, "本质上": 22419, "ortion": 22420, "elly": 22421, "▁philosophy": 22422, "published": 22423, "▁tumors": 22424, "DO": 22425, "▁attended": 22426, "PN": 22427, "三农": 22428, "评分": 22429, "深层次": 22430, "诊疗": 22431, "全面建成小康社会": 22432, "▁acute": 22433, "使用了": 22434, "Place": 22435, "▁buried": 22436, "▁excessive": 22437, "▁Agency": 22438, "psy": 22439, "长时间": 22440, "▁Joseph": 22441, "▁Little": 22442, "无人机": 22443, "▁sched": 22444, "▁toys": 22445, "▁Railway": 22446, "iger": 22447, "巴西": 22448, "▁Gall": 22449, "和中国": 22450, "than": 22451, "越来越多的": 22452, "东亚": 22453, "▁Mur": 22454, "备份": 22455, "统计学": 22456, "中科院": 22457, "▁digest": 22458, "法律责任": 22459, "违规": 22460, "社会组织": 22461, "的力量": 22462, "均有": 22463, "国王": 22464, "helial": 22465, "iner": 22466, "广西": 22467, "▁microsc": 22468, "▁dates": 22469, "▁archae": 22470, "▁workshe": 22471, "nor": 22472, "质量的": 22473, "▁Books": 22474, "可能导致": 22475, "▁windows": 22476, "lower": 22477, "Cap": 22478, "雕塑": 22479, "有限的": 22480, "▁mechanical": 22481, "足以": 22482, "Charles": 22483, "agers": 22484, "▁babies": 22485, "▁bonds": 22486, "▁colonial": 22487, "acco": 22488, "▁distributed": 22489, "红利": 22490, "内部的": 22491, "摄影": 22492, "▁comprom": 22493, "▁uncertain": 22494, "四种": 22495, "▁concentrations": 22496, "▁plenty": 22497, "友好": 22498, "▁Order": 22499, "gender": 22500, "▁Forest": 22501, "上游": 22502, "决心": 22503, "Mult": 22504, "▁launch": 22505, "▁beings": 22506, "年到": 22507, "pred": 22508, "Air": 22509, "▁mode": 22510, "情报": 22511, "基础研究": 22512, "▁Method": 22513, "▁finds": 22514, "▁intricate": 22515, "▁realize": 22516, "▁publication": 22517, "▁myster": 22518, "革新": 22519, "丢失": 22520, "传染病": 22521, "▁roads": 22522, "▁treating": 22523, "western": 22524, "▁Systems": 22525, "▁vocabulary": 22526, "▁cab": 22527, "惩罚": 22528, "衰退": 22529, "▁driver": 22530, "▁chest": 22531, "▁screening": 22532, "淘汰": 22533, "▁brows": 22534, "叠加": 22535, "▁cul": 22536, "▁losing": 22537, "▁remarkable": 22538, "的反": 22539, "▁Top": 22540, "oids": 22541, "ilson": 22542, "星期": 22543, "▁societies": 22544, "评定": 22545, "放电": 22546, "来自于": 22547, "随意": 22548, "OH": 22549, "▁editor": 22550, "此前": 22551, "暂时": 22552, "▁delay": 22553, "▁remind": 22554, "裁决": 22555, "蓬勃": 22556, "有哪些": 22557, "三十": 22558, "▁Assembly": 22559, "MB": 22560, "▁novels": 22561, "▁Tim": 22562, "牢牢": 22563, "cient": 22564, "Consequently": 22565, "▁substantial": 22566, "▁sharp": 22567, "Dan": 22568, "動畫": 22569, "或不": 22570, "宋代": 22571, "老龄": 22572, "将成为": 22573, "的情形": 22574, "eenth": 22575, "▁surve": 22576, "▁restaur": 22577, "LAN": 22578, "▁classical": 22579, "emetery": 22580, "共振": 22581, "rine": 22582, "组装": 22583, "ordinary": 22584, "▁debate": 22585, "ologic": 22586, "▁bath": 22587, "▁indicated": 22588, "olds": 22589, "omatic": 22590, "个人信息保护": 22591, "压迫": 22592, "的改革": 22593, "发表在": 22594, "中国古代": 22595, "berry": 22596, "▁dioxide": 22597, "▁observe": 22598, "▁Ast": 22599, "白色": 22600, "food": 22601, "言之": 22602, "投资的": 22603, "▁estimate": 22604, "▁handling": 22605, "▁identification": 22606, "写入": 22607, "ipe": 22608, "asses": 22609, "▁flows": 22610, "▁partn": 22611, "坚强": 22612, "勇于": 22613, "之道": 22614, "因其": 22615, "Att": 22616, "原因是": 22617, "标准和": 22618, "card": 22619, "断裂": 22620, "上皮": 22621, "imals": 22622, "▁channels": 22623, "节省": 22624, "▁pand": 22625, "War": 22626, "▁Boston": 22627, "▁parallel": 22628, "最大化": 22629, "轨迹": 22630, "讲述": 22631, "▁tables": 22632, "路線": 22633, "Due": 22634, "斯科": 22635, "▁strongly": 22636, "▁flavor": 22637, "迄今": 22638, "Design": 22639, "SN": 22640, "下去": 22641, "两岸": 22642, "其余": 22643, "的最高": 22644, "▁respiratory": 22645, "▁reaching": 22646, "July": 22647, "January": 22648, "潜在的": 22649, "總統": 22650, "注释": 22651, "▁presents": 22652, "▁equation": 22653, "▁ped": 22654, "分开": 22655, "进出口": 22656, "生态文明建设": 22657, "目标和": 22658, "有什么": 22659, "有其": 22660, "改良": 22661, "apse": 22662, "可达": 22663, "公園": 22664, "▁mob": 22665, "阿拉伯": 22666, "的物质": 22667, "▁joy": 22668, "God": 22669, "下载": 22670, "arios": 22671, "学科的": 22672, "是企业": 22673, "里程": 22674, "生物多样性": 22675, "艰苦": 22676, "飞跃": 22677, "生产总值": 22678, "并以": 22679, "的细胞": 22680, "engine": 22681, "\",▁\"": 22682, "ello": 22683, "▁tut": 22684, "伴随": 22685, "鐵道": 22686, "oa": 22687, "语义": 22688, "],": 22689, "Pop": 22690, "中华优秀传统文化": 22691, "市场上": 22692, "实事求是": 22693, "新模式": 22694, "▁kidney": 22695, "iture": 22696, "havior": 22697, "▁tension": 22698, "低成本": 22699, "存在的问题": 22700, "的经验": 22701, "百万": 22702, "emb": 22703, "▁falls": 22704, "heimer": 22705, "UT": 22706, "lav": 22707, "治理体系和": 22708, "伟大的": 22709, "边缘计算": 22710, "甲状": 22711, "缴纳": 22712, "怀疑": 22713, "▁relation": 22714, "目前的": 22715, "名為": 22716, "梯度": 22717, "ospitals": 22718, "▁tons": 22719, "ometric": 22720, "▁mic": 22721, "ME": 22722, "基本原理": 22723, "▁biology": 22724, "▁targeted": 22725, "▁officers": 22726, "在这些": 22727, "饱和": 22728, "经贸": 22729, "▁algorithms": 22730, "music": 22731, "hedule": 22732, "ivities": 22733, "▁transferred": 22734, "▁Festival": 22735, "olicy": 22736, "DI": 22737, "track": 22738, "神话": 22739, "传送": 22740, "▁COVID": 22741, "▁senior": 22742, "▁supplement": 22743, "neg": 22744, "星系": 22745, "金融风险": 22746, "扣除": 22747, "被害": 22748, "创新驱动": 22749, "规避": 22750, "例外": 22751, "的共同": 22752, "成立了": 22753, "yroid": 22754, "Food": 22755, "itting": 22756, "综上": 22757, "▁union": 22758, "▁scientist": 22759, "▁veter": 22760, "Cur": 22761, "operative": 22762, "unior": 22763, "设备和": 22764, "同盟": 22765, "空中": 22766, "▁twenty": 22767, "现代农业": 22768, "的伟大": 22769, "在世界": 22770, "atoes": 22771, ")-": 22772, "Sing": 22773, "▁Democratic": 22774, "置于": 22775, "邮件": 22776, "康熙": 22777, "繁殖": 22778, "icating": 22779, "▁sizes": 22780, "▁Administration": 22781, "以及其他": 22782, "顶层设计": 22783, "链条": 22784, "▁Down": 22785, "▁server": 22786, "iginal": 22787, "▁structural": 22788, "▁More": 22789, "School": 22790, "引力": 22791, "认定为": 22792, "▁fever": 22793, "amins": 22794, "▁hormone": 22795, "▁adequate": 22796, "▁IL": 22797, "色列": 22798, "发酵": 22799, "中医药": 22800, "public": 22801, "用作": 22802, "为人": 22803, "▁draft": 22804, "▁principal": 22805, "▁featuring": 22806, "▁Bab": 22807, "Best": 22808, "▁Ec": 22809, "有待": 22810, "坚定不移": 22811, "发作": 22812, "▁designated": 22813, "▁immigr": 22814, "▁domain": 22815, "▁blog": 22816, "反之": 22817, "固醇": 22818, "▁carb": 22819, "▁inspiration": 22820, "▁protecting": 22821, "▁visiting": 22822, "▁wouldn": 22823, "金山": 22824, "▁Ver": 22825, "改革开放以来": 22826, "日趋": 22827, "实效": 22828, "的理念": 22829, "AF": 22830, "▁argue": 22831, "SI": 22832, "▁Pres": 22833, "imensions": 22834, "Real": 22835, "Choose": 22836, "让人": 22837, "碎片": 22838, "股份有限公司": 22839, "▁Wall": 22840, ")▁▁": 22841, "▁algorithm": 22842, "September": 22843, "ouri": 22844, "医疗卫生": 22845, "人类命运共同体": 22846, "课时": 22847, "收费": 22848, "港澳": 22849, "群体的": 22850, "▁carrying": 22851, "▁gone": 22852, "▁practicing": 22853, "ERP": 22854, ".▁[": 22855, "▁council": 22856, "▁curious": 22857, "thereby": 22858, "定向": 22859, "和研究": 22860, "的自然": 22861, "重要性": 22862, "学研究": 22863, "可供": 22864, "mult": 22865, "engers": 22866, "变局": 22867, "并与": 22868, "北京大学": 22869, "权人": 22870, "▁exec": 22871, "others": 22872, "vard": 22873, "▁expertise": 22874, "▁feeding": 22875, "▁minerals": 22876, "▁recommendations": 22877, "邀请": 22878, "Cs": 22879, "名的": 22880, "▁suscept": 22881, "▁laid": 22882, "外界": 22883, "▁mand": 22884, "German": 22885, "海拔": 22886, "▁stere": 22887, "▁experiencing": 22888, "伴有": 22889, "的价格": 22890, "程序的": 22891, "这两": 22892, "▁intent": 22893, "▁prompt": 22894, "▁phenomenon": 22895, "动画": 22896, "pers": 22897, "觉得": 22898, "Mo": 22899, "▁Det": 22900, "▁objectives": 22901, "▁Radio": 22902, "writing": 22903, "外科": 22904, "▁excit": 22905, "▁claimed": 22906, "上层": 22907, "处理好": 22908, "冠军": 22909, "Exper": 22910, "▁tank": 22911, "▁preferences": 22912, "bow": 22913, "▁displ": 22914, "重塑": 22915, "介石": 22916, "▁Light": 22917, "如果没有": 22918, "itely": 22919, "▁impl": 22920, "▁Director": 22921, "她的": 22922, "面積": 22923, "管理体制": 22924, "发言": 22925, "欣赏": 22926, "前面": 22927, "▁poison": 22928, "▁vocals": 22929, "▁danger": 22930, "stant": 22931, "這個": 22932, "▁inequ": 22933, "▁lie": 22934, "高速公路": 22935, "学界": 22936, "cat": 22937, "手法": 22938, "▁suffered": 22939, ":《": 22940, "▁elder": 22941, "供给侧结构性改革": 22942, "脊髓": 22943, "▁Pub": 22944, "eller": 22945, "▁settlement": 22946, "oga": 22947, "成立的": 22948, "aints": 22949, "▁curiosity": 22950, "骨髓": 22951, "regular": 22952, "球隊": 22953, "▁cardiovascular": 22954, "▁Ret": 22955, "朝廷": 22956, "坏死": 22957, "颠覆": 22958, "▁Kh": 22959, "andy": 22960, "▁chose": 22961, "不如": 22962, "Bas": 22963, "▁ce": 22964, "Avoid": 22965, "otor": 22966, "▁consumer": 22967, "内需": 22968, "这与": 22969, "展望": 22970, "▁Psych": 22971, "通過": 22972, "发展规划": 22973, "▁passage": 22974, "月台": 22975, "端的": 22976, "RN": 22977, "心的": 22978, "azon": 22979, "GPS": 22980, "▁shaped": 22981, "▁temple": 22982, "定义为": 22983, "Po": 22984, "ennis": 22985, "读取": 22986, "同一个": 22987, "决赛": 22988, "▁profound": 22989, "金融监管": 22990, "干旱": 22991, "模具": 22992, "素质教育": 22993, "市场需求": 22994, "相关性": 22995, "图谱": 22996, "▁errors": 22997, "者在": 22998, "除外": 22999, "aki": 23000, "HP": 23001, "▁improvements": 23002, "人民为中心": 23003, "工程技术": 23004, "和历史": 23005, "中国社会": 23006, "非物质": 23007, "▁printed": 23008, "▁usual": 23009, "的最佳": 23010, "human": 23011, "▁Portug": 23012, "▁rect": 23013, "▁hypothesis": 23014, "▁capabilities": 23015, "▁mir": 23016, "腐蚀": 23017, "强烈的": 23018, "殖民地": 23019, "▁Head": 23020, "file": 23021, "克隆": 23022, "其所": 23023, "资讯": 23024, "歧视": 23025, "陆续": 23026, "哪里": 23027, "Richard": 23028, "▁holes": 23029, "▁mur": 23030, "▁physics": 23031, ";\"": 23032, "正面": 23033, "为目的": 23034, "全面建设社会主义现代化": 23035, "宏观调控": 23036, "课程思政": 23037, "思想政治教育": 23038, "搜集": 23039, "▁Historic": 23040, "日志": 23041, "▁mining": 23042, "▁applying": 23043, "▁breeding": 23044, "限定": 23045, "vestig": 23046, "size": 23047, ")》": 23048, "reens": 23049, "▁committed": 23050, "权利的": 23051, "更容易": 23052, "▁Child": 23053, "▁possibly": 23054, "▁bene": 23055, "数据进行": 23056, "Washington": 23057, "Mus": 23058, "akistan": 23059, "地位和": 23060, "在整个": 23061, "排斥": 23062, "▁heads": 23063, "India": 23064, "发力": 23065, "增高": 23066, "抓好": 23067, "天线": 23068, "肝脏": 23069, "成员国": 23070, "行政部门": 23071, "与企业": 23072, "Total": 23073, "check": 23074, "▁crick": 23075, "Nor": 23076, "ysics": 23077, "itled": 23078, "▁theories": 23079, "尼亞": 23080, "渐进": 23081, "全书": 23082, "ools": 23083, "向前": 23084, "比亚": 23085, "官僚": 23086, "延安": 23087, "育种": 23088, "过敏": 23089, "结果显示": 23090, "▁Python": 23091, "leased": 23092, "▁wish": 23093, "overnor": 23094, "可信": 23095, "显现": 23096, "▁fr": 23097, "several": 23098, "这是一个": 23099, "支架": 23100, "plex": 23101, "▁Free": 23102, "igue": 23103, "Del": 23104, "公司法": 23105, "与实践": 23106, "创新型": 23107, "俱进": 23108, "因此在": 23109, "▁isolated": 23110, "▁maybe": 23111, "omers": 23112, "Google": 23113, "ounce": 23114, "▁agent": 23115, "isted": 23116, "yer": 23117, "▁gly": 23118, "▁seg": 23119, "ientific": 23120, "cos": 23121, "▁sitting": 23122, "gress": 23123, "▁farming": 23124, "用药": 23125, "发挥作用": 23126, "减弱": 23127, "基础知识": 23128, "上一": 23129, "热带": 23130, "ritical": 23131, "▁instances": 23132, "▁minds": 23133, "為了": 23134, "新发展格局": 23135, "韧性": 23136, "班级": 23137, "胰岛素": 23138, "的增长": 23139, "心灵": 23140, "▁Special": 23141, "▁panel": 23142, "Often": 23143, "总的": 23144, "学问": 23145, "性格": 23146, "以色列": 23147, "▁linear": 23148, "Ext": 23149, "▁connecting": 23150, "▁desire": 23151, "▁representing": 23152, "▁tales": 23153, "本法": 23154, "法律制度": 23155, "氨基酸": 23156, "▁liv": 23157, "它可以": 23158, "mal": 23159, "tem": 23160, "Introduction": 23161, "import": 23162, "占用": 23163, "运行的": 23164, "氧化物": 23165, "底层": 23166, "配送": 23167, "平台的": 23168, "ewis": 23169, "▁Jersey": 23170, "▁Engineering": 23171, "▁Coll": 23172, "ardless": 23173, "选项": 23174, "▁beneath": 23175, "▁uniform": 23176, "自强": 23177, "国有资产": 23178, "不用": 23179, "流体": 23180, "▁gut": 23181, "plot": 23182, "的分": 23183, "▁Will": 23184, "▁fairly": 23185, "▁minute": 23186, "▁furn": 23187, "rep": 23188, "amination": 23189, "Germany": 23190, "本次": 23191, "▁Environmental": 23192, "Modern": 23193, "電視劇": 23194, "▁arise": 23195, "許多": 23196, "Notes": 23197, "▁CE": 23198, "基本原则": 23199, "从此": 23200, "操纵": 23201, "还在": 23202, "▁asp": 23203, "▁interactive": 23204, "▁constantly": 23205, "▁sustainability": 23206, "vanced": 23207, "率和": 23208, "节目": 23209, "Afric": 23210, "Rob": 23211, "izz": 23212, "▁census": 23213, "是与": 23214, "神经系统": 23215, "约翰": 23216, "▁Ven": 23217, "▁forth": 23218, "▁matches": 23219, "▁arrest": 23220, "▁norms": 23221, "▁listing": 23222, "片段": 23223, "▁alike": 23224, "▁wearing": 23225, ")=": 23226, "新发展理念": 23227, "不断增强": 23228, "订单": 23229, "基建": 23230, "▁alive": 23231, "agraph": 23232, "rait": 23233, "▁necessarily": 23234, "onents": 23235, "▁marks": 23236, "▁Edward": 23237, ",'▁": 23238, "▁husband": 23239, "包含了": 23240, "rip": 23241, "Tom": 23242, "▁nod": 23243, "自主学习": 23244, "紧紧": 23245, "发展到": 23246, "有针对": 23247, "与时俱进": 23248, "followed": 23249, "”;": 23250, "相连": 23251, "▁Wil": 23252, "▁reput": 23253, "▁Exper": 23254, "▁gast": 23255, "▁Over": 23256, "▁surge": 23257, "omal": 23258, "▁<▁": 23259, "▁container": 23260, "迎来": 23261, "人际": 23262, "摄像": 23263, "問題": 23264, "是其": 23265, "狭窄": 23266, "▁magical": 23267, "▁quarter": 23268, "upreme": 23269, "導演": 23270, "民主主义": 23271, "而被": 23272, "或许": 23273, "很高": 23274, "代表性": 23275, "tr": 23276, "劳动争议": 23277, "Sum": 23278, "▁Ap": 23279, "▁oxid": 23280, "Free": 23281, "▁sad": 23282, "▁acknowled": 23283, "▁heating": 23284, "内生": 23285, "食用": 23286, "urches": 23287, "瑞典": 23288, "entially": 23289, "▁nob": 23290, "▁wound": 23291, "题目": 23292, "▁Corpor": 23293, "结晶": 23294, "▁Mah": 23295, "公斤": 23296, "▁tract": 23297, "凭借": 23298, "阻塞": 23299, "four": 23300, "合法性": 23301, "▁config": 23302, "▁varying": 23303, "直播": 23304, "Organ": 23305, "一度": 23306, "friendly": 23307, "▁edges": 23308, "▁Mountain": 23309, "各族人民": 23310, "很强的": 23311, "▁hall": 23312, "并为": 23313, "得到的": 23314, "▁intra": 23315, "▁coron": 23316, "▁Castle": 23317, "▁spark": 23318, "Sign": 23319, "▁migration": 23320, "▁inherent": 23321, "拍卖": 23322, "math": 23323, "▁fu": 23324, "ersion": 23325, "▁literacy": 23326, "olves": 23327, "和安全": 23328, "自律": 23329, "问卷": 23330, "的艺术": 23331, "return": 23332, "much": 23333, "及相关": 23334, "区域的": 23335, "一组": 23336, "主要由": 23337, "▁corresponding": 23338, "urolog": 23339, "的作品": 23340, "第一章": 23341, "经济建设": 23342, "活化": 23343, "中心的": 23344, "▁intern": 23345, "▁inher": 23346, "▁false": 23347, "在中": 23348, "▁Rem": 23349, "核酸": 23350, "erman": 23351, "▁compris": 23352, "▁estimates": 23353, "auc": 23354, "heric": 23355, "GO": 23356, "▁Jul": 23357, "▁rid": 23358, "ouses": 23359, "miss": 23360, "WTO": 23361, "管理与": 23362, "净化": 23363, "竞争优势": 23364, "调制": 23365, "▁mathematics": 23366, "以确保": 23367, "Pe": 23368, "heart": 23369, "innes": 23370, "机构和": 23371, "沿线": 23372, "▁calculated": 23373, "▁dialogue": 23374, "▁Af": 23375, "人为本": 23376, "由此可见": 23377, "政治经济学": 23378, "内容和": 23379, "广东省": 23380, "理性的": 23381, "这对": 23382, "服务于": 23383, "梦想": 23384, "▁Girl": 23385, ".▁.▁": 23386, "▁*▁": 23387, "參見": 23388, "这将": 23389, "的程度": 23390, "▁absence": 23391, "▁strange": 23392, "助理": 23393, "ocytes": 23394, "▁Naz": 23395, "学前": 23396, "五四": 23397, "等相关": 23398, "学校的": 23399, "日前": 23400, "问题上": 23401, "aware": 23402, "▁implemented": 23403, "▁tact": 23404, "Figure": 23405, "▁measuring": 23406, "▁ille": 23407, "▁paintings": 23408, "化疗": 23409, "在进行": 23410, "Connect": 23411, "eness": 23412, "▁Dar": 23413, "地形": 23414, "▁athletes": 23415, "▁Sat": 23416, "▁pathways": 23417, "试题": 23418, "一线": 23419, "明清": 23420, "iki": 23421, "▁demands": 23422, "▁engines": 23423, "▁estate": 23424, "##▁": 23425, "第二章": 23426, "。」": 23427, "器和": 23428, "以太": 23429, "采访": 23430, "设有": 23431, "anna": 23432, "。▁▁": 23433, "▁mitig": 23434, "文物保护单位": 23435, "传统产业": 23436, "脆弱": 23437, "俄羅斯": 23438, "高性能": 23439, "參加": 23440, "基督教": 23441, "▁defense": 23442, "charge": 23443, "地进行": 23444, "Four": 23445, "athan": 23446, "▁Global": 23447, "▁shares": 23448, "USA": 23449, "▁intrig": 23450, "▁equally": 23451, "▁mountains": 23452, "ederation": 23453, "万物": 23454, "极限": 23455, "分析方法": 23456, "White": 23457, "中对": 23458, "VA": 23459, "▁magic": 23460, "纽约": 23461, "▁refuge": 23462, "adder": 23463, "注意力": 23464, "医师": 23465, "▁Report": 23466, "regon": 23467, "angered": 23468, "▁stead": 23469, "▁voltage": 23470, "其中包括": 23471, "▁burning": 23472, "▁celebrate": 23473, "▁solely": 23474, "▁Vis": 23475, "▁Four": 23476, "心理健康": 23477, "另有": 23478, "证明了": 23479, "opyright": 23480, "▁intensity": 23481, "▁resid": 23482, "▁lighting": 23483, "▁overcome": 23484, "ateral": 23485, "江南": 23486, "接着": 23487, "恩格斯": 23488, "▁tower": 23489, "亞洲": 23490, "营商": 23491, "竞争力的": 23492, "增加值": 23493, "最高的": 23494, "Fi": 23495, "roud": 23496, "▁Men": 23497, "消毒": 23498, "附属": 23499, "acob": 23500, "▁oldest": 23501, "▁victims": 23502, "教研": 23503, "连带": 23504, "我们必须": 23505, "▁customer": 23506, "Write": 23507, "Tw": 23508, "zer": 23509, "可知": 23510, "结果的": 23511, "©▁": 23512, "升值": 23513, "可以分为": 23514, "和政策": 23515, "缺血": 23516, "适应性": 23517, "国际社会": 23518, "Pen": 23519, "olt": 23520, "▁gathered": 23521, "focus": 23522, "收藏": 23523, "使用者": 23524, "空间的": 23525, "愿望": 23526, "Law": 23527, "▁guarant": 23528, "ranch": 23529, "▁Jack": 23530, "▁Other": 23531, "▁coverage": 23532, "▁finish": 23533, "新聞": 23534, "Coll": 23535, "瑞士": 23536, "几十": 23537, "薪酬": 23538, "预报": 23539, "要加强": 23540, "调试": 23541, "模板": 23542, "▁evening": 23543, "▁excited": 23544, "▁bag": 23545, "▁biom": 23546, "▁neutral": 23547, "▁peoples": 23548, "▁accurately": 23549, "▁ritual": 23550, "▁probability": 23551, "▁His": 23552, "France": 23553, "look": 23554, "del": 23555, "▁ecosystems": 23556, "。[": 23557, "的态度": 23558, "为指导": 23559, "电能": 23560, "过多": 23561, "欺诈": 23562, "完成的": 23563, "alian": 23564, "histor": 23565, "中国人民解放军": 23566, "▁Fred": 23567, "edu": 23568, "▁Cancer": 23569, "▁broadcast": 23570, "▁trick": 23571, "▁interpretation": 23572, "anied": 23573, "昭和": 23574, "三级": 23575, "▁robust": 23576, "德里": 23577, "▁Bridge": 23578, "▁modified": 23579, "权重": 23580, "更重要的是": 23581, "案件的": 23582, "是由于": 23583, "▁wooden": 23584, "▁Modern": 23585, "判定": 23586, "根基": 23587, "▁concerning": 23588, "位点": 23589, "条第": 23590, "马克思主义中国": 23591, "治理体系和治理能力": 23592, "业主": 23593, "公务员": 23594, "应以": 23595, "现阶段": 23596, "要从": 23597, "的治疗": 23598, "RO": 23599, "▁appeal": 23600, "联赛": 23601, "▁preventing": 23602, "▁scenes": 23603, "cultural": 23604, "也不是": 23605, "做出了": 23606, "▁Philipp": 23607, "Little": 23608, "haust": 23609, "▁calm": 23610, "▁acting": 23611, "▁declared": 23612, "▁nose": 23613, "▁()▁": 23614, "更具": 23615, "周恩": 23616, "展览": 23617, "公允": 23618, "分别是": 23619, "ctive": 23620, "课题组": 23621, "▁cleaning": 23622, "▁grows": 23623, "▁purchased": 23624, "▁rats": 23625, "▁involvement": 23626, "明白": 23627, "业务的": 23628, "fire": 23629, "Texas": 23630, "Smith": 23631, "ioxid": 23632, "酒店": 23633, "▁diameter": 23634, "可以使用": 23635, "uns": 23636, "倾斜": 23637, "装配": 23638, "并无": 23639, "潜能": 23640, "偿还": 23641, "实在": 23642, "武帝": 23643, "yself": 23644, "▁cellular": 23645, ":(": 23646, "皇家": 23647, "▁enhanced": 23648, "自动驾驶": 23649, "分別": 23650, "innesota": 23651, "▁epit": 23652, "▁proved": 23653, "rub": 23654, "▁integration": 23655, "党的二十": 23656, "供需": 23657, "开发利用": 23658, "范围的": 23659, "sey": 23660, "羽毛": 23661, "终于": 23662, "項目": 23663, "▁asthma": 23664, "▁fishing": 23665, "live": 23666, "▁attempts": 23667, "▁Mid": 23668, "结构调整": 23669, "皮质": 23670, "▁Media": 23671, "▁RNA": 23672, "▁conclusion": 23673, "does": 23674, "second": 23675, "▁defend": 23676, "▁supposed": 23677, "date": 23678, "▁spectrum": 23679, "▁sensors": 23680, "税法": 23681, "蒋介石": 23682, "月至": 23683, "▁toy": 23684, "rock": 23685, "Off": 23686, "oons": 23687, "▁dependent": 23688, "卡尔": 23689, "▁viruses": 23690, "▁precise": 23691, "和不": 23692, "自然界": 23693, "Supp": 23694, "process": 23695, "▁visited": 23696, "到期": 23697, "的综合": 23698, "过失": 23699, "有很多": 23700, "的统一": 23701, "▁tight": 23702, "▁analyzed": 23703, "▁phrase": 23704, "▁preserving": 23705, "▁recover": 23706, "feed": 23707, "荷兰": 23708, "Que": 23709, "▁Fire": 23710, "▁engineers": 23711, "lecting": 23712, "轻松": 23713, "据此": 23714, "也许": 23715, "被视为": 23716, "science": 23717, "他说": 23718, "用工": 23719, "临床试验": 23720, "每个人": 23721, "何种": 23722, "公共利益": 23723, "林业": 23724, "有无": 23725, "还可": 23726, "bul": 23727, "除此": 23728, "iants": 23729, "Ig": 23730, "▁Bu": 23731, "信道": 23732, "要想": 23733, "December": 23734, "國民": 23735, "▁studio": 23736, "Ill": 23737, "同比增长": 23738, "人民民主": 23739, "附录": 23740, "大胆": 23741, "并存": 23742, "essment": 23743, "impro": 23744, "open": 23745, "east": 23746, "issance": 23747, "please": 23748, "▁varieties": 23749, "外来": 23750, "▁personality": 23751, "▁delivered": 23752, "▁wellbeing": 23753, "千瓦": 23754, "犯罪嫌疑": 23755, "投影": 23756, "汉族": 23757, "▁overs": 23758, "法典": 23759, "年和": 23760, "adelph": 23761, "▁weapons": 23762, "ogenesis": 23763, "→▁": 23764, "线下": 23765, "是社会": 23766, "天主教": 23767, "itzer": 23768, "▁Buddh": 23769, "▁Ur": 23770, "示例": 23771, "sum": 23772, "▁renewable": 23773, "▁technological": 23774, "▁extend": 23775, "Journal": 23776, "龙江": 23777, "結果": 23778, "ui": 23779, "▁Ohio": 23780, "riculture": 23781, "▁putting": 23782, "▁criminal": 23783, "》.": 23784, "和处理": 23785, "经营管理": 23786, "增量": 23787, "仔细": 23788, "和生产": 23789, "每日": 23790, "▁Lee": 23791, "▁employment": 23792, "▁flying": 23793, "▁harder": 23794, "▁Natural": 23795, "制造商": 23796, "顾问": 23797, "器械": 23798, "聚合物": 23799, "BD": 23800, "▁Prize": 23801, "▁Kong": 23802, "▁Lim": 23803, "。$": 23804, "座谈": 23805, "我国在": 23806, "▁banks": 23807, "Members": 23808, "▁mini": 23809, "pur": 23810, "formance": 23811, "选择性": 23812, "焊接": 23813, "和组织": 23814, "强制性": 23815, "输送": 23816, "▁conven": 23817, "▁satisf": 23818, "▁consideration": 23819, "以下几个方面": 23820, "分层": 23821, "余额": 23822, "淀粉": 23823, "基础性": 23824, "except": 23825, "Lar": 23826, "leton": 23827, "▁cash": 23828, "itively": 23829, "▁displayed": 23830, "▁Main": 23831, "▁Corn": 23832, "▁secre": 23833, "shaped": 23834, "以实现": 23835, "ividuals": 23836, "understanding": 23837, "▁calories": 23838, "▁lungs": 23839, "青春": 23840, ".|": 23841, "产品质量": 23842, "国家战略": 23843, "設有": 23844, "▁pregnant": 23845, "▁proceed": 23846, "▁qualities": 23847, "▁scenarios": 23848, "blem": 23849, "Ask": 23850, "td": 23851, "小說": 23852, "世界观": 23853, "可以帮助": 23854, "Ser": 23855, "缓冲": 23856, "cn": 23857, "October": 23858, "storm": 23859, "ippi": 23860, "▁Holy": 23861, "感受到": 23862, "因地": 23863, "纳税人": 23864, "屏障": 23865, "保险人": 23866, "还将": 23867, "parts": 23868, "ovement": 23869, "MRI": 23870, "▁rising": 23871, "Nature": 23872, "Personal": 23873, "▁legislation": 23874, "低的": 23875, "和国际": 23876, "個人": 23877, "resses": 23878, "▁tempor": 23879, "犯罪的": 23880, "儒学": 23881, "一个国家": 23882, "▁streets": 23883, "etherlands": 23884, "数据传输": 23885, "▁variation": 23886, "▁cancers": 23887, "▁wine": 23888, "一份": 23889, "出任": 23890, "隐藏": 23891, "Sal": 23892, "iments": 23893, "▁disaster": 23894, "文化建设": 23895, "密集型": 23896, "adelphia": 23897, "▁Rich": 23898, "vance": 23899, "▁aged": 23900, "▁contributes": 23901, "其二": 23902, "准确地": 23903, "互联互通": 23904, "理论基础": 23905, "不可避免": 23906, "沿着": 23907, "汇聚": 23908, "确定性": 23909, "身上": 23910, "heat": 23911, "▁Resources": 23912, "行政区划": 23913, "雖然": 23914, "仍然是": 23915, "为基础的": 23916, "▁beat": 23917, "尼斯": 23918, "▁attach": 23919, "▁shop": 23920, "▁cav": 23921, "▁Luc": 23922, "不容": 23923, "所说的": 23924, "工伤": 23925, "Pa": 23926, "▁Heart": 23927, "jud": 23928, "ieve": 23929, "(,),": 23930, "公元前": 23931, "foot": 23932, "iop": 23933, "amous": 23934, "▁pathway": 23935, "分析与": 23936, "即在": 23937, "胎儿": 23938, "我们对": 23939, "research": 23940, "▁dominant": 23941, "▁extraordinary": 23942, "人員": 23943, "ika": 23944, "▁Justice": 23945, "金融业": 23946, "为重点": 23947, "增强了": 23948, "边际": 23949, "进入了": 23950, "▁reviews": 23951, ":“": 23952, "▁Expl": 23953, "的最终": 23954, "这是因为": 23955, "▁stones": 23956, "男女": 23957, "unn": 23958, "igma": 23959, "本体": 23960, "广场": 23961, "伯特": 23962, "Does": 23963, "▁batt": 23964, "▁minimal": 23965, "俱乐": 23966, "临界": 23967, "▁limitations": 23968, "▁narrative": 23969, "utely": 23970, "▁possibilities": 23971, "State": 23972, "遏制": 23973, "▁galax": 23974, "ictional": 23975, "文的": 23976, "▁subsequently": 23977, "仅有": 23978, "这么": 23979, "浪潮": 23980, "否认": 23981, "体重": 23982, "▁tick": 23983, "累积": 23984, "▁memor": 23985, "uer": 23986, "月的": 23987, "▁deploy": 23988, "第三章": 23989, "宅基地": 23990, "摄入": 23991, "课外": 23992, "ymptoms": 23993, "▁forg": 23994, "▁origins": 23995, "▁client": 23996, "描绘": 23997, "▁surg": 23998, "▁pounds": 23999, "pm": 24000, "▁vessel": 24001, "民事诉讼": 24002, "饲料": 24003, "中枢": 24004, "恰当": 24005, "热量": 24006, "教会": 24007, "较快": 24008, "治疗的": 24009, "西洋": 24010, "▁champions": 24011, "▁elections": 24012, "▁functioning": 24013, "\t\t\t\t": 24014, "▁Ken": 24015, "▁executive": 24016, "itarian": 24017, "▁panels": 24018, "会出现": 24019, "▁ordinary": 24020, "cap": 24021, "Gold": 24022, "诗人": 24023, "Contin": 24024, "▁Hon": 24025, "▁emphasis": 24026, "▁sacr": 24027, "▁resc": 24028, "淋巴结": 24029, "eld": 24030, "首位": 24031, "用以": 24032, "負責": 24033, "Ca": 24034, "▁clock": 24035, "▁mineral": 24036, "avery": 24037, "▁proven": 24038, "▁amidst": 24039, "▁vibrant": 24040, "raine": 24041, "谨慎": 24042, "致病": 24043, "▁lingu": 24044, "asm": 24045, "grade": 24046, "inflamm": 24047, "adding": 24048, "▁destruction": 24049, "November": 24050, "▁actively": 24051, "▁identities": 24052, "▁Ram": 24053, "”,“": 24054, "\n  ": 24055, "文化产业": 24056, "零部件": 24057, "着眼于": 24058, "水土": 24059, "制宜": 24060, "智库": 24061, "清醒": 24062, "诱发": 24063, "时机": 24064, "选拔": 24065, "国会": 24066, "综述": 24067, "▁Championships": 24068, "标本": 24069, "▁clients": 24070, "Super": 24071, "下了": 24072, "也应": 24073, "曾任": 24074, "盲目": 24075, "Canadian": 24076, "zheimer": 24077, "▁breaking": 24078, "▁marginal": 24079, "ighth": 24080, "support": 24081, "▁vector": 24082, "事件的": 24083, "物业": 24084, "水质": 24085, "离散": 24086, "规格": 24087, "不仅仅是": 24088, "角膜": 24089, "▁±": 24090, "十字": 24091, "Which": 24092, "▁Conference": 24093, "▁focusing": 24094, "▁Two": 24095, "▁Ext": 24096, "olis": 24097, "▁Type": 24098, "▁removal": 24099, "▁adapted": 24100, "低收入": 24101, "清理": 24102, "超出": 24103, "PCR": 24104, "年后": 24105, "火山": 24106, "▁gentle": 24107, "賽事": 24108, "大夫": 24109, "第三次": 24110, "▁forming": 24111, "▁maintained": 24112, "▁Enter": 24113, "dy": 24114, "的重要内容": 24115, "专制": 24116, "损耗": 24117, "和环境": 24118, "根据地": 24119, "中国人": 24120, "构成的": 24121, "ricks": 24122, "either": 24123, "Na": 24124, "▁automatically": 24125, "▁personnel": 24126, "的土地": 24127, "▁neural": 24128, "将是": 24129, "▁Baron": 24130, "amie": 24131, "▁steam": 24132, "新的历史": 24133, "必修": 24134, "权利人": 24135, "设想": 24136, "望远": 24137, "illage": 24138, "▁fur": 24139, "aven": 24140, "inals": 24141, "古老": 24142, "▁purs": 24143, "▁OF": 24144, "TH": 24145, "存量": 24146, "等多个": 24147, "签名": 24148, "精细": 24149, "色的": 24150, "▁clothes": 24151, "▁indeed": 24152, "▁physically": 24153, "uties": 24154, "NE": 24155, "Young": 24156, "画面": 24157, "▁breaks": 24158, "▁disturb": 24159, "roc": 24160, "▁rac": 24161, "lation": 24162, "能动": 24163, "制裁": 24164, "基石": 24165, "生态保护": 24166, "design": 24167, "▁spr": 24168, "母亲": 24169, "▁victory": 24170, "村庄": 24171, "max": 24172, "播出": 24173, "rowth": 24174, "▁pairs": 24175, "▁Field": 24176, "照明": 24177, "ener": 24178, "▁entering": 24179, "▁portray": 24180, "不大": 24181, "荣誉": 24182, "Direct": 24183, "▁shed": 24184, "。。": 24185, "SW": 24186, "新业态": 24187, "绿色低碳": 24188, "品德": 24189, "底线": 24190, "见解": 24191, "感性": 24192, "固定的": 24193, "Within": 24194, "▁Area": 24195, "eh": 24196, "Win": 24197, "alo": 24198, "显微镜": 24199, "的语言": 24200, "▁titles": 24201, "▁computing": 24202, "医学院": 24203, "也包括": 24204, "ournament": 24205, "▁beta": 24206, "▁warning": 24207, "▁Far": 24208, "的联系": 24209, "实地": 24210, "高新技术": 24211, "水肿": 24212, "源泉": 24213, "的现实": 24214, "uther": 24215, "Without": 24216, "▁interior": 24217, "▁passes": 24218, "士兵": 24219, "争论": 24220, "忠诚": 24221, "点击": 24222, "▁Pot": 24223, "iah": 24224, "▁dispar": 24225, "可行性": 24226, "面貌": 24227, "之地": 24228, "的基因": 24229, "更改": 24230, "大事": 24231, "could": 24232, "ceptions": 24233, "▁audio": 24234, "▁availability": 24235, "和地方": 24236, "会使": 24237, "备案": 24238, "的必要": 24239, "组分": 24240, "以提高": 24241, "的评价": 24242, "的服务": 24243, "comb": 24244, "▁Imp": 24245, "▁transformation": 24246, "inte": 24247, "Frank": 24248, "▁Security": 24249, "▁convert": 24250, "▁vel": 24251, "▁button": 24252, "Dou": 24253, "捕获": 24254, "性质的": 24255, "▁requiring": 24256, "▁establishments": 24257, "形势下": 24258, "医疗服务": 24259, "基础教育": 24260, "大幅度": 24261, "一词": 24262, "▁Michigan": 24263, "▁villages": 24264, "▁grant": 24265, "▁earliest": 24266, "▁fulf": 24267, "▁Die": 24268, "山区": 24269, "gradu": 24270, "suggest": 24271, "▁determination": 24272, "RD": 24273, "公平正义": 24274, "即便": 24275, "束缚": 24276, "他人的": 24277, "▁progression": 24278, "▁earned": 24279, "izers": 24280, "inging": 24281, "▁EU": 24282, "都具有": 24283, "估算": 24284, "本身的": 24285, "网关": 24286, "发表了": 24287, "变量的": 24288, "人口的": 24289, "ession": 24290, "perhaps": 24291, "▁enthusias": 24292, "▁explanation": 24293, "戰爭": 24294, "有期徒刑": 24295, "细胞中": 24296, "中国共产党领导": 24297, "外观": 24298, "away": 24299, "aque": 24300, "▁Scottish": 24301, "Australia": 24302, "▁inhabitants": 24303, "教堂": 24304, "sit": 24305, "重力": 24306, "和个人": 24307, "公安机关": 24308, "所学": 24309, "临床表现": 24310, "隐性": 24311, "常识": 24312, "帝国主义": 24313, "转移到": 24314, "▁compound": 24315, "拍摄": 24316, "amiliar": 24317, "孤立": 24318, "▁flash": 24319, "ois": 24320, "交换机": 24321, "有一定的": 24322, "▁Change": 24323, "▁sever": 24324, "▁printing": 24325, "quest": 24326, "▁royal": 24327, "▁highlights": 24328, "▁carcin": 24329, "▁versus": 24330, "ptic": 24331, "年夏季奥林匹克运动会": 24332, "图的": 24333, "石墨烯": 24334, "观察到": 24335, "▁orbit": 24336, "催生": 24337, "州的": 24338, "ampion": 24339, "氧气": 24340, "▁enemy": 24341, "水量": 24342, ".'▁": 24343, "▁appreciation": 24344, "▁Region": 24345, "既然": 24346, "理论体系": 24347, "▁festival": 24348, "望远镜": 24349, "为何": 24350, "▁thousand": 24351, "rav": 24352, "吉林": 24353, "为目标": 24354, "▁voices": 24355, "导入": 24356, "▁assessed": 24357, "rizona": 24358, "职业技能": 24359, "理想信念": 24360, "严密": 24361, "也存在": 24362, "并进行": 24363, "acqu": 24364, "rame": 24365, "▁rose": 24366, "▁Sign": 24367, "▁curve": 24368, "同类": 24369, "过去的": 24370, "▁musicians": 24371, "sens": 24372, "inates": 24373, "once": 24374, "Regular": 24375, "▁Stan": 24376, "六年": 24377, "图表": 24378, "制度建设": 24379, "医疗机构": 24380, "与传统": 24381, "担心": 24382, "一人": 24383, "▁Lead": 24384, "▁conj": 24385, "ictions": 24386, "▁fung": 24387, "▁engineer": 24388, "necess": 24389, "▁embra": 24390, "awn": 24391, "sters": 24392, "CF": 24393, "出版的": 24394, "是个": 24395, "ricted": 24396, "▁authentic": 24397, "▁Bow": 24398, "▁tor": 24399, "團體": 24400, "所产生的": 24401, "操作性": 24402, "党政": 24403, "▁Bal": 24404, "BO": 24405, "%~": 24406, "解散": 24407, "▁Point": 24408, "Human": 24409, "issippi": 24410, "▁slavery": 24411, "聯合": 24412, "牢固": 24413, "均可": 24414, "重量": 24415, "icture": 24416, "▁Jeff": 24417, "▁ton": 24418, "▁cats": 24419, "anti": 24420, "lan": 24421, "治安": 24422, "民营企业": 24423, "收入的": 24424, "可持续发展的": 24425, "权力的": 24426, "民族的": 24427, "▁Highway": 24428, "▁consume": 24429, "本研究": 24430, "▁elevated": 24431, "Down": 24432, "edge": 24433, "▁etc": 24434, "▁evaluated": 24435, "neum": 24436, "otional": 24437, "在这种情况下": 24438, "波长": 24439, "应收": 24440, "影响到": 24441, "药物的": 24442, "京津": 24443, "手中": 24444, "世纪初": 24445, "成熟的": 24446, "▁temporary": 24447, "▁contributing": 24448, "▁dietary": 24449, "大陸": 24450, "不稳定": 24451, "类似的": 24452, "妻子": 24453, "eras": 24454, "fall": 24455, "▁Week": 24456, "▁Bat": 24457, "增长率": 24458, "植入": 24459, "▁disabilities": 24460, "網站": 24461, "▁observation": 24462, "umer": 24463, "▁cord": 24464, "物料": 24465, "叙述": 24466, "显示出": 24467, "▁blind": 24468, "depending": 24469, "▁households": 24470, "▁chances": 24471, "▁ordered": 24472, "mates": 24473, "▁fingers": 24474, "旅行": 24475, "▁footballers": 24476, "▁separated": 24477, "运营商": 24478, "terior": 24479, "ez": 24480, "▁Carl": 24481, "European": 24482, "▁Aff": 24483, "}{": 24484, "艰巨": 24485, "公主": 24486, "Scott": 24487, "的两": 24488, "▁fifth": 24489, "▁Marc": 24490, "▁Cub": 24491, "▁impair": 24492, "和解": 24493, "▁Ham": 24494, "▁Game": 24495, "控制和": 24496, "效用": 24497, "▁hardware": 24498, "▁stopped": 24499, "rial": 24500, "iating": 24501, "▁Trust": 24502, "asant": 24503, "▁ly": 24504, "严谨": 24505, "供求": 24506, "贫血": 24507, "▁incident": 24508, "▁collections": 24509, "共和國": 24510, "prene": 24511, "▁thermal": 24512, "已經": 24513, "▁Inc": 24514, "还存在": 24515, "被迫": 24516, "igher": 24517, "▁physician": 24518, "▁reward": 24519, "▁fostering": 24520, "計劃": 24521, "▁Real": 24522, "Sil": 24523, "icting": 24524, "设计与": 24525, "学员": 24526, "辉煌": 24527, "内部审计": 24528, "本来": 24529, "▁Santa": 24530, "少的": 24531, "画家": 24532, "並且": 24533, "▁Kent": 24534, "编号": 24535, "▁arguments": 24536, "ouds": 24537, "gence": 24538, "dam": 24539, "Sk": 24540, "性原则": 24541, "进一步提高": 24542, "不了": 24543, "提醒": 24544, "影片": 24545, "配音": 24546, "技術": 24547, "eder": 24548, "▁medieval": 24549, "▁roughly": 24550, "光明": 24551, "保全": 24552, "试验区": 24553, "历代": 24554, "化学反应": 24555, "溶剂": 24556, "在一些": 24557, "二世": 24558, "艺术家": 24559, "▁myself": 24560, "exts": 24561, "yard": 24562, "▁directions": 24563, "▁routes": 24564, "湿度": 24565, "关注的": 24566, "reprene": 24567, "”.": 24568, "领袖": 24569, "▁Heritage": 24570, "cur": 24571, "ynasty": 24572, "uz": 24573, "wind": 24574, "\u0006\u0006": 24575, "全面从严治党": 24576, "之内": 24577, "征求": 24578, "科举": 24579, "product": 24580, "一般来说": 24581, "以及对": 24582, "功夫": 24583, "凝胶": 24584, "即是": 24585, "播放": 24586, "有趣": 24587, "▁preparing": 24588, "▁whenever": 24589, "生物质": 24590, "▁prospect": 24591, "名词": 24592, "财物": 24593, "看待": 24594, "阐述了": 24595, "企业管理": 24596, "致的": 24597, "之初": 24598, "高峰": 24599, "用例": 24600, "明治": 24601, "水分": 24602, "▁wat": 24603, "ogy": 24604, "源自": 24605, "front": 24606, "是非": 24607, "开发和": 24608, "空白": 24609, "▁Analysis": 24610, "ibli": 24611, "ercise": 24612, "▁obstacles": 24613, "社会保险": 24614, "趋于": 24615, "整治": 24616, "▁Tour": 24617, "?**": 24618, "是指在": 24619, "概论": 24620, "的实验": 24621, "仅为": 24622, "aze": 24623, "ediatric": 24624, "▁Olympic": 24625, "cence": 24626, "▁horses": 24627, "行政行为": 24628, "有关规定": 24629, "范围内的": 24630, "▁Jones": 24631, "▁losses": 24632, "▁chocolate": 24633, "Power": 24634, "▁schedule": 24635, "▁Jan": 24636, "▁flexible": 24637, "▁reaches": 24638, "building": 24639, "February": 24640, "建设工程": 24641, "集体经济": 24642, "长效": 24643, "的事实": 24644, "打通": 24645, "御史": 24646, "的主要内容": 24647, "补助": 24648, "▁assets": 24649, "发布了": 24650, "▁drinks": 24651, "▁laser": 24652, "Know": 24653, "best": 24654, "▁)▁": 24655, "细胞和": 24656, "通过了": 24657, "改制": 24658, "这样一个": 24659, "题材": 24660, "素材": 24661, "▁Night": 24662, "▁semi": 24663, "▁equality": 24664, "▁tough": 24665, "▁debt": 24666, "▁Base": 24667, "▁id": 24668, "uts": 24669, "行政处罚": 24670, "理论研究": 24671, "ailable": 24672, "原来的": 24673, "精心": 24674, "▁infect": 24675, "kind": 24676, "▁Fact": 24677, "▁Business": 24678, "orb": 24679, "elfare": 24680, "▁Know": 24681, "可以实现": 24682, "知识分子": 24683, "▁juice": 24684, "incorpor": 24685, "▁legend": 24686, "should": 24687, "▁balanced": 24688, "▁Survey": 24689, "自然保护": 24690, "规划和": 24691, "施加": 24692, "青藏": 24693, "▁explored": 24694, "▁vegetation": 24695, "▁suit": 24696, "▁mosqu": 24697, "▁planets": 24698, "▁dipl": 24699, "中国在": 24700, "相等": 24701, "之际": 24702, "杂交": 24703, "▁dropped": 24704, "▁willing": 24705, "的事": 24706, "iations": 24707, "Top": 24708, "▁kin": 24709, "Type": 24710, "、《": 24711, "主要矛盾": 24712, "银行的": 24713, "举例": 24714, "消费者的": 24715, "起草": 24716, "北宋": 24717, "抓手": 24718, "可以为": 24719, "▁classified": 24720, "▁vertical": 24721, "门槛": 24722, "▁Boy": 24723, "Prot": 24724, "Ber": 24725, "Japanese": 24726, "▁transmit": 24727, "▁contribution": 24728, "];": 24729, "村落": 24730, "ranean": 24731, "▁fought": 24732, "▁suddenly": 24733, "▁shock": 24734, "inition": 24735, "土耳": 24736, "ivo": 24737, "▁preferred": 24738, "中华文明": 24739, "更要": 24740, "亲自": 24741, "充分的": 24742, "温室气体": 24743, "政府在": 24744, "▁Fer": 24745, "▁dollars": 24746, "▁selling": 24747, "日本的": 24748, "总部": 24749, "▁Author": 24750, "▁induced": 24751, "achine": 24752, "apped": 24753, "▁ownership": 24754, "安全和": 24755, "天的": 24756, "功耗": 24757, "owa": 24758, "商人": 24759, "▁This": 24760, "iscons": 24761, "▁illustrate": 24762, "中长期": 24763, "尚不": 24764, "银行业": 24765, "废除": 24766, "▁dimensions": 24767, "▁moderate": 24768, "▁Cre": 24769, "状态的": 24770, "將軍": 24771, "▁Charl": 24772, "elve": 24773, "aug": 24774, "▁viral": 24775, "▁spoken": 24776, "Small": 24777, "▁struggles": 24778, "届全国人大": 24779, "相位": 24780, "各界": 24781, "周恩来": 24782, "aneous": 24783, "学和": 24784, "▁arter": 24785, "相邻": 24786, "▁loop": 24787, "isconsin": 24788, "▁globe": 24789, "俱乐部": 24790, "水中": 24791, "精英": 24792, "的主题": 24793, "FM": 24794, "umns": 24795, "電子": 24796, "▁binding": 24797, "爱国主义": 24798, "复发": 24799, "产业集群": 24800, "数十": 24801, "见于": 24802, "综合素质": 24803, "赤字": 24804, "视力": 24805, "一直是": 24806, "教室": 24807, "党员干部": 24808, "分歧": 24809, "▁analyt": 24810, "arming": 24811, "▁wonderful": 24812, "決定": 24813, "▁combine": 24814, "▁taxes": 24815, "asis": 24816, "代理人": 24817, "黑龙江": 24818, "总局": 24819, "火灾": 24820, "特点是": 24821, "最好的": 24822, "▁manual": 24823, "▁campus": 24824, "共性": 24825, "中国特色社会主义制度": 24826, "发展与": 24827, "管理等": 24828, "健康的": 24829, "什么样的": 24830, "船舶": 24831, "similar": 24832, "án": 24833, "agnetic": 24834, "▁Georgia": 24835, "▁Show": 24836, "成品": 24837, "通常是": 24838, "▁diagnostic": 24839, "▁fert": 24840, "LL": 24841, "archy": 24842, "Si": 24843, "海岸": 24844, "课堂上": 24845, "阵地": 24846, "▁Jo": 24847, "缔约": 24848, "的东西": 24849, "▁scar": 24850, "▁comments": 24851, "▁choosing": 24852, "的含义": 24853, "废物": 24854, "▁Sarah": 24855, "▁celebrated": 24856, "▁characteristic": 24857, "▁proportion": 24858, "▁confident": 24859, "市的": 24860, "uris": 24861, "土耳其": 24862, "Short": 24863, "政法": 24864, "不动产": 24865, "加大对": 24866, "立案": 24867, "峰值": 24868, "文人": 24869, "语境": 24870, "▁But": 24871, "即为": 24872, "观众": 24873, "%.▁": 24874, "一个人": 24875, "要么": 24876, "sper": 24877, "▁cas": 24878, "▁gardens": 24879, "▁hazard": 24880, "▁thanks": 24881, "pain": 24882, "▁Elizabeth": 24883, "▁receptors": 24884, "▁coat": 24885, "▁drivers": 24886, "新建": 24887, "▁coc": 24888, "工业革命": 24889, "同等": 24890, "给付": 24891, "欧美": 24892, "的道路": 24893, "▁trail": 24894, "eren": 24895, "真空": 24896, "▁alle": 24897, "okes": 24898, "comput": 24899, "▁singer": 24900, "终结": 24901, "▁swimming": 24902, "到来": 24903, "立德": 24904, "remember": 24905, "Er": 24906, "dimensional": 24907, "▁Model": 24908, "xim": 24909, "专业知识": 24910, "应变": 24911, "提炼": 24912, "收获": 24913, "▁settled": 24914, "一支": 24915, "▁actors": 24916, "特区": 24917, "link": 24918, "President": 24919, "▁paras": 24920, "▁Avenue": 24921, "▁performances": 24922, "史学": 24923, "光电": 24924, "学业": 24925, "纯粹": 24926, "portation": 24927, "依次": 24928, "tension": 24929, "onent": 24930, "出席": 24931, "▁hyd": 24932, "统一战线": 24933, "自然人": 24934, "军区": 24935, "▁aes": 24936, "▁gum": 24937, "▁eliminate": 24938, "有用": 24939, "▁psychology": 24940, "▁Ott": 24941, "idal": 24942, "▁prime": 24943, "▁boat": 24944, "▁replacement": 24945, "agre": 24946, "▁occurring": 24947, "的限制": 24948, "體育": 24949, "burn": 24950, "▁prolif": 24951, "arding": 24952, "▁audiences": 24953, "▁delicious": 24954, "▁winning": 24955, "抗日战争": 24956, "外商": 24957, "创造力": 24958, "质押": 24959, "返还": 24960, "领会": 24961, "启蒙": 24962, "欲望": 24963, "的大量": 24964, "olitan": 24965, "▁segment": 24966, "▁permission": 24967, "青山": 24968, "▁anticip": 24969, "▁prey": 24970, "不超过": 24971, "更多地": 24972, "▁degrad": 24973, "fold": 24974, "chron": 24975, "逮捕": 24976, "▁datas": 24977, "▁Az": 24978, "▁replied": 24979, "▁superior": 24980, "olly": 24981, "Mel": 24982, "▁von": 24983, "外贸": 24984, "下一步": 24985, "大体": 24986, "商业模式": 24987, "折旧": 24988, "前所未有的": 24989, "汉代": 24990, "龙头": 24991, "亲属": 24992, "▁plasma": 24993, "▁updated": 24994, "▁Organization": 24995, "fly": 24996, "fs": 24997, "▁Cr": 24998, "uting": 24999, "罪的": 25000, "清华大学": 25001, "倾向于": 25002, "的机制": 25003, "raq": 25004, "展示了": 25005, "▁Math": 25006, "▁Johnson": 25007, "▁cooling": 25008, "▁equipped": 25009, "条的规定": 25010, "网友": 25011, "县域": 25012, "头脑": 25013, "节课": 25014, "学习者": 25015, "列举": 25016, "支部": 25017, "有两种": 25018, "table": 25019, "▁covering": 25020, "▁developments": 25021, "▁dil": 25022, "etary": 25023, "▁promoted": 25024, "ochond": 25025, "therefore": 25026, "▁;": 25027, "uv": 25028, "合理性": 25029, "▁analyzing": 25030, "uled": 25031, "网络化": 25032, "准备金": 25033, "或缺": 25034, "预见": 25035, "房产": 25036, "校企": 25037, "射频": 25038, "全年": 25039, "起到了": 25040, "▁interface": 25041, "一半": 25042, "’,▁": 25043, "▁adjacent": 25044, "▁opinions": 25045, "borne": 25046, "▁recre": 25047, "regation": 25048, "職業": 25049, "▁polar": 25050, "Bill": 25051, "▁extension": 25052, "▁lists": 25053, "▁explicit": 25054, "▁popularity": 25055, "]\\": 25056, "质生产力": 25057, "和信息": 25058, "工农": 25059, "▁establishment": 25060, "erted": 25061, "phibians": 25062, "group": 25063, "▁py": 25064, "astics": 25065, "VR": 25066, "GR": 25067, "财政部": 25068, "一场": 25069, "显著的": 25070, "计划的": 25071, "▁stood": 25072, "标题": 25073, "▁shorter": 25074, "▁weigh": 25075, "iac": 25076, "ugs": 25077, "){": 25078, "发展规律": 25079, "解答": 25080, "主要体现在": 25081, "量子计算": 25082, "都必须": 25083, "甲状腺": 25084, "柴油": 25085, "thod": 25086, "学术界": 25087, "women": 25088, "▁marketing": 25089, "队列": 25090, "▁Equ": 25091, "酸盐": 25092, "▁Jackson": 25093, "产权的": 25094, "各省": 25095, "抵御": 25096, "▁happiness": 25097, "▁confirm": 25098, "才会": 25099, "介导": 25100, "gien": 25101, "▁designing": 25102, "▁landscapes": 25103, "ecutive": 25104, "rying": 25105, "lications": 25106, "hops": 25107, "江苏省": 25108, "实践教学": 25109, "主机": 25110, "经济的发展": 25111, "black": 25112, "▁perception": 25113, "▁|": 25114, "但是在": 25115, "有所不同": 25116, "written": 25117, "rained": 25118, "话题": 25119, "植被": 25120, "规模的": 25121, "七年": 25122, "helping": 25123, "▁Williams": 25124, "strong": 25125, "Tim": 25126, "▁disability": 25127, "要实现": 25128, "数据采集": 25129, "最大限度地": 25130, "思维的": 25131, "主动性": 25132, "▁radical": 25133, "查找": 25134, "道的": 25135, "曾在": 25136, "▁Awards": 25137, "▁Sunday": 25138, "cyclopedia": 25139, "▁flexibility": 25140, "有两个": 25141, "构建了": 25142, "低下": 25143, "条件和": 25144, "▁colorful": 25145, "short": 25146, "Tur": 25147, "appy": 25148, "BR": 25149, "▁beach": 25150, "制剂": 25151, "适用的": 25152, "▁merely": 25153, "LO": 25154, "▁fatty": 25155, "▁controlling": 25156, "▁metres": 25157, "第十二": 25158, "课文": 25159, "当作": 25160, "夫人": 25161, "iary": 25162, "Share": 25163, "ydney": 25164, "▁Process": 25165, "▁abstract": 25166, "▁duration": 25167, "▁empty": 25168, "▁falling": 25169, "发展道路": 25170, "其对": 25171, "必然要求": 25172, "现实的": 25173, "上诉": 25174, "Incre": 25175, "'.▁": 25176, "▁wise": 25177, "report": 25178, "解剖": 25179, "尔斯": 25180, "所在地": 25181, "▁Prim": 25182, "theless": 25183, "▁uncle": 25184, "生產": 25185, "数据显示": 25186, "认识和": 25187, "收取": 25188, "Sir": 25189, "的模式": 25190, "▁Online": 25191, "全程": 25192, "口头": 25193, "事先": 25194, "错误的": 25195, "▁charts": 25196, "▁quantum": 25197, "▁morph": 25198, "duction": 25199, "Recent": 25200, "yte": 25201, "ocated": 25202, "▁countless": 25203, "▁privacy": 25204, "经济全球化": 25205, "应用型": 25206, "内部控制": 25207, "不宜": 25208, "厚度": 25209, "▁transplant": 25210, "▁vocal": 25211, "防火": 25212, "▁Historical": 25213, "▁tribes": 25214, "▁hurt": 25215, "▁incorporated": 25216, "▁precious": 25217, "endar": 25218, "▁±▁": 25219, "▁>": 25220, "以致": 25221, "▁USA": 25222, "伦敦": 25223, "▁scenario": 25224, "▁About": 25225, "erts": 25226, "lla": 25227, "的自": 25228, "▁wing": 25229, "SH": 25230, "▁absorb": 25231, "Var": 25232, "阐明": 25233, "▁advers": 25234, "asures": 25235, "igion": 25236, "▁exped": 25237, "▁markers": 25238, "▁perceived": 25239, "表的": 25240, "▁Prince": 25241, "開發": 25242, "▁producer": 25243, "管理部门": 25244, "交易的": 25245, "集约": 25246, "链路": 25247, "局限于": 25248, "▁bomb": 25249, "▁Strateg": 25250, "Florida": 25251, "Will": 25252, "战胜": 25253, "创办": 25254, "breaking": 25255, "结束后": 25256, "▁baseball": 25257, "▁Princ": 25258, "应用中": 25259, "▁analyses": 25260, "▁copies": 25261, "▁excitement": 25262, "▁rooms": 25263, "第四章": 25264, "测评": 25265, "信息和": 25266, "力量的": 25267, "国家公园": 25268, "验收": 25269, "医保": 25270, "胆固醇": 25271, "肾脏": 25272, "专注": 25273, "Learning": 25274, "系统地": 25275, "keeping": 25276, "NC": 25277, "itches": 25278, "agg": 25279, "SV": 25280, "▁Let": 25281, "Gr": 25282, "与方法": 25283, "在企业": 25284, "▁cardiac": 25285, "獎牌得主": 25286, "▁converted": 25287, "▁pione": 25288, "▁interpre": 25289, "Building": 25290, "▁aging": 25291, "contin": 25292, "深入推进": 25293, "收益率": 25294, "成本的": 25295, "着手": 25296, "精力": 25297, "开放的": 25298, "在内": 25299, "▁assistant": 25300, "獨立": 25301, "手工": 25302, "esides": 25303, "▁texture": 25304, "沉淀": 25305, "^{": 25306, "一类": 25307, "▁Alexander": 25308, "▁parks": 25309, "later": 25310, "并于": 25311, "▁Supreme": 25312, "olph": 25313, "▁pilot": 25314, "orus": 25315, "全体人民": 25316, "非物质文化遗产": 25317, "作品的": 25318, "患病": 25319, "的基本原则": 25320, "▁granted": 25321, "▁somewhat": 25322, "▁Dictionary": 25323, "機構": 25324, "偶然": 25325, ")▁=▁": 25326, "len": 25327, "机动车": 25328, "过来": 25329, "实际的": 25330, "那种": 25331, "得益": 25332, "▁blow": 25333, "上帝": 25334, "夺取": 25335, "▁Country": 25336, "personal": 25337, "ayer": 25338, "▁Bang": 25339, "▁trigger": 25340, "mented": 25341, "精神和": 25342, "的意见": 25343, "语言文字": 25344, "合作的": 25345, "仍是": 25346, "艰难": 25347, "年限": 25348, "▁soph": 25349, "▁Christianity": 25350, "受到了": 25351, "年第": 25352, "cule": 25353, "機場": 25354, "▁statements": 25355, "enabling": 25356, "▁struck": 25357, "▁exch": 25358, "Track": 25359, "▁surprising": 25360, "是否有": 25361, "品格": 25362, "保護": 25363, "▁es": 25364, "纪录": 25365, "▁Conservation": 25366, "▁Route": 25367, "▁http": 25368, "▁£": 25369, "SF": 25370, "▁Norm": 25371, "ivals": 25372, "▁alternatives": 25373, "▁grains": 25374, "▁inspire": 25375, "▁weakness": 25376, "而对": 25377, "上年": 25378, "考量": 25379, "交际": 25380, "因地制宜": 25381, "标注": 25382, "▁Hun": 25383, "▁grain": 25384, "部分的": 25385, "感兴趣": 25386, "▁graphic": 25387, "pres": 25388, "▁encomp": 25389, "▁advis": 25390, "游泳": 25391, "稳健": 25392, "但它": 25393, "亟待": 25394, "兴奋": 25395, "特质": 25396, "审视": 25397, "▁classification": 25398, "▁inflammatory": 25399, "▁differ": 25400, "thew": 25401, "▁Temple": 25402, "▁gases": 25403, "▁severity": 25404, "isition": 25405, "▁copper": 25406, "▁Representatives": 25407, "▁wings": 25408, ".;▁": 25409, "税制": 25410, "阵列": 25411, "探测器": 25412, "指导下": 25413, "力求": 25414, "针对性": 25415, "在学习": 25416, "View": 25417, "尚书": 25418, "关系到": 25419, "system": 25420, "Hy": 25421, "快乐": 25422, "那个": 25423, "Mor": 25424, "orted": 25425, "rium": 25426, "时钟": 25427, "岩石": 25428, "▁Hand": 25429, "加快建设": 25430, "规模化": 25431, "中进行": 25432, "破裂": 25433, "约占": 25434, "五是": 25435, "存货": 25436, "市政府": 25437, "与国际": 25438, "患儿": 25439, "我们认为": 25440, "阻力": 25441, "权利和": 25442, "如同": 25443, "眼睛": 25444, "平原": 25445, "▁illnesses": 25446, "▁infant": 25447, "inea": 25448, "Det": 25449, "加利": 25450, "高层": 25451, "▁reporting": 25452, "irtual": 25453, "▁underground": 25454, "▁humanity": 25455, "bound": 25456, "allenges": 25457, "坚持和发展": 25458, "管理办法": 25459, "事后": 25460, "老百姓": 25461, "奴隶": 25462, "焦虑": 25463, "Draw": 25464, "引起了": 25465, "和大": 25466, "▁eru": 25467, "▁factory": 25468, "named": 25469, "▁gest": 25470, "venile": 25471, "Enter": 25472, "pow": 25473, "多为": 25474, "进度": 25475, "适时": 25476, "div": 25477, "王国": 25478, "再度": 25479, "▁provider": 25480, "▁metals": 25481, "▁opposed": 25482, "▁planting": 25483, "提及": 25484, "ben": 25485, "职业道德": 25486, "户籍": 25487, "积极探索": 25488, "改革发展": 25489, "Work": 25490, "Ann": 25491, "▁Protection": 25492, "▁Iran": 25493, "▁universal": 25494, "▁defeated": 25495, "▁seemingly": 25496, "擁有": 25497, "▁chemistry": 25498, "agan": 25499, "自立": 25500, "Given": 25501, "▁movies": 25502, "▁infants": 25503, "▁peers": 25504, "▁Korean": 25505, "亿吨": 25506, "独立性": 25507, "君子": 25508, "enter": 25509, "数组": 25510, "六个": 25511, "Historical": 25512, "▁practition": 25513, "▁investigated": 25514, "▁minister": 25515, "加州": 25516, "ennes": 25517, "當地": 25518, "oded": 25519, "▁Constitution": 25520, "healthy": 25521, "Bur": 25522, "九年": 25523, "中西": 25524, "互助": 25525, "人性": 25526, "oca": 25527, "mouth": 25528, "▁combining": 25529, "Henry": 25530, "要求学生": 25531, "战术": 25532, "是否存在": 25533, "▁irrit": 25534, "书籍": 25535, "紀錄": 25536, "BE": 25537, "inth": 25538, "▁Senate": 25539, "▁programme": 25540, "正常的": 25541, "无力": 25542, "经验的": 25543, "级的": 25544, "计数": 25545, "衰老": 25546, "▁embry": 25547, "▁Pur": 25548, "lock": 25549, "▁poet": 25550, "▁hunting": 25551, "人民生活": 25552, "新能源汽车": 25553, "有机结合": 25554, "教育与": 25555, "新时期": 25556, "技术等": 25557, "毒素": 25558, "議會": 25559, "坚守": 25560, "书院": 25561, "电场": 25562, "錦標": 25563, "cellular": 25564, "▁considerable": 25565, "失去了": 25566, "ureau": 25567, "▁Word": 25568, "▁Heb": 25569, "▁retire": 25570, "▁chicken": 25571, "▁consistently": 25572, "▁surgical": 25573, "和支持": 25574, "流传": 25575, "规范的": 25576, "的性能": 25577, "一座": 25578, "ked": 25579, "▁bacterial": 25580, "▁clubs": 25581, "▁distances": 25582, "▁essays": 25583, "赔偿责任": 25584, "中去": 25585, "刑事责任": 25586, "课程体系": 25587, "执行的": 25588, "▁chlor": 25589, "狭义": 25590, "因为它": 25591, "East": 25592, "strial": 25593, "▁spatial": 25594, "▁antibiotics": 25595, "▁flavors": 25596, "▁viewed": 25597, "ifier": 25598, "口腔": 25599, "已有的": 25600, "卷积": 25601, "hea": 25602, "老人": 25603, "▁Corporation": 25604, "cha": 25605, "▁unw": 25606, "claimed": 25607, "行政诉讼": 25608, "和精神": 25609, "葡萄糖": 25610, "肺癌": 25611, "oler": 25612, "forest": 25613, "▁essentially": 25614, "病毒感染": 25615, "▁...": 25616, "via": 25617, "▁Arm": 25618, "▁Safety": 25619, "▁orders": 25620, "hu": 25621, "▁demonstrates": 25622, "▁unless": 25623, "像素": 25624, "社会主义建设": 25625, "经营权": 25626, "▁antibodies": 25627, "imb": 25628, "Whether": 25629, "▁exhaust": 25630, "mers": 25631, "路易": 25632, "图中": 25633, "刑罚": 25634, "zech": 25635, "▁metabolism": 25636, "死亡率": 25637, "额外": 25638, "Linux": 25639, "▁Pennsylvania": 25640, "pack": 25641, "Show": 25642, "monary": 25643, "Perhaps": 25644, "▁Back": 25645, "教学目标": 25646, "全国人民代表大会": 25647, "民主政治": 25648, "知情": 25649, "就在于": 25650, "理解为": 25651, "基因的": 25652, "显着": 25653, "特有的": 25654, "LD": 25655, "irk": 25656, "points": 25657, "▁fet": 25658, "incial": 25659, "▁antioxid": 25660, "Joseph": 25661, "FP": 25662, "此种": 25663, "骨折": 25664, "Mont": 25665, "syn": 25666, "▁Poland": 25667, "PO": 25668, "实质性": 25669, "日内": 25670, "依存": 25671, "局长": 25672, "场合": 25673, "etition": 25674, "已在": 25675, "▁Our": 25676, "FT": 25677, "▁basketball": 25678, "▁concluded": 25679, "▁drama": 25680, "▁honey": 25681, "(\"": 25682, "▁grad": 25683, "eph": 25684, "aternal": 25685, "的手段": 25686, "叙事": 25687, "▁adverse": 25688, "句子": 25689, "▁photographs": 25690, "的实现": 25691, "國立": 25692, "▁Berlin": 25693, "efficient": 25694, "两条": 25695, "消防": 25696, "源性": 25697, "南海": 25698, "年夏季奧林匹克運動會": 25699, "good": 25700, "▁pandemic": 25701, "▁brains": 25702, "▁farms": 25703, "▁mistakes": 25704, "▁recycling": 25705, "吸烟": 25706, "riday": 25707, "招聘": 25708, "需要对": 25709, "段的": 25710, "note": 25711, "▁rarely": 25712, "▁pin": 25713, "associ": 25714, "兩個": 25715, "罚款": 25716, "污染防治": 25717, "电容": 25718, "市场竞争": 25719, "可将": 25720, "张力": 25721, "非遗": 25722, "混淆": 25723, "▁volunteers": 25724, "坦克": 25725, "apor": 25726, "nia": 25727, "NH": 25728, "不对称": 25729, "形成一个": 25730, "光源": 25731, "▁manufacturers": 25732, "▁】": 25733, "▁influential": 25734, "▁gravity": 25735, "ifer": 25736, "▁Unit": 25737, "Ohio": 25738, "\u0005\u0005": 25739, "不懈": 25740, "意识的": 25741, "弊端": 25742, "[[@": 25743, "北美": 25744, "一道": 25745, "存活": 25746, "的水平": 25747, "溃疡": 25748, "▁Master": 25749, "▁processed": 25750, "▁strategic": 25751, "▁parish": 25752, "Olymp": 25753, "栽培": 25754, "马来": 25755, "▁none": 25756, "▁Hung": 25757, "▁auto": 25758, "▁Plant": 25759, "▁Polish": 25760, "▁alumni": 25761, "wid": 25762, "▁achieving": 25763, "▁decay": 25764, "您的": 25765, "八年": 25766, "抗生素": 25767, "紫外": 25768, "社会化": 25769, "Big": 25770, "波兰": 25771, "umatic": 25772, "Exploring": 25773, "▁orb": 25774, "Tele": 25775, "Tr": 25776, "ensis": 25777, "▁occas": 25778, "▁Victoria": 25779, "▁transformed": 25780, "转换为": 25781, "▁Chief": 25782, "tains": 25783, "▁aggressive": 25784, "▁trains": 25785, "值为": 25786, "西哥": 25787, "pton": 25788, "▁driven": 25789, "▁retired": 25790, "更加注重": 25791, "促进学生": 25792, "调查研究": 25793, "过高": 25794, "的内涵": 25795, "全市": 25796, "这在": 25797, "首先是": 25798, "应付": 25799, "中国政府": 25800, "來源": 25801, "Bu": 25802, "HIV": 25803, "IO": 25804, "的城市": 25805, ".'": 25806, "▁ham": 25807, "▁implementing": 25808, "▁seam": 25809, "价的": 25810, "少量": 25811, "别人": 25812, "让我们": 25813, "▁administrative": 25814, "TCP": 25815, "▁Dam": 25816, "▁Alzheimer": 25817, "MM": 25818, "多重": 25819, "▁Sports": 25820, "▁productivity": 25821, "shire": 25822, "▁anywhere": 25823, "▁Vietnam": 25824, "▁Van": 25825, "理学": 25826, "选择的": 25827, "确诊": 25828, "都将": 25829, "图案": 25830, "star": 25831, "prise": 25832, "该项": 25833, "微波": 25834, "当选": 25835, "巨噬": 25836, "同事": 25837, "无机": 25838, "精密": 25839, "▁spin": 25840, "唱片": 25841, "compared": 25842, "三类": 25843, "会计准则": 25844, "整体的": 25845, "伪造": 25846, "规则的": 25847, "主编": 25848, "business": 25849, "海域": 25850, "只需": 25851, "England": 25852, "▁lifetime": 25853, "的一個": 25854, "原文": 25855, "▁charged": 25856, "Roman": 25857, "为民": 25858, "的特殊": 25859, "所能": 25860, "RFID": 25861, "range": 25862, "▁bought": 25863, "▁circulation": 25864, "正处于": 25865, "照射": 25866, "能力的培养": 25867, "自主创新": 25868, "紧缩": 25869, "在北京": 25870, "在使用": 25871, "ologically": 25872, "▁reverse": 25873, "istent": 25874, "不清": 25875, "科学家们": 25876, "icon": 25877, "▁aster": 25878, "▁bags": 25879, "ongue": 25880, "▁backgrounds": 25881, "▁fibers": 25882, "▁wider": 25883, "elta": 25884, "三者": 25885, "不可或缺": 25886, "优于": 25887, "仪式": 25888, "ti": 25889, "可靠的": 25890, "▁promotes": 25891, "▁mine": 25892, "羽毛球": 25893, "▁riding": 25894, "▁wondered": 25895, "同行": 25896, "司马": 25897, "万个": 25898, "契机": 25899, "主要内容": 25900, "▁initiative": 25901, "太子": 25902, "▁encountered": 25903, "▁partnership": 25904, "▁Gar": 25905, "▁logic": 25906, "near": 25907, "快速增长": 25908, "营商环境": 25909, "完美": 25910, "成本和": 25911, "一个重要": 25912, "资金的": 25913, "评价体系": 25914, "▁NO": 25915, "哪个": 25916, "ashes": 25917, "▁independently": 25918, "AK": 25919, "▁compens": 25920, "就在": 25921, "海量": 25922, "总线": 25923, "投放": 25924, "管理模式": 25925, "vit": 25926, "篇文章": 25927, "与环境": 25928, "始于": 25929, "天体": 25930, "Thanks": 25931, "▁celeb": 25932, "Sun": 25933, "紀念": 25934, "ustainable": 25935, "▁preced": 25936, "较强": 25937, "和发展的": 25938, "apore": 25939, "传说": 25940, "iterranean": 25941, "Stand": 25942, "amma": 25943, "▁Effect": 25944, "WS": 25945, "▁Century": 25946, "▁Climate": 25947, "强调了": 25948, "conscious": 25949, "▁clar": 25950, "的程序": 25951, "高雄": 25952, "▁labels": 25953, "plus": 25954, "alem": 25955, "reading": 25956, "oop": 25957, "发展阶段": 25958, "可使": 25959, "山东省": 25960, "筹资": 25961, "真实的": 25962, "▁dies": 25963, "▁strike": 25964, ",\"": 25965, "对这些": 25966, "切换": 25967, "▁proof": 25968, "▁whatever": 25969, "称作": 25970, "很好地": 25971, "sil": 25972, "ibbean": 25973, "分校": 25974, "之时": 25975, "数目": 25976, "的趋势": 25977, "不多": 25978, "apel": 25979, "uate": 25980, "向上": 25981, "正规": 25982, "zo": 25983, "行动计划": 25984, "初级阶段": 25985, "各领域": 25986, "作用下": 25987, "清洁能源": 25988, "助推": 25989, "湾区": 25990, "▁maxim": 25991, "alks": 25992, "准确的": 25993, "▁sampl": 25994, "主演": 25995, "▁Li": 25996, "▁fires": 25997, "▁pointed": 25998, "的高度": 25999, "把它": 26000, "预先": 26001, "造就": 26002, "描写": 26003, "Career": 26004, "html": 26005, "site": 26006, "seud": 26007, "▁tone": 26008, "gov": 26009, "▁residential": 26010, "▁apps": 26011, "▁urine": 26012, "公证": 26013, "嘉靖": 26014, "Ess": 26015, "不一致": 26016, "偏好": 26017, "这条": 26018, "奇迹": 26019, "亦有": 26020, "▁Uk": 26021, "位一体": 26022, "備註": 26023, "Others": 26024, "BV": 26025, "prim": 26026, "是用": 26027, "转发": 26028, "骨骼": 26029, "mil": 26030, "rums": 26031, "onial": 26032, "▁summary": 26033, "▁loud": 26034, "▁managers": 26035, "▁▁《": 26036, "思维能力": 26037, "可以使": 26038, "为由": 26039, "而来": 26040, "牵引": 26041, "▁THE": 26042, "一般的": 26043, "指针": 26044, "华北": 26045, "▁Lincoln": 26046, "▁invasion": 26047, "▁Fund": 26048, "cler": 26049, "▁Building": 26050, "全國": 26051, "西部地区": 26052, "要通过": 26053, "中日": 26054, "Low": 26055, "▁genu": 26056, "不充分": 26057, "降至": 26058, "违法行为": 26059, "趋向": 26060, "回避": 26061, "安置": 26062, "残留": 26063, "治理的": 26064, "iversary": 26065, "不必": 26066, "等特点": 26067, "不太": 26068, "▁sin": 26069, "莱茵": 26070, "▁Map": 26071, "▁judge": 26072, "eman": 26073, "▁fantastic": 26074, "Div": 26075, "▁Theatre": 26076, "下午": 26077, "生化": 26078, "职业学校": 26079, "试剂": 26080, "nds": 26081, "福祉": 26082, "success": 26083, "▁doubt": 26084, "▁bands": 26085, "▁references": 26086, "ACE": 26087, "多人": 26088, "对照组": 26089, "知识与": 26090, "重症": 26091, "增收": 26092, "筹划": 26093, "的地位": 26094, "aws": 26095, "▁codes": 26096, "▁meetings": 26097, "anga": 26098, "▁researcher": 26099, "▁accordingly": 26100, "Martin": 26101, "▁Fair": 26102, "婴儿": 26103, "灌溉": 26104, "如何在": 26105, "肥胖": 26106, "Beg": 26107, "likely": 26108, "▁exceed": 26109, "▁predicted": 26110, "rection": 26111, "Central": 26112, "动产": 26113, "新材料": 26114, "疫情防控": 26115, "死刑": 26116, "尤其是在": 26117, "▁glob": 26118, "ensed": 26119, "aded": 26120, "的心": 26121, "quarters": 26122, "Conf": 26123, "ompson": 26124, "▁officially": 26125, "▁prevalence": 26126, "ternoon": 26127, "faction": 26128, "湖泊": 26129, "花费": 26130, "急剧": 26131, "NK": 26132, "▁drought": 26133, "died": 26134, "▁legacy": 26135, "▁scored": 26136, "▁unity": 26137, "舉行": 26138, "▁metabolic": 26139, "%;": 26140, "全面建设社会主义现代化国家": 26141, "民意": 26142, "自我革命": 26143, "建设用地": 26144, "法律关系": 26145, "▁mutual": 26146, "、、": 26147, "常数": 26148, "靠近": 26149, "▁holiday": 26150, "▁grades": 26151, "▁mature": 26152, "names": 26153, "▁Islamic": 26154, "▁ecological": 26155, "却是": 26156, "双边": 26157, "ifts": 26158, "▁Ly": 26159, "在某些": 26160, "给出了": 26161, "病毒的": 26162, "▁candidates": 26163, "▁bite": 26164, "▁spoke": 26165, "▁Obs": 26166, "▁Prem": 26167, "世界大战": 26168, "外在": 26169, "主体地位": 26170, "医疗保险": 26171, "不具有": 26172, "盗窃": 26173, "较差": 26174, "放置": 26175, "任务的": 26176, "government": 26177, "▁addressed": 26178, "▁invasive": 26179, "相机": 26180, "risk": 26181, "▁mutations": 26182, "不好": 26183, "研究对象": 26184, "之以": 26185, "刚刚": 26186, "孟子": 26187, "hedral": 26188, "▁Environment": 26189, "高科技": 26190, "angers": 26191, "▁Maria": 26192, "acial": 26193, "Creating": 26194, "▁Arctic": 26195, "▁Beach": 26196, "▁powder": 26197, "墨西哥": 26198, "科研人员": 26199, "舉人": 26200, "结点": 26201, "工序": 26202, "导弹": 26203, "特色的": 26204, "系统工程": 26205, "▁numer": 26206, "▁broke": 26207, "▁counsel": 26208, "▁elsewhere": 26209, "成績": 26210, "▁tom": 26211, "石器": 26212, "Born": 26213, "▁conversion": 26214, "▁Prop": 26215, "▁preserved": 26216, "isely": 26217, "▁Polit": 26218, "iley": 26219, "国家和地区": 26220, "保管": 26221, "辩论": 26222, "▁castle": 26223, "▁ride": 26224, "▁educators": 26225, "▁seats": 26226, "值得注意的是": 26227, "妊娠": 26228, "查阅": 26229, "ichel": 26230, "單位": 26231, "▁cotton": 26232, "性是": 26233, "课件": 26234, "浸润": 26235, "阻断": 26236, "流向": 26237, "不合理": 26238, "energy": 26239, "越多": 26240, "热爱": 26241, "je": 26242, "▁sensor": 26243, "▁biodiversity": 26244, "clusions": 26245, "▁borrow": 26246, "▁outdoor": 26247, "推断": 26248, "%-": 26249, "uclear": 26250, "▁lowest": 26251, "受害人": 26252, "各有": 26253, "创伤": 26254, "为我国": 26255, "rated": 26256, "agu": 26257, "amilton": 26258, "▁Hawai": 26259, "ceans": 26260, "▁fans": 26261, "uese": 26262, "▁zones": 26263, "NN": 26264, "lected": 26265, "ercury": 26266, "和实施": 26267, "阶段性": 26268, "阳光": 26269, "atile": 26270, "ipedia": 26271, "aping": 26272, "▁Kn": 26273, "▁libraries": 26274, "athers": 26275, "tein": 26276, "▁oblig": 26277, "▁consumed": 26278, "▁ease": 26279, "supp": 26280, "制度体系": 26281, "指导思想": 26282, "苏州": 26283, "真菌": 26284, "除此之外": 26285, "近年": 26286, "Techn": 26287, "oked": 26288, "▁competitive": 26289, "要注意": 26290, "这使得": 26291, "就是在": 26292, "因素的": 26293, "交通事故": 26294, "患有": 26295, "作的": 26296, "▁deficiency": 26297, "akh": 26298, "▁empower": 26299, "▁proud": 26300, "儿子": 26301, "eland": 26302, "CG": 26303, "社会主义市场经济体制": 26304, "党对": 26305, "犯罪嫌疑人": 26306, "制度创新": 26307, "至上": 26308, "血浆": 26309, "的一致": 26310, "rary": 26311, "▁spinal": 26312, "▁dramatic": 26313, "▁tale": 26314, "入学": 26315, "actly": 26316, "協會": 26317, "fol": 26318, "olished": 26319, "PH": 26320, "机制和": 26321, "并能": 26322, "支气管": 26323, "美好生活": 26324, "实验教学": 26325, "客观上": 26326, "带头": 26327, "折射": 26328, "契合": 26329, "住院": 26330, "统治者": 26331, "!!": 26332, "hero": 26333, "▁conference": 26334, "嵌入式": 26335, "▁Code": 26336, "▁illegal": 26337, "▁Mexican": 26338, "▁pace": 26339, "▁grounds": 26340, "▁accompanied": 26341, "▁fats": 26342, "path": 26343, "fred": 26344, "ocity": 26345, "休息": 26346, "▁scales": 26347, "▁enzyme": 26348, "▁assume": 26349, "jects": 26350, "▁embed": 26351, "放疗": 26352, "司法机关": 26353, "空调": 26354, "▁Ontario": 26355, "▁sodium": 26356, "Pal": 26357, "Upon": 26358, "漫畫": 26359, "回忆": 26360, "▁pH": 26361, "connected": 26362, "诠释": 26363, "放射性": 26364, "剖析": 26365, "▁Ak": 26366, "」、": 26367, "Source": 26368, "社会发展": 26369, "极化": 26370, "非常重要": 26371, "不满": 26372, "劳动者的": 26373, "不断扩大": 26374, "事业的": 26375, "构件": 26376, "建党": 26377, "重心": 26378, "Norm": 26379, "▁sale": 26380, "影视": 26381, "臺北": 26382, "▁Register": 26383, "▁hier": 26384, "▁arth": 26385, "Case": 26386, "無法": 26387, "▁borders": 26388, "如在": 26389, "高频": 26390, "如果不": 26391, "青海": 26392, "月底": 26393, "公開": 26394, "urable": 26395, "Day": 26396, "修建": 26397, "▁reflection": 26398, "ogens": 26399, "若干问题的": 26400, "应当在": 26401, "中国梦": 26402, "世纪的": 26403, "背后的": 26404, "体现出": 26405, "色谱": 26406, "进一步完善": 26407, "剧烈": 26408, "淋巴细胞": 26409, "人才的": 26410, "profit": 26411, "▁actor": 26412, "▁approached": 26413, "▁fuels": 26414, "种族": 26415, "▁Key": 26416, "▁▁-": 26417, "▁achievement": 26418, "的基本原理": 26419, "绝缘": 26420, "选修": 26421, "▁divine": 26422, "▁hospitals": 26423, "▁nice": 26424, "有许多": 26425, "結束": 26426, "首个": 26427, "中国共产党人": 26428, "队伍建设": 26429, "的民族": 26430, "表现形式": 26431, "强有力的": 26432, "与合作": 26433, "应有的": 26434, "互利": 26435, "▁ears": 26436, "教科书": 26437, "是根据": 26438, "▁Mill": 26439, "部落": 26440, "wich": 26441, "▁incidence": 26442, "▁shore": 26443, "▁haven": 26444, "研究方法": 26445, "的人工": 26446, "而又": 26447, "增生": 26448, "变性": 26449, "glas": 26450, "▁cha": 26451, "▁Gulf": 26452, "▁thoroughly": 26453, "▁mold": 26454, "角度看": 26455, "财政收入": 26456, "业务流程": 26457, "加息": 26458, "等同": 26459, "招标": 26460, "金融体系": 26461, "阻抗": 26462, "不敢": 26463, "机车": 26464, "县城": 26465, "▁synthesis": 26466, "onesia": 26467, "▁opposition": 26468, "中性": 26469, "fat": 26470, "beta": 26471, "lem": 26472, "ordan": 26473, "()▁": 26474, "AG": 26475, "领导下": 26476, "强迫": 26477, "▁bias": 26478, "Init": 26479, "的一次": 26480, "地名": 26481, "(-": 26482, "theastern": 26483, "Bal": 26484, "education": 26485, "▁equations": 26486, "▁vitamins": 26487, "责任感": 26488, "一件": 26489, "仓储": 26490, "南宋": 26491, "负有": 26492, "学期": 26493, "陆军": 26494, "但从": 26495, "三角形": 26496, "傳統": 26497, "▁hockey": 26498, "▁participated": 26499, "中央政府": 26500, "凋亡": 26501, "名誉": 26502, "在现代": 26503, "动荡": 26504, "的生物": 26505, "▁Reading": 26506, "今日": 26507, "ependence": 26508, "▁grasp": 26509, "Always": 26510, "▁determining": 26511, "efits": 26512, "▁tob": 26513, "phones": 26514, "▁hormones": 26515, "▁occasionally": 26516, "TM": 26517, "第五章": 26518, "三个代表": 26519, "务实": 26520, "市委": 26521, "和谐社会": 26522, "充实": 26523, "而已": 26524, "][": 26525, "▁Jean": 26526, "超过了": 26527, "长达": 26528, "▁Jr": 26529, "Lab": 26530, "▁Connect": 26531, "▁promise": 26532, "▁crown": 26533, "pop": 26534, "rophy": 26535, "层面的": 26536, "主力": 26537, "▁regulatory": 26538, "▁Spring": 26539, "Test": 26540, "▁paying": 26541, "▁Memorial": 26542, "olas": 26543, "过分": 26544, "国家治理体系和治理能力": 26545, "国家机关": 26546, "和行为": 26547, "不仅可以": 26548, "集成电路": 26549, "业的": 26550, "模型中": 26551, "的特性": 26552, "TD": 26553, "的资源": 26554, "Rh": 26555, "▁Kar": 26556, "▁paragraph": 26557, "警告": 26558, "▁golden": 26559, "▁perfectly": 26560, "▁removing": 26561, "una": 26562, "这种情况": 26563, "法等": 26564, "华为": 26565, "Wood": 26566, "around": 26567, "▁entities": 26568, "▁surrounded": 26569, "▁Band": 26570, "chi": 26571, "之一的": 26572, "创新性": 26573, "养老金": 26574, "生产方式": 26575, "矿物": 26576, "▁tot": 26577, "我们需要": 26578, "仍在": 26579, "eem": 26580, "Education": 26581, "▁relate": 26582, "Johnson": 26583, "▁Golden": 26584, "▁Commons": 26585, "和水": 26586, "主要用于": 26587, "动物的": 26588, "无线电": 26589, "阴阳": 26590, "▁Guard": 26591, "▁muc": 26592, "▁behavioral": 26593, "视图": 26594, "VE": 26595, "▁advances": 26596, "大道": 26597, "urring": 26598, "▁pupils": 26599, "▁Cost": 26600, "第五节": 26601, "理论创新": 26602, "出发点": 26603, "人类文明": 26604, "联想": 26605, "付出": 26606, "紧迫": 26607, "言论": 26608, "牢记": 26609, "具有重要的": 26610, "行動": 26611, "▁quantities": 26612, "Physical": 26613, "▁dispos": 26614, "▁doors": 26615, "没有任何": 26616, "▁duty": 26617, "公交": 26618, "经验和": 26619, "reshold": 26620, "▁attitudes": 26621, "▁exception": 26622, "▁Level": 26623, "cents": 26624, "气温": 26625, "父親": 26626, "ão": 26627, "产品和": 26628, "立德树": 26629, "财政政策": 26630, "提起诉讼": 26631, "价款": 26632, "两侧": 26633, "反映出": 26634, "▁Broad": 26635, "thens": 26636, "分析的": 26637, "迫使": 26638, "boards": 26639, "▁contents": 26640, "▁genre": 26641, "▁universities": 26642, "▁IS": 26643, "obb": 26644, "自发": 26645, "转为": 26646, "农场": 26647, "▁unders": 26648, "▁participating": 26649, "▁situated": 26650, "主义者": 26651, "ikipedia": 26652, "完工": 26653, "Between": 26654, "ruce": 26655, "Major": 26656, "生产者": 26657, "稿件": 26658, "高素质": 26659, "物体的": 26660, "姿态": 26661, "有一定": 26662, "不一定": 26663, "解决的": 26664, "主义和": 26665, "采取了": 26666, "蔓延": 26667, "▁brush": 26668, "▁meditation": 26669, "▁inch": 26670, "▁BBC": 26671, "不過": 26672, "▁fan": 26673, "▁boxes": 26674, "isa": 26675, "aa": 26676, "地上": 26677, "达峰": 26678, "▁thrive": 26679, "的女": 26680, "uits": 26681, "現在": 26682, "gebra": 26683, "但也": 26684, "实验中": 26685, "肿瘤细胞": 26686, "行政复议": 26687, "实际问题": 26688, "往来": 26689, "征税": 26690, "▁signaling": 26691, "等工作": 26692, "扭曲": 26693, "Australian": 26694, "insula": 26695, "bums": 26696, "▁tang": 26697, "Jack": 26698, "bas": 26699, "erick": 26700, "reative": 26701, "▁specified": 26702, "他是": 26703, "▁footballer": 26704, "会的": 26705, "注意到": 26706, "产值": 26707, "被害人": 26708, "板块": 26709, "副教授": 26710, "地表": 26711, "自然的": 26712, "发光": 26713, "raints": 26714, "iances": 26715, "APP": 26716, "▁although": 26717, "▁recipes": 26718, "fa": 26719, "痛苦": 26720, "收敛": 26721, "mia": 26722, "▁batteries": 26723, "Home": 26724, "click": 26725, "estock": 26726, "▁...▁": 26727, "▁altered": 26728, "▁rhythm": 26729, "?▁": 26730, "▁exhibition": 26731, "▁injured": 26732, "▁ca": 26733, "科技革命": 26734, "理政": 26735, "富强": 26736, "支持和": 26737, "限制了": 26738, "遗嘱": 26739, "度量": 26740, "▁Culture": 26741, "emor": 26742, "可以被": 26743, "▁statistical": 26744, "▁stakeholders": 26745, "▁Andrew": 26746, "减税": 26747, "除非": 26748, "bial": 26749, "圆形": 26750, "现存": 26751, "▁revers": 26752, "ainst": 26753, "年代初": 26754, "▁clouds": 26755, "▁existed": 26756, "▁Pop": 26757, "ementia": 26758, "国际上": 26759, "诸侯": 26760, "服务提供": 26761, "盆地": 26762, "電視台": 26763, "▁parl": 26764, "▁fo": 26765, "writer": 26766, "wall": 26767, "▁clay": 26768, "▁propag": 26769, "▁impressive": 26770, "▁tracking": 26771, "Studies": 26772, "▁carboh": 26773, "Lastly": 26774, "▁artwork": 26775, "▁streams": 26776, "效率的": 26777, "venth": 26778, "▁reveals": 26779, "▁sacred": 26780, "alpha": 26781, "method": 26782, "▁buff": 26783, "▁boundary": 26784, "平时": 26785, "理想的": 26786, "结构与": 26787, "指明了": 26788, "租金": 26789, "内心": 26790, "出行": 26791, "地利": 26792, "Internet": 26793, "▁Mult": 26794, "▁verb": 26795, "▁Greece": 26796, "▁joints": 26797, "bourne": 26798, "工作会议": 26799, "可以利用": 26800, "可为": 26801, "公示": 26802, "趣味": 26803, "▁Colorado": 26804, "▁entrance": 26805, "化为": 26806, "▁ranges": 26807, "deg": 26808, "section": 26809, "bris": 26810, "▁painted": 26811, "Dev": 26812, "克兰": 26813, "经济增长的": 26814, "迫切需要": 26815, "长三角": 26816, "环境影响": 26817, "sun": 26818, "okyo": 26819, "mediate": 26820, "hans": 26821, "性状": 26822, "raging": 26823, "axis": 26824, "▁pel": 26825, "▁committee": 26826, "▁locally": 26827, "▁utilize": 26828, "person": 26829, "ixed": 26830, "▁Corps": 26831, "小板": 26832, "或者说": 26833, "▁Governor": 26834, "同时也是": 26835, "概念的": 26836, "▁reflected": 26837, "▁prohib": 26838, "▁advancements": 26839, "的分类": 26840, "Log": 26841, "▁sch": 26842, "呼吸道": 26843, "细分": 26844, "可作为": 26845, "解决的问题": 26846, "特权": 26847, "▁Mountains": 26848, "起始": 26849, "▁Set": 26850, "▁appearances": 26851, "▁enjoyed": 26852, "▁traveling": 26853, "stru": 26854, "▁ion": 26855, "Old": 26856, "▁Argent": 26857, "Professor": 26858, "▁proposal": 26859, "的先": 26860, "多方": 26861, "残疾人": 26862, "不知道": 26863, "▁femin": 26864, "▁LGBT": 26865, "▁contexts": 26866, "ilst": 26867, "▁Daniel": 26868, "▁distinctive": 26869, "▁▁▁▁▁▁▁▁▁": 26870, "Sports": 26871, "▁Early": 26872, "bone": 26873, "就需要": 26874, "抽样": 26875, "的直接": 26876, "听力": 26877, "在生产": 26878, "管理学": 26879, "ectors": 26880, "系的": 26881, "区和": 26882, "可以对": 26883, "中被": 26884, "▁kitchen": 26885, "是目前": 26886, "▁encouraging": 26887, "Results": 26888, "▁Sus": 26889, "determ": 26890, "▁peer": 26891, "ographer": 26892, "风险评估": 26893, "继承人": 26894, "berries": 26895, "parents": 26896, "▁Netherlands": 26897, "▁wash": 26898, "▁harmony": 26899, "alog": 26900, "情況": 26901, "quir": 26902, "rosis": 26903, "十条": 26904, "和价值": 26905, "通过的": 26906, "事业发展": 26907, "长期的": 26908, "子宫": 26909, "生活中的": 26910, "礼仪": 26911, "精品": 26912, "奉献": 26913, "期权": 26914, "grad": 26915, "▁Sab": 26916, "liter": 26917, "▁shoes": 26918, "深入研究": 26919, "概况": 26920, "Eventually": 26921, "▁cooperation": 26922, "▁Theory": 26923, "天文学": 26924, "▁Bon": 26925, "advant": 26926, "海軍": 26927, "Effect": 26928, "egu": 26929, "onder": 26930, "▁Secretary": 26931, "maybe": 26932, "▁breed": 26933, "▁landing": 26934, "▁mothers": 26935, "筛查": 26936, "rypt": 26937, "built": 26938, "▁autism": 26939, "▁manifest": 26940, "十大": 26941, "资产负债表": 26942, "发病率": 26943, "扭转": 26944, "缺口": 26945, "会被": 26946, "个体的": 26947, "anz": 26948, "▁Ha": 26949, "▁hat": 26950, "▁telesc": 26951, "esium": 26952, "bass": 26953, "▁bringing": 26954, "人以": 26955, "在网络": 26956, "汇总": 26957, "与否": 26958, "创始": 26959, "value": 26960, "▁elderly": 26961, "conduct": 26962, "local": 26963, "▁confront": 26964, "会影响": 26965, "损害的": 26966, "是一门": 26967, "历经": 26968, "培养目标": 26969, "电位": 26970, "再现": 26971, "往往是": 26972, "人脸": 26973, "前提下": 26974, "onday": 26975, "▁soul": 26976, "orship": 26977, "▁assembly": 26978, "fare": 26979, "Den": 26980, "▁identical": 26981, "▁extens": 26982, "▁atoms": 26983, "▁slaves": 26984, "青岛": 26985, "侵入": 26986, "推翻": 26987, "代数": 26988, "內容": 26989, "▁devast": 26990, "▁buying": 26991, "▁telling": 26992, "思考题": 26993, "公益诉讼": 26994, "但对": 26995, "受教育": 26996, "紧密结合": 26997, "联系的": 26998, "京津冀": 26999, "以满足": 27000, "青藏高原": 27001, "帮扶": 27002, "但这": 27003, "Hon": 27004, "雙打": 27005, "▁Est": 27006, "▁regulate": 27007, "▁vaccines": 27008, "▁promising": 27009, "▁tobacco": 27010, "beg": 27011, "项目管理": 27012, "血小板": 27013, "最具": 27014, "的区域": 27015, "市政": 27016, "prop": 27017, "▁Bern": 27018, "▁aside": 27019, "▁translated": 27020, "NR": 27021, "backs": 27022, "会计师": 27023, "这就要求": 27024, "质性": 27025, "位移": 27026, "寄存": 27027, "的最新": 27028, "amilies": 27029, "core": 27030, "玩家": 27031, "▁paths": 27032, "▁storytelling": 27033, "▁scr": 27034, "▁speakers": 27035, "等信息": 27036, "和法律": 27037, "有限责任": 27038, "▁adaptation": 27039, "▁Ess": 27040, "▁accomplish": 27041, "提高到": 27042, "中之": 27043, "新课": 27044, "义务的": 27045, "应注意": 27046, "表面的": 27047, "吸引力": 27048, "牵头": 27049, "和教育": 27050, "党章": 27051, "▁Sand": 27052, "▁chromos": 27053, "该方法": 27054, "▁nutrient": 27055, "▁beans": 27056, "▁graduate": 27057, "Found": 27058, "▁Chart": 27059, "home": 27060, "长沙": 27061, "](#": 27062, "较长": 27063, "emale": 27064, "iblical": 27065, "Opt": 27066, "▁gift": 27067, "▁socio": 27068, "▁Garden": 27069, "在未来": 27070, "金融科技": 27071, "情况的": 27072, "始终坚持": 27073, "敏感性": 27074, "专科": 27075, "全力": 27076, "中也": 27077, "Luc": 27078, "马斯": 27079, "Identify": 27080, "thet": 27081, "▁pets": 27082, "简单地": 27083, "西斯": 27084, "▁sew": 27085, "▁ancestors": 27086, "▁reign": 27087, "iously": 27088, "spring": 27089, "▁Ell": 27090, "计划经济": 27091, "早已": 27092, "▁Action": 27093, "▁collecting": 27094, "▁profit": 27095, "▁saved": 27096, "▁bees": 27097, "akespe": 27098, "变的": 27099, "located": 27100, "▁teachings": 27101, "IoT": 27102, "array": 27103, "深层": 27104, "共同体的": 27105, "和工作": 27106, "生命力": 27107, "不平等": 27108, "地位的": 27109, "积极作用": 27110, "畸形": 27111, "发热": 27112, "军的": 27113, "与非": 27114, "传达": 27115, "▁Ash": 27116, "▁compan": 27117, "微分": 27118, "Encourage": 27119, "Bro": 27120, "▁Three": 27121, "▁HT": 27122, "mega": 27123, "▁package": 27124, "下来的": 27125, "切入": 27126, "▁sympt": 27127, "▁customs": 27128, "plate": 27129, "Put": 27130, "▁gran": 27131, "web": 27132, "▁Antar": 27133, "球队": 27134, "Comb": 27135, "治国理政": 27136, "西方国家": 27137, "产学": 27138, "发票": 27139, "庞大的": 27140, "严肃": 27141, "结构化": 27142, "▁circul": 27143, "不属于": 27144, "Indeed": 27145, "▁evil": 27146, "▁orange": 27147, "▁reflects": 27148, "▁subtle": 27149, "▁tribut": 27150, "hk": 27151, "现在的": 27152, "火星": 27153, "itus": 27154, "语言的": 27155, "ashing": 27156, "年被": 27157, "aiwan": 27158, "attered": 27159, "▁Ba": 27160, "▁Stadium": 27161, "通信技术": 27162, "新冠肺炎疫情": 27163, "之间存在": 27164, "在不": 27165, "作詞": 27166, "反向": 27167, "ropolitan": 27168, "▁suicide": 27169, "▁containers": 27170, "万亿": 27171, "教学法": 27172, "各级政府": 27173, "承租": 27174, "情怀": 27175, "基站": 27176, "血栓": 27177, "走进": 27178, "纽带": 27179, "又能": 27180, "的局面": 27181, "▁adhere": 27182, "要素的": 27183, "成型": 27184, "需求和": 27185, "doi": 27186, "▁restore": 27187, "▁abandoned": 27188, "▁territories": 27189, "▁cran": 27190, "亚太": 27191, "共同的": 27192, "▁Log": 27193, "▁hybrid": 27194, "▁peripher": 27195, "tainment": 27196, "捕捉": 27197, "▁【": 27198, "phabet": 27199, "▁renamed": 27200, "岁的": 27201, "耐药": 27202, "变成了": 27203, "群落": 27204, "通俗": 27205, "宽带": 27206, "加之": 27207, "试行": 27208, "服务体系": 27209, "▁Wars": 27210, "》▁▁": 27211, "coll": 27212, "了一些": 27213, "Mex": 27214, "生殖": 27215, "▁Fig": 27216, "这是一种": 27217, "成为一个": 27218, "chant": 27219, "有多": 27220, "并将其": 27221, "Along": 27222, "Additional": 27223, "chester": 27224, "▁annually": 27225, "▁everywhere": 27226, "▁lemon": 27227, "▁AM": 27228, "十二五": 27229, "学时": 27230, "重点领域": 27231, "中指出": 27232, "询问": 27233, "酒精": 27234, "▁Support": 27235, "而生": 27236, "Indian": 27237, "flies": 27238, "▁Bell": 27239, "▁bottle": 27240, "▁tou": 27241, "loss": 27242, "oking": 27243, "▁Live": 27244, "副主席": 27245, "股市": 27246, "后世": 27247, "柏林": 27248, "北海": 27249, "▁expanding": 27250, "Timmy": 27251, "▁delicate": 27252, "▁spacecraft": 27253, "omot": 27254, "生态环境保护": 27255, "数字货币": 27256, "人工智能技术": 27257, "日元": 27258, "建制": 27259, "自然科学基金": 27260, "iga": 27261, "ognition": 27262, "Ma": 27263, "abama": 27264, "▁restoration": 27265, "▁specimens": 27266, "▁gathering": 27267, "▁struggling": 27268, "current": 27269, "Oxford": 27270, "长安": 27271, "任何一个": 27272, "不一": 27273, "eeds": 27274, "▁therapies": 27275, "三国": 27276, "▁Spirit": 27277, "▁Sav": 27278, "公允价值": 27279, "家具": 27280, "外部环境": 27281, "自然灾害": 27282, "审慎": 27283, "established": 27284, "affe": 27285, "十月": 27286, "衰减": 27287, "用了": 27288, "▁Pakistan": 27289, "overe": 27290, "Cast": 27291, "▁cub": 27292, "▁correlation": 27293, "▁delight": 27294, "▁nu": 27295, "▁delve": 27296, "▁integrity": 27297, "▁positively": 27298, "▁Toronto": 27299, "cond": 27300, "ownt": 27301, "▁▁.": 27302, "Name": 27303, "wer": 27304, "更换": 27305, "剥夺": 27306, "estone": 27307, "grams": 27308, "CAD": 27309, "techn": 27310, "演奏": 27311, "▁surviv": 27312, "▁worship": 27313, "unar": 27314, "ennessee": 27315, "粮食安全": 27316, "来确定": 27317, "而后": 27318, "弱势": 27319, "ст": 27320, "真的": 27321, "▁smoothly": 27322, "不等": 27323, "enza": 27324, "iberty": 27325, "elson": 27326, "inflammatory": 27327, "要求和": 27328, "得不到": 27329, "应激": 27330, "很可能": 27331, "▁resistant": 27332, "和中": 27333, "playing": 27334, "▁poems": 27335, "▁strengths": 27336, "()`▁": 27337, "▁comic": 27338, "ART": 27339, "▁AND": 27340, "▁overview": 27341, "▁optical": 27342, "▁institution": 27343, "icts": 27344, "发展为": 27345, "马克思主义的": 27346, "的证据": 27347, "年我国": 27348, "城市群": 27349, "迈向": 27350, "汲取": 27351, "肝炎": 27352, "aments": 27353, "平民": 27354, "×▁": 27355, "giene": 27356, "▁cow": 27357, "▁tailored": 27358, "伊朗": 27359, "akespeare": 27360, "▁ty": 27361, "對於": 27362, "umbers": 27363, "▁enhancing": 27364, "bral": 27365, "建国": 27366, "held": 27367, "▁earthquake": 27368, "的最后": 27369, "▁sheets": 27370, "▁dinner": 27371, "▁ranging": 27372, "Cong": 27373, "ilms": 27374, "Econom": 27375, "利于": 27376, "的运动": 27377, "在国内": 27378, "改革创新": 27379, "外语": 27380, "测绘": 27381, "▁striking": 27382, "子公司": 27383, "wealth": 27384, "▁soccer": 27385, "▁throat": 27386, "▁scheme": 27387, "Star": 27388, "chestra": 27389, "dependent": 27390, "tok": 27391, "Tor": 27392, "marks": 27393, "▁Laboratory": 27394, "erusalem": 27395, "sing": 27396, "深厚": 27397, "相结合的": 27398, "两方面": 27399, "投标": 27400, "测算": 27401, "与学生": 27402, "代表性的": 27403, "来解决": 27404, "这场": 27405, "余人": 27406, "方法论": 27407, "作文": 27408, "▁weekly": 27409, "▁columns": 27410, "结婚": 27411, ",▁'": 27412, "球员": 27413, "secut": 27414, "▁pod": 27415, "这表明": 27416, "建设项目": 27417, "反应的": 27418, "▁critically": 27419, "▁distant": 27420, "electric": 27421, "▁savings": 27422, "EST": 27423, "idelines": 27424, "▁politicians": 27425, "课程内容": 27426, "原则上": 27427, "交融": 27428, "军民": 27429, "同学们": 27430, "放松": 27431, "▁bowl": 27432, "▁cater": 27433, "▁acres": 27434, "▁calling": 27435, "▁invited": 27436, "iph": 27437, "effective": 27438, "神秘": 27439, "asia": 27440, "▁ending": 27441, "▁faculty": 27442, "▁Gre": 27443, "世纪末": 27444, "在不同的": 27445, "维埃": 27446, "向往": 27447, "祖父": 27448, "可扩展": 27449, "葡萄牙": 27450, "▁Place": 27451, "ovak": 27452, "唯一的": 27453, "▁Oxford": 27454, "living": 27455, "ante": 27456, "▁mi": 27457, "vi": 27458, "法令": 27459, "▁harsh": 27460, "following": 27461, "▁Hebrew": 27462, "▁spray": 27463, "新华社": 27464, "生机": 27465, "小微": 27466, "知识产权保护": 27467, "事关": 27468, "基础和": 27469, "磁盘": 27470, "风景": 27471, "临床上": 27472, "保证了": 27473, "转运": 27474, "知縣": 27475, "畢業": 27476, "▁plain": 27477, "inton": 27478, "ooked": 27479, "▁robots": 27480, "▁believes": 27481, "▁intention": 27482, "▁pestic": 27483, "▁plates": 27484, "▁sunny": 27485, "chain": 27486, "▁Bol": 27487, "的抗": 27488, "负面影响": 27489, "means": 27490, "▁Farm": 27491, "非线性": 27492, "Fore": 27493, "det": 27494, "cop": 27495, "overning": 27496, "▁confusion": 27497, "▁preservation": 27498, "Cr": 27499, "▁vig": 27500, "核电": 27501, "免疫系统": 27502, "充分考虑": 27503, "必须是": 27504, "的义务": 27505, "总体上": 27506, "参观": 27507, "当家": 27508, "ni": 27509, "登录": 27510, "aton": 27511, "▁spreading": 27512, "▁accidents": 27513, "▁gear": 27514, "▁representative": 27515, "\"}": 27516, "私营": 27517, "任职": 27518, "一天": 27519, "东京": 27520, "▁Municip": 27521, "和相关": 27522, "▁Dun": 27523, "區域": 27524, "小時": 27525, "編曲": 27526, "init": 27527, "与经济": 27528, "收回": 27529, "万美元": 27530, "游客": 27531, "游击": 27532, "红细胞": 27533, "原生": 27534, "重叠": 27535, "人所": 27536, "aga": 27537, "▁lig": 27538, "kh": 27539, "anner": 27540, "▁Java": 27541, "的转变": 27542, "作出的": 27543, "议员": 27544, "必须要": 27545, "内地": 27546, "Sen": 27547, "自旋": 27548, "地主": 27549, "在他": 27550, "恰恰": 27551, "▁phenomena": 27552, "▁rainf": 27553, "▁wars": 27554, "篇章": 27555, "课程教学": 27556, "政府对": 27557, "▁Univers": 27558, "第十三": 27559, "长城": 27560, "raham": 27561, "▁cattle": 27562, "▁Prevention": 27563, "▁inequality": 27564, "▁Indians": 27565, "▁returning": 27566, "treated": 27567, "▁debris": 27568, "部份": 27569, "Space": 27570, "▁ID": 27571, "gae": 27572, "在高": 27573, "尔省": 27574, "angel": 27575, "▁churches": 27576, "▁comprehension": 27577, "▁reserved": 27578, "▁Republican": 27579, "技术进步": 27580, "激励机制": 27581, "再审": 27582, "通风": 27583, "协议的": 27584, "尔德": 27585, "ritic": 27586, "推测": 27587, "Run": 27588, "▁Resp": 27589, "▁quantity": 27590, "▁valley": 27591, "▁update": 27592, "▁strains": 27593, "IST": 27594, "▁axis": 27595, "▁afternoon": 27596, "▁saving": 27597, "一段时间": 27598, "造血": 27599, "蒸发": 27600, "演讲": 27601, "域网": 27602, "rigation": 27603, "▁spons": 27604, "CV": 27605, "forcing": 27606, "相较": 27607, "Notable": 27608, "▁Os": 27609, "人民群众的": 27610, "涉及的": 27611, "的依据": 27612, "老龄化": 27613, "变压": 27614, "这部分": 27615, "同样的": 27616, "舆情": 27617, "强劲": 27618, "财税": 27619, "以人为本": 27620, "的内在": 27621, "立方米": 27622, "假定": 27623, "大阪": 27624, "▁restrictions": 27625, "▁worlds": 27626, "▁Digital": 27627, "Different": 27628, "单词": 27629, "Eth": 27630, "igm": 27631, "Western": 27632, "Taxonomy": 27633, "人是": 27634, "保卫": 27635, "对外贸易": 27636, "前途": 27637, "▁mystery": 27638, "SU": 27639, "年版": 27640, "▁Rod": 27641, "evin": 27642, "pan": 27643, "unctions": 27644, "这项研究": 27645, "诉讼时效": 27646, "全国各族人民": 27647, "案件中": 27648, "放缓": 27649, "关怀": 27650, "▁comparing": 27651, "很小": 27652, "▁descent": 27653, "▁alpha": 27654, "▁communications": 27655, "彼得": 27656, "▁desert": 27657, "isticated": 27658, "一门": 27659, "不出": 27660, "osaur": 27661, "hetic": 27662, "▁bleeding": 27663, "▁intersection": 27664, "丈夫": 27665, "▁sequences": 27666, "<0x9F>": 31021, "different": 31022, "帝國": 31023, "党的政治": 31024, "两者的": 31025, "内战": 31026, "叶片": 31027, "细胞因子": 31028, "ée": 31029, "▁Rose": 31030, "樂團": 31031, "gium": 31032, "producing": 31033, "accessed": 31034, "阿根廷": 31035, "▁decreases": 31036, "▁encounters": 31037, "▁pupp": 31038, "▁intr": 31039, "True": 31040, "és": 31041, "王子": 31042, "antry": 31043, "会计信息": 31044, "据统计": 31045, "所具有": 31046, "劳动合同法": 31047, "常态化": 31048, "担负": 31049, "智能合约": 31050, "自觉地": 31051, "先天性": 31052, "医务": 31053, "构建人类命运共同体": 31054, "简要": 31055, "它将": 31056, "惠及": 31057, "监管部门": 31058, "的临床": 31059, "ilib": 31060, "Proper": 31061, "▁symmet": 31062, "itime": 31063, "晚上": 31064, "珊瑚": 31065, "role": 31066, "Ur": 31067, "▁divisions": 31068, "Exp": 31069, "▁organism": 31070, "▁allergies": 31071, "▁genuine": 31072, "▁watched": 31073, "▁Cra": 31074, "▁bless": 31075, "Sou": 31076, "▁coh": 31077, "而导致": 31078, "和改进": 31079, "罪犯": 31080, "永恒": 31081, "的发展趋势": 31082, "ergarten": 31083, "▁Matt": 31084, "英格蘭": 31085, "的现代化": 31086, "全面深化": 31087, "后再": 31088, "市场在": 31089, "中的重要": 31090, "解决好": 31091, "出具": 31092, "具有较强的": 31093, "文化交流": 31094, "尤为重要": 31095, "接受的": 31096, "或服务": 31097, "一种新的": 31098, "企业与": 31099, "区位": 31100, "奠定了基础": 31101, "服用": 31102, "事务所": 31103, "职称": 31104, "危险因素": 31105, "收入差距": 31106, "nea": 31107, "群众的": 31108, "直辖市": 31109, "entieth": 31110, "發表": 31111, "▁aggreg": 31112, "▁license": 31113, "▁peaceful": 31114, "▁atmospheric": 31115, "ulent": 31116, "▁drops": 31117, "AST": 31118, "▁Francis": 31119, "▁expedition": 31120, "▁contamination": 31121, "▁convin": 31122, "▁prone": 31123, "▁straw": 31124, "▁Relations": 31125, "stitutional": 31126, "▁Alliance": 31127, "acking": 31128, "大类": 31129, "或多": 31130, "最多的": 31131, "Ter": 31132, "光合": 31133, "▁hypertension": 31134, "orrect": 31135, "▁germ": 31136, "ugg": 31137, "▁dough": 31138, "▁pond": 31139, "ytic": 31140, "associated": 31141, "发生率": 31142, "研讨会": 31143, "变压器": 31144, "促进社会": 31145, "工程建设": 31146, "学生们": 31147, "抽取": 31148, "联络": 31149, "毛泽东思想": 31150, "致富": 31151, "外延": 31152, "个国家": 31153, "feeding": 31154, "Engine": 31155, "主人": 31156, "▁Computer": 31157, "▁Raj": 31158, "▁restaurant": 31159, "▁breathe": 31160, "▁counterparts": 31161, "▁tunnel": 31162, "▁hotel": 31163, "──": 31164, "分发": 31165, "▁PR": 31166, "站点": 31167, "\":": 31168, "▁beer": 31169, "生命的": 31170, "莱茵省": 31171, "向下": 31172, "中将": 31173, "基本概念": 31174, "同位": 31175, "上午": 31176, "观的": 31177, "pdf": 31178, "oard": 31179, "▁Integ": 31180, "興建": 31181, "ationally": 31182, "▁Guinea": 31183, "毕业后": 31184, "▁counts": 31185, "▁flowing": 31186, "▁screens": 31187, "其他的": 31188, ".\"\"": 31189, "erness": 31190, "所说": 31191, "的历史性": 31192, "和保障": 31193, "学前教育": 31194, "的基本理论": 31195, "突破口": 31196, "但对于": 31197, "原发性": 31198, "电化学": 31199, "Fire": 31200, "▁bust": 31201, "▁recycled": 31202, "ermat": 31203, "▁incidents": 31204, "▁pushing": 31205, "南非": 31206, "老化": 31207, "▁Village": 31208, "▁Ide": 31209, "局的": 31210, "过大": 31211, "矛盾的": 31212, "鲜明的": 31213, "▁aquatic": 31214, "路上": 31215, "的正": 31216, "▁bark": 31217, "华东": 31218, "透露": 31219, ",「": 31220, "enez": 31221, "▁cer": 31222, "sharing": 31223, "▁evolutionary": 31224, "▁formats": 31225, "其次是": 31226, "开辟了": 31227, "的良好": 31228, "十六条": 31229, "利用效率": 31230, "油气": 31231, "不允许": 31232, "最高人民法院关于": 31233, "可实现": 31234, "的重要因素": 31235, "领导小组": 31236, "恐惧": 31237, "终点": 31238, "夫妻共同": 31239, "相辅相": 31240, "brain": 31241, "▁heated": 31242, "▁qualified": 31243, ",▁‘": 31244, "甲烷": 31245, "eval": 31246, "金牌": 31247, "早年": 31248, "AE": 31249, "mans": 31250, "▁ber": 31251, "▁scan": 31252, "avirus": 31253, "▁frozen": 31254, "▁heroes": 31255, "▁neighboring": 31256, "▁rod": 31257, "人道": 31258, "这为": 31259, "治愈": 31260, "semble": 31261, "▁concert": 31262, "inely": 31263, "▁innovations": 31264, "serving": 31265, "廣東": 31266, "内陆": 31267, "切割": 31268, "他还": 31269, "醫院": 31270, "範圍": 31271, "Pass": 31272, "商店": 31273, "描述了": 31274, "Associ": 31275, "KD": 31276, "▁puts": 31277, "raid": 31278, "表現": 31279, "▁allev": 31280, "肢体": 31281, "环境监测": 31282, "的人格": 31283, "土地使用权": 31284, "新鲜": 31285, "综合考虑": 31286, "特殊性": 31287, "的数字": 31288, "▁resolve": 31289, "相似的": 31290, "model": 31291, "Present": 31292, "▁Gil": 31293, "Blood": 31294, "▁Athlet": 31295, "abitat": 31296, "▁Chile": 31297, "▁recall": 31298, "▁challenged": 31299, "▁emit": 31300, "▁stimulate": 31301, "通过将": 31302, "隐私保护": 31303, "并向": 31304, "水和": 31305, "earl": 31306, "cepts": 31307, "▁Miller": 31308, "▁coin": 31309, "engu": 31310, "▁legit": 31311, "▁executed": 31312, "▁empire": 31313, "▁Assessment": 31314, "▁belt": 31315, "▁electoral": 31316, "▁highlighted": 31317, "进士": 31318, "分担": 31319, "四中全会": 31320, "进一步发展": 31321, "不服": 31322, "内阁": 31323, "心力": 31324, "融资租赁": 31325, "暂行": 31326, "美好生活的": 31327, "第一步": 31328, "通则": 31329, "▁Drug": 31330, "orf": 31331, "在上海": 31332, "遗迹": 31333, "学士": 31334, "次年": 31335, "opathy": 31336, "Ra": 31337, "mid": 31338, "'.": 31339, "special": 31340, "Pay": 31341, "▁mistake": 31342, "▁pulmonary": 31343, "▁sampling": 31344, "mother": 31345, "▁steep": 31346, "▁transactions": 31347, ")|": 31348, "Geography": 31349, "▁portions": 31350, "滤波器": 31351, "影响力的": 31352, "宪政": 31353, "仍然存在": 31354, "既能": 31355, "工作和": 31356, "其三": 31357, "如果你": 31358, "▁Non": 31359, "▁voting": 31360, "Fort": 31361, "▁accounting": 31362, "▁baseline": 31363, "▁collapse": 31364, "國王": 31365, "▁reasoning": 31366, "source": 31367, "\u0006\b": 31368, "各方面的": 31369, "的主导": 31370, "处处": 31371, "领悟": 31372, "抵制": 31373, "好奇": 31374, "宏伟": 31375, "特别行政区": 31376, "减灾": 31377, "遗传学": 31378, "轮廓": 31379, "仅仅是": 31380, "文件的": 31381, "参加了": 31382, "山大": 31383, "Ms": 31384, "itched": 31385, "always": 31386, "有以下": 31387, "▁Core": 31388, "▁operator": 31389, "▁vow": 31390, "stable": 31391, "Hey": 31392, "lab": 31393, "offs": 31394, "▁nucleus": 31395, "creat": 31396, "▁burned": 31397, "▁eaten": 31398, "▁navigating": 31399, "▁Pract": 31400, "在许多": 31401, "为基本": 31402, "宽度": 31403, "北斗": 31404, "ilateral": 31405, "unciation": 31406, "news": 31407, "迄今为止": 31408, "ilty": 31409, "模态": 31410, "Jeff": 31411, "网页": 31412, "▁segments": 31413, "▁alphabet": 31414, "▁dying": 31415, "▁poorly": 31416, "▁treats": 31417, "▁hesit": 31418, "anol": 31419, "oots": 31420, "损失的": 31421, "网络中": 31422, "循环经济": 31423, "马克思列宁": 31424, "纤维素": 31425, "学校教育": 31426, "等诸多": 31427, "风俗": 31428, "肾小": 31429, "并举": 31430, "计算的": 31431, "欺骗": 31432, "▁Dal": 31433, "联合会": 31434, "▁trigg": 31435, "▁occupation": 31436, "▁artifacts": 31437, "▁brave": 31438, "▁declined": 31439, "▁safegu": 31440, "Jesus": 31441, "北大": 31442, "technology": 31443, "在过去": 31444, "升华": 31445, "权衡": 31446, "珍贵": 31447, "引人": 31448, "先导": 31449, "izoph": 31450, "製造": 31451, "▁resident": 31452, "OW": 31453, "▁perf": 31454, "▁attitude": 31455, "▁contest": 31456, "▁partnerships": 31457, "维亚": 31458, "▁Quebec": 31459, "▁departments": 31460, "ancies": 31461, "shape": 31462, "▁differentiation": 31463, "▁Baseball": 31464, "的认知": 31465, "企业对": 31466, "十五条": 31467, "能够实现": 31468, "%,": 31469, "积极推动": 31470, "四个方面": 31471, "水准": 31472, "之分": 31473, "纵深": 31474, "要约": 31475, "这种方式": 31476, "的探索": 31477, "道光": 31478, "一般情况下": 31479, "▁Deb": 31480, "暗示": 31481, "氏族": 31482, "於是": 31483, "衰落": 31484, "fight": 31485, "這種": 31486, "托管": 31487, "▁chains": 31488, "▁Appro": 31489, "lied": 31490, "Pot": 31491, "kal": 31492, "出去": 31493, "的基础设施": 31494, "的大型": 31495, "杂质": 31496, "或者是": 31497, "篡改": 31498, "metic": 31499, "Treat": 31500, "▁Franklin": 31501, "Group": 31502, "discuss": 31503, "▁Hal": 31504, "▁Elementary": 31505, "ppers": 31506, "Team": 31507, "▁acquire": 31508, "▁prevalent": 31509, "▁religions": 31510, "▁Hu": 31511, "▁Census": 31512, "为前提": 31513, "权利义务": 31514, "线粒": 31515, "矿产": 31516, "缺损": 31517, "运行机制": 31518, "防疫": 31519, "研究领域": 31520, "名录": 31521, "keys": 31522, "oxide": 31523, "▁cann": 31524, "▁alert": 31525, "▁persistent": 31526, "colspan": 31527, "▁crust": 31528, "▁resem": 31529, "初始化": 31530, "▁Local": 31531, "▁Leon": 31532, "▁Dead": 31533, "▁Czech": 31534, "提供了新的": 31535, "史记": 31536, "筹集": 31537, "将从": 31538, "所以在": 31539, "▁Wind": 31540, "▁patch": 31541, "Franc": 31542, "Official": 31543, "▁Nation": 31544, "▁enrich": 31545, "▁academ": 31546, "pace": 31547, "▁Ing": 31548, "娛樂": 31549, "最初的": 31550, "全生命周期": 31551, "环境质量": 31552, "劳动生产率": 31553, "这不仅": 31554, "掌控": 31555, "教学资源": 31556, "下调": 31557, "警惕": 31558, "红线": 31559, "▁coordination": 31560, "▁substr": 31561, "袭击": 31562, "的分子": 31563, "见图": 31564, "▁cytok": 31565, "主办": 31566, "阈值": 31567, "Hence": 31568, "rots": 31569, "陸軍": 31570, "NI": 31571, "orse": 31572, "izophren": 31573, "▁Railroad": 31574, "他们对": 31575, "该技术": 31576, "听证": 31577, "侦察": 31578, "厦门": 31579, "必须有": 31580, "上网": 31581, "exual": 31582, "青铜": 31583, "上映": 31584, "▁Role": 31585, "▁counting": 31586, "SARS": 31587, "▁Military": 31588, "enda": 31589, "Recogn": 31590, "▁scheduled": 31591, "▁shouldn": 31592, "▁Monday": 31593, "Kent": 31594, "▁chip": 31595, "ateur": 31596, "pract": 31597, "量为": 31598, "技术手段": 31599, "应当承担": 31600, "主要是指": 31601, "投资和": 31602, "改革开放和": 31603, "集资": 31604, "抗辩": 31605, "云端": 31606, "信用卡": 31607, "应急管理": 31608, "摄像头": 31609, "本位": 31610, "信息资源": 31611, "总体规划": 31612, "较多的": 31613, "为了实现": 31614, "应收账款": 31615, "萨斯": 31616, "闭环": 31617, "毛细": 31618, "物权法": 31619, "的长": 31620, "交替": 31621, "引发的": 31622, "在校": 31623, "▁hits": 31624, "是位於": 31625, "Maria": 31626, "▁Bah": 31627, "來的": 31628, "媒體": 31629, "generation": 31630, "▁graduated": 31631, "是全球": 31632, "病原体": 31633, "隐蔽": 31634, "游离": 31635, "aire": 31636, "Line": 31637, "acerb": 31638, "▁Wisconsin": 31639, "▁conclusions": 31640, "andra": 31641, "该公司": 31642, "ylon": 31643, "▁knock": 31644, "▁aloud": 31645, "▁connects": 31646, "▁enjoying": 31647, "lings": 31648, "一片": 31649, "terns": 31650, "Util": 31651, "▁Cell": 31652, "合唱": 31653, "商業": 31654, "研究小组": 31655, "时期内": 31656, "工业生产": 31657, "既可以": 31658, "配额": 31659, "我省": 31660, "蓬勃发展": 31661, "备课": 31662, "口语": 31663, "联通": 31664, "二号": 31665, "依法行政": 31666, "先进性": 31667, "企业所得税": 31668, "降低成本": 31669, "▁pharmac": 31670, "▁closest": 31671, "勋章": 31672, "昆虫": 31673, "Photo": 31674, "▁Ancient": 31675, "%▁▁": 31676, "指揮": 31677, "棒球": 31678, "Help": 31679, "▁PDF": 31680, "▁hearts": 31681, "clean": 31682, "▁extraction": 31683, "▁с": 31684, "▁physicians": 31685, "HER": 31686, "而这些": 31687, "九龍": 31688, "复旦": 31689, "两点": 31690, "▁LGBTQ": 31691, "▁dismiss": 31692, "▁feas": 31693, "▁walked": 31694, "人有": 31695, "其为": 31696, "▁soy": 31697, "ificate": 31698, "▁icon": 31699, "rost": 31700, "▁Lie": 31701, "▁bull": 31702, "▁storms": 31703, "letal": 31704, "icated": 31705, "block": 31706, "▁strip": 31707, "结构中": 31708, "孙中山": 31709, "地方的": 31710, "屋顶": 31711, "新阶段": 31712, "的主观": 31713, "集中于": 31714, "之于": 31715, "如果我们": 31716, "留置": 31717, "社保": 31718, "周知": 31719, "的业务": 31720, "vocals": 31721, "ombia": 31722, "▁mindfulness": 31723, "▁reinforce": 31724, "▁upset": 31725, "▁pine": 31726, "▁pride": 31727, "▁span": 31728, "和资源": 31729, "率领": 31730, "平安": 31731, "controlled": 31732, "Obs": 31733, "▁Les": 31734, "irs": 31735, "德尔": 31736, "▁enabled": 31737, "▁ethics": 31738, "arians": 31739, "dale": 31740, "guitar": 31741, "MHz": 31742, "急救": 31743, "进行分类": 31744, "Video": 31745, "erald": 31746, "?▁(": 31747, "▁Stephen": 31748, "▁MRI": 31749, "Online": 31750, "grim": 31751, "OF": 31752, "Illinois": 31753, "▁complement": 31754, "▁tab": 31755, "▁deleg": 31756, "▁Luther": 31757, "Mur": 31758, "acting": 31759, "embered": 31760, "Firstly": 31761, "强调的是": 31762, "政策措施": 31763, "成员的": 31764, "要将": 31765, "共同发展": 31766, "具体而言": 31767, "回升": 31768, "攻击者": 31769, "区域性": 31770, "落脚": 31771, "而没有": 31772, "论语": 31773, "沿革": 31774, "众所": 31775, "▁enhances": 31776, "一日": 31777, "Clear": 31778, "nie": 31779, "odge": 31780, "illo": 31781, "▁Captain": 31782, "odd": 31783, "▁gifts": 31784, "vo": 31785, "▁disagre": 31786, "▁reserve": 31787, "introdu": 31788, "基础的": 31789, "免疫反应": 31790, "免除": 31791, "业界": 31792, "isol": 31793, "受限": 31794, "完毕": 31795, "Psych": 31796, "urgical": 31797, "ircle": 31798, "▁polymer": 31799, "▁Tower": 31800, "▁divers": 31801, "verages": 31802, "▁illustrated": 31803, "olding": 31804, "▁bills": 31805, "▁welcome": 31806, "中国传统": 31807, "更强": 31808, "反腐": 31809, "活力的": 31810, "副院长": 31811, "只需要": 31812, "知府": 31813, "势必": 31814, "一审": 31815, "合同中": 31816, "整改": 31817, "党领导": 31818, "不同类型": 31819, "eur": 31820, "▁Offic": 31821, "ontin": 31822, "pi": 31823, "Final": 31824, "▁organizing": 31825, "ervatory": 31826, "▁smile": 31827, "▁consequence": 31828, "▁genres": 31829, "編號": 31830, "rative": 31831, "▁Own": 31832, "纠缠": 31833, "听觉": 31834, "行走": 31835, "西域": 31836, "行之": 31837, "▁Help": 31838, "的低": 31839, "了许多": 31840, "garet": 31841, "▁scal": 31842, "▁timing": 31843, "Pers": 31844, "▁chips": 31845, "▁seeks": 31846, "▁crowd": 31847, "▁plug": 31848, "▁worried": 31849, "经济利益": 31850, "药物治疗": 31851, "体现为": 31852, "相差": 31853, "货币的": 31854, "体征": 31855, "国家在": 31856, "现行的": 31857, "等领域的": 31858, "我们应该": 31859, "西欧": 31860, "仍处于": 31861, "因素的影响": 31862, "无序": 31863, "惩戒": 31864, "股权转让": 31865, "直接的": 31866, "古今": 31867, "quiry": 31868, "河道": 31869, "行為": 31870, "當中": 31871, "cancer": 31872, "▁Need": 31873, "收录": 31874, "▁Biology": 31875, "▁rival": 31876, "▁Path": 31877, "▁rocket": 31878, "▁aspir": 31879, "Episode": 31880, "▁MS": 31881, "大中": 31882, "文化与": 31883, "一对": 31884, "中存在": 31885, "完成后": 31886, "rasound": 31887, "動物": 31888, "▁Lu": 31889, "▁agreements": 31890, "Introdu": 31891, "paper": 31892, "▁snake": 31893, "became": 31894, "▁irregular": 31895, "▁washing": 31896, "urated": 31897, "▁Mot": 31898, "▁Sac": 31899, "ococc": 31900, "国家治理体系和治理能力现代化": 31901, "系统集成": 31902, "教师应": 31903, "以至": 31904, "水果": 31905, "政策性": 31906, "相互关系": 31907, "洗钱": 31908, "不同类型的": 31909, "事宜": 31910, "北极": 31911, "杀伤": 31912, "偏低": 31913, "可持续性": 31914, "人民当家作主": 31915, "浮动": 31916, "股价": 31917, "的案件": 31918, "副书记": 31919, "aptist": 31920, "▁Brad": 31921, "诺贝尔": 31922, "算法的": 31923, "后来的": 31924, "acity": 31925, "直觉": 31926, "形容": 31927, "cht": 31928, "Dav": 31929, "irical": 31930, "▁ger": 31931, "weed": 31932, "▁rescue": 31933, "▁Therapy": 31934, "developed": 31935, "▁answered": 31936, "▁filters": 31937, "▁residence": 31938, "Eval": 31939, "数列": 31940, "间隙": 31941, "侧面": 31942, "科研机构": 31943, "十一年": 31944, "合併": 31945, "不相同": 31946, "方程式": 31947, "目的地": 31948, "ailand": 31949, "吻合": 31950, "Rest": 31951, "acon": 31952, "▁Ans": 31953, "Python": 31954, "和建设": 31955, "并提出": 31956, "标准体系": 31957, "十一条": 31958, "第二百": 31959, "是不是": 31960, "帝王": 31961, "细则": 31962, "反动": 31963, "简便": 31964, "获利": 31965, "长效机制": 31966, "关乎": 31967, "议程": 31968, "台阶": 31969, "增设": 31970, "核实": 31971, "筑牢": 31972, "数据挖掘": 31973, "淡水": 31974, "所用": 31975, "总和": 31976, "赞同": 31977, "uct": 31978, "▁Prom": 31979, "属性的": 31980, "快捷": 31981, "▁Dark": 31982, "▁permit": 31983, "▁Mun": 31984, "took": 31985, "行政法": 31986, "bian": 31987, ":▁▁": 31988, "feel": 31989, "gets": 31990, "▁Hart": 31991, "这三个": 31992, "同胞": 31993, "不起": 31994, "大连": 31995, "研究方向": 31996, "人民共和國": 31997, "必須": 31998, "—▁—▁": 31999, "▁sour": 32000, "saying": 32001, "▁juvenile": 32002, "▁productive": 32003, "▁pept": 32004, "▁Hills": 32005, "教学设计": 32006, "外商投资": 32007, "马克思主义理论": 32008, "优惠政策": 32009, "由政府": 32010, "这就需要": 32011, "势头": 32012, "也成为": 32013, "职业病": 32014, "西周": 32015, "洛阳": 32016, "指标的": 32017, "回落": 32018, "并用": 32019, "即使是": 32020, "▁Queens": 32021, "Microsoft": 32022, "mostly": 32023, "▁databases": 32024, "articles": 32025, "rod": 32026, "▁ul": 32027, "戰鬥": 32028, "▁crash": 32029, "定居": 32030, "Full": 32031, "▁bridges": 32032, "并重": 32033, "家人": 32034, "话语权": 32035, "\\_": 32036, "的原": 32037, "生死": 32038, "▁dynasty": 32039, "Prim": 32040, "▁Aqu": 32041, "▁integrate": 32042, "▁interpretations": 32043, "▁viewers": 32044, "▁rolling": 32045, "金的": 32046, "▁Opp": 32047, "oberts": 32048, "htm": 32049, "▁WW": 32050, "image": 32051, "inator": 32052, "clerosis": 32053, "人口普查": 32054, "科学性": 32055, "异化": 32056, "的挑战": 32057, "能为": 32058, "诉讼请求": 32059, "变频": 32060, "电子邮件": 32061, "集权": 32062, "盛行": 32063, "富集": 32064, "成交": 32065, "摩尔": 32066, "查明": 32067, "北魏": 32068, "绿色金融": 32069, "做大": 32070, "▁continent": 32071, "行列": 32072, "Aust": 32073, "director": 32074, "▁pathogens": 32075, "▁kick": 32076, "▁embrace": 32077, "▁romantic": 32078, "▁salmon": 32079, "▁swelling": 32080, "hr": 32081, "▁economics": 32082, "inian": 32083, "iotic": 32084, "▁Si": 32085, "停滞": 32086, "合法的": 32087, "uerto": 32088, "('": 32089, "RCEP": 32090, "先前": 32091, "—▁▁—▁▁—▁▁—▁▁": 32092, "▁bottles": 32093, "▁chapters": 32094, "▁murd": 32095, "▁monthly": 32096, "osé": 32097, "英語": 32098, "▁static": 32099, "▁Territ": 32100, "▁shadow": 32101, "复合物": 32102, "▁Ni": 32103, "***": 32104, "▁meteor": 32105, "▁Premier": 32106, "rokes": 32107, "十三条": 32108, "风险挑战": 32109, "突破了": 32110, "杠杆率": 32111, "了一条": 32112, "财产权": 32113, "各种各": 32114, "而来的": 32115, "评议": 32116, "买方": 32117, "共存": 32118, "工人阶级": 32119, "涂层": 32120, "创造条件": 32121, "顺差": 32122, "信息基础设施": 32123, "大湾区": 32124, "中的地位": 32125, "研究工作": 32126, "加快构建": 32127, "什么样": 32128, "身份认证": 32129, "▁anten": 32130, "元宇宙": 32131, "inic": 32132, "oche": 32133, "itan": 32134, "untary": 32135, "graph": 32136, "eu": 32137, "▁jet": 32138, "▁Bishop": 32139, "▁cheap": 32140, "▁captain": 32141, "书的": 32142, "可能在": 32143, "是当前": 32144, "中具有": 32145, "断层": 32146, "未被": 32147, "每种": 32148, "▁stuck": 32149, "▁survivors": 32150, "▁yields": 32151, "简洁": 32152, "扩增": 32153, "一台": 32154, "▁Last": 32155, "烏克蘭": 32156, "●▁": 32157, "sound": 32158, "▁Mission": 32159, "rosc": 32160, "▁geometry": 32161, "▁Authority": 32162, "朝鮮": 32163, "▁Brook": 32164, "▁commands": 32165, "▁governance": 32166, "会计核算": 32167, "发达地区": 32168, "全面提升": 32169, "国土空间": 32170, "树脂": 32171, "选择了": 32172, "功利": 32173, "硬盘": 32174, "风貌": 32175, "廉政": 32176, "奋进": 32177, "组长": 32178, "▁ded": 32179, "▁cong": 32180, "▁chaos": 32181, "▁rituals": 32182, "第十五": 32183, "▁Tal": 32184, "ooth": 32185, "電腦": 32186, "相當": 32187, "anded": 32188, "si": 32189, "bey": 32190, "posure": 32191, "▁FC": 32192, "oping": 32193, "▁Six": 32194, "▁accord": 32195, "listed": 32196, "▁accomplished": 32197, "▁champion": 32198, "▁prolonged": 32199, ";(": 32200, "欠缺": 32201, "则为": 32202, "中亚": 32203, "▁Moh": 32204, "Cultural": 32205, "▁Youth": 32206, "ulative": 32207, "uncture": 32208, "▁Record": 32209, "▁Grade": 32210, "▁counties": 32211, "▁decomp": 32212, "▁floating": 32213, "Usually": 32214, "▁glac": 32215, "▁correlated": 32216, "▁marginalized": 32217, "土地利用": 32218, "则在": 32219, "到一个": 32220, "控制在": 32221, "发达国家的": 32222, "往往会": 32223, "的基本要求": 32224, "以下几点": 32225, "信息服务": 32226, "提高学生": 32227, "公信": 32228, "的研究成果": 32229, "举行的": 32230, "一般为": 32231, "opath": 32232, "▁Cro": 32233, "ims": 32234, "▁shield": 32235, "▁Khan": 32236, "integr": 32237, "▁wed": 32238, "▁unc": 32239, "▁Maryland": 32240, "▁eco": 32241, "boriginal": 32242, "▁sheep": 32243, "▁supportive": 32244, "▁Kal": 32245, "▁arc": 32246, "布拉": 32247, "aron": 32248, "弟子": 32249, "甲骨": 32250, "公众号": 32251, "反过来": 32252, "敏捷": 32253, "来完成": 32254, "疱疹": 32255, "ко": 32256, "在其他": 32257, "▁finance": 32258, "Working": 32259, "▁Ice": 32260, "举报": 32261, "開放": 32262, "version": 32263, "▁polym": 32264, "▁deer": 32265, "▁coding": 32266, "▁priest": 32267, "Applying": 32268, "▁consecut": 32269, "▁dangers": 32270, "achelor": 32271, "▁jaw": 32272, "教育工作": 32273, "协同创新": 32274, "资料的": 32275, "和学习": 32276, "哲学的": 32277, "座谈会": 32278, "开启了": 32279, "突发事件": 32280, "主要集中在": 32281, "共产国际": 32282, "生产关系": 32283, "的人生": 32284, "通气": 32285, "是我们党": 32286, "并由": 32287, "开发了": 32288, "限额": 32289, "这些都": 32290, "最重要": 32291, "▁Writing": 32292, "▁Tokyo": 32293, "▁Imperial": 32294, "MF": 32295, "Hung": 32296, "尔兰": 32297, "▁opens": 32298, "▁checking": 32299, "▁Today": 32300, "用法": 32301, "cery": 32302, "lighting": 32303, "▁distinguished": 32304, "▁navigation": 32305, "unes": 32306, "學習": 32307, "▁newspapers": 32308, "Suppose": 32309, "▁median": 32310, "▁locate": 32311, "印尼": 32312, "idel": 32313, "性等": 32314, "学院教授": 32315, "卵巢": 32316, "多样的": 32317, "占总": 32318, "plane": 32319, "音频": 32320, "▁Notes": 32321, "▁antibody": 32322, "▁leak": 32323, "▁sup": 32324, "▁skull": 32325, "▁cluster": 32326, "泰国": 32327, "▁collaborate": 32328, "▁guests": 32329, "▁Kansas": 32330, "经济制度": 32331, "不成": 32332, "变法": 32333, "对人类": 32334, "方向和": 32335, "人与人": 32336, "劳工": 32337, "声誉": 32338, "大赛": 32339, "制止": 32340, "层层": 32341, "税费": 32342, "不分": 32343, "近几年": 32344, "Traditional": 32345, "以下是": 32346, "《》": 32347, "Sources": 32348, "▁traditionally": 32349, ".),▁": 32350, "story": 32351, "自由的": 32352, "笔记": 32353, "走上": 32354, "兵力": 32355, "上而": 32356, "打算": 32357, "Edward": 32358, "▁Table": 32359, "德的": 32360, "相较于": 32361, "暂停": 32362, "】▁": 32363, "ographers": 32364, "▁vaccination": 32365, "Taking": 32366, "▁vulnerability": 32367, "rights": 32368, "路口": 32369, "esteem": 32370, "▁drew": 32371, "▁exceptional": 32372, "▁olive": 32373, "fostering": 32374, "▁fluids": 32375, "▁prevented": 32376, "协同发展": 32377, "国资": 32378, "在当前": 32379, "的一方": 32380, "抵押权": 32381, "核心竞争力": 32382, "非公有制": 32383, "恶性肿瘤": 32384, "边区": 32385, "基数": 32386, "和监督": 32387, "之所": 32388, "▁info": 32389, "开发人员": 32390, "优化的": 32391, "生理学": 32392, "▁variant": 32393, "online": 32394, "Ren": 32395, "平台上": 32396, "▁imperial": 32397, "ERS": 32398, ".).▁": 32399, "Generally": 32400, "▁palm": 32401, "▁breakfast": 32402, "▁harness": 32403, "▁regime": 32404, "rup": 32405, "▁impairment": 32406, "Athlet": 32407, "并从": 32408, "路由器": 32409, "及以上": 32410, "丰富了": 32411, "提供服务": 32412, "行人": 32413, "的条件下": 32414, "▁dataset": 32415, "Spain": 32416, "▁analog": 32417, "iblings": 32418, "▁historians": 32419, "▁evaluating": 32420, "英格兰": 32421, "是一位": 32422, "aer": 32423, "社会和": 32424, "配电": 32425, "强国的": 32426, "课程设置": 32427, "法律和": 32428, "规模和": 32429, "变得更加": 32430, "道教": 32431, "勘探": 32432, "在现实": 32433, "膳食": 32434, "访谈": 32435, "并不意味着": 32436, "十四年": 32437, "着力点": 32438, "lades": 32439, "innish": 32440, "开了": 32441, "该系统": 32442, "ipation": 32443, "oths": 32444, "vely": 32445, "▁histories": 32446, "powered": 32447, "®▁": 32448, "▁cerv": 32449, "▁mast": 32450, "▁keyboard": 32451, "▁musician": 32452, "inda": 32453, "自動": 32454, "▁FDA": 32455, "UD": 32456, "而无": 32457, "活泼": 32458, "大会上": 32459, "较弱": 32460, "中发现": 32461, "先锋": 32462, "imeter": 32463, "leveland": 32464, "資訊": 32465, "▁Blood": 32466, "rehend": 32467, "▁critics": 32468, "酰胺": 32469, "Soc": 32470, "▁MP": 32471, "準決賽": 32472, "▁Defense": 32473, "▁Import": 32474, "▁Ow": 32475, "nest": 32476, "的社会主义": 32477, "技术应用": 32478, "和关键": 32479, "机组": 32480, "治疗方法": 32481, "等行业": 32482, "坚持以人民为中心": 32483, "病虫": 32484, "一九": 32485, "单片": 32486, "放宽": 32487, "李某": 32488, "排出": 32489, "思想道德": 32490, "节日": 32491, "注意事项": 32492, "案例分析": 32493, "第二大": 32494, "▁strings": 32495, "▁Round": 32496, "▁Hen": 32497, "anese": 32498, "▁occurrence": 32499, "prising": 32500, "▁Win": 32501, "ousing": 32502, "▁citizen": 32503, "agger": 32504, "thetics": 32505, "oba": 32506, "▁gland": 32507, "电视剧": 32508, "识别和": 32509, "▁Chair": 32510, "▁Neg": 32511, "▁cues": 32512, "▁packed": 32513, "▁presenting": 32514, "▁raises": 32515, "▁·": 32516, "inburgh": 32517, "Appro": 32518, "anding": 32519, "mix": 32520, "地理学": 32521, "工业企业": 32522, "至关重要的": 32523, "肝癌": 32524, "双方的": 32525, "发现和": 32526, "驳回": 32527, "主体性": 32528, "人大代表": 32529, "多维": 32530, "基特": 32531, "图示": 32532, "众所周知": 32533, "number": 32534, "lay": 32535, "剂的": 32536, "在研究": 32537, "eating": 32538, "▁composer": 32539, "▁investigations": 32540, "结局": 32541, "扩充": 32542, "▁accommodate": 32543, "▁assignments": 32544, "▁missed": 32545, "Exactly": 32546, "屏蔽": 32547, "/-▁": 32548, "novation": 32549, "ulu": 32550, "大理": 32551, "全国人大常委会": 32552, "二百": 32553, "太多": 32554, "表达的": 32555, "Writing": 32556, "▁genetics": 32557, "格拉": 32558, "inders": 32559, "可能与": 32560, "之和": 32561, "通讯作者": 32562, "国家自然科学基金": 32563, "▁distinction": 32564, "Project": 32565, "Resp": 32566, "▁Case": 32567, "建築物": 32568, "analysis": 32569, "▁oste": 32570, "約翰": 32571, "危险性": 32572, "而成的": 32573, "落后的": 32574, "产生影响": 32575, "巧妙": 32576, "禀赋": 32577, "能量的": 32578, "微课": 32579, "载荷": 32580, "进入新时代": 32581, "闲置": 32582, "大运河": 32583, "旅游业": 32584, "归根": 32585, "情况进行": 32586, "民族团结": 32587, "绿水": 32588, "上半年": 32589, "和能力": 32590, "above": 32591, "affeine": 32592, "人類": 32593, "的唯一": 32594, "▁cavity": 32595, "▁colleges": 32596, "▁superhero": 32597, "▁altitude": 32598, "▁attacked": 32599, "▁sorts": 32600, "类比": 32601, "Russian": 32602, "atable": 32603, "video": 32604, "編劇": 32605, "odynam": 32606, "north": 32607, "▁galaxy": 32608, "年由": 32609, "user": 32610, "▁adhes": 32611, "穿透": 32612, "上去": 32613, "换言之": 32614, "天人": 32615, "▁belongs": 32616, "▁caps": 32617, "Gal": 32618, "LV": 32619, "鱼类": 32620, "Author": 32621, "Israel": 32622, "▁Impact": 32623, "create": 32624, "济南": 32625, "ader": 32626, "是一個": 32627, "▁Materials": 32628, "足球運動員": 32629, "omo": 32630, "contribut": 32631, "▁Junior": 32632, "Explore": 32633, "▁glue": 32634, "▁Mes": 32635, "公共管理": 32636, "法律规范": 32637, "适用法律": 32638, "世界一流": 32639, "受众": 32640, "宋朝": 32641, "等原因": 32642, "决策部署": 32643, "地缘": 32644, "不完善": 32645, "精神文明": 32646, "质量控制": 32647, "Should": 32648, "▁fears": 32649, "▁satellites": 32650, "▁piv": 32651, "▁sixth": 32652, "人或": 32653, "开发出": 32654, "大学教授": 32655, "如果在": 32656, "液态": 32657, "Cell": 32658, "曾經": 32659, "擊敗": 32660, "still": 32661, "学报": 32662, "太郎": 32663, "omat": 32664, "▁anymore": 32665, "▁submit": 32666, "elli": 32667, "▁chairman": 32668, "▁progn": 32669, "▁pests": 32670, "▁tactics": 32671, "拉伸": 32672, "不法": 32673, "医科": 32674, "共產黨": 32675, "ienna": 32676, "inology": 32677, "之一是": 32678, "蛋白的": 32679, "电平": 32680, "▁renal": 32681, "▁Ty": 32682, "Types": 32683, "▁quantitative": 32684, "inos": 32685, "中国制造": 32686, "党和国家事业": 32687, "矢量": 32688, "以适应": 32689, "持续时间": 32690, "驰名": 32691, "走廊": 32692, "郑州": 32693, "电离": 32694, "总体布局": 32695, "波段": 32696, "成果的": 32697, "理論": 32698, "各个领域": 32699, "锂离子": 32700, "化学品": 32701, "无缝": 32702, "山的": 32703, "在第": 32704, "而出": 32705, "renal": 32706, "奥地利": 32707, "chemical": 32708, "▁Title": 32709, "▁constituency": 32710, "▁copyright": 32711, "专辑": 32712, "水解": 32713, "Hg": 32714, "Cross": 32715, "%▁(": 32716, "▁allergy": 32717, "▁coronary": 32718, "▁graphics": 32719, "▁suspected": 32720, "▁journals": 32721, "▁medalists": 32722, "獎項": 32723, "phy": 32724, "本科生": 32725, "填写": 32726, "通报": 32727, "主要表现为": 32728, "hang": 32729, "!)▁": 32730, "▁exclusive": 32731, "lad": 32732, "Would": 32733, "Word": 32734, "cells": 32735, "▁abundance": 32736, "▁cited": 32737, "▁commissioned": 32738, "▁disappear": 32739, "▁grapp": 32740, "▁scattered": 32741, "▁automatic": 32742, "浏览器": 32743, "国际组织": 32744, "保护主义": 32745, "和农村": 32746, "心血管疾病": 32747, "粗放": 32748, "困惑": 32749, "模范": 32750, "新生儿": 32751, "凝血": 32752, "引发了": 32753, "一国两制": 32754, "呕吐": 32755, "刑事诉讼法": 32756, "大势": 32757, "明知": 32758, "Plan": 32759, "▁Pas": 32760, "持续的": 32761, "必定": 32762, "▁Circ": 32763, "rik": 32764, "▁variants": 32765, "▁Kit": 32766, "分為": 32767, "<|endoftext|>": 0, "<|im_start|>": 1, "<|im_end|>": 2, "<|pad|>": 3, "<|reserved_0|>": 4, "<|reserved_1|>": 5, "<|reserved_2|>": 6, "<|reserved_3|>": 7, "<|reserved_4|>": 8, "<|reserved_5|>": 9, "<|reserved_6|>": 10, "<|reserved_7|>": 11, "<|reserved_8|>": 12, "<|reserved_9|>": 13, "<|reserved_10|>": 14, "<|reserved_11|>": 15, "<|reserved_12|>": 16, "<|reserved_13|>": 17, "<|reserved_14|>": 18, "<|reserved_15|>": 19, "<|reserved_16|>": 20, "<|reserved_17|>": 21, "<|reserved_18|>": 22, "<|reserved_19|>": 23, "<|reserved_20|>": 24, "<|reserved_21|>": 25, "<|reserved_22|>": 26, "<|reserved_23|>": 27, "<|reserved_24|>": 28, "<|reserved_25|>": 29, "<|reserved_26|>": 30, "<|reserved_27|>": 31, "<|reserved_28|>": 32, "<|reserved_29|>": 33, "<|reserved_30|>": 34, "<|reserved_31|>": 35, "<|reserved_32|>": 36, "<|reserved_33|>": 37, "<|reserved_34|>": 38, "<|reserved_35|>": 39, "<|reserved_36|>": 40, "<|reserved_37|>": 41, "<|reserved_38|>": 42, "<|reserved_39|>": 43, "<|reserved_40|>": 44, "<|reserved_41|>": 45, "<|reserved_42|>": 46, "<|reserved_43|>": 47, "<|reserved_44|>": 48, "<|reserved_45|>": 49, "<|reserved_46|>": 50, "<|reserved_47|>": 51, "<|reserved_48|>": 52, "<|reserved_49|>": 53, "<|reserved_50|>": 54, "<|reserved_51|>": 55, "<|reserved_52|>": 56, "<|reserved_53|>": 57, "<|reserved_54|>": 58, "<|reserved_55|>": 59, "<|reserved_56|>": 60, "<|reserved_57|>": 61, "<|reserved_58|>": 62, "<|reserved_59|>": 63}, "merges": [["▁", "t"], ["i", "n"], ["h", "e"], ["▁", "a"], ["r", "e"], ["o", "n"], ["e", "r"], ["a", "t"], [",", "▁"], ["▁t", "he"], ["o", "r"], ["▁", "s"], ["a", "n"], ["e", "n"], ["e", "s"], ["▁", "c"], ["▁", "o"], ["a", "l"], ["i", "t"], ["i", "s"], ["in", "g"], ["e", "d"], ["▁", "w"], ["▁", "p"], [".", "▁"], ["a", "r"], ["▁", "f"], ["o", "u"], ["▁o", "f"], ["▁", "b"], ["▁", "in"], ["n", "d"], ["i", "c"], ["i", "on"], ["▁", "m"], ["▁t", "o"], ["▁", "d"], ["l", "e"], ["a", "s"], ["r", "o"], ["▁a", "nd"], ["en", "t"], ["c", "t"], ["▁", "h"], ["i", "l"], ["o", "m"], ["▁", "e"], ["s", "t"], ["▁t", "h"], ["▁", "re"], ["e", "l"], ["▁", "l"], ["e", "t"], ["o", "l"], ["\n", "\n"], ["▁", "n"], ["at", "ion"], ["i", "v"], ["an", "d"], ["i", "m"], ["i", "d"], ["u", "s"], ["r", "a"], ["l", "y"], ["c", "h"], ["u", "r"], ["i", "g"], ["o", "w"], ["▁", "g"], ["c", "e"], ["o", "t"], ["u", "t"], ["▁", "is"], ["a", "m"], ["i", "r"], ["▁", "▁"], ["▁s", "t"], ["▁b", "e"], ["T", "he"], ["er", "s"], ["▁f", "or"], ["u", "l"], ["at", "e"], ["▁", "S"], ["t", "he"], ["a", "y"], ["▁", "C"], ["▁", "on"], ["a", "d"], ["it", "h"], ["▁", "("], ["s", "e"], ["t", "h"], ["▁", "y"], ["u", "n"], ["▁th", "at"], ["v", "e"], ["▁", "A"], ["i", "f"], ["v", "er"], ["t", "er"], ["▁c", "on"], ["▁a", "s"], ["▁p", "ro"], ["▁w", "ith"], ["a", "g"], ["is", "t"], ["o", "d"], ["u", "m"], ["e", "m"], ["▁a", "n"], ["i", "es"], ["o", "p"], ["▁", "M"], ["re", "s"], ["▁a", "l"], ["ou", "r"], ["a", "b"], ["es", "s"], ["▁a", "re"], ["发", "展"], ["▁", "he"], ["e", "ct"], ["a", "c"], ["e", "re"], ["▁e", "x"], ["▁", "P"], ["it", "y"], ["▁", "v"], ["o", "s"], ["▁", "or"], ["▁c", "om"], ["il", "l"], ["or", "y"], ["t", "s"], ["e", "c"], ["o", "re"], ["o", "c"], ["▁", "it"], ["ro", "m"], ["q", "u"], ["m", "ent"], ["a", "in"], ["-", "-"], ["ig", "h"], ["k", "e"], ["p", "p"], ["▁", "B"], ["es", "t"], ["iv", "e"], ["u", "d"], ["▁b", "y"], [":", "▁"], ["▁w", "as"], ["▁w", "h"], ["i", "al"], ["l", "d"], ["▁a", "t"], ["中", "国"], ["▁c", "h"], ["u", "re"], ["▁", "R"], ["社", "会"], ["r", "i"], ["▁d", "e"], ["al", "l"], ["▁f", "rom"], ["an", "t"], ["r", "ou"], ["▁", "D"], ["▁", "I"], ["▁", "us"], ["▁s", "u"], ["ic", "al"], ["-", "▁"], ["o", "g"], ["经", "济"], [")", "▁"], ["ar", "t"], ["n", "t"], ["▁", "T"], ["or", "t"], ["▁c", "an"], ["e", "w"], ["▁", "le"], ["▁", "r"], ["he", "r"], ["ate", "g"], ["▁", "E"], ["▁", "H"], ["研", "究"], ["ion", "s"], ["▁", "L"], ["a", "p"], ["▁", "en"], ["▁h", "a"], ["in", "e"], ["▁", "G"], ["▁s", "p"], ["el", "l"], ["▁", "F"], ["ar", "d"], ["技", "术"], ["g", "e"], ["ateg", "ory"], ["▁s", "h"], ["g", "h"], ["▁y", "ou"], ["▁", "N"], ["e", "ar"], ["p", "l"], ["C", "ategory"], ["at", "ed"], ["▁p", "l"], ["a", "re"], ["igh", "t"], ["可", "以"], ["the", "r"], ["d", "u"], ["▁", "W"], ["▁", "u"], ["▁s", "e"], ["▁a", "b"], ["ic", "h"], ["a", "k"], ["a", "ct"], ["p", "er"], ["进", "行"], ["▁in", "t"], ["i", "z"], ["om", "e"], ["ou", "t"], ["f", "f"], ["▁w", "or"], ["an", "s"], ["一", "个"], ["企", "业"], ["i", "p"], ["▁", "im"], ["as", "t"], ["o", "st"], ["u", "st"], ["▁the", "ir"], ["on", "g"], ["ou", "s"], ["数", "据"], ["管", "理"], ["p", "t"], ["i", "a"], ["I", "n"], ["en", "d"], ["学", "生"], ["▁ha", "ve"], ["国", "家"], ["ation", "s"], ["问", "题"], ["T", "h"], ["id", "e"], ["i", "b"], ["ou", "ld"], ["▁y", "our"], ["▁n", "ot"], ["ar", "y"], ["▁th", "is"], ["s", "o"], ["k", "s"], ["ag", "e"], ["教", "育"], ["通", "过"], ["or", "m"], ["▁com", "p"], ["r", "u"], ["系", "统"], ["▁a", "d"], ["c", "l"], ["he", "n"], ["▁", "k"], ["ent", "s"], ["e", "p"], ["▁", "J"], ["▁con", "t"], ["▁d", "is"], ["▁re", "s"], ["v", "el"], ["ul", "t"], ["o", "od"], ["a", "v"], ["信", "息"], ["an", "ce"], ["c", "c"], ["ig", "n"], ["b", "er"], ["i", "re"], ["▁w", "e"], ["at", "er"], ["in", "d"], ["c", "es"], ["u", "al"], ["主", "义"], ["a", "ch"], ["--", "--"], ["r", "y"], ["w", "h"], ["工", "作"], ["as", "s"], ["▁", "un"], ["重", "要"], ["▁c", "l"], ["w", "e"], ["ab", "le"], ["▁n", "e"], ["res", "s"], ["▁", "U"], ["il", "d"], ["on", "e"], ["en", "ce"], ["o", "o"], ["建", "设"], ["▁t", "e"], ["ic", "e"], ["ct", "ion"], ["an", "g"], ["主", "要"], ["▁al", "l"], ["or", "d"], ["▁", "O"], ["u", "e"], ["is", "h"], ["re", "at"], ["it", "ion"], ["人", "民"], ["or", "s"], ["▁m", "ore"], ["en", "s"], ["u", "b"], ["▁o", "ther"], ["▁al", "so"], ["▁m", "e"], ["方", "面"], ["ac", "k"], ["▁the", "y"], ["am", "e"], ["实", "现"], ["as", "e"], ["i", "an"], ["基", "础"], ["p", "h"], ["过", "程"], ["▁h", "as"], ["服", "务"], ["▁w", "ill"], ["i", "le"], ["市", "场"], ["▁w", "ere"], ["b", "ut"], ["f", "ere"], ["▁im", "p"], ["el", "y"], ["r", "ic"], ["▁d", "o"], ["▁ab", "out"], ["im", "e"], ["能", "力"], ["i", "e"], ["文", "化"], ["安", "全"], ["▁p", "er"], ["需", "要"], ["▁S", "t"], ["r", "it"], ["▁a", "r"], ["我", "们"], ["a", "ce"], ["▁▁", "▁▁"], ["▁a", "pp"], ["▁", "j"], ["使", "用"], ["a", "ke"], ["\"", "▁"], ["方", "法"], ["f", "orm"], ["i", "ke"], ["m", "er"], ["▁m", "an"], ["▁p", "re"], ["教", "学"], ["ou", "nd"], ["▁", "K"], ["▁o", "ut"], [";", "▁"], ["Th", "is"], ["ow", "n"], ["▁h", "is"], ["中", "的"], ["I", "t"], ["ing", "s"], ["▁", "\""], ["不", "同"], ["o", "se"], ["生", "产"], ["▁the", "m"], ["ou", "nt"], ["ver", "y"], ["nd", "er"], ["ter", "n"], ["▁st", "ud"], ["环", "境"], ["t", "e"], ["a", "us"], ["科", "学"], ["具", "有"], ["分", "析"], ["制", "度"], ["▁e", "v"], ["学", "习"], ["影", "响"], ["我", "国"], ["应", "用"], ["提", "供"], ["on", "s"], ["ol", "og"], ["rou", "gh"], ["政", "府"], ["创", "新"], ["▁s", "c"], ["e", "op"], ["组", "织"], ["▁on", "e"], [")", ",▁"], ["er", "v"], ["▁int", "o"], ["▁it", "s"], ["on", "d"], ["▁s", "y"], ["▁u", "p"], ["▁com", "m"], ["网", "络"], ["it", "e"], ["▁t", "ra"], ["a", "il"], ["re", "e"], ["▁", "ro"], ["l", "ow"], ["o", "v"], ["at", "es"], ["eop", "le"], ["it", "ies"], ["作", "用"], ["–", "▁"], ["理", "论"], ["he", "re"], ["ay", "s"], ["关", "系"], ["▁p", "art"], ["公", "司"], ["if", "ic"], ["基", "本"], ["以", "及"], ["体", "系"], ["k", "ing"], ["要", "求"], ["可", "能"], ["cl", "ud"], ["le", "ct"], ["▁re", "c"], ["n", "e"], ["▁C", "h"], ["▁", "qu"], ["o", "b"], ["▁b", "et"], ["ur", "ing"], ["结", "构"], ["y", "s"], ["▁be", "c"], ["资", "源"], ["o", "ve"], ["l", "es"], ["设", "计"], ["ir", "st"], ["▁c", "ol"], ["i", "ous"], ["产", "业"], ["方", "式"], ["▁", "V"], ["at", "ing"], ["re", "n"], ["提", "高"], ["ou", "gh"], ["rou", "nd"], ["m", "s"], ["知", "识"], ["▁the", "se"], ["作", "为"], ["▁d", "if"], ["al", "ly"], ["改", "革"], ["世", "界"], ["▁t", "r"], ["▁a", "ct"], ["包", "括"], ["▁u", "nder"], ["▁k", "n"], ["n", "ing"], ["p", "le"], ["形", "成"], ["▁s", "o"], ["ro", "w"], ["o", "ol"], ["▁o", "ver"], ["▁y", "ear"], ["▁t", "ime"], ["▁m", "ay"], ["▁a", "g"], ["同", "时"], ["历", "史"], ["▁th", "an"], ["▁", "–▁"], ["一", "种"], ["l", "p"], ["国", "际"], ["at", "h"], ["wh", "ich"], ["y", "p"], ["法", "律"], ["ul", "ar"], ["▁wh", "o"], ["he", "d"], ["▁w", "hen"], ["c", "ed"], ["相", "关"], ["▁s", "ome"], ["▁d", "es"], ["这", "些"], ["l", "ic"], ["re", "d"], ["ation", "al"], ["ic", "s"], ["存", "在"], ["f", "ter"], ["▁p", "eople"], ["*", "*"], ["ar", "k"], ["规", "定"], ["部", "分"], ["o", "ver"], ["▁", "ra"], ["al", "th"], ["内", "容"], ["l", "l"], ["▁n", "ew"], ["细", "胞"], ["行", "为"], ["保", "护"], ["al", "s"], ["▁t", "w"], ["in", "t"], ["u", "res"], ["j", "ect"], ["▁l", "ike"], ["因", "此"], ["▁o", "ur"], ["▁he", "lp"], ["活", "动"], ["as", "ed"], ["et", "h"], ["金", "融"], ["e", "x"], ["▁th", "rough"], ["▁con", "s"], ["▁in", "c"], ["▁be", "en"], ["▁", "-▁"], ["没", "有"], ["产", "品"], ["ot", "h"], ["vel", "op"], ["政", "治"], ["▁f", "e"], ["其", "他"], ["成", "为"], ["n", "g"], ["▁h", "ow"], ["建", "立"], ["▁sp", "ec"], ["标", "准"], ["f", "ul"], ["现", "代"], ["就", "是"], ["政", "策"], ["ment", "s"], ["st", "em"], ["ol", "d"], ["ff", "ect"], ["i", "ent"], ["提", "出"], ["▁us", "e"], ["实", "践"], ["u", "c"], ["f", "t"], ["▁re", "l"], ["▁wh", "ich"], ["oo", "k"], ["思", "想"], ["▁a", "cc"], ["目", "标"], ["aus", "e"], ["控", "制"], ["W", "h"], ["利", "用"], ["▁h", "ad"], ["▁b", "l"], ["▁g", "en"], ["▁f", "irst"], ["is", "s"], ["价", "值"], ["at", "ive"], ["a", "w"], ["u", "ch"], ["计", "算"], ["发", "生"], ["▁in", "d"], ["▁ne", "ed"], ["情", "况"], ["▁re", "p"], ["iv", "ers"], ["▁dif", "fere"], ["er", "m"], ["we", "en"], ["时", "间"], ["▁ex", "p"], ["▁wor", "k"], ["▁e", "m"], ["▁a", "m"], ["▁re", "g"], ["之", "间"], ["处", "理"], ["ra", "ct"], ["领", "域"], ["风", "险"], ["i", "ed"], ["第", "一"], ["t", "o"], ["▁us", "ed"], ["l", "and"], ["根", "据"], ["质", "量"], ["▁p", "r"], ["对", "于"], ["▁of", "f"], ["il", "ity"], ["数", "字"], ["▁U", "n"], ["有", "效"], ["ro", "p"], ["▁as", "s"], ["▁in", "v"], ["人", "的"], ["▁p", "h"], ["必", "须"], ["产", "生"], ["▁tw", "o"], ["社会", "主义"], ["H", "e"], ["----", "----"], [")", ".▁"], ["▁a", "c"], ["这", "种"], ["功", "能"], ["is", "e"], ["▁pro", "du"], ["▁w", "ould"], ["水", "平"], ["s", "s"], ["▁bet", "ween"], ["if", "e"], ["it", "s"], [".", "\""], ["t", "ain"], ["解", "决"], ["生", "活"], ["e", "f"], ["i", "et"], ["▁d", "ec"], ["▁s", "ur"], ["t", "ing"], ["os", "s"], ["”", "▁"], ["▁pro", "v"], ["▁de", "velop"], ["劳", "动"], ["ra", "m"], ["传", "统"], ["▁wh", "at"], ["▁ch", "ild"], ["S", "t"], ["c", "y"], ["智", "能"], ["全", "面"], ["▁he", "r"], ["ch", "ool"], ["机", "制"], ["in", "s"], ["模", "式"], ["▁an", "y"], ["d", "ition"], ["g", "an"], ["il", "y"], ["ic", "t"], ["不", "断"], ["on", "t"], ["?", "▁"], ["项", "目"], ["专", "业"], ["ic", "k"], ["认", "为"], ["▁m", "ost"], ["由", "于"], ["投", "资"], ["it", "ed"], ["w", "n"], ["▁s", "a"], ["ad", "e"], ["o", "y"], ["▁re", "m"], ["ow", "er"], ["id", "ent"], ["he", "s"], ["in", "es"], ["e", "ver"], ["美", "国"], ["e", "g"], ["ch", "n"], ["▁s", "m"], ["条", "件"], ["中", "心"], ["▁f", "l"], ["工", "程"], ["人", "员"], ["▁sy", "stem"], ["mer", "ic"], ["▁", "Y"], ["机", "构"], ["an", "ge"], ["变", "化"], ["▁ex", "am"], ["。", "▁"], ["▁b", "u"], ["g", "et"], ["c", "ess"], ["教", "师"], ["▁su", "ch"], ["▁o", "b"], ["ur", "al"], ["城", "市"], ["▁in", "f"], ["民", "族"], ["ib", "le"], ["c", "om"], ["ere", "d"], ["如", "果"], ["课", "程"], ["▁in", "clud"], ["能", "够"], ["实", "施"], ["▁tr", "ans"], ["t", "en"], ["c", "er"], ["行", "政"], ["自", "己"], ["ak", "ing"], ["▁in", "st"], ["b", "le"], ["▁su", "b"], ["性", "的"], ["H", "ow"], ["i", "o"], ["实", "验"], ["▁at", "t"], ["el", "f"], ["▁I", "n"], ["时", "代"], ["发展", "的"], ["这", "一"], ["ist", "s"], ["ar", "ch"], ["培", "养"], ["实", "际"], ["▁c", "ould"], ["大", "学"], ["▁on", "ly"], ["推", "动"], ["定", "的"], ["▁n", "o"], ["▁s", "ign"], ["地", "区"], ["ot", "her"], ["科", "技"], ["上", "的"], ["w", "ard"], ["所", "有"], ["第", "二"], ["at", "a"], ["h", "ip"], ["ur", "n"], ["需", "求"], ["全", "球"], ["发", "现"], ["▁le", "ar"], ["出", "现"], ["▁v", "ar"], ["▁differe", "nt"], ["▁p", "at"], ["▁pl", "ay"], ["大", "的"], ["at", "ure"], ["▁", "if"], ["▁in", "ter"], ["结", "合"], ["u", "es"], ["A", "s"], ["iv", "es"], ["olog", "y"], ["an", "y"], ["或", "者"], ["in", "k"], ["▁d", "uring"], ["生", "态"], ["f", "ore"], ["▁p", "ers"], ["▁p", "ol"], ["▁man", "y"], [".", "."], ["▁the", "re"], ["v", "ent"], ["推", "进"], ["生", "物"], [")", "."], ["一", "些"], ["▁", "“"], ["▁ex", "per"], ["res", "ent"], ["▁su", "pp"], ["▁m", "od"], ["i", "ence"], ["▁c", "re"], ["s", "p"], ["代", "表"], ["合", "作"], ["促", "进"], ["▁p", "o"], ["增", "加"], ["他", "们"], ["ect", "ion"], ["不", "能"], ["责", "任"], ["p", "s"], ["▁n", "um"], ["共", "同"], ["▁dis", "c"], ["▁l", "oc"], ["▁w", "ell"], ["an", "ts"], ["▁for", "m"], ["的", "发展"], ["▁h", "igh"], ["▁g", "o"], ["增", "长"], ["▁w", "ater"], ["n", "ess"], ["支", "持"], ["▁s", "im"], ["|", "▁"], ["ol", "low"], ["工", "业"], ["e", "v"], ["or", "n"], ["精", "神"], ["战", "略"], ["▁year", "s"], ["▁e", "ar"], ["中", "央"], ["▁f", "ound"], ["自", "然"], ["阶", "段"], ["i", "qu"], ["▁he", "alth"], ["W", "e"], ["st", "and"], ["农", "业"], ["开", "发"], ["The", "y"], ["一", "步"], ["核", "心"], ["加", "强"], ["ar", "m"], ["c", "ent"], ["新", "的"], ["is", "m"], ["▁e", "very"], ["提", "升"], ["F", "or"], ["!", "▁"], ["结", "果"], ["or", "k"], ["the", "y"], ["le", "t"], ["A", "l"], ["▁imp", "ort"], ["\"", ","], ["▁m", "ed"], ["i", "x"], ["形", "式"], ["部", "门"], ["o", "f"], ["成", "本"], ["ag", "es"], ["▁a", "fter"], ["▁res", "p"], ["资", "本"], ["▁c", "all"], ["im", "es"], ["ru", "ct"], ["C", "h"], ["▁comm", "un"], ["ical", "ly"], ["党", "的"], ["▁c", "ent"], ["d", "s"], ["ic", "es"], ["▁c", "ar"], ["c", "k"], ["er", "g"], ["的", "是"], ["▁g", "et"], ["▁d", "et"], ["空", "间"], ["已", "经"], ["目", "前"], ["iz", "ed"], ["▁t", "yp"], ["关", "键"], ["▁kn", "ow"], ["ual", "ly"], ["个", "人"], ["设", "备"], ["选", "择"], ["▁c", "o"], ["▁d", "ist"], ["坚", "持"], ["ent", "ial"], ["这", "个"], ["i", "ew"], ["化", "的"], ["iz", "e"], ["▁e", "ach"], ["▁", "ke"], ["▁f", "am"], ["原", "则"], ["i", "k"], ["▁re", "se"], ["▁e", "ffect"], ["的", "一"], ["en", "g"], ["in", "al"], ["直", "接"], ["r", "an"], ["因", "素"], ["过程", "中"], ["综", "合"], ["c", "on"], ["其", "中"], ["▁ex", "pl"], ["ce", "pt"], ["▁s", "et"], ["导", "致"], ["u", "g"], ["▁te", "chn"], ["▁A", "meric"], ["保", "障"], ["▁st", "r"], ["持", "续"], ["单", "位"], ["人", "才"], ["的", "重要"], ["a", "x"], ["第", "三"], ["▁s", "k"], ["合", "同"], ["运", "动"], ["▁ar", "t"], ["▁us", "ing"], ["l", "ed"], ["ra", "ph"], ["om", "m"], ["进", "一步"], ["o", "h"], ["▁s", "ec"], ["u", "p"], ["al", "e"], ["人", "类"], ["全", "国"], ["积", "极"], ["▁pro", "g"], ["form", "ation"], ["▁c", "ell"], ["模", "型"], ["也", "是"], ["▁w", "here"], ["具", "体"], ["▁l", "ong"], ["▁l", "ar"], ["t", "le"], ["ou", "n"], ["i", "en"], ["主", "体"], ["r", "al"], ["I", "f"], ["平", "台"], ["不", "是"], ["▁b", "el"], ["i", "el"], ["e", "e"], ["开", "放"], ["如", "何"], ["▁th", "ose"], ["*", "▁"], ["范", "围"], ["▁m", "ake"], ["▁h", "um"], ["治", "理"], [")", ","], ["ion", "al"], ["领", "导"], ["The", "se"], ["at", "her"], ["▁inc", "re"], ["▁ex", "t"], ["r", "on"], ["as", "es"], ["▁", "ed"], ["i", "er"], ["特", "色"], ["获", "得"], ["材", "料"], ["”", ","], ["iv", "id"], ["中", "华"], ["▁", "ent"], ["一", "般"], ["fere", "n"], ["▁wor", "ld"], ["▁m", "em"], ["参", "与"], ["得", "到"], ["有", "关"], ["A", "n"], ["▁pro", "cess"], ["明", "确"], ["意", "义"], ["▁g", "rou"], ["ir", "on"], ["a", "ir"], ["联", "网"], ["▁", "The"], ["▁sh", "ould"], ["评", "价"], ["从", "而"], ["制", "造"], ["oc", "k"], ["▁b", "ack"], ["程", "序"], ["od", "y"], ["▁b", "ut"], ["完", "善"], ["资", "产"], ["▁ev", "en"], ["▁l", "ife"], ["消", "费"], ["能", "源"], ["▁gen", "er"], ["w", "ay"], ["▁c", "ount"], ["因", "为"], ["ub", "lic"], ["▁w", "ay"], ["各", "种"], ["e", "ad"], ["治", "疗"], ["▁f", "act"], ["▁sh", "ow"], ["采", "用"], ["▁v", "al"], ["▁s", "oc"], ["▁s", "erv"], ["▁f", "ollow"], ["▁f", "un"], ["发", "挥"], ["b", "e"], ["ar", "s"], ["表", "现"], ["▁j", "ust"], ["a", "h"], ["开", "始"], ["▁o", "wn"], ["学", "校"], ["▁le", "ad"], ["w", "ith"], ["a", "ve"], ["▁be", "ing"], ["x", "t"], ["▁stud", "y"], ["c", "ri"], ["▁h", "ist"], ["▁p", "op"], ["▁ch", "ar"], ["ivers", "ity"], ["▁f", "ind"], ["is", "hed"], ["利", "益"], ["al", "ity"], ["▁se", "e"], ["in", "ce"], ["任", "务"], ["▁act", "iv"], ["▁le", "vel"], ["f", "or"], ["▁a", "round"], ["▁m", "in"], ["特", "征"], ["▁re", "f"], ["ur", "y"], ["充", "分"], ["ri", "but"], ["The", "re"], ["开", "展"], ["▁s", "chool"], ["ra", "in"], ["公", "共"], ["el", "s"], ["iv", "ing"], ["行", "业"], ["▁be", "fore"], ["经", "营"], ["患", "者"], ["▁m", "on"], ["但", "是"], ["us", "s"], ["▁m", "ain"], ["不", "仅"], ["▁b", "oth"], ["ut", "ion"], ["ol", "v"], ["革", "命"], ["▁g", "row"], ["▁m", "ade"], ["什", "么"], ["p", "r"], ["are", "d"], ["▁A", "r"], ["ro", "ss"], ["基", "于"], ["随", "着"], ["地", "方"], ["▁c", "ur"], ["▁en", "d"], ["统", "一"], ["u", "nd"], ["▁de", "f"], ["%", "▁"], ["▁des", "ign"], ["重", "点"], ["ou", "th"], ["▁re", "ad"], ["N", "A"], ["▁re", "qu"], ["计", "划"], ["is", "ion"], ["确", "定"], ["E", "x"], ["应", "当"], ["▁p", "ar"], ["re", "ad"], ["▁d", "ata"], ["t", "y"], ["er", "ing"], ["ak", "es"], ["▁child", "ren"], ["▁s", "om"], ["p", "ro"], ["▁a", "ut"], ["规", "划"], ["▁pers", "on"], ["健", "康"], ["竞", "争"], ["and", "s"], ["▁ad", "d"], ["▁import", "ant"], ["规", "模"], ["▁c", "are"], ["he", "m"], ["为", "了"], ["'", "▁"], ["程", "度"], ["两", "个"], ["W", "hen"], ["用", "于"], ["▁ag", "ain"], ["银", "行"], ["B", "ut"], ["执", "行"], ["关", "于"], ["g", "g"], ["区", "域"], ["▁sm", "all"], ["职", "业"], ["农", "村"], ["o", "k"], ["来", "的"], ["ul", "ation"], ["y", "ou"], ["t", "ed"], ["▁w", "rit"], ["b", "y"], ["时", "期"], ["▁de", "p"], ["▁with", "in"], ["▁the", "n"], ["—", "—"], ["日", "本"], ["构", "建"], ["ro", "l"], ["in", "ed"], ["达", "到"], ["m", "an"], ["▁under", "stand"], ["▁part", "ic"], ["v", "iron"], ["完", "成"], ["iv", "er"], ["创", "造"], ["▁bec", "ause"], ["ire", "ct"], ["例", "如"], ["a", "u"], ["▁g", "l"], ["▁exam", "ple"], ["=", "▁"], ["比", "较"], ["▁m", "ight"], ["操", "作"], ["▁m", "y"], ["▁s", "he"], ["▁d", "own"], ["as", "h"], ["重", "大"], ["业", "务"], ["O", "n"], ["▁m", "us"], ["概", "念"], ["▁P", "ro"], ["um", "b"], ["▁c", "ap"], ["特", "点"], ["d", "e"], ["▁f", "ood"], ["a", "z"], ["▁in", "formation"], ["电", "子"], ["意", "识"], ["认", "识"], ["▁d", "ay"], ["oc", "i"], ["▁s", "er"], ["收", "入"], ["ou", "se"], ["这", "样"], ["it", "al"], ["基", "因"], ["am", "p"], ["理", "解"], ["over", "n"], ["it", "ions"], ["l", "ish"], ["方", "向"], ["▁stud", "ents"], ["p", "ect"], ["Y", "ou"], ["▁do", "es"], ["em", "ent"], ["▁call", "ed"], ["▁", "very"], ["决", "定"], ["et", "s"], ["id", "es"], ["规", "范"], ["之间", "的"], ["所", "以"], ["交", "易"], ["p", "or"], ["▁wh", "ile"], ["▁pro", "t"], ["▁m", "uch"], ["表", "示"], ["▁", "est"], ["▁a", "v"], ["le", "x"], ["▁in", "s"], ["T", "o"], ["om", "en"], ["c", "ing"], ["方", "案"], ["▁bu", "ild"], ["建", "筑"], ["特", "别"], ["性", "和"], ["i", "um"], ["是", "否"], ["▁th", "ree"], ["的", "人"], ["降", "低"], ["▁b", "r"], ["权", "利"], ["造", "成"], ["Wh", "at"], ["ivid", "ual"], ["稳", "定"], ["▁cl", "ass"], ["▁g", "u"], ["d", "er"], ["a", "j"], ["指", "导"], ["取", "得"], ["act", "er"], ["▁s", "ame"], ["世", "纪"], ["▁of", "ten"], ["R", "e"], ["How", "ever"], ["ire", "d"], ["i", "ents"], [")", ","], ["▁p", "ract"], ["▁e", "lect"], ["效", "率"], ["p", "en"], ["▁ad", "v"], ["之", "一"], ["▁N", "ew"], ["am", "es"], ["her", "s"], ["s", "h"], ["t", "on"], ["▁st", "art"], ["量", "的"], ["▁h", "im"], ["b", "ers"], ["减", "少"], ["▁or", "gan"], ["马", "克"], ["▁num", "ber"], ["▁dis", "e"], ["学", "科"], ["or", "ies"], ["目", "的"], ["体", "现"], ["▁▁▁▁", "▁▁▁▁"], ["优", "势"], ["”", "。"], ["or", "th"], ["▁t", "reat"], ["▁s", "ol"], ["进", "入"], ["▁r", "is"], ["货", "币"], ["▁d", "i"], ["igh", "ts"], ["▁g", "ra"], ["▁l", "ess"], ["in", "c"], ["▁l", "it"], ["的", "基本"], ["▁m", "at"], ["erg", "y"], ["o", "ot"], ["▁pro", "ble"], ["og", "raph"], ["自", "由"], ["viron", "ment"], ["ang", "u"], ["re", "en"], ["g", "en"], ["ul", "l"], ["措", "施"], ["▁kn", "own"], ["国", "内"], ["法", "院"], ["▁p", "ower"], ["▁▁", "▁"], ["iet", "y"], ["这", "是"], ["报", "告"], ["▁m", "et"], ["更", "加"], ["人", "们"], ["d", "ay"], ["了", "解"], ["好", "的"], ["as", "on"], ["马克", "思"], ["以", "下"], ["艺", "术"], ["p", "ar"], ["成", "果"], ["有", "的"], ["in", "clud"], ["▁o", "cc"], ["共", "产"], ["v", "en"], ["▁lear", "n"], ["运", "行"], ["&", "▁"], ["反", "应"], ["民", "主"], ["经", "验"], ["状", "态"], ["学生", "的"], ["ff", "ic"], ["保", "险"], ["长", "期"], ["物", "质"], ["t", "il"], ["▁all", "ow"], ["▁", "ident"], ["用", "户"], ["▁g", "ood"], ["▁v", "is"], ["e", "an"], ["e", "b"], ["▁en", "g"], ["ain", "s"], ["\"", "."], ["▁cont", "in"], ["而", "且"], ["iv", "ely"], ["re", "t"], ["our", "ces"], ["的", "研究"], ["p", "ort"], ["▁e", "qu"], ["l", "ine"], ["的", "基础"], ["▁d", "r"], ["增", "强"], ["an", "n"], ["▁p", "ot"], ["▁t", "ake"], ["▁b", "ody"], ["ul", "ts"], ["复", "杂"], ["iz", "ation"], ["▁ind", "ividual"], ["▁c", "ult"], ["B", "y"], ["合", "理"], ["▁re", "t"], ["贸", "易"], ["▁con", "st"], ["▁re", "du"], ["及", "其"], ["▁rese", "arch"], ["st", "r"], ["原", "因"], ["iv", "ed"], ["语", "言"], ["▁supp", "ort"], ["er", "n"], ["一", "定"], ["不同", "的"], ["at", "ely"], ["o", "x"], ["iel", "d"], ["委", "员"], ["▁comm", "on"], ["是", "在"], ["ater", "ial"], ["▁p", "oss"], ["体", "制"], ["re", "nt"], ["资", "金"], ["人", "口"], ["ri", "end"], ["includ", "ing"], ["体", "的"], ["评", "估"], ["id", "er"], ["▁con", "f"], ["文", "明"], ["at", "s"], ["if", "y"], ["g", "er"], ["i", "or"], ["组", "成"], ["▁d", "id"], ["▁be", "h"], ["任", "何"], ["b", "s"], ["▁S", "c"], ["掌", "握"], ["强", "调"], ["▁", "=▁"], ["▁e", "le"], ["▁f", "il"], ["只", "有"], ["改", "变"], ["是", "指"], ["eth", "od"], ["▁sign", "ific"], ["▁p", "os"], ["in", "ing"], ["y", "m"], ["▁I", "nd"], ["相", "互"], ["it", "ive"], ["▁c", "or"], ["in", "ation"], ["▁c", "le"], ["未", "来"], ["w", "here"], ["调", "整"], ["ent", "ly"], ["es", "p"], ["▁hum", "an"], ["ab", "ility"], ["▁sa", "id"], ["id", "s"], ["许", "多"], ["n", "ect"], ["ial", "ly"], ["的", "问题"], ["制", "定"], ["▁are", "a"], ["feren", "ces"], ["指", "出"], ["▁app", "ro"], ["il", "ar"], ["ag", "n"], ["or", "ts"], ["the", "re"], ["严", "重"], ["设", "施"], ["年", "的"], ["ra", "p"], ["ord", "ing"], ["▁st", "ate"], ["▁per", "form"], ["土", "地"], ["价", "格"], ["以", "来"], ["按", "照"], ["重要", "的"], ["l", "ing"], ["em", "ber"], ["▁p", "res"], ["▁pro", "f"], ["os", "ed"], ["针", "对"], ["受", "到"], ["现代", "化"], ["更", "多"], ["ere", "st"], ["▁", "&▁"], ["ill", "s"], ["都", "是"], ["v", "es"], ["O", "ne"], ["优", "化"], ["s", "c"], ["l", "u"], ["中国", "特色"], ["at", "ic"], ["运", "用"], ["参", "考"], ["应", "该"], ["融", "合"], ["▁n", "ow"], ["in", "a"], ["cc", "ess"], ["监", "督"], ["▁ch", "ang"], ["om", "s"], ["in", "ess"], ["化", "学"], ["▁includ", "e"], ["探", "索"], ["自己", "的"], ["▁A", "l"], ["l", "ished"], ["对", "象"], ["根", "本"], ["通", "常"], ["保", "证"], ["手", "段"], ["▁a", "ir"], ["考", "虑"], ["内", "部"], ["n", "er"], ["的", "新"], ["ver", "al"], ["▁qu", "est"], ["er", "al"], ["神", "经"], ["iv", "en"], ["才", "能"], ["互", "联网"], ["▁w", "ant"], ["▁E", "ng"], ["蛋", "白"], ["l", "ess"], ["地", "位"], ["|", "|"], ["机", "关"], ["分", "子"], ["▁an", "al"], ["系", "列"], ["▁S", "p"], ["决", "策"], ["商", "业"], ["▁pro", "m"], ["独", "立"], ["思", "维"], ["t", "t"], ["i", "od"], ["的", "影响"], ["。", "”"], ["相", "对"], ["▁p", "ass"], ["明", "显"], ["▁Americ", "an"], ["ro", "du"], ["广", "泛"], ["▁t", "est"], ["A", "nd"], ["人", "工"], ["▁pl", "an"], ["非", "常"], ["▁T", "h"], ["ar", "c"], ["a", "pp"], ["▁var", "ious"], ["▁is", "s"], ["r", "ation"], ["现", "实"], ["▁im", "m"], ["▁e", "as"], ["以", "上"], ["▁grou", "p"], ["▁pl", "ace"], ["i", "ans"], ["pl", "es"], ["eth", "ing"], ["▁b", "re"], ["首", "先"], ["会", "计"], ["▁Un", "iversity"], ["成", "立"], ["联", "系"], ["▁d", "em"], ["ut", "e"], ["--------", "--------"], ["om", "p"], ["提供", "了"], ["ress", "ion"], ["类", "型"], ["医", "疗"], ["▁", "ide"], ["n", "s"], ["ent", "al"], ["▁imp", "ro"], ["c", "ial"], ["心", "理"], ["ard", "s"], ["▁t", "em"], ["检", "测"], ["加", "快"], ["▁m", "aterial"], ["oc", "us"], ["现", "象"], ["is", "c"], ["A", "d"], ["▁re", "al"], ["近", "平"], ["n", "ot"], ["▁cell", "s"], ["pt", "ion"], [",", "\"▁"], ["▁re", "le"], ["物", "理"], ["信", "号"], ["监", "管"], ["当", "前"], ["iqu", "e"], ["▁c", "reat"], ["习", "近平"], ["群", "众"], ["v", "ers"], ["保", "持"], ["v", "ing"], ["or", "ld"], ["s", "uch"], ["▁st", "ill"], ["olog", "ical"], ["▁bet", "ter"], ["▁fam", "ily"], ["▁sy", "m"], ["事", "件"], ["一", "方面"], ["an", "ces"], ["▁s", "it"], ["▁again", "st"], ["▁S", "h"], ["▁", "ess"], ["的", "主要"], ["满", "足"], ["un", "e"], ["▁p", "resent"], ["维", "护"], ["▁h", "and"], ["▁ed", "uc"], ["▁an", "other"], ["法", "治"], ["S", "o"], [",▁", "\""], ["▁pro", "ject"], ["力", "的"], [".▁", "▁"], ["测", "试"], ["引", "导"], ["完", "全"], ["自", "身"], ["无", "法"], ["北", "京"], ["资", "料"], ["▁d", "ue"], ["r", "ies"], ["工", "具"], ["▁th", "ough"], ["▁se", "veral"], ["它", "们"], ["▁signific", "ant"], ["▁d", "irect"], ["甚", "至"], ["不", "可"], ["▁ch", "ange"], ["an", "k"], ["适", "应"], ["▁develop", "ment"], ["en", "se"], ["疾", "病"], ["理", "念"], ["者", "的"], ["农", "民"], ["交", "通"], ["dition", "al"], ["力", "量"], ["效", "果"], ["诉", "讼"], ["ur", "ther"], [".", ",▁"], ["▁o", "per"], ["▁f", "ac"], ["▁en", "vironment"], ["▁g", "overn"], ["▁an", "t"], ["▁c", "our"], ["▁Un", "ited"], ["▁h", "ome"], ["▁p", "ur"], ["y", "n"], ["▁C", "ol"], ["▁m", "ust"], ["财", "政"], ["▁cre", "ate"], ["软", "件"], ["关", "注"], ["▁ear", "ly"], ["▁fe", "el"], ["I", "I"], ["r", "ist"], ["angu", "age"], ["深", "入"], ["▁b", "ir"], ["th", "s"], ["og", "n"], ["c", "le"], ["▁p", "ain"], ["构", "成"], ["系统", "的"], ["▁o", "pp"], [")", "。"], ["年", "代"], ["w", "ays"], ["▁p", "ublic"], ["o", "le"], ["▁an", "im"], ["▁sec", "ond"], ["▁o", "pen"], ["▁ha", "pp"], ["规", "律"], ["正", "确"], ["▁n", "ear"], ["数", "学"], ["▁I", "s"], ["if", "ied"], ["▁b", "en"], ["▁dise", "ase"], ["▁s", "l"], ["▁with", "out"], ["▁b", "ased"], ["▁en", "ergy"], ["采", "取"], ["▁d", "el"], ["引", "起"], ["▁me", "as"], ["成", "功"], ["▁m", "ethod"], ["re", "m"], ["▁b", "as"], ["▁to", "p"], ["表", "明"], ["快", "速"], ["外", "部"], ["▁lar", "ge"], ["▁r", "ight"], ["▁int", "erest"], ["表", "达"], ["计算", "机"], ["od", "e"], ["#", "#"], ["id", "ed"], ["的", "最"], ["▁bec", "ome"], ["s", "elf"], ["帮", "助"], ["▁ph", "ys"], ["限", "制"], ["▁cont", "rol"], ["aj", "or"], ["▁g", "reat"], ["的", "大"], ["▁lear", "ning"], ["y", "l"], ["at", "ural"], ["▁sa", "f"], ["▁other", "s"], ["b", "r"], ["▁", "Z"], ["▁te", "am"], ["作", "品"], ["属", "于"], ["N", "ow"], ["▁C", "l"], ["get", "her"], ["▁to", "gether"], ["tern", "al"], ["▁res", "ult"], ["分", "布"], ["▁f", "in"], ["▁n", "ame"], ["▁m", "ar"], ["▁c", "aus"], ["▁or", "ig"], ["性", "能"], ["商", "品"], ["指", "标"], ["绿", "色"], ["w", "are"], ["▁m", "ove"], ["共产", "党"], ["▁l", "ook"], ["▁produ", "ct"], ["ent", "ion"], ["iss", "ion"], ["要", "素"], ["整", "体"], ["▁ass", "oci"], ["W", "ith"], ["年", "来"], ["香", "港"], ["e", "ed"], ["▁un", "til"], ["称", "为"], ["中国特色", "社会主义"], ["临", "床"], ["▁l", "ist"], ["集", "中"], ["▁st", "and"], ["▁St", "ates"], ["▁som", "ething"], ["S", "A"], ["▁to", "o"], ["自", "动"], ["▁ch", "all"], ["▁inv", "olv"], ["技", "能"], ["解", "释"], ["▁o", "ld"], ["w", "as"], ["虽", "然"], ["▁f", "riend"], ["I", "m"], ["g", "in"], ["分", "配"], ["▁d", "on"], ["▁ris", "k"], ["▁bel", "ie"], ["b", "all"], ["此", "外"], ["▁m", "ark"], ["情况", "下"], ["依", "据"], ["at", "or"], ["就", "业"], ["▁hist", "ory"], ["接", "受"], ["▁loc", "al"], ["协", "议"], ["会", "议"], ["▁am", "ong"], ["▁l", "ight"], ["显", "示"], ["▁s", "ing"], ["h", "or"], ["物", "的"], ["速", "度"], ["A", "fter"], ["分", "为"], ["马克思", "主义"], ["涉", "及"], ["符", "合"], ["ward", "s"], ["事", "业"], ["U", "n"], ["联", "合"], ["乡", "村"], ["是", "一个"], ["a", "ut"], ["m", "in"], ["ot", "s"], ["书", "记"], ["司", "法"], ["▁fun", "ction"], ["▁g", "r"], ["▁S", "e"], ["er", "t"], ["Th", "at"], ["▁", "'"], ["▁pro", "per"], ["▁f", "ew"], ["▁spec", "ies"], ["污", "染"], ["al", "k"], ["le", "y"], ["▁ke", "ep"], ["▁m", "ult"], ["注", "意"], ["l", "ike"], ["▁re", "st"], ["委员", "会"], ["v", "iew"], ["ra", "g"], ["wh", "ile"], ["wh", "o"], ["▁man", "ag"], ["ab", "or"], ["im", "ate"], ["规", "则"], ["调", "查"], ["道", "德"], ["u", "rop"], ["丰", "富"], ["协", "调"], ["on", "es"], ["m", "ber"], ["并", "且"], ["▁b", "est"], ["▁prog", "ram"], ["是", "一"], ["函", "数"], ["犯", "罪"], ["A", "t"], ["▁st", "ruct"], ["th", "at"], ["▁D", "e"], ["超", "过"], ["▁", "ve"], ["自", "主"], ["oo", "ks"], ["分", "别"], ["▁le", "g"], ["▁follow", "ing"], ["定", "义"], ["▁de", "v"], ["确", "保"], ["o", "id"], ["S", "ome"], ["▁", "Q"], ["or", "ing"], ["ap", "e"], ["通", "信"], ["er", "tain"], ["▁l", "ater"], ["课", "堂"], ["▁pot", "ential"], ["▁th", "ings"], ["高", "度"], ["反", "映"], ["r", "is"], ["方面", "的"], ["▁bl", "ood"], ["▁b", "us"], ["▁f", "ocus"], ["▁prov", "ide"], ["交", "流"], ["供", "应"], ["▁w", "omen"], ["▁", "$"], ["ac", "es"], ["oh", "n"], ["—", "▁"], ["▁are", "as"], ["智", "慧"], ["▁C", "on"], ["h", "ow"], ["学", "院"], ["整", "个"], ["a", "f"], ["企业", "的"], ["义", "务"], ["▁f", "our"], ["v", "ed"], ["th", "is"], ["d", "itions"], ["ill", "ion"], ["▁soc", "ial"], ["ric", "t"], ["’", "▁"], ["▁pat", "ients"], ["挑", "战"], ["an", "e"], [",", "\""], ["病", "毒"], ["ac", "c"], ["as", "ter"], ["▁c", "al"], ["上", "海"], ["ot", "e"], ["i", "am"], ["▁spec", "ific"], ["▁r", "un"], ["问题", "的"], ["转", "型"], ["算", "法"], ["是", "一种"], ["▁c", "he"], ["con", "om"], ["▁con", "nect"], ["▁ro", "le"], ["▁t", "re"], ["文", "件"], ["▁P", "l"], ["▁a", "ffect"], ["▁l", "aw"], ["之", "后"], ["▁me", "ans"], ["o", "ad"], ["om", "et"], ["▁rec", "ord"], ["▁b", "ro"], ["▁f", "re"], ["统", "计"], ["▁f", "ore"], ["有", "利"], ["ic", "ation"], ["经", "过"], ["▁acc", "ess"], ["▁occ", "ur"], ["差", "异"], ["ra", "y"], ["ap", "er"], ["▁m", "ov"], ["扩", "大"], ["os", "p"], ["▁rep", "ort"], ["our", "ce"], ["财", "产"], ["un", "g"], ["最", "终"], ["p", "x"], ["m", "y"], ["id", "ence"], ["▁ac", "ross"], ["end", "ing"], ["▁level", "s"], ["t", "al"], ["▁al", "ong"], ["起", "来"], ["动", "力"], ["分", "类"], ["▁in", "du"], ["us", "e"], ["▁C", "an"], ["▁bec", "ame"], ["在", "于"], ["▁des", "cri"], ["数", "量"], [",", "”▁"], ["▁t", "er"], ["▁en", "c"], ["▁per", "iod"], ["生", "命"], ["三", "个"], ["▁b", "o"], ["▁t", "imes"], ["in", "ks"], ["▁he", "ad"], ["end", "ed"], ["性", "质"], ["还", "是"], ["承", "担"], ["▁su", "ccess"], ["I", "S"], ["a", "id"], ["必", "要"], ["at", "ory"], ["al", "es"], ["▁me", "an"], ["矛", "盾"], ["C", "on"], ["w", "ork"], ["▁e", "l"], ["面", "临"], ["免", "疫"], ["然", "而"], ["▁n", "on"], ["ag", "ine"], ["r", "ight"], ["机", "器"], ["▁C", "omm"], ["ain", "ed"], ["`", "`"], ["有", "限"], ["o", "int"], ["ear", "ch"], ["▁spec", "ial"], ["转", "变"], ["▁de", "ath"], ["▁h", "ig"], ["证", "明"], ["原", "理"], ["行", "动"], ["tern", "ational"], ["▁m", "ajor"], ["_", "_"], ["人工", "智能"], ["▁t", "urn"], ["家", "庭"], ["继", "续"], ["▁re", "ce"], ["改", "善"], ["多", "种"], ["▁est", "ab"], ["▁av", "ail"], ["文", "献"], ["作", "出"], ["▁C", "ent"], [":", "\""], ["ort", "un"], ["▁c", "rit"], ["▁R", "e"], ["来", "说"], ["道", "路"], ["is", "ed"], ["s", "he"], ["▁l", "ow"], ["趋", "势"], ["▁l", "ine"], ["▁l", "and"], ["识", "别"], ["作", "者"], ["n", "ow"], ["很", "多"], ["训", "练"], ["配", "置"], ["重", "视"], ["检", "查"], ["at", "ch"], ["ra", "w"], ["C", "A"], ["▁m", "il"], ["事", "实"], ["th", "ough"], ["▁H", "e"], ["策", "略"], ["来", "源"], ["er", "y"], ["了", "一"], ["▁N", "ational"], ["▁cur", "rent"], ["相", "应"], ["id", "d"], ["▁l", "ast"], ["大", "量"], ["ic", "ro"], ["共", "和"], ["c", "ul"], ["th", "umb"], ["re", "l"], ["观", "察"], ["团", "队"], ["▁E", "x"], ["|", "|▁"], ["s", "el"], ["▁w", "ar"], ["▁char", "acter"], ["使", "得"], ["y", "d"], ["▁imp", "act"], ["▁sim", "ilar"], ["▁ob", "ject"], ["▁ben", "ef"], ["▁p", "ress"], ["环", "节"], ["意", "见"], ["▁wor", "ks"], ["简", "单"], ["传", "播"], ["▁b", "i"], ["建", "议"], ["权", "的"], ["显", "著"], ["▁l", "im"], ["▁b", "ook"], ["S", "he"], ["r", "ing"], ["▁a", "ge"], ["ore", "d"], ["特", "殊"], ["▁en", "s"], ["▁po", "int"], ["债", "务"], ["o", "ber"], ["▁typ", "e"], ["iv", "ity"], ["案", "件"], ["pl", "oy"], ["op", "h"], ["法", "规"], ["强", "化"], ["形", "态"], ["ri", "ed"], ["共", "享"], ["教", "授"], ["▁c", "ause"], ["负", "责"], ["il", "t"], ["▁we", "e"], ["▁dif", "f"], ["国", "民"], ["新", "时代"], ["r", "ans"], ["支", "付"], ["re", "g"], ["▁pl", "ant"], ["的", "数据"], ["一", "是"], ["位", "置"], ["ot", "t"], ["循", "环"], ["背", "景"], ["第", "四"], ["at", "ures"], ["s", "ide"], ["▁W", "orld"], ["▁com", "b"], ["高", "校"], ["f", "ace"], ["避", "免"], ["下", "的"], ["每", "个"], ["后", "的"], ["Re", "ferences"], ["高", "的"], ["▁th", "ink"], [".", "("], ["▁A", "n"], ["技术", "的"], ["▁p", "ost"], ["a", "i"], ["财", "务"], ["um", "ent"], ["am", "m"], ["哲", "学"], ["m", "ost"], ["试", "验"], ["立", "法"], ["it", "ing"], ["▁app", "ear"], ["突", "出"], ["数字", "化"], ["am", "ed"], ["▁comp", "ut"], ["监", "测"], ["▁inv", "est"], ["i", "pp"], ["肿", "瘤"], ["下", "降"], ["▁f", "low"], ["▁p", "e"], ["i", "ation"], ["▁l", "anguage"], ["il", "ities"], ["iz", "ing"], ["a", "e"], ["主", "动"], ["▁poss", "ible"], ["比", "如"], ["ure", "d"], ["氧", "化"], ["b", "ed"], ["处", "于"], ["op", "e"], ["期", "间"], ["us", "h"], ["▁prot", "ect"], ["▁commun", "ity"], ["P", "ro"], ["our", "s"], ["▁W", "ar"], ["▁pre", "vent"], ["尤", "其"], ["f", "ric"], ["自", "我"], ["观", "点"], ["而", "言"], ["▁you", "ng"], ["▁s", "w"], ["ol", "s"], ["深", "化"], [".▁", "("], [".", "”"], ["平", "衡"], ["▁m", "en"], ["角", "度"], ["er", "c"], ["层", "次"], [":", "“"], ["存", "储"], ["u", "ed"], ["培", "训"], ["出", "版"], ["准", "确"], ["A", "r"], ["有", "机"], ["申", "请"], ["及", "时"], ["转", "移"], ["s", "y"], ["S", "p"], ["▁det", "erm"], ["实", "行"], ["当", "事"], ["▁P", "h"], ["平", "均"], ["▁system", "s"], ["▁sh", "ort"], ["说", "明"], ["进", "程"], ["的", "方法"], ["伟", "大"], ["▁str", "ong"], ["at", "ors"], ["▁cont", "ribut"], ["两", "种"], ["Wh", "ile"], ["▁T", "e"], ["ar", "ing"], ["▁resp", "ons"], ["ien", "ces"], ["▁pol", "it"], ["▁treat", "ment"], ["▁L", "e"], ["真", "正"], ["at", "t"], ["介", "绍"], ["二", "是"], ["逐", "步"], ["逻", "辑"], ["es", "ts"], ["▁s", "ince"], ["▁res", "ults"], ["s", "erv"], ["ys", "is"], ["ut", "ure"], ["流", "动"], [",", "“"], ["st", "it"], ["▁avail", "able"], ["▁A", "d"], ["战", "争"], ["ther", "n"], ["iv", "al"], ["那", "么"], ["▁c", "ertain"], ["往", "往"], ["▁n", "atural"], ["▁he", "re"], ["正", "常"], ["▁n", "ec"], ["不", "足"], ["▁rep", "resent"], ["en", "n"], ["▁c", "ir"], ["西", "方"], ["▁ab", "le"], ["设", "置"], ["em", "s"], ["为", "主"], ["讨", "论"], ["+", "▁"], ["▁wh", "y"], ["支", "撑"], ["as", "ing"], ["▁h", "ard"], ["中国", "共产党"], ["▁e", "y"], ["带", "来"], ["▁govern", "ment"], ["ol", "ution"], ["▁can", "cer"], ["▁disc", "uss"], ["落", "实"], ["并", "不"], ["▁comp", "lex"], ["the", "n"], ["▁st", "ory"], ["et", "ic"], ["▁rel", "ations"], ["p", "ut"], ["经济", "发展"], ["▁or", "der"], ["提出", "了"], ["发", "布"], ["▁E", "urop"], ["成", "员"], ["▁com", "e"], ["▁ra", "d"], ["学", "术"], ["▁B", "l"], ["先", "进"], ["E", "R"], ["相", "同"], ["▁per", "cent"], ["汽", "车"], ["卫", "生"], ["缺", "乏"], ["▁inf", "lu"], ["▁o", "pt"], ["S", "h"], ["居", "民"], ["du", "ct"], ["p", "art"], ["ab", "les"], ["▁prof", "ess"], ["f", "rom"], ["用", "的"], ["预", "测"], ["v", "al"], ["▁sp", "ace"], ["▁w", "he"], ["▁beh", "av"], ["ist", "ic"], ["投", "入"], ["▁l", "ik"], ["ol", "l"], ["素", "质"], ["e", "y"], ["到", "了"], ["ap", "s"], ["▁ke", "y"], ["v", "ious"], ["▁wor", "ds"], ["c", "hes"], ["om", "es"], ["ib", "r"], ["而", "是"], ["▁c", "ost"], ["le", "ction"], ["ne", "y"], ["多", "数"], ["re", "am"], ["药", "物"], ["感", "染"], ["连", "接"], ["▁R", "es"], ["进行", "了"], ["z", "e"], ["▁sc", "ient"], ["特别", "是"], ["现", "在"], ["美", "元"], ["led", "ge"], ["P", "l"], ["in", "ts"], ["▁C", "ount"], ["▁v", "iew"], ["具", "备"], ["上", "述"], ["m", "ed"], ["▁su", "gg"], ["测", "量"], ["▁v", "ol"], ["et", "er"], ["观", "念"], ["p", "os"], ["▁e", "conom"], ["逐", "渐"], [".▁", "\""], ["C", "l"], ["▁chang", "es"], ["ic", "ult"], ["文", "学"], ["om", "an"], ["le", "ment"], ["ir", "d"], ["信", "用"], ["包", "含"], ["m", "on"], ["%", ","], ["N", "ew"], ["s", "w"], ["融", "资"], ["▁", "ill"], ["▁pop", "ulation"], ["突", "破"], ["▁count", "ry"], ["av", "es"], ["en", "cy"], ["id", "ing"], ["的", "一个"], ["our", "n"], ["▁w", "ays"], ["c", "he"], ["▁B", "rit"], ["转", "化"], ["供", "给"], ["产", "权"], ["as", "k"], ["▁chall", "eng"], ["f", "er"], ["▁mus", "ic"], ["证", "据"], ["▁v", "ir"], ["▁con", "ditions"], ["th", "ing"], ["▁le", "ft"], ["内", "的"], ["表", "面"], ["多", "个"], ["ic", "le"], ["总", "体"], ["最", "高"], ["▁ess", "ential"], ["▁st", "ep"], ["w", "hen"], ["中华", "民族"], ["除", "了"], ["▁d", "ays"], ["sel", "ves"], ["最", "大"], ["努", "力"], ["流", "程"], ["▁t", "ry"], ["au", "gh"], ["▁le", "t"], ["然", "后"], ["ex", "t"], ["审", "计"], ["▁cent", "ury"], ["效", "应"], ["▁c", "ase"], ["▁s", "ound"], ["m", "p"], ["▁mem", "bers"], ["依", "法"], ["are", "n"], ["▁sk", "ills"], ["周", "期"], ["ru", "ction"], ["▁f", "oot"], ["有利", "于"], ["科", "研"], ["专", "家"], ["的", "方式"], ["▁proble", "ms"], ["▁v", "ers"], ["▁b", "rain"], ["▁s", "ay"], ["ab", "ly"], ["w", "w"], ["▁typ", "es"], ["医", "学"], ["▁pr", "im"], ["ap", "t"], ["▁A", "fric"], ["en", "ed"], ["▁a", "way"], ["▁associ", "ated"], ["普", "遍"], ["状", "况"], ["判", "断"], ["▁p", "ast"], ["▁tem", "per"], ["b", "um"], ["r", "im"], ["m", "it"], ["难", "以"], ["履", "行"], ["完", "整"], ["思", "考"], ["进", "步"], ["本", "身"], ["当", "时"], ["协", "同"], ["还", "有"], ["》", ","], ["教", "材"], ["ra", "d"], ["▁C", "ar"], ["▁g", "re"], ["▁c", "ity"], ["ip", "le"], ["▁he", "art"], ["正", "在"], ["来", "自"], ["客", "观"], ["it", "her"], ["y", "le"], ["ograph", "y"], ["高", "质量"], ["物", "流"], ["▁l", "inks"], ["一", "致"], ["▁exper", "ience"], ["损", "害"], ["I", "D"], ["▁in", "it"], ["S", "c"], ["o", "on"], ["▁wor", "king"], ["▁d", "am"], ["▁S", "chool"], ["▁res", "ources"], ["▁bus", "iness"], ["公", "平"], ["温", "度"], ["ur", "ch"], ["▁techn", "ology"], ["基础", "设施"], ["ove", "red"], ["发", "表"], ["▁lit", "tle"], ["动", "态"], ["记", "录"], ["容", "易"], ["hip", "s"], ["h", "ib"], ["▁s", "ide"], ["▁understand", "ing"], ["ra", "ft"], ["▁m", "ot"], ["ep", "end"], ["损", "失"], ["高", "等"], ["应", "对"], ["多", "样"], ["深", "度"], ["▁O", "r"], ["国", "有"], ["深", "刻"], ["高", "效"], ["▁grou", "ps"], ["一", "定的"], ["地", "理"], ["▁partic", "ular"], ["os", "is"], ["▁s", "ens"], ["比", "例"], ["来", "越"], ["▁activ", "ities"], ["▁through", "out"], ["总", "书记"], ["来", "看"], ["▁proble", "m"], ["▁", "—▁"], ["▁ne", "xt"], ["客", "户"], ["o", "es"], ["L", "et"], ["越", "来越"], ["最", "后"], ["儿", "童"], ["▁c", "y"], ["ch", "ie"], ["A", "ll"], ["▁Y", "ork"], ["▁sing", "le"], ["ar", "th"], ["▁build", "ing"], ["ell", "ing"], ["ach", "ing"], ["▁ex", "ist"], [")", "、"], ["ill", "ed"], ["▁p", "ut"], ["的", "历史"], ["▁n", "orm"], ["▁con", "cer"], ["英", "国"], ["ru", "g"], ["压", "力"], ["▁pre", "d"], ["as", "c"], ["▁stud", "ies"], ["不", "得"], ["A", "R"], ["▁f", "ar"], ["本", "质"], ["▁", "er"], ["one", "y"], ["▁impro", "ve"], ["当事", "人"], ["▁Ch", "rist"], ["研", "发"], ["g", "ed"], ["经济", "学"], ["▁en", "ough"], ["pl", "ay"], ["st", "er"], ["▁un", "ique"], ["危", "机"], ["▁f", "ree"], ["注", "重"], ["也", "有"], ["in", "king"], ["大", "数据"], ["ict", "ion"], [")", "、"], ["的", "关系"], ["▁educ", "ation"], ["/", "▁"], ["之", "前"], ["▁m", "akes"], ["u", "ation"], ["出", "的"], ["ap", "an"], ["g", "es"], ["仍", "然"], ["▁M", "ed"], ["▁f", "uture"], ["al", "f"], ["▁hig", "her"], ["▁ha", "ving"], ["i", "res"], ["▁pat", "tern"], ["正", "式"], ["E", "S"], ["把", "握"], ["at", "ives"], ["层", "面"], ["ly", "ing"], [".", "\"▁"], ["▁iss", "ues"], ["▁cre", "ated"], ["▁f", "urther"], ["▁b", "ig"], ["cl", "us"], ["传", "输"], ["▁n", "et"], ["的", "作用"], ["案", "例"], ["b", "o"], ["b", "l"], ["▁g", "iven"], ["▁grow", "th"], ["诊", "断"], ["▁to", "day"], ["▁differe", "n"], ["▁effect", "s"], ["ect", "ed"], ["]", "▁"], ["一", "直"], ["ib", "ility"], ["▁E", "n"], ["的", "社会"], ["se", "qu"], ["▁g", "round"], ["A", "C"], ["▁al", "ways"], ["in", "ter"], ["▁ser", "ies"], ["▁pl", "ants"], ["ag", "ing"], ["av", "ing"], ["▁k", "ind"], ["▁app", "lic"], ["▁Eng", "lish"], ["ust", "ral"], ["贡", "献"], ["共和", "国"], ["▁ev", "ent"], ["中", "小"], ["▁M", "ar"], ["▁fact", "ors"], ["ific", "ation"], ["基", "金"], ["▁need", "s"], ["一", "次"], ["ac", "y"], ["出", "口"], ["全", "部"], ["▁hist", "or"], ["an", "u"], ["▁t", "erm"], ["相", "比"], ["植", "物"], ["传", "感"], ["il", "s"], ["▁te", "ac"], ["▁m", "aking"], ["ec", "ially"], ["▁ex", "c"], ["▁s", "elf"], ["m", "a"], ["各", "个"], ["可", "持续"], ["加", "工"], ["对", "外"], ["▁col", "lect"], ["ist", "ory"], ["▁p", "ub"], ["二", "十"], ["▁main", "tain"], ["▁activ", "ity"], ["适", "用"], ["c", "o"], ["更", "好"], ["和", "发展"], ["真", "实"], ["严", "格"], ["旅", "游"], ["▁individual", "s"], ["▁partic", "ip"], ["ow", "s"], ["参", "数"], ["j", "ust"], ["▁be", "gin"], ["▁pro", "te"], ["l", "ight"], ["ad", "a"], ["▁str", "ateg"], ["中国", "的"], ["m", "ore"], ["▁mod", "el"], ["pt", "oms"], ["▁as", "k"], ["al", "t"], ["▁d", "ig"], ["和", "社会"], ["a", "im"], ["es", "e"], ["iqu", "es"], ["is", "ing"], ["海", "洋"], ["ip", "s"], ["鼓", "励"], ["▁cons", "id"], ["论", "文"], ["▁nec", "ess"], ["ro", "ll"], ["▁to", "wn"], ["人民", "法院"], ["▁p", "ath"], ["贷", "款"], ["双", "方"], ["▁cons", "um"], ["收", "益"], ["的", "能力"], ["oo", "king"], ["▁int", "rodu"], ["C", "D"], ["▁g", "ive"], ["▁incre", "ase"], ["参", "加"], ["ch", "an"], ["▁e", "p"], ["必", "然"], ["▁col", "l"], ["▁s", "um"], ["▁", "‘"], ["▁f", "ull"], ["▁help", "s"], ["他", "的"], ["描", "述"], ["出", "了"], ["▁r", "ange"], ["集", "体"], ["升", "级"], ["总", "结"], ["▁diff", "icult"], ["不", "会"], ["法", "的"], ["▁m", "illion"], ["l", "or"], ["食", "品"], ["工", "艺"], ["pl", "ic"], ["媒", "体"], ["esp", "ecially"], ["ob", "al"], ["▁S", "outh"], ["ers", "on"], ["▁aut", "hor"], ["an", "ced"], ["▁ret", "urn"], ["ol", "ic"], ["A", "P"], ["获", "取"], ["e", "or"], ["▁cour", "se"], ["▁", "z"], ["》", "、"], ["is", "ter"], ["▁rec", "ogn"], ["▁some", "one"], ["P", "h"], ["en", "e"], ["健", "全"], ["▁M", "ay"], ["各", "类"], ["▁e", "ff"], ["工作", "的"], ["c", "an"], ["b", "ased"], ["▁off", "ic"], ["ra", "ms"], ["变", "革"], ["it", "es"], ["arc", "hers"], ["▁h", "ouse"], ["ak", "en"], ["新", "型"], ["ac", "ed"], ["▁t", "ru"], ["ful", "ly"], ["C", "O"], ["▁st", "at"], ["A", "T"], ["ec", "ause"], ["抑", "制"], ["途", "径"], ["恢", "复"], ["权", "益"], ["▁lik", "ely"], ["▁f", "ield"], ["▁opp", "ortun"], ["▁cont", "ain"], ["电", "池"], ["▁requ", "ire"], ["▁ob", "serv"], ["re", "c"], ["阶", "级"], ["▁cle", "ar"], ["r", "ig"], ["普", "通"], ["一", "起"], ["#", "▁"], ["量", "子"], ["排", "放"], ["社", "区"], ["uc", "k"], ["▁", "||▁"], ["欧", "洲"], ["le", "ge"], ["动", "物"], ["▁us", "ually"], ["产生", "的"], ["依", "赖"], ["▁count", "ries"], ["音", "乐"], ["▁val", "ue"], ["\"", ",▁"], ["中", "共"], ["▁N", "orth"], ["困", "难"], ["▁p", "aper"], ["血", "管"], ["▁produ", "ction"], ["▁be", "gan"], ["f", "act"], ["拥", "有"], ["认", "知"], ["机", "械"], ["▁cons", "ider"], ["定", "位"], ["▁an", "n"], ["国家", "的"], ["改革", "开放"], ["权", "力"], ["各", "国"], ["▁l", "ay"], ["民", "事"], ["en", "ces"], ["▁Count", "y"], ["面", "积"], ["um", "p"], ["▁pract", "ice"], ["▁pop", "ular"], ["气", "候"], ["y", "th"], ["m", "ing"], ["s", "u"], ["=", "="], ["▁c", "hem"], ["利", "率"], ["▁G", "erm"], ["en", "ing"], ["▁add", "ress"], ["时", "候"], ["的基础", "上"], ["▁t", "ri"], ["I", "P"], ["▁ph", "ot"], ["▁m", "ind"], ["标", "志"], ["b", "on"], ["▁", "["], ["A", "S"], ["▁s", "un"], ["▁material", "s"], ["▁l", "ower"], ["▁s", "ure"], ["▁up", "on"], ["销", "售"], ["▁", "X"], ["驱", "动"], ["▁quest", "ions"], ["经济", "的"], ["第", "十"], ["C", "P"], ["整", "合"], ["费", "用"], ["生", "成"], ["▁l", "ive"], ["重", "新"], ["▁M", "an"], ["g", "est"], ["row", "n"], ["早", "期"], ["ab", "it"], ["集", "团"], ["▁to", "wards"], ["一", "体"], ["▁sur", "face"], ["框", "架"], ["典", "型"], ["某", "些"], ["十", "分"], ["▁incre", "ased"], ["特", "性"], ["in", "n"], ["▁l", "oss"], ["度", "的"], ["g", "round"], ["▁G", "u"], ["从", "事"], ["另", "外"], ["▁se", "ason"], ["e", "le"], ["▁know", "ledge"], ["▁sub", "ject"], ["g", "o"], ["o", "res"], ["物", "联网"], ["et", "y"], ["▁f", "ive"], ["D", "P"], ["y", "stem"], ["制造", "业"], ["▁s", "ite"], ["集", "成"], ["税", "收"], ["r", "ont"], ["feren", "ce"], ["▁phys", "ical"], ["错", "误"], ["调", "节"], ["▁sim", "ple"], ["青", "年"], ["始", "终"], ["格", "局"], ["▁a", "chie"], ["阅", "读"], ["al", "ing"], ["助", "于"], ["实", "体"], ["运", "营"], ["ar", "r"], ["▁em", "ploy"], ["另", "一方面"], ["▁ev", "ents"], ["大", "会"], ["I", "T"], ["过", "去"], ["ur", "b"], ["覆", "盖"], ["▁g", "ame"], ["▁c", "ases"], ["德", "国"], ["尽", "管"], ["相关", "的"], ["es", "tern"], ["▁h", "old"], ["安", "排"], ["准", "备"], ["理", "想"], ["图", "像"], ["▁l", "iving"], ["▁inter", "act"], ["的", "主"], ["er", "ve"], ["军", "事"], ["学", "者"], ["传感", "器"], ["解", "放"], ["is", "on"], ["▁qu", "ick"], ["▁w", "ind"], ["▁anim", "als"], ["in", "ary"], ["▁com", "es"], ["A", "meric"], ["▁ne", "g"], ["▁fre", "qu"], ["S", "ee"], ["所", "谓"], ["▁person", "al"], ["▁te", "xt"], ["ail", "s"], ["可", "靠"], ["转", "换"], ["习近平", "总书记"], ["sy", "ch"], ["ac", "ks"], ["▁friend", "s"], ["特", "定"], ["ar", "get"], ["文", "章"], ["▁comp", "any"], ["效", "益"], ["il", "le"], ["▁the", "rap"], ["▁fam", "il"], ["▁mod", "ern"], ["ar", "l"], ["相", "当"], ["上", "升"], ["end", "er"], ["oo", "se"], ["行", "的"], ["教育", "的"], ["m", "b"], ["是", "由"], ["平", "等"], ["▁comp", "et"], ["▁fil", "m"], ["前", "提"], ["▁me", "et"], ["▁eng", "ine"], ["障", "碍"], ["城", "乡"], ["a", "ff"], ["社会", "的"], ["▁p", "ort"], ["发", "达"], ["D", "uring"], ["▁re", "pl"], ["身", "份"], ["▁s", "ong"], ["吸", "收"], ["ug", "ust"], ["城", "镇"], ["等", "方面"], ["▁gener", "al"], ["St", "ep"], ["▁par", "ts"], ["m", "e"], ["ide", "o"], ["i", "ate"], ["本", "文"], ["ev", "en"], ["▁c", "ame"], ["场", "景"], ["c", "hed"], ["▁ind", "ic"], ["m", "aking"], ["▁press", "ure"], ["合", "法"], ["▁them", "selves"], ["▁ab", "ove"], ["or", "por"], ["▁sym", "ptoms"], ["公", "民"], ["▁ar", "r"], ["领域", "的"], ["请", "求"], ["▁quest", "ion"], ["▁wor", "d"], ["ic", "ip"], ["ffic", "ient"], ["▁re", "d"], ["on", "y"], ["S", "ection"], ["id", "ge"], ["/", "/"], ["A", "cc"], ["ul", "es"], ["追", "求"], ["R", "es"], ["ar", "ies"], ["▁de", "g"], ["意", "味"], ["aren", "ts"], ["▁to", "ok"], ["人", "物"], ["干", "部"], ["how", "ever"], ["一", "样"], ["▁B", "e"], ["▁al", "bum"], ["同", "样"], ["A", "N"], ["▁col", "or"], ["实验", "室"], ["d", "om"], ["i", "ol"], ["H", "is"], ["创", "业"], ["▁su", "per"], ["or", "ks"], ["▁U", "S"], ["▁ad", "dition"], ["它", "的"], ["▁bu", "ilt"], ["▁e", "mer"], ["M", "any"], ["虚", "拟"], ["op", "s"], ["o", "or"], ["ut", "ions"], ["收", "集"], ["▁sc", "ience"], ["▁le", "ast"], ["ad", "em"], ["▁cl", "os"], ["ur", "s"], ["t", "ers"], ["am", "b"], ["M", "ore"], ["in", "o"], ["le", "ep"], ["p", "ts"], ["▁ar", "ch"], ["▁m", "icro"], ["▁s", "ent"], ["er", "ation"], ["多", "元"], ["只", "能"], ["I", "nd"], ["▁lit", "er"], ["股", "东"], ["ast", "ic"], ["部", "署"], ["on", "str"], ["c", "ol"], ["▁f", "und"], ["▁develop", "ed"], ["▁qu", "ality"], ["卫", "星"], ["债", "权"], ["无", "论"], ["u", "ly"], ["的", "过程"], ["▁f", "all"], ["只", "是"], ["▁need", "ed"], ["路", "径"], ["▁n", "amed"], ["的", "高"], ["和", "谐"], ["re", "ct"], ["▁A", "s"], ["▁as", "pect"], ["u", "le"], ["\"", "▁("], ["移", "动"], ["中华", "人民"], ["也", "可以"], ["▁j", "o"], ["▁sugg", "est"], ["▁pol", "ic"], ["美", "國"], ["it", "ud"], ["o", "ff"], ["ag", "ue"], ["iv", "il"], ["▁em", "ot"], ["▁Americ", "a"], ["布", "局"], ["m", "ar"], ["▁so", "ft"], ["▁commun", "ities"], ["▁n", "ational"], ["专", "利"], ["的", "关键"], ["I", "N"], ["体", "育"], ["land", "s"], ["验", "证"], ["he", "l"], ["交", "换"], ["H", "ere"], ["死", "亡"], ["w", "o"], ["距", "离"], ["▁whe", "ther"], ["▁b", "ar"], ["▁R", "ep"], ["预", "防"], ["设", "立"], ["网络", "安全"], ["▁comp", "let"], ["运", "输"], ["▁anal", "ysis"], ["的", "信息"], ["元", "素"], ["十", "八"], ["▁se", "en"], ["er", "ous"], ["o", "ice"], ["▁St", "ate"], ["▁s", "ize"], ["组", "合"], ["面", "对"], ["ut", "es"], ["ren", "ch"], ["▁A", "ss"], ["▁though", "t"], ["▁c", "ut"], ["的", "工作"], ["▁sh", "are"], ["连", "续"], ["ren", "g"], ["▁f", "ig"], ["▁G", "od"], ["f", "l"], ["首", "次"], ["▁fl", "u"], ["▁on", "line"], ["传统", "的"], ["read", "y"], ["生", "长"], ["▁n", "ature"], ["在", "此"], ["Im", "agine"], ["yp", "e"], ["优", "秀"], ["b", "or"], ["N", "o"], ["ct", "or"], ["g", "ing"], ["赔", "偿"], ["r", "um"], ["▁e", "ver"], ["都", "有"], ["..", "."], ["▁st", "ories"], ["是", "对"], ["ac", "hes"], ["激", "发"], ["anu", "ary"], ["固", "定"], ["国", "务"], ["u", "k"], ["▁de", "ep"], ["▁d", "oc"], ["it", "or"], ["▁on", "ce"], ["▁method", "s"], ["希", "望"], ["角", "色"], ["ic", "les"], ["迅", "速"], ["ist", "ance"], ["ver", "age"], ["ourn", "al"], ["认", "定"], ["▁pre", "vious"], ["▁serv", "ices"], ["an", "a"], ["on", "se"], ["▁ne", "ver"], ["输", "入"], ["E", "n"], ["▁am", "ount"], ["呈", "现"], ["机", "会"], ["u", "el"], ["近", "年来"], ["▁start", "ed"], ["f", "ect"], ["▁product", "s"], ["就", "会"], ["P", "S"], ["宏", "观"], ["I", "V"], ["以", "后"], ["▁reg", "ular"], ["▁go", "ing"], ["ud", "d"], ["▁n", "ut"], ["的", "要求"], ["pt", "ember"], ["end", "s"], ["▁cir", "c"], ["l", "er"], ["pr", "il"], ["加", "大"], ["▁ent", "ire"], ["e", "ak"], ["▁st", "ress"], ["自", "治"], ["防", "止"], ["ail", "y"], ["办", "法"], ["引", "领"], ["n", "own"], ["▁r", "ate"], ["▁techn", "iques"], ["▁wee", "k"], ["公", "开"], ["n", "a"], ["▁c", "r"], ["am", "in"], ["数据", "库"], ["▁bre", "ak"], ["▁wh", "ite"], ["ul", "ations"], ["um", "e"], ["the", "se"], ["▁Brit", "ish"], ["类", "似"], ["太", "阳"], ["左", "右"], [".▁", "“"], ["▁design", "ed"], ["h", "ood"], ["idd", "le"], ["▁redu", "ce"], ["el", "t"], ["h", "old"], ["常", "见"], ["▁every", "one"], ["▁ens", "ure"], ["员", "工"], ["is", "es"], ["▁tra", "ditional"], ["访", "问"], ["疫", "情"], ["预", "算"], ["加", "速"], ["▁J", "ohn"], ["良", "好的"], ["ol", "es"], ["S", "e"], ["C", "R"], ["位", "于"], ["公", "众"], ["▁ab", "s"], ["▁l", "ab"], ["▁ass", "ess"], ["ill", "iam"], ["▁reg", "ion"], ["破", "坏"], ["有效", "的"], ["▁d", "om"], ["证", "券"], ["模", "拟"], ["规定", "的"], ["im", "ent"], ["学", "的"], ["主要", "是"], ["加", "入"], ["▁C", "al"], ["it", "ary"], ["金", "属"], ["▁", "-"], ["职", "能"], ["知", "道"], ["数据", "的"], ["ed", "s"], ["M", "S"], ["让", "学生"], ["▁allow", "s"], ["几", "个"], ["▁consid", "ered"], ["意味", "着"], ["▁orig", "inal"], ["》、", "《"], ["出", "发"], ["le", "v"], ["le", "ar"], ["兴", "趣"], ["▁s", "ix"], ["模", "块"], ["第", "五"], ["审", "查"], ["▁med", "ical"], ["min", "ist"], ["im", "ately"], ["国务", "院"], ["日", "益"], ["av", "or"], ["地", "球"], ["運", "動"], ["▁me", "chan"], ["▁sk", "in"], ["▁pro", "p"], ["▁m", "ass"], ["b", "orn"], ["D", "e"], ["▁manag", "ement"], ["ivers", "e"], ["in", "ally"], ["▁ev", "idence"], ["▁ex", "erc"], ["中华人民", "共和国"], ["奋", "斗"], ["ur", "ity"], ["能", "量"], ["实", "时"], ["活", "性"], ["N", "ot"], ["O", "S"], ["内", "涵"], ["am", "ple"], ["▁K", "ing"], ["优", "先"], ["培", "育"], ["亿", "元"], ["▁C", "ity"], ["ist", "ics"], ["A", "I"], ["体", "验"], ["相", "结合"], ["围", "绕"], ["B", "e"], ["其", "次"], ["▁an", "c"], ["如", "此"], ["消费", "者"], ["art", "ment"], ["基", "地"], ["▁an", "sw"], ["Americ", "an"], ["▁bel", "ow"], ["▁prov", "ides"], ["▁I", "I"], ["▁d", "rug"], ["F", "rom"], ["b", "ack"], ["主", "张"], ["利", "润"], ["刑", "事"], ["▁h", "arm"], ["▁b", "al"], ["的", "经济"], ["=", "\""], ["如", "下"], ["▁comp", "on"], ["▁S", "oc"], ["C", "an"], ["有", "所"], ["▁A", "ustral"], ["改", "造"], ["▁sur", "v"], ["统", "筹"], ["成", "熟"], ["B", "C"], ["由", "此"], ["▁rel", "ated"], ["改", "进"], ["▁ide", "a"], ["▁enc", "ou"], ["▁int", "eg"], ["at", "ter"], ["三", "是"], ["I", "s"], ["节", "点"], ["▁health", "y"], ["▁involv", "ed"], ["p", "re"], ["en", "c"], ["的", "内容"], ["ct", "ober"], ["▁ab", "ility"], ["复", "兴"], ["▁includ", "ed"], ["▁C", "omp"], ["▁pub", "lished"], ["▁l", "ives"], ["尤其", "是"], ["▁re", "act"], ["%", ","], ["▁m", "ix"], ["Al", "though"], [":", "//"], ["ar", "i"], ["▁st", "ation"], ["▁play", "ers"], ["▁", "ver"], ["▁exp", "ress"], ["英", "语"], ["▁t", "arget"], ["C", "T"], ["ir", "l"], ["大", "多数"], ["▁rel", "ig"], ["▁ref", "er"], ["▁show", "s"], ["▁read", "ing"], ["le", "te"], ["文", "字"], ["电", "力"], ["it", "ation"], ["▁", "`"], ["ur", "g"], ["▁meas", "ure"], ["中国", "人民"], ["信息", "化"], ["医", "院"], ["g", "ar"], ["看", "到"], ["法", "国"], ["▁mult", "iple"], ["▁al", "ready"], ["ron", "ic"], ["分", "离"], ["▁stud", "ent"], ["有", "助于"], ["一", "切"], ["症", "状"], ["子", "的"], ["新", "闻"], ["▁cl", "imate"], ["更", "为"], ["j", "oy"], ["▁ins", "ide"], ["▁to", "tal"], ["相应", "的"], ["▁mon", "ths"], ["▁E", "arth"], ["继", "承"], ["▁w", "on"], ["电", "路"], ["个人", "信息"], ["參", "考"], ["▁inst", "ance"], ["ac", "hed"], ["▁var", "i"], ["▁cult", "ure"], ["▁pr", "inc"], ["▁c", "oun"], ["▁we", "bs"], ["at", "tle"], ["▁ident", "ify"], ["进", "而"], ["▁rese", "archers"], ["▁comput", "er"], ["异", "常"], ["▁reg", "ard"], ["实践", "中"], ["Acc", "ording"], ["▁t", "ell"], ["和", "平"], ["攻", "击"], ["▁P", "r"], ["a", "un"], ["▁exper", "iences"], ["的", "教学"], ["输", "出"], ["宣", "传"], ["购", "买"], ["允", "许"], ["re", "w"], ["架", "构"], ["▁se", "em"], ["U", "s"], ["混", "合"], ["▁bl", "ack"], ["▁re", "ally"], ["▁J", "apan"], ["▁estab", "lished"], ["创", "建"], ["也", "就是"], ["实际", "上"], ["课", "题"], ["av", "y"], ["公", "里"], ["▁fe", "atures"], ["专", "门"], ["因", "而"], ["▁mark", "et"], ["if", "t"], ["群", "体"], ["▁in", "sp"], ["的", "规定"], ["Ex", "ternal"], ["▁f", "em"], ["基", "层"], ["▁in", "j"], ["▁expl", "ore"], ["ord", "er"], ["▁a", "im"], ["▁R", "iver"], ["▁d", "iet"], ["ce", "mber"], ["▁di", "agn"], ["▁g", "reen"], ["的", "变化"], ["▁to", "ols"], ["▁requ", "ired"], ["研究", "人员"], ["▁challeng", "es"], ["▁c", "over"], ["▁d", "est"], ["▁ele", "ments"], ["个", "体"], ["▁p", "ict"], ["ord", "s"], ["▁h", "ours"], ["n", "o"], ["▁a", "ction"], ["ve", "y"], ["▁M", "arch"], [")", "。"], ["du", "c"], ["▁pos", "ition"], ["ct", "ions"], ["作", "业"], ["▁e", "ither"], ["▁rem", "ain"], ["人", "力"], ["ell", "ow"], ["的", "行为"], ["▁necess", "ary"], ["推", "广"], ["▁effect", "ive"], ["四", "个"], ["调", "控"], ["贯", "彻"], ["▁h", "alf"], ["形成", "了"], ["st", "ead"], ["▁c", "ust"], ["形", "势"], ["认", "证"], ["▁", "rou"], ["事", "务"], ["▁re", "view"], ["▁se", "par"], ["▁m", "oney"], ["▁l", "ed"], ["▁s", "ource"], ["这", "里"], ["扩", "展"], ["登", "记"], ["、", "\""], ["▁struct", "ure"], ["▁cons", "ist"], ["n", "ov"], ["▁f", "ail"], ["生态", "环境"], ["▁includ", "es"], ["▁con", "duct"], ["▁dem", "onstr"], ["an", "c"], ["面", "向"], ["▁m", "or"], ["文化", "的"], ["商", "标"], ["a", "ul"], ["▁p", "ay"], ["▁b", "ooks"], ["w", "ater"], ["ove", "mber"], ["▁l", "ove"], ["▁c", "ru"], ["ag", "ed"], ["▁m", "ach"], ["ov", "ed"], ["ens", "ive"], ["▁school", "s"], ["O", "ther"], ["▁r", "ights"], ["宪", "法"], ["同", "一"], ["单", "元"], ["▁serv", "ice"], ["▁s", "qu"], ["生", "存"], ["经济", "社会"], ["是", "以"], ["s", "aid"], ["C", "C"], ["▁us", "es"], ["u", "ra"], ["c", "ont"], ["B", "l"], ["区", "别"], ["▁t", "aken"], ["一", "系列"], ["▁l", "ate"], ["ve", "re"], ["的", "同时"], ["实现", "了"], ["做", "到"], ["经济", "增长"], ["确", "认"], ["▁W", "h"], ["▁pro", "b"], ["这样", "的"], ["素", "养"], ["f", "ord"], ["▁produ", "ce"], ["are", "nt"], ["▁s", "at"], ["(", ")"], ["▁cle", "an"], ["ric", "k"], ["▁som", "et"], ["ist", "or"], ["p", "ly"], ["研究", "的"], ["▁v", "ill"], ["▁cap", "t"], ["▁st", "e"], ["iv", "ate"], ["毕", "业"], ["t", "ime"], ["十", "二"], ["▁e", "t"], ["产品", "的"], ["管理", "的"], ["▁we", "ight"], ["▁act", "ually"], ["探", "究"], ["进", "展"], ["▁appro", "ach"], ["▁J", "une"], ["▁writ", "ing"], ["斗", "争"], ["c", "ons"], ["▁att", "ention"], ["。", "《"], ["▁b", "ur"], ["等", "等"], ["毛", "泽"], ["▁", "|▁"], ["S", "im"], ["▁st", "reng"], ["▁rec", "omm"], ["条件", "下"], ["频", "率"], ["毛泽", "东"], ["…", "…"], ["I", "nt"], ["很", "大"], ["▁P", "ol"], ["游", "戏"], ["▁tra", "ining"], ["幼", "儿"], ["主", "任"], ["▁invest", "ig"], ["▁sm", "o"], ["h", "am"], ["经", "历"], ["危", "险"], ["遗", "产"], ["A", "m"], ["器", "的"], ["▁f", "ish"], ["劳动", "者"], ["▁resp", "onse"], ["▁pos", "itive"], ["监", "控"], ["r", "ast"], ["▁tra", "vel"], ["▁j", "ob"], ["▁polit", "ical"], ["O", "ur"], ["考", "试"], ["O", "r"], ["刺", "激"], ["约", "束"], ["he", "ad"], ["检", "验"], ["▁", "/▁"], ["▁d", "one"], ["▁A", "ugust"], ["s", "ome"], ["▁se", "lect"], ["拓", "展"], ["▁c", "amp"], ["多", "的"], ["▁loc", "ated"], ["古", "代"], ["▁inst", "ead"], ["强", "的"], ["▁", "ut"], ["▁behav", "ior"], ["▁gl", "obal"], ["A", "M"], ["▁pre", "c"], ["大", "力"], ["铁", "路"], ["▁med", "ic"], ["▁cl", "ose"], ["D", "NA"], ["r", "s"], ["遗", "传"], ["建设", "的"], ["it", "ch"], ["▁ar", "g"], ["▁ext", "ra"], ["ust", "r"], ["▁s", "ays"], ["▁perform", "ance"], ["%", "."], ["ar", "a"], ["可能", "会"], ["▁d", "iv"], ["▁f", "ace"], ["▁somet", "imes"], [")", "▁("], ["eng", "th"], ["展", "示"], ["ol", "ve"], ["修", "改"], ["▁P", "ark"], ["引", "入"], ["土", "壤"], ["宗", "教"], ["▁l", "ot"], ["成", "就"], ["小", "组"], ["is", "ions"], ["rop", "ri"], ["ap", "ter"], ["做", "好"], ["op", "y"], ["离", "子"], ["制度", "的"], ["也", "不"], ["ri", "or"], ["打", "造"], ["巨", "大"], ["▁sur", "round"], ["▁st", "ar"], ["预", "期"], ["化", "和"], ["``", "`"], ["同", "志"], ["S", "T"], ["s", "et"], ["T", "e"], ["if", "orn"], ["▁no", "vel"], ["。", "“"], ["生", "的"], ["re", "et"], ["▁off", "er"], ["各", "级"], ["情", "感"], ["▁W", "est"], ["A", "D"], ["▁re", "ason"], ["▁who", "le"], ["合", "成"], ["确", "立"], ["实", "质"], ["▁He", "alth"], ["▁temper", "ature"], ["t", "ra"], ["▁J", "uly"], ["博", "士"], ["▁for", "ms"], ["▁play", "ed"], ["▁acc", "ount"], ["▁val", "ues"], ["主", "题"], ["激", "励"], ["▁C", "o"], ["ke", "y"], ["k", "nown"], ["c", "ks"], ["思", "路"], ["的", "一种"], ["▁g", "e"], ["▁em", "b"], ["当", "地"], ["可", "见"], ["的", "应用"], ["密", "切"], ["▁caus", "ed"], ["▁out", "side"], ["精", "准"], ["om", "b"], ["▁prog", "rams"], ["d", "o"], ["给", "予"], ["▁on", "es"], ["▁G", "en"], ["y", "t"], ["▁norm", "al"], ["▁pattern", "s"], ["科学", "家"], ["st", "ry"], ["▁writ", "ten"], ["im", "al"], ["▁t", "it"], ["的", "技术"], ["▁m", "ess"], ["的", "不"], [")", ","], ["\"", "\""], ["r", "ance"], ["▁po", "ints"], ["c", "il"], ["all", "ow"], ["的", "情况下"], ["▁A", "ct"], ["▁prim", "ary"], ["erv", "ation"], ["▁so", "il"], ["▁S", "u"], ["形", "象"], ["建", "成"], [",▁", "“"], ["互", "动"], ["▁con", "dition"], ["▁beh", "ind"], ["▁s", "ense"], ["f", "ort"], ["▁dist", "ribut"], ["▁f", "ire"], ["▁r", "ather"], ["▁o", "il"], ["ad", "es"], ["▁J", "anuary"], ["l", "in"], [")", "▁"], ["▁d", "raw"], ["秩", "序"], ["国", "的"], ["探", "讨"], ["供应", "链"], ["信息", "技术"], ["结", "论"], ["▁en", "joy"], ["un", "ction"], ["▁crit", "ical"], ["▁mem", "ber"], ["发", "行"], ["▁num", "bers"], ["▁he", "at"], ["▁s", "ources"], ["▁environment", "al"], ["▁t", "aking"], ["知识", "产权"], ["▁F", "ran"], ["争", "议"], ["人民", "币"], ["▁cl", "in"], ["▁p", "arents"], ["ef", "ore"], ["、", "“"], ["O", "ver"], ["▁resp", "ect"], ["iforn", "ia"], ["▁comp", "ared"], ["ie", "f"], ["▁f", "at"], ["J", "ust"], ["代", "理"], [":", "**"], ["it", "er"], ["金融", "机构"], ["E", "ach"], ["▁m", "om"], ["is", "ms"], ["▁R", "eg"], ["▁su", "ff"], ["▁do", "ing"], ["之", "外"], ["p", "e"], ["导", "向"], ["广", "大"], ["资源", "的"], ["an", "ies"], ["人", "大"], ["▁im", "age"], ["注", "册"], ["所", "在"], ["▁produ", "ced"], ["om", "ing"], ["▁g", "as"], ["▁B", "ar"], ["属", "性"], ["统", "治"], ["的", "理论"], ["纳", "入"], ["▁a", "verage"], ["▁Se", "ptember"], ["ens", "ion"], ["▁sp", "read"], ["中", "國"], ["eb", "ru"], ["法", "定"], ["h", "ing"], ["成", "长"], ["情", "形"], ["检", "察"], ["▁A", "ll"], ["ra", "ge"], ["百", "年"], ["日", "常"], ["ebru", "ary"], ["▁br", "ing"], ["的", "概念"], ["关", "联"], ["生产", "力"], ["▁benef", "its"], ["潜", "在"], ["▁its", "elf"], ["iz", "ations"], ["的", "时间"], ["各", "地"], ["所", "得"], ["▁fe", "ed"], ["振", "兴"], ["ial", "s"], ["▁v", "ideo"], ["u", "ild"], ["》", "("], ["M", "ost"], ["cl", "es"], ["▁d", "aily"], ["ar", "ily"], ["▁P", "art"], ["▁t", "akes"], ["▁incre", "asing"], ["▁st", "ates"], ["▁bro", "ad"], ["ud", "ents"], ["▁", "《"], ["▁soc", "iety"], ["当", "代"], ["▁ind", "epend"], ["▁ter", "ms"], ["▁A", "pril"], ["。", "\""], ["▁l", "ink"], ["市场", "经济"], ["omet", "imes"], ["E", "T"], ["高", "速"], ["事", "故"], ["能力", "的"], ["E", "D"], ["▁t", "iss"], ["com", "p"], ["ab", "et"], ["▁th", "reat"], ["▁ev", "al"], ["it", "ect"], ["Wh", "y"], ["▁prom", "ot"], ["▁over", "all"], ["航", "空"], ["▁w", "arm"], ["▁s", "low"], ["▁c", "ard"], ["强", "度"], ["▁be", "aut"], ["的", "法律"], ["▁long", "er"], ["即", "使"], ["od", "ies"], ["F", "irst"], ["▁c", "ool"], ["态", "度"], ["▁s", "ou"], ["in", "ct"], ["公司", "的"], ["故", "事"], ["有", "些"], ["`", "▁"], ["▁", ",▁"], ["▁foot", "ball"], ["d", "es"], ["▁your", "self"], ["可以", "通过"], ["范围", "内"], ["ic", "a"], ["▁he", "ld"], ["▁s", "leep"], ["▁dam", "age"], ["▁prote", "in"], ["▁a", "ud"], ["贫", "困"], ["有", "着"], ["stit", "ute"], ["适", "当"], ["存在", "的"], ["on", "om"], ["▁quick", "ly"], ["较", "大"], ["▁w", "ild"], ["在", "中国"], ["▁fore", "st"], ["am", "ples"], ["职", "责"], ["▁c", "ross"], ["▁pract", "ices"], ["▁f", "ru"], ["ig", "en"], ["U", "S"], ["ric", "ult"], ["▁serv", "ed"], ["▁saf", "ety"], ["他", "人"], ["On", "ce"], ["o", "e"], ["E", "ng"], ["哪", "些"], ["展", "开"], ["▁R", "ec"], ["人才", "培养"], ["研究", "所"], ["▁d", "og"], ["ing", "ton"], ["而", "不是"], ["积", "累"], ["r", "and"], ["担", "保"], ["▁stand", "ard"], ["all", "s"], ["▁al", "tern"], ["m", "m"], ["沟", "通"], ["▁se", "x"], ["An", "other"], ["▁chem", "ical"], ["ir", "it"], ["遵", "循"], ["▁H", "ar"], ["▁prov", "ided"], ["▁ear", "l"], ["J", "ohn"], ["出", "来"], ["当", "然"], ["▁st", "op"], ["约", "定"], ["威", "胁"], ["▁con", "cept"], ["更", "新"], ["stand", "ing"], ["较", "为"], ["▁mat", "ter"], ["▁en", "h"], ["▁O", "ctober"], ["▁f", "arm"], ["▁re", "ve"], ["I", "C"], ["再", "次"], ["维", "持"], ["▁rele", "ased"], ["por", "ary"], [",", "▁"], ["参考", "文献"], ["养", "老"], ["他们", "的"], ["▁exp", "ression"], ["补", "偿"], ["民", "间"], ["大", "利"], ["内", "在"], ["▁k", "ids"], ["ers", "hip"], ["▁pat", "ient"], ["我们", "的"], ["到", "的"], ["▁st", "ru"], ["▁c", "at"], ["绩", "效"], ["ed", "eral"], ["▁cont", "ent"], ["▁", "("], ["act", "ers"], ["另", "一"], ["h", "a"], ["创", "作"], ["▁p", "sych"], ["团", "结"], ["的", "核心"], ["▁y", "et"], ["▁E", "d"], ["▁ref", "lect"], ["▁cult", "ural"], ["o", "very"], ["all", "ed"], ["危", "害"], ["us", "ic"], ["商", "务"], [" ", " "], ["新", "兴"], ["▁hum", "ans"], ["▁A", "b"], ["▁sub", "st"], ["R", "NA"], ["##", "#▁"], ["ond", "on"], ["大", "部分"], ["▁add", "ed"], ["l", "ife"], ["之", "中"], ["价值", "观"], ["am", "a"], ["市场", "的"], ["▁saf", "e"], ["▁l", "og"], ["▁med", "ia"], ["▁l", "ines"], ["施", "工"], ["用", "人"], ["▁f", "inal"], ["n", "ew"], ["▁P", "ar"], ["力", "度"], ["并", "在"], ["▁caus", "es"], ["强", "制"], ["制", "作"], ["理", "性"], ["▁w", "ood"], ["O", "R"], ["将", "其"], ["u", "ro"], ["rough", "t"], ["ibr", "ary"], ["各", "项"], ["▁ro", "ad"], ["es", "c"], ["密", "度"], ["▁o", "x"], ["▁g", "ames"], ["缺", "陷"], ["os", "ing"], ["依", "靠"], ["最", "佳"], ["对", "应"], ["▁sh", "own"], ["变", "量"], ["ou", "d"], ["▁re", "v"], ["▁M", "in"], ["上", "市"], ["那", "些"], ["▁av", "oid"], ["▁su", "st"], ["转", "让"], ["▁h", "abit"], ["▁st", "ay"], ["渠", "道"], ["电", "流"], ["as", "ons"], ["▁A", "m"], ["▁F", "rench"], ["▁th", "ird"], ["冲", "突"], ["补", "充"], ["考", "核"], ["示", "范"], ["▁rec", "ent"], ["非", "法"], ["O", "N"], ["E", "P"], ["而", "不"], ["us", "ed"], ["if", "f"], ["\"", ".▁"], ["▁gre", "ater"], ["B", "ob"], ["▁does", "n"], ["▁ex", "act"], ["u", "nder"], ["接", "触"], ["党", "中央"], ["D", "r"], ["▁eas", "y"], ["引", "发"], ["pp", "er"], ["dition", "ally"], ["▁t", "ree"], ["形成", "的"], ["os", "ition"], ["协", "商"], ["▁import", "ance"], ["se", "e"], ["支", "出"], ["▁includ", "ing"], ["▁t", "alk"], ["og", "en"], ["i", "us"], ["▁imp", "lement"], ["ro", "om"], ["纤", "维"], ["尊", "重"], ["违", "法"], ["r", "or"], ["L", "e"], ["%", "。"], ["加", "以"], ["tern", "et"], ["an", "ks"], ["P", "eople"], ["ear", "s"], ["为", "什么"], ["坚", "定"], ["替", "代"], ["or", "thern"], ["▁De", "cember"], ["om", "a"], ["其", "它"], ["▁move", "ment"], ["经", "常"], ["▁vis", "ual"], ["▁D", "r"], ["ib", "er"], ["》", ","], ["A", "pp"], ["▁D", "ep"], ["反", "对"], ["▁ide", "as"], ["程度", "上"], ["人民", "群众"], ["t", "ies"], ["ic", "o"], ["、", "▁"], ["ie", "ce"], ["合", "物"], ["正", "是"], ["▁a", "ff"], ["干", "扰"], ["▁estab", "lish"], ["资本", "主义"], ["▁elect", "ric"], ["ro", "te"], ["▁w", "a"], ["▁sy", "n"], ["▁Europ", "e"], ["习", "惯"], ["▁n", "ight"], ["al", "king"], ["▁m", "ag"], ["▁s", "old"], ["响", "应"], ["因", "子"], ["▁", "."], ["空", "气"], ["▁significant", "ly"], ["ad", "d"], ["有", "了"], ["vent", "ion"], ["p", "ose"], ["▁H", "igh"], ["▁d", "ied"], ["走", "向"], ["▁histor", "ical"], ["▁prog", "ress"], ["主", "席"], ["最", "大的"], ["▁s", "il"], ["an", "cial"], ["几", "乎"], ["面", "的"], ["行", "使"], ["▁care", "er"], ["著", "作"], ["院", "校"], [".", "”▁"], ["只", "要"], ["的", "安全"], ["▁indu", "stry"], ["▁for", "mer"], ["更好", "地"], ["at", "ively"], ["▁can", "not"], ["▁E", "l"], ["某", "种"], ["ound", "s"], ["▁In", "ternational"], ["▁develop", "ing"], ["od", "es"], ["res", "h"], ["g", "l"], ["平", "方"], ["做", "出"], ["an", "cy"], ["带", "来的"], ["予", "以"], ["▁ext", "rem"], ["▁rece", "ived"], ["資", "料"], ["营", "养"], ["olog", "ies"], ["▁l", "ands"], ["今", "天"], ["十", "四"], ["▁Q", "u"], ["足", "球"], ["▁h", "y"], ["u", "fact"], ["h", "tt"], ["▁N", "ovember"], ["i", "ers"], ["▁h", "ost"], ["▁c", "ode"], ["活动", "的"], ["关系", "的"], ["时", "的"], ["▁n", "orth"], ["手", "术"], ["▁in", "ternational"], ["损", "伤"], ["传", "递"], ["▁cust", "om"], ["▁A", "nd"], ["可以", "在"], ["但", "在"], ["esp", "ite"], ["基础", "上"], ["R", "ec"], ["十", "九"], ["k", "y"], ["▁cl", "aim"], ["产业", "链"], ["il", "es"], ["芯", "片"], ["吸", "引"], ["释", "放"], [")", ":"], ["▁commun", "ication"], ["汇", "率"], ["▁H", "ouse"], ["b", "it"], [")", ":▁"], ["▁tru", "e"], ["•", "▁"], ["少", "数"], ["Th", "rough"], ["指", "数"], ["▁anim", "al"], ["不", "再"], ["▁lar", "ger"], ["▁Europ", "ean"], ["高", "级"], ["al", "so"], ["良", "好"], ["网", "站"], ["改革", "的"], ["重", "复"], ["▁a", "ware"], ["▁min", "utes"], ["人", "与"], ["▁grow", "ing"], ["i", "ra"], ["的", "思想"], ["初", "步"], ["▁fe", "ature"], [",", "《"], ["▁famil", "ies"], ["ter", "m"], ["路", "线"], ["▁determ", "ine"], ["▁iss", "ue"], ["itud", "e"], [".▁", "**"], ["对", "其"], ["in", "ated"], ["C", "ol"], ["▁contin", "ue"], ["i", "os"], ["u", "ff"], ["边", "缘"], ["ir", "ing"], ["步", "骤"], ["▁m", "ental"], ["ree", "k"], ["E", "M"], ["av", "id"], ["▁Cent", "er"], ["股", "权"], ["代", "谢"], ["a", "fter"], ["大", "學"], ["▁econom", "ic"], ["大", "型"], ["c", "ome"], ["学", "家"], ["▁al", "most"], ["和", "其他"], ["▁webs", "ite"], ["品", "牌"], ["▁dec", "re"], ["体系", "的"], ["▁p", "age"], ["队", "伍"], ["▁C", "ont"], ["揭", "示"], ["▁w", "ent"], ["个", "性"], ["流", "通"], ["▁comp", "lete"], ["自", "觉"], ["服务", "器"], ["▁b", "and"], ["启", "动"], ["原", "子"], ["ien", "cy"], ["▁con", "cent"], ["▁m", "agn"], ["▁var", "iety"], ["粮", "食"], ["▁b", "acter"], ["n", "ed"], ["采", "集"], ["大", "规模"], ["▁sym", "b"], ["为", "核心"], ["▁act", "ive"], ["▁art", "icle"], ["思", "政"], ["▁mean", "ing"], ["孩", "子"], ["职业", "教育"], ["oun", "ts"], ["命", "运"], ["in", "y"], ["党", "员"], ["▁cont", "act"], ["适", "合"], ["ous", "ly"], ["b", "es"], ["▁▁▁▁▁▁▁▁", "▁▁▁▁▁▁▁▁"], ["更多", "的"], ["P", "P"], ["h", "as"], ["▁report", "ed"], ["C", "S"], ["e", "al"], ["i", "ot"], ["人", "在"], ["唯", "一"], ["为", "基础"], ["W", "ell"], ["▁bas", "ic"], ["▁im", "ages"], ["▁Y", "ou"], ["▁b", "ase"], ["结", "束"], ["G", "DP"], ["▁strateg", "ies"], ["台", "灣"], ["侵", "权"], ["ul", "a"], ["▁sp", "eed"], ["的", "结果"], ["▁sh", "ap"], ["▁ac", "cept"], ["▁S", "w"], ["oc", "al"], ["▁G", "l"], ["同", "步"], ["服务", "的"], ["ur", "ies"], ["被", "告"], ["▁pl", "aces"], ["▁fe", "et"], ["ut", "h"], ["充分", "发挥"], ["大", "量的"], ["D", "o"], ["表现", "为"], ["▁disc", "overed"], ["▁opportun", "ities"], ["en", "ge"], ["▁s", "n"], ["条", "款"], ["科技", "创新"], ["应", "急"], ["S", "ince"], ["at", "form"], ["力", "和"], ["▁belie", "ve"], ["▁creat", "ing"], ["的", "学习"], ["不", "少"], ["U", "nder"], ["▁D", "ist"], ["高质量", "发展"], ["an", "ish"], ["▁process", "es"], ["▁ask", "ed"], ["y", "ing"], ["大", "小"], ["▁food", "s"], ["原", "始"], ["▁ad", "ditional"], ["▁cor", "rect"], ["批", "准"], ["ul", "ate"], ["了", "一个"], ["Al", "ice"], ["ag", "ement"], ["▁app", "l"], ["年", "度"], ["▁net", "work"], ["▁M", "e"], ["c", "are"], ["ul", "ated"], ["iz", "es"], ["▁dise", "ases"], ["**", ":▁"], ["res", "ident"], ["▁achie", "ve"], ["▁eas", "ily"], ["▁e", "th"], ["ild", "ren"], ["▁v", "ia"], ["浙", "江"], ["▁ey", "e"], ["▁contin", "ued"], ["▁l", "if"], ["ro", "ad"], ["间", "的"], ["▁app", "ropri"], ["▁cru", "cial"], ["接", "收"], ["授", "权"], ["辐", "射"], ["▁h", "or"], ["主", "导"], ["▁every", "thing"], ["A", "b"], ["iss", "ions"], ["每", "年"], ["▁St", "ud"], ["C", "omp"], ["独", "特"], ["et", "her"], ["装", "置"], [">", "▁"], ["▁coll", "abor"], ["差", "距"], ["▁sh", "ape"], ["▁att", "em"], ["▁Ar", "t"], ["om", "as"], ["▁pr", "int"], ["灵", "活"], ["u", "able"], ["s", "on"], ["劳动", "合同"], ["▁v", "iol"], ["▁l", "o"], ["敏", "感"], ["▁ve", "get"], ["▁S", "ec"], ["相", "似"], ["|", "-"], ["▁tre", "es"], ["▁pre", "p"], ["使用", "的"], ["▁e", "at"], ["▁c", "ele"], ["之", "路"], ["id", "ents"], ["有限", "公司"], ["▁vir", "us"], ["le", "ad"], ["The", "n"], ["纳", "米"], ["▁go", "al"], ["事", "项"], ["f", "ess"], ["v", "est"], ["▁vis", "it"], ["▁anal", "y"], ["▁sim", "ply"], ["re", "st"], ["▁doc", "ument"], ["工", "资"], ["▁st", "ri"], ["▁aspect", "s"], ["▁m", "ole"], ["▁get", "ting"], ["蛋白", "质"], ["修", "复"], ["ect", "ions"], ["電", "影"], ["大", "幅"], ["C", "o"], ["▁influ", "ence"], ["iel", "ds"], ["通", "道"], ["▁rem", "ains"], ["ro", "s"], ["▁s", "outh"], ["G", "en"], ["▁car", "bon"], ["▁man", "ufact"], ["▁e", "c"], ["▁bec", "omes"], ["i", "ar"], ["的", "特点"], ["▁ey", "es"], ["▁char", "acters"], ["ce", "an"], ["现", "有"], ["yth", "on"], ["A", "L"], ["▁an", "g"], ["不", "过"], ["视", "频"], ["r", "id"], ["▁F", "or"], ["▁b", "reat"], ["▁h", "ands"], ["▁eff", "orts"], ["od", "ay"], ["期", "限"], ["B", "S"], ["▁vers", "ion"], ["i", "pl"], ["一", "代"], ["▁", "x"], ["b", "re"], ["ord", "ers"], ["老", "师"], ["用人", "单位"], ["e", "qu"], ["召", "开"], ["se", "c"], ["al", "d"], ["许", "可"], ["y", "ond"], ["链", "接"], ["▁m", "other"], ["ign", "ed"], ["F", "urther"], ["▁h", "ot"], ["M", "ar"], ["文", "物"], ["▁struct", "ures"], ["辅", "助"], ["浓", "度"], ["▁R", "uss"], ["▁comm", "it"], ["外", "的"], ["投资", "者"], ["自动", "化"], ["rou", "p"], ["岗", "位"], ["债", "券"], ["▁Can", "ada"], ["ed", "i"], ["E", "ven"], ["代", "码"], ["年", "人"], ["▁th", "ing"], ["党", "和"], ["十", "一"], ["考", "察"], ["制", "约"], ["仲", "裁"], ["ce", "ed"], ["试", "点"], ["职", "工"], ["纠", "纷"], ["▁gu", "id"], ["大", "大"], ["ist", "ry"], ["外", "交"], ["电", "压"], ["電", "視"], ["详", "细"], ["▁che", "ck"], ["▁trans", "port"], ["▁t", "ax"], ["均", "衡"], ["紧", "密"], ["ain", "t"], ["通", "知"], ["成", "分"], ["▁f", "ram"], ["这", "就"], ["▁f", "avor"], ["im", "um"], ["▁relations", "hip"], ["的", "风险"], ["▁se", "a"], ["▁Afric", "a"], ["▁ne", "igh"], ["C", "ont"], [":▁", "\""], ["组成", "部分"], ["w", "ide"], ["随", "机"], ["▁l", "ost"], ["▁cal", "cul"], ["m", "any"], ["if", "ul"], ["智能", "化"], ["▁w", "ond"], ["抵", "押"], ["组织", "的"], ["ill", "ing"], ["ol", "it"], ["a", "ur"], ["气", "体"], ["yd", "ro"], ["▁st", "age"], ["▁h", "yp"], ["ph", "as"], ["编", "制"], ["w", "ere"], ["▁T", "ra"], ["i", "ec"], ["os", "ure"], ["十", "三"], ["▁pol", "l"], ["十", "年"], ["信息", "的"], ["▁Sc", "ience"], ["▁Germ", "an"], ["▁anc", "ient"], ["▁Col", "lege"], ["有", "一"], ["E", "N"], ["w", "rit"], ["为", "中心"], ["▁sh", "ared"], ["▁A", "c"], ["学", "会"], ["伦", "理"], ["▁f", "ront"], ["▁b", "ab"], ["罗", "斯"], ["▁cent", "ral"], ["▁g", "ard"], ["▁F", "ebruary"], ["at", "in"], ["▁r", "ules"], ["微", "生物"], ["oc", "r"], ["地", "产"], ["融", "入"], ["军", "队"], ["m", "en"], ["编", "码"], ["▁Afric", "an"], ["航", "天"], ["董", "事"], ["I", "L"], ["也", "会"], ["et", "c"], ["c", "raft"], ["u", "x"], ["D", "on"], ["值", "得"], ["少", "年"], ["▁dec", "ided"], ["et", "t"], ["▁d", "er"], ["第一", "次"], ["qu", "e"], ["▁dec", "ision"], ["▁comp", "anies"], ["▁t", "um"], ["机器", "人"], ["采", "购"], ["res", "p"], ["▁em", "p"], ["le", "ft"], ["环", "保"], ["▁l", "ooking"], ["op", "t"], ["▁In", "stitute"], ["办", "公"], ["地区", "的"], ["P", "C"], ["若", "干"], ["▁p", "ack"], ["ch", "ol"], ["um", "an"], ["大", "学生"], ["发", "电"], ["▁descri", "bed"], ["ra", "b"], ["印", "度"], ["The", "ir"], ["▁is", "n"], ["eor", "ge"], ["在", "线"], ["▁con", "vers"], ["▁b", "orn"], ["▁trans", "l"], ["▁el", "se"], ["方", "程"], ["▁Ass", "oci"], ["ines", "e"], ["▁be", "yond"], ["高", "中"], ["▁l", "ength"], ["▁A", "ir"], [" ", " "], ["g", "n"], ["▁E", "ast"], ["▁sit", "u"], ["▁for", "ce"], ["发生", "的"], ["M", "y"], ["▁set", "t"], ["并", "非"], ["使", "命"], ["单", "一"], ["cept", "ion"], ["▁se", "vere"], ["一", "旦"], ["进", "口"], ["▁P", "er"], ["▁M", "c"], ["u", "ge"], ["接", "口"], ["v", "ant"], ["▁D", "ay"], ["区", "块"], ["配", "合"], ["节", "能"], ["局", "部"], ["电", "影"], ["▁ac", "id"], ["C", "ons"], ["解决", "方案"], ["今", "年"], ["▁s", "us"], ["i", "ples"], ["duc", "ation"], ["▁project", "s"], ["m", "ission"], ["\"", "。"], ["▁att", "ack"], ["传", "承"], ["▁th", "inking"], ["▁m", "ount"], ["上", "下"], ["▁differen", "ce"], ["视", "觉"], ["▁A", "pp"], ["▁f", "ul"], ["装", "备"], ["▁J", "ew"], ["▁dev", "ices"], ["C", "omm"], ["体现", "了"], ["us", "ing"], ["▁sc", "reen"], ["▁ro", "ck"], ["股", "票"], ["发", "育"], ["轨", "道"], ["it", "ar"], ["共同", "体"], ["▁f", "ight"], ["执", "法"], ["z", "z"], ["p", "id"], ["硬", "件"], ["▁A", "ng"], ["▁s", "al"], ["▁object", "s"], ["▁dig", "ital"], ["国家", "安全"], ["假", "设"], ["至", "少"], ["clus", "ion"], ["方", "针"], ["绝", "对"], ["的", "形式"], ["▁H", "istory"], ["ip", "ment"], ["b", "ecause"], ["记", "忆"], ["▁mod", "els"], ["P", "D"], ["使", "学生"], ["▁pro", "ced"], ["▁re", "ach"], ["er", "a"], ["▁w", "id"], ["▁step", "s"], ["西", "部"], ["um", "ents"], ["▁respons", "ible"], ["un", "icip"], ["短", "期"], ["接", "近"], ["▁success", "ful"], ["▁scient", "ists"], ["台", "湾"], ["▁s", "on"], ["▁l", "ack"], ["编", "辑"], ["现", "状"], ["▁A", "t"], ["l", "im"], [":**", "▁"], ["S", "S"], ["条", "例"], ["▁ag", "re"], ["还", "要"], ["▁val", "uable"], ["股", "份"], ["E", "C"], ["▁differen", "ces"], ["▁involv", "es"], ["yn", "am"], ["▁bir", "th"], ["▁pers", "pect"], ["▁cent", "er"], ["违", "反"], ["▁Res", "earch"], ["ir", "m"], ["ur", "rent"], ["著", "名"], ["审", "判"], ["▁ro", "om"], ["cl", "ass"], ["近", "代"], ["w", "ood"], ["M", "ay"], ["▁ad", "minist"], ["▁ear", "th"], ["or", "g"], ["着", "力"], ["abet", "es"], ["y", "ear"], ["▁compon", "ents"], ["▁qu", "ant"], ["air", "s"], ["ur", "t"], ["不", "到"], ["c", "re"], ["▁R", "ev"], ["同", "意"], ["m", "et"], ["的", "教育"], ["扩", "张"], ["▁de", "b"], ["活", "力"], ["▁S", "erv"], ["胜", "利"], ["宇", "宙"], ["▁", "ing"], ["um", "n"], ["则", "是"], ["▁stru", "gg"], ["出", "台"], ["S", "u"], ["osp", "ital"], ["▁inf", "l"], ["清", "楚"], ["挖", "掘"], ["▁sust", "ain"], ["▁work", "ed"], ["g", "u"], ["ash", "ington"], ["er", "o"], ["▁therap", "y"], ["发", "射"], ["ww", "w"], ["▁profess", "ional"], ["提出", "的"], ["__", "__"], ["第", "六"], ["b", "al"], ["▁inst", "it"], ["an", "cing"], ["▁a", "st"], ["oc", "ks"], ["▁cont", "ains"], ["事", "物"], ["再", "生"], ["电", "视"], ["▁so", "on"], ["▁rele", "ase"], ["观", "测"], ["红", "色"], ["身", "体"], ["▁s", "aw"], ["▁m", "ale"], ["▁direct", "ly"], ["▁inf", "ection"], ["▁o", "p"], ["明", "朝"], ["le", "g"], ["▁B", "o"], ["消", "除"], ["▁c", "ou"], ["amp", "ions"], ["▁ve", "h"], ["怎", "样"], ["▁inc", "orpor"], ["新", "技术"], ["”", "、“"], ["竞争", "力"], ["▁", "ice"], ["▁exp", "ect"], ["R", "em"], ["▁Eng", "land"], ["▁power", "ful"], ["切", "实"], ["l", "oad"], ["学习", "的"], ["em", "porary"], ["▁soft", "ware"], ["▁Ind", "ia"], ["or", "ation"], ["▁M", "on"], ["▁tra", "ck"], ["条", "规定"], ["cent", "ury"], ["所", "需"], ["ad", "ian"], ["记", "者"], ["▁Ind", "ian"], ["sp", "ec"], ["年", "龄"], ["if", "ically"], ["▁d", "ry"], ["▁po", "or"], ["指", "挥"], ["wh", "at"], ["it", "is"], ["感", "知"], ["ough", "t"], ["▁d", "ang"], ["iec", "es"], ["d", "is"], ["▁wee", "ks"], ["功", "率"], ["▁in", "nov"], ["▁ad", "ults"], ["gen", "cy"], ["天", "然"], ["故", "障"], ["▁est", "im"], ["第", "一个"], ["找", "到"], ["us", "ion"], ["教学", "中"], ["品", "种"], ["▁S", "ystem"], ["是", "中国"], ["小", "时"], ["执", "政"], ["▁h", "ar"], ["大", "气"], ["▁r", "ates"], ["全", "会"], ["得", "以"], ["咨", "询"], ["”", "“"], ["财", "富"], ["强", "国"], ["▁earl", "ier"], ["人", "为"], ["▁ro", "b"], ["it", "iz"], ["而", "在"], ["情", "境"], ["ly", "mp"], ["▁the", "ory"], ["的", "原则"], ["▁s", "earch"], ["报", "道"], ["样", "本"], ["一", "带"], ["划", "分"], ["▁d", "ou"], ["▁v", "it"], ["抽", "象"], ["呼", "吸"], ["▁d", "iverse"], ["augh", "t"], ["▁to", "ol"], ["▁sp", "eak"], ["\"", "、\""], ["垄", "断"], ["▁pred", "ict"], ["▁requ", "ires"], ["树", "立"], ["序", "列"], ["▁vill", "age"], ["▁relations", "hips"], ["ic", "ular"], ["p", "at"], ["▁con", "ce"], ["▁f", "a"], ["▁u", "nd"], ["准", "则"], ["▁play", "ing"], ["i", "as"], ["▁h", "on"], ["▁writ", "e"], ["万", "元"], ["语", "文"], ["南", "京"], ["al", "y"], ["劳动", "力"], ["c", "ast"], ["▁ag", "o"], ["▁c", "am"], ["▁le", "aves"], ["视", "为"], ["▁", "ir"], ["c", "ell"], ["▁show", "ed"], ["负", "债"], ["av", "ig"], ["高", "于"], ["复杂", "的"], ["▁def", "in"], ["机", "遇"], ["等", "级"], ["▁loc", "ation"], ["ver", "t"], ["i", "j"], ["以", "前"], ["人", "文"], ["▁W", "illiam"], ["多", "次"], ["▁try", "ing"], ["▁v", "acc"], ["渗", "透"], ["能力", "和"], ["v", "is"], ["bo", "ard"], ["▁acc", "ording"], ["▁mov", "ed"], ["and", "er"], ["公", "路"], ["▁lim", "ited"], ["巨", "大的"], ["经", "典"], ["我们", "党"], ["出现", "了"], ["巩", "固"], ["s", "m"], ["突", "变"], ["干", "预"], ["oy", "al"], ["▁g", "ain"], ["n", "ection"], ["▁s", "ection"], ["▁f", "it"], ["合", "并"], ["▁Ch", "urch"], ["民", "法"], ["可持续", "发展"], ["▁ser", "ious"], ["▁encou", "rag"], ["它", "是"], ["的", "时候"], ["▁t", "able"], ["的", "情况"], ["il", "os"], ["人", "体"], ["▁V", "al"], ["成", "了"], ["g", "ram"], ["▁find", "ings"], ["取得", "了"], ["冲", "击"], ["带", "动"], ["使", "其"], ["家", "族"], ["动", "机"], ["am", "ent"], ["P", "re"], ["▁gra", "du"], ["▁it", "ems"], ["得到", "了"], ["M", "P"], ["in", "ating"], ["▁exper", "ien"], ["▁c", "ivil"], ["▁", "+▁"], ["数字", "经济"], ["ens", "ity"], ["个", "月"], ["结构", "的"], ["▁qu", "ite"], ["r", "as"], ["疫", "苗"], ["五", "年"], ["▁mon", "th"], ["g", "y"], ["Ad", "ditionally"], ["▁d", "ark"], ["▁col", "on"], ["▁scient", "ific"], ["▁dev", "ice"], ["z", "h"], ["应用", "于"], ["▁b", "ra"], ["线", "性"], ["发", "病"], ["适", "用于"], ["中", "间"], ["▁p", "rior"], ["▁gener", "ally"], ["it", "able"], ["ed", "ic"], ["▁conf", "lic"], ["n", "ers"], ["的", "政治"], ["清", "晰"], ["含", "量"], ["▁exerc", "ise"], ["▁small", "er"], ["a", "el"], ["用", "来"], ["不", "良"], ["处", "罚"], ["c", "oh"], ["的", "目标"], ["货币", "政策"], ["低", "于"], ["▁bal", "ance"], ["激", "活"], ["激", "光"], ["尚", "未"], ["防", "治"], ["现", "场"], ["▁learn", "ed"], ["对", "此"], ["▁exam", "ples"], ["成", "绩"], ["房", "地产"], ["▁m", "ut"], ["▁se", "qu"], ["对", "比"], ["▁mem", "ory"], ["自", "信"], ["有效", "地"], ["n", "y"], ["▁pl", "atform"], ["区", "的"], ["鉴", "定"], ["b", "ook"], ["H", "er"], ["▁w", "ide"], ["行为", "的"], ["▁ch", "o"], ["ch", "ange"], ["▁per", "fect"], ["是", "不"], ["中", "有"], ["form", "ed"], ["▁m", "id"], [";", "("], ["▁p", "iece"], ["use", "um"], ["资", "格"], ["▁const", "ruct"], ["办", "理"], ["▁or", "d"], ["▁col", "lection"], ["▁cont", "ext"], ["林", "匹"], ["知识", "的"], ["▁cl", "ub"], ["所", "示"], ["▁g", "ot"], ["》", "("], ["st", "e"], ["lev", "ision"], ["富", "裕"], ["s", "k"], ["▁Y", "our"], ["工", "人"], ["hem", "at"], ["*▁", "**"], ["be", "ing"], ["▁lar", "gest"], ["▁th", "ous"], ["比", "重"], ["解", "除"], ["▁st", "yle"], ["al", "ities"], ["v", "ille"], ["▁applic", "ations"], ["探", "测"], ["安", "装"], ["▁Le", "ague"], ["T", "ra"], ["▁teac", "hers"], ["▁ob", "tain"], ["▁fin", "ancial"], ["▁e", "gg"], ["▁p", "an"], ["大", "家"], ["▁car", "ry"], ["▁off", "ers"], ["更", "高"], ["秘", "密"], ["蒙", "古"], ["复", "合"], ["h", "aps"], ["▁clin", "ical"], ["三", "角"], ["承", "包"], ["▁f", "ast"], ["较", "低"], ["东", "北"], ["▁go", "als"], ["D", "A"], ["x", "imately"], ["▁t", "end"], ["S", "P"], ["各", "自"], ["林匹", "克"], ["hen", "s"], ["▁arch", "itect"], ["品", "质"], ["▁did", "n"], ["法", "官"], ["▁form", "ed"], ["生", "理"], ["提高", "了"], ["的", "国家"], ["Y", "our"], ["保", "留"], ["低", "碳"], ["背景", "下"], ["公", "正"], ["有", "力"], ["I", "ts"], ["》", "。"], ["▁Ch", "ina"], ["▁dis", "play"], ["▁fam", "ous"], ["▁resp", "ond"], ["ig", "r"], ["▁m", "ention"], ["▁I", "m"], ["▁high", "ly"], ["▁mil", "itary"], ["P", "r"], ["苏", "联"], ["交", "互"], ["▁contribut", "e"], ["▁", "ult"], ["▁regard", "ing"], ["农", "产品"], ["ch", "ar"], ["的", "管理"], ["东", "西"], ["w", "ise"], ["▁f", "ather"], ["载", "体"], ["id", "a"], ["▁Te", "chn"], ["t", "a"], ["反", "馈"], ["▁neg", "ative"], ["稳定", "性"], ["▁const", "ruction"], ["▁C", "O"], ["▁eval", "u"], ["后", "来"], ["▁b", "ad"], ["区块", "链"], ["P", "er"], ["▁t", "en"], ["▁S", "m"], ["无", "线"], ["▁h", "ous"], ["▁integ", "r"], ["▁H", "ol"], ["h", "ors"], ["的", "功能"], ["▁rem", "ember"], ["▁sum", "mer"], ["▁h", "om"], ["rel", "ated"], ["委", "托"], ["▁C", "ons"], ["的", "原因"], ["▁A", "nt"], ["通过", "对"], ["三", "年"], ["地", "址"], ["▁appropri", "ate"], ["▁C", "oun"], ["f", "ield"], ["放", "在"], ["的", "科学"], ["▁fact", "or"], ["封", "建"], ["的", "目的"], ["▁indu", "str"], ["和", "管理"], ["ft", "en"], ["一", "项"], ["名", "称"], ["i", "ated"], ["公共", "服务"], ["天", "下"], ["转化", "为"], ["运动", "员"], ["▁bl", "ock"], ["in", "ate"], ["▁interest", "ing"], ["隐", "私"], ["▁b", "it"], ["▁te", "aching"], ["有", "序"], ["意", "志"], ["▁b", "ox"], ["评", "论"], ["▁lead", "ing"], ["政府", "的"], ["ra", "z"], ["Us", "ing"], ["一体", "化"], ["膨", "胀"], ["▁cap", "ac"], ["t", "rans"], ["r", "ong"], ["本", "书"], ["▁behav", "i"], ["的", "价值"], ["ro", "ph"], ["▁S", "an"], ["▁Comm", "un"], ["w", "orks"], ["签", "订"], ["一", "路"], ["▁for", "ces"], ["档", "案"], ["▁relig", "ious"], ["变", "得"], ["其", "实"], ["国", "外"], ["版", "本"], ["▁un", "it"], ["▁", "round"], ["▁typ", "ically"], ["▁prot", "ection"], ["并", "没有"], ["▁I", "tal"], ["多", "年"], ["▁b", "ound"], ["▁c", "red"], ["▁ac", "qu"], ["伟大", "复兴"], ["o", "ch"], ["外", "国"], ["全", "体"], ["▁n", "uc"], ["▁const", "it"], ["符", "号"], ["al", "ed"], ["▁", ":▁"], ["▁perform", "ed"], ["a", "res"], ["d", "ing"], ["▁Is", "land"], ["▁sit", "es"], ["M", "L"], ["的", "需求"], ["分", "工"], ["▁tiss", "ue"], ["▁was", "te"], ["▁m", "iss"], ["t", "ic"], ["至", "今"], ["▁Cal", "ifornia"], ["三", "种"], ["的", "过程中"], ["▁f", "air"], ["▁g", "old"], ["as", "ks"], ["▁answ", "er"], ["定", "了"], ["区", "分"], ["ing", "u"], ["倾", "向"], ["--", "▁"], ["▁pur", "pose"], ["▁teac", "her"], ["▁sit", "uation"], ["公", "布"], ["分", "解"], ["▁belie", "f"], ["▁b", "all"], ["▁new", "s"], ["▁det", "ail"], ["▁sp", "irit"], ["。", "("], ["借", "鉴"], ["▁P", "ress"], ["▁exp", "osure"], ["局", "限"], ["▁m", "is"], ["▁r", "at"], ["先", "后"], ["一", "年"], ["小", "学"], ["▁Austral", "ia"], ["细", "菌"], ["点", "的"], ["制", "的"], ["▁polic", "y"], ["ic", "ate"], ["urb", "an"], ["▁ch", "oose"], ["▁t", "ests"], ["动", "脉"], ["av", "a"], ["A", "ct"], ["▁G", "reat"], ["成", "為"], ["C", "al"], ["▁c", "and"], ["▁tr", "ust"], ["im", "ens"], ["B", "ecause"], ["at", "ur"], ["▁ra", "pid"], ["有", "可能"], ["▁Associ", "ation"], ["Al", "so"], ["病", "人"], ["f", "e"], [")", ";"], ["▁aut", "om"], ["P", "R"], ["▁ser", "ve"], ["笔", "者"], ["▁Dist", "rict"], ["服务", "业"], ["式", "的"], ["▁do", "ctor"], ["▁T", "r"], ["連", "結"], ["op", "er"], ["传统", "文化"], ["ic", "ian"], ["▁v", "ict"], ["und", "red"], ["▁j", "ud"], ["velop", "ment"], ["車", "站"], ["angu", "ages"], ["▁R", "ed"], ["▁Christ", "ian"], ["居", "住"], ["▁ex", "hib"], ["出版", "社"], ["百", "分"], ["▁old", "er"], ["▁j", "our"], ["边", "界"], ["▁inv", "olve"], ["olv", "ing"], ["S", "m"], ["▁b", "rought"], ["em", "ic"], ["▁proper", "ties"], ["I", "M"], ["发展", "和"], ["流", "行"], ["▁death", "s"], ["提", "取"], ["就", "可以"], ["增", "速"], ["▁Soc", "iety"], ["▁F", "l"], ["▁exact", "ly"], ["T", "C"], ["▁pr", "ivate"], ["ast", "e"], ["▁b", "ott"], ["广", "东"], ["▁play", "er"], ["▁act", "ions"], ["转", "向"], ["宣", "布"], ["oc", "ial"], ["▁sc", "en"], ["极", "大"], ["三", "大"], ["技术", "和"], ["较", "高"], ["▁chall", "enge"], ["十", "六"], ["曲", "线"], ["简", "称"], ["is", "l"], ["▁w", "rote"], ["▁opt", "ions"], ["c", "ular"], ["at", "ers"], ["▁bir", "ths"], ["还", "可以"], ["▁w", "in"], ["地", "的"], ["文", "本"], ["Q", "u"], ["m", "osp"], ["很", "难"], ["▁affect", "ed"], ["▁dist", "inct"], ["ub", "e"], ["P", "A"], ["▁det", "ails"], ["行", "星"], ["el", "ines"], ["h", "ave"], ["alth", "ough"], ["▁fun", "ctions"], ["re", "es"], ["催", "化"], ["延", "伸"], ["欧", "盟"], ["D", "es"], ["▁f", "resh"], ["▁N", "o"], ["U", "se"], ["com", "es"], ["ag", "o"], ["▁st", "ra"], ["▁sp", "orts"], ["▁equ", "ipment"], ["am", "il"], ["▁applic", "ation"], ["▁ident", "ified"], ["or", "gan"], ["纳", "税"], ["S", "D"], ["r", "ical"], ["h", "ouse"], ["这", "项"], ["▁cele", "br"], ["S", "C"], ["借", "助"], ["▁trans", "fer"], ["大", "陆"], ["社会主义", "现代化"], ["▁p", "ieces"], ["▁him", "self"], ["re", "f"], ["r", "ition"], ["▁num", "erous"], ["方", "的"], ["▁e", "fficient"], ["▁A", "g"], ["acc", "ording"], ["b", "oth"], ["ell", "ig"], ["等", "问题"], ["中共", "中央"], ["▁beaut", "iful"], ["m", "ark"], ["os", "es"], ["第二", "节"], ["周", "围"], ["▁fem", "ale"], ["▁sol", "ution"], ["房", "屋"], ["乡村", "振兴"], ["诸", "多"], ["禁", "止"], ["▁we", "ather"], ["细胞", "的"], ["ou", "ch"], ["负", "担"], ["信", "贷"], ["k", "en"], ["抗", "体"], ["合理", "的"], ["igen", "ous"], ["▁surround", "ing"], ["▁Ch", "ar"], ["▁l", "abor"], ["建立", "了"], ["流", "量"], ["e", "per"], ["外", "汇"], ["▁want", "ed"], ["▁g", "irl"], ["认", "真"], ["科学", "院"], ["▁use", "ful"], ["举", "措"], ["我国", "的"], ["rom", "e"], ["▁I", "nt"], ["▁stat", "us"], ["▁redu", "ced"], ["▁supp", "ly"], ["ober", "t"], ["▁sol", "ar"], ["▁ch", "urch"], ["ac", "ing"], ["▁on", "to"], ["i", "i"], ["发", "明"], ["运", "作"], ["▁meas", "ures"], ["▁m", "ill"], ["ec", "ut"], ["认", "同"], ["▁te", "ach"], ["审", "美"], ["ang", "ing"], ["共", "识"], ["人", "群"], ["pl", "ace"], ["ro", "y"], ["▁pur", "ch"], ["▁L", "ondon"], ["第一", "节"], ["▁Part", "y"], ["▁connect", "ions"], ["▁ad", "apt"], ["▁Un", "ion"], ["强", "烈"], ["▁exp", "and"], ["▁S", "er"], ["种", "类"], ["▁pl", "aced"], ["▁app", "e"], ["核", "算"], ["▁expl", "ain"], ["翻", "译"], ["P", "art"], ["森", "林"], ["▁n", "ation"], ["淋", "巴"], ["斯", "特"], ["w", "ell"], ["▁rece", "ive"], ["概", "括"], ["▁us", "ers"], ["ant", "ly"], ["判", "决"], ["添", "加"], ["发达", "国家"], ["al", "ign"], ["y", "a"], ["的", "精神"], ["在", "一起"], ["产生", "了"], ["▁g", "raph"], ["ify", "ing"], ["▁for", "ward"], ["▁ra", "re"], ["plic", "ations"], ["▁co", "ast"], ["▁E", "m"], ["另", "一个"], ["▁te", "eth"], ["防", "范"], ["交", "叉"], ["并", "不是"], ["担", "任"], ["的", "具体"], ["ar", "ly"], ["▁begin", "ning"], ["▁T", "rans"], ["pp", "ed"], ["▁cont", "roll"], ["▁R", "oman"], ["▁D", "NA"], ["工", "厂"], ["▁organ", "izations"], ["全", "局"], ["am", "ily"], ["▁current", "ly"], ["▁r", "ich"], ["in", "f"], ["D", "espite"], ["▁adv", "ant"], ["联", "邦"], ["为", "例"], ["p", "ret"], ["二", "氧化"], ["容", "量"], ["是", "什么"], ["心", "脏"], ["」", ","], ["的", "不同"], ["▁ant", "i"], ["▁cost", "s"], ["▁allow", "ed"], ["overn", "ment"], ["某", "一"], ["he", "st"], ["▁contin", "u"], ["c", "ar"], ["加", "密"], ["▁det", "ect"], ["俄", "罗斯"], ["K", "e"], ["直", "到"], ["的", "文化"], ["回", "答"], ["R", "et"], ["▁app", "rec"], ["扶", "贫"], ["More", "over"], ["▁dist", "rict"], ["中国", "家"], ["ur", "ning"], ["國", "家"], ["含", "义"], ["▁th", "r"], ["▁f", "ile"], ["亿", "美元"], ["E", "d"], ["的", "小"], ["女", "性"], ["▁r", "iver"], ["世界", "上"], ["▁liter", "ature"], ["a", "ign"], ["▁sec", "urity"], ["In", "stead"], ["的", "设计"], ["coh", "ol"], ["▁C", "om"], ["ress", "ive"], ["m", "un"], ["为", "此"], ["依", "然"], ["ost", "er"], ["▁test", "ing"], ["成", "效"], ["▁occur", "s"], ["ic", "ed"], ["精", "度"], ["st", "ate"], ["▁proper", "ty"], ["▁ag", "ricult"], ["▁pict", "ure"], ["A", "B"], ["理论", "和"], ["定", "期"], ["ri", "ev"], ["波", "动"], ["▁Dep", "artment"], ["普", "及"], ["▁dec", "l"], ["福", "利"], ["▁init", "ial"], ["▁benef", "it"], ["分", "散"], ["ab", "ilities"], ["权", "威"], ["所有", "的"], ["enc", "ies"], ["每", "一个"], ["透", "明"], ["▁back", "ground"], ["(", "),"], ["op", "p"], ["▁C", "ong"], ["▁attem", "pt"], ["山", "东"], ["M", "e"], ["推", "荐"], ["正确", "的"], ["▁con", "sequ"], ["▁st", "im"], ["整", "理"], ["▁d", "at"], ["命", "令"], ["olv", "ed"], ["小", "的"], ["▁n", "arr"], ["▁w", "ear"], ["匹", "配"], ["水平", "的"], ["生活", "的"], ["▁ra", "il"], ["R", "I"], ["可能", "是"], ["估", "计"], ["et", "ers"], ["ath", "y"], ["论", "述"], ["▁M", "od"], ["慢", "性"], ["▁prob", "ably"], ["建", "构"], ["▁bacter", "ia"], ["▁pres", "ence"], ["消", "耗"], ["增", "值"], ["▁W", "e"], ["se", "ct"], ["中", "全会"], ["▁us", "er"], ["reat", "ing"], ["稳", "定的"], ["附", "近"], ["十八", "大"], ["效", "力"], ["▁work", "ers"], ["外部", "連結"], ["全球", "化"], ["也", "可"], ["p", "eople"], ["ight", "ly"], ["方", "便"], ["un", "t"], ["风", "格"], ["▁su", "gar"], ["▁b", "ul"], ["A", "A"], ["位", "於"], ["增加", "了"], ["v", "an"], ["新", "发展"], ["\t", "\t"], ["保", "存"], ["博", "物"], ["一", "条"], ["变", "动"], ["▁com", "mer"], ["▁▁▁▁", "▁"], ["il", "it"], ["b", "ing"], ["on", "ic"], ["▁acc", "ur"], ["b", "ec"], ["都", "会"], ["达", "成"], ["G", "B"], ["中华民族", "伟大复兴"], ["足", "够"], ["▁col", "d"], ["方", "位"], ["概", "率"], ["m", "at"], ["的", "权利"], ["将", "会"], ["人", "士"], ["▁organ", "ization"], ["▁m", "ax"], ["z", "a"], ["g", "ra"], ["T", "oday"], ["委", "会"], ["糖", "尿"], ["==", "=="], ["相互", "作用"], ["▁mom", "ent"], ["图", "书"], ["▁", ".▁"], ["协", "作"], ["▁m", "iddle"], ["尝", "试"], ["▁Ch", "inese"], ["▁n", "ames"], ["▁go", "es"], ["l", "ong"], ["目", "的是"], ["▁l", "aun"], ["ire", "ction"], ["ru", "pt"], ["l", "am"], ["▁gen", "e"], ["最", "近"], ["▁E", "ducation"], ["不", "利"], ["▁fig", "ure"], ["的", "使用"], ["▁Bl", "ack"], ["出", "生"], ["引导", "学生"], ["▁imm", "une"], ["▁st", "ore"], ["协", "会"], ["必要", "的"], ["批", "判"], ["标准", "化"], ["寻", "找"], ["▁res", "istance"], ["▁d", "ate"], ["▁e", "ight"], ["后", "果"], ["▁part", "y"], ["S", "ec"], ["的", "有效"], ["有", "人"], ["▁f", "illed"], ["男", "子"], ["ed", "ia"], ["▁cap", "ital"], ["已", "成为"], ["e", "es"], ["ri", "ef"], ["▁", "i"], ["联合", "国"], ["$", "▁"], ["存在", "着"], ["▁B", "r"], ["▁M", "ex"], ["产", "物"], ["est", "ic"], ["ib", "ly"], ["信", "仰"], ["▁s", "we"], ["配", "套"], ["▁pl", "ays"], ["住", "房"], ["ant", "ic"], ["am", "s"], ["ot", "hes"], ["精", "确"], ["▁build", "ings"], ["ger", "y"], ["▁m", "ap"], ["车", "辆"], ["聚", "焦"], ["▁rou", "t"], ["Sim", "ilar"], ["顺", "序"], ["▁concer", "ns"], ["R", "eg"], ["总", "量"], ["研究", "院"], ["▁gen", "etic"], ["写", "作"], ["于", "是"], ["生态", "文明"], ["▁al", "one"], ["\"", "("], ["▁em", "phas"], ["ra", "el"], ["繁", "荣"], ["▁cont", "ract"], ["知识", "和"], ["失", "去"], ["it", "z"], ["概", "述"], ["adem", "ic"], ["G", "u"], ["ov", "ers"], ["▁ass", "ist"], ["▁mov", "ing"], ["▁reg", "ions"], ["▁ident", "ity"], ["▁bir", "ds"], ["▁N", "e"], ["发", "送"], ["人民", "的"], ["难", "题"], ["▁p", "ow"], ["E", "L"], ["i", "ology"], ["课堂", "教学"], ["▁M", "useum"], ["oun", "ced"], ["▁P", "re"], ["此", "时"], ["被", "称为"], ["相", "反"], ["营", "销"], ["享", "有"], ["▁G", "o"], ["ond", "s"], ["▁ill", "ustr"], ["▁observ", "ed"], ["G", "o"], ["C", "om"], ["糖尿", "病"], ["平", "面"], ["g", "or"], ["ee", "ch"], ["▁any", "thing"], ["om", "y"], ["仪", "器"], ["augh", "ter"], ["国内", "外"], ["万", "人"], ["▁M", "ount"], ["▁ant", "ib"], ["▁C", "our"], ["▁mil", "es"], ["旨", "在"], ["》", "▁"], ["动", "作"], ["▁dem", "and"], ["管理", "和"], ["▁disc", "over"], [""", ","], ["▁exp", "ected"], ["B", "oth"], ["大", "脑"], ["依", "托"], ["以", "上的"], ["T", "O"], ["指", "南"], ["▁dec", "isions"], ["▁b", "odies"], ["云", "计算"], ["已", "有"], ["or", "ial"], ["潜", "力"], ["做", "法"], ["批", "评"], ["ber", "g"], ["赋", "予"], ["刑", "法"], ["▁exist", "ing"], ["▁prom", "ote"], ["病", "变"], ["allow", "ing"], ["▁we", "b"], ["立", "场"], ["y", "our"], ["▁princ", "iples"], ["▁Coun", "cil"], ["有", "时"], ["的", "多"], ["h", "is"], ["存", "款"], ["G", "F"], ["▁off", "ice"], ["小", "康"], ["幸", "福"], ["▁sound", "s"], ["▁chang", "ed"], ["▁sign", "s"], ["美", "术"], ["食", "物"], ["▁help", "ed"], ["民", "生"], ["高等", "教育"], ["B", "efore"], ["▁plan", "et"], ["数据", "中心"], ["患者", "的"], ["▁conce", "pts"], ["st", "ruct"], ["▁event", "ually"], ["▁re", "asons"], ["▁equ", "al"], ["▁leg", "al"], ["前", "沿"], ["证", "书"], ["▁bo", "ard"], ["科学", "技术"], ["▁gu", "ide"], ["▁gl", "ass"], ["的", "认识"], ["中小", "企业"], ["pro", "v"], ["官", "方"], ["远", "程"], ["地", "震"], ["视", "角"], ["地", "區"], ["the", "s"], ["▁Rep", "ublic"], ["▁mach", "ine"], ["▁introdu", "ced"], ["k", "a"], ["打", "破"], ["▁vir", "t"], ["间", "接"], ["一", "批"], ["理", "由"], ["M", "A"], ["计", "量"], ["▁tra", "de"], ["as", "tern"], ["意", "思"], ["测", "定"], ["re", "hens"], ["ograph", "ic"], ["失", "败"], ["▁lim", "it"], ["初", "期"], ["以", "便"], ["主", "观"], ["颗", "粒"], ["▁D", "es"], ["▁com", "fort"], ["血", "液"], ["引起", "的"], ["▁t", "our"], ["癌", "症"], ["E", "very"], ["取", "决"], ["ir", "gin"], ["多样", "性"], ["se", "mb"], ["▁P", "al"], ["II", "I"], ["▁record", "s"], ["▁W", "estern"], ["也", "要"], ["侵", "犯"], ["立", "足"], ["▁g", "ives"], ["H", "istory"], ["腐", "败"], ["▁c", "itiz"], ["驾", "驶"], ["ex", "as"], ["i", "ance"], ["遵", "守"], ["ind", "ing"], ["中", "学"], ["》", "《"], ["▁m", "outh"], ["与", "其他"], ["产", "量"], ["仅", "仅"], ["价值", "的"], ["排", "名"], ["停", "止"], ["▁P", "ort"], ["▁law", "s"], ["专", "项"], ["R", "ead"], ["与", "此"], ["▁sol", "utions"], ["能", "否"], ["也", "在"], ["ing", "er"], ["大", "于"], ["▁col", "ors"], ["n", "am"], ["▁e", "ating"], ["▁f", "elt"], ["器", "官"], ["四", "川"], ["有", "一个"], ["的", "市场"], ["▁turn", "ed"], ["y", "gen"], ["▁tit", "le"], ["▁f", "uel"], ["回", "归"], ["通", "用"], ["▁rec", "ently"], ["本", "科"], ["主义", "的"], ["▁ut", "il"], ["更", "是"], ["d", "ef"], ["E", "l"], ["可能", "性"], ["实", "用"], ["i", "ant"], ["▁exper", "im"], ["▁connect", "ed"], ["作", "物"], ["大", "国"], ["▁c", "orn"], ["提供", "的"], ["for", "ce"], ["▁jour", "ney"], ["▁pre", "gn"], ["医", "药"], ["▁C", "D"], ["▁att", "ract"], ["发生", "了"], ["优", "质"], ["法", "人"], ["公", "益"], ["I", "F"], ["as", "ts"], ["查", "询"], ["▁d", "ynam"], ["▁l", "ived"], ["d", "ed"], ["取决", "于"], ["前", "景"], ["▁dist", "ance"], ["特", "定的"], ["r", "ich"], ["參考", "資料"], ["ent", "y"], ["夏", "季"], ["m", "od"], ["强", "大"], ["变", "更"], ["▁near", "ly"], ["▁rad", "io"], ["所有", "权"], ["斯", "坦"], ["uild", "ing"], ["阐", "述"], ["不", "可能"], ["og", "ether"], ["le", "ase"], ["的", "环境"], ["系", "数"], ["a", "ud"], ["▁h", "undred"], ["选", "举"], ["ich", "ael"], ["▁U", "K"], ["E", "m"], ["▁ris", "ks"], ["▁a", "p"], ["▁H", "er"], ["两", "者"], ["▁w", "oman"], ["地", "下"], ["un", "k"], ["无", "效"], ["▁be", "g"], ["▁eff", "ort"], ["练", "习"], ["▁deg", "ree"], ["in", "du"], ["▁St", "reet"], ["过程", "的"], ["地", "面"], ["▁happ", "ens"], ["▁le", "ave"], ["..", ".▁"], ["最", "早"], ["▁ess", "ay"], ["▁Ph", "il"], ["▁t", "im"], ["西", "北"], ["取", "代"], ["▁di", "abetes"], ["超", "越"], ["对", "称"], ["联", "盟"], ["年", "前"], ["▁b", "ran"], ["▁effect", "ively"], ["复", "制"], ["依", "照"], ["▁pass", "ed"], ["以", "此"], ["石", "油"], ["▁lands", "c"], ["cri", "ption"], ["电", "网"], ["▁c", "ore"], ["▁opportun", "ity"], ["▁get", "s"], ["灾", "害"], ["▁con", "nection"], ["鲜", "明"], ["丰富", "的"], ["▁r", "ise"], ["▁prov", "iding"], ["熟", "悉"], ["▁C", "or"], ["现", "金"], ["借", "款"], ["了", "中国"], ["爆", "发"], ["进行", "的"], ["▁eas", "ier"], ["▁to", "ld"], ["▁w", "atch"], [")", ";▁"], ["▁", "ur"], ["the", "ir"], ["國", "際"], ["女", "子"], ["▁altern", "ative"], ["▁record", "ed"], ["正", "义"], ["音", "樂"], ["▁L", "aw"], ["局", "面"], ["▁p", "et"], ["▁ha", "ir"], ["▁c", "op"], ["▁c", "rop"], ["返", "回"], ["不", "够"], ["货", "物"], ["▁Japan", "ese"], ["▁at", "mosp"], ["as", "ion"], ["分", "享"], ["▁w", "inter"], ["急", "性"], ["ct", "ors"], ["▁ro", "ot"], ["帝", "国"], ["共", "有"], ["国", "防"], ["培养", "学生"], ["参考", "资料"], ["体现", "在"], ["至", "关"], ["消", "息"], ["cri", "pt"], ["▁stand", "ards"], ["可", "用"], ["衔", "接"], ["w", "est"], ["亚", "洲"], ["抗", "日"], ["z", "ing"], ["x", "iety"], ["▁D", "iv"], ["辩", "证"], ["▁ill", "ness"], ["▁oper", "ations"], ["的", "发生"], ["的", "中国"], ["一带", "一路"], ["基因", "组"], ["积极", "性"], ["i", "able"], ["▁O", "lymp"], ["開", "始"], ["历史", "上"], ["R", "ep"], ["es", "us"], ["]", "."], ["意识", "形态"], ["▁d", "ivid"], ["▁app", "oint"], ["▁D", "em"], ["代表", "大会"], ["▁pl", "ans"], ["icular", "ly"], ["te", "xt"], ["▁art", "ists"], ["re", "se"], ["税", "务"], ["债权", "人"], ["▁capac", "ity"], ["ogn", "itive"], ["E", "E"], ["部", "队"], ["th", "let"], ["运", "算"], ["▁ful", "ly"], ["第", "七"], ["主", "管"], ["器", "件"], ["▁e", "ffic"], ["主", "持"], ["pect", "ed"], ["ak", "er"], ["▁In", "ter"], ["▁F", "rance"], ["▁S", "ou"], ["n", "el"], ["or", "age"], ["Further", "more"], ["武", "器"], ["▁belie", "ved"], ["无", "人"], ["集", "群"], ["ic", "ians"], ["ac", "he"], ["一", "方"], ["交", "往"], ["违", "约"], ["造成", "的"], ["储", "备"], ["m", "ay"], ["iven", "ess"], ["事", "情"], ["▁m", "ission"], ["自身", "的"], ["mit", "ted"], ["大", "多"], ["al", "le"], ["▁de", "ad"], ["▁c", "ities"], ["▁R", "oad"], ["▁distribut", "ion"], ["展", "现"], ["▁infl", "amm"], ["▁sur", "pr"], ["编", "写"], ["最", "为"], ["T", "V"], ["有", "权"], ["▁drug", "s"], ["前", "进"], ["分析", "和"], ["▁f", "ix"], ["气", "象"], ["▁dep", "end"], ["▁in", "hib"], ["▁he", "avy"], ["▁l", "anguages"], ["m", "ean"], ["系统", "中"], ["公", "式"], ["▁common", "ly"], ["er", "ate"], ["ed", "om"], ["人力", "资源"], ["日", "期"], ["▁p", "hen"], ["范", "畴"], ["res", "ents"], ["思想", "政治"], ["法律", "法规"], ["演", "变"], ["▁run", "ning"], ["过程", "中的"], ["▁plan", "ning"], ["▁n", "avig"], ["类型", "的"], ["▁te", "levision"], ["\b", "\b"], ["ad", "o"], ["▁sec", "ret"], ["S", "O"], ["ar", "ian"], ["染", "色"], ["要", "在"], ["人", "格"], ["▁Americ", "ans"], ["b", "et"], ["▁techn", "ique"], ["▁he", "ard"], ["F", "inally"], ["▁pop", "ulations"], ["ou", "is"], ["忽", "视"], ["新", "能源"], ["力", "学"], ["▁feel", "ings"], ["过", "度"], ["感", "觉"], ["情", "绪"], ["▁ep", "is"], ["▁abs", "or"], ["环境", "的"], ["P", "L"], ["▁bas", "is"], ["创造", "性"], ["▁adv", "anced"], ["▁M", "y"], ["▁return", "ed"], ["?", "\""], ["长", "的"], ["▁m", "o"], ["终", "端"], ["命", "名"], ["反", "思"], ["▁st", "aff"], ["iam", "ent"], ["▁situ", "ations"], ["他", "在"], ["条件", "的"], ["p", "ress"], ["场", "所"], ["▁h", "ope"], ["▁f", "ederal"], ["最", "初"], ["科学", "的"], ["脱", "贫"], ["▁O", "n"], ["杂", "志"], ["医", "生"], ["地方", "政府"], ["编", "程"], ["▁f", "asc"], [".", "《"], ["排", "除"], ["▁c", "ry"], ["怎", "么"], ["on", "ly"], ["▁bl", "ue"], ["▁ing", "red"], ["▁open", "ed"], ["学生", "在"], ["这", "类"], ["▁P", "resident"], ["▁s", "ess"], ["C", "H"], ["▁complet", "ed"], ["▁follow", "ed"], ["视", "野"], ["ri", "an"], ["想", "象"], ["w", "in"], ["ed", "ing"], ["ies", "t"], ["▁ele", "ment"], ["▁m", "el"], ["p", "o"], ["▁l", "iqu"], ["可靠", "性"], ["的", "结构"], ["应用", "程序"], ["▁to", "ward"], ["现代", "化的"], ["减", "轻"], ["起", "源"], ["误", "差"], ["新时代", "中国特色社会主义"], ["ro", "g"], ["不", "变"], ["以", "往"], ["▁appro", "ximately"], ["cent", "er"], ["ri", "a"], ["ew", "ork"], ["▁sh", "ip"], ["it", "ors"], ["通", "讯"], ["▁bel", "ong"], ["..", ".."], ["▁sh", "aring"], ["▁separ", "ate"], ["认", "可"], ["ber", "t"], ["S", "ometimes"], ["攻", "坚"], ["▁k", "ing"], ["▁l", "oad"], ["加", "上"], ["」", "。"], ["歌", "曲"], ["缓", "解"], [".", ")"], ["商业", "银行"], ["▁t", "asks"], ["▁appl", "ied"], ["提", "交"], ["▁j", "ournal"], ["人民", "政府"], ["统一", "的"], ["▁complet", "ely"], ["强", "大的"], ["udd", "en"], ["▁c", "ook"], ["推", "出"], ["ot", "es"], ["▁l", "ung"], ["▁mat", "ch"], ["lead", "ing"], ["el", "ine"], ["▁de", "al"], ["f", "unction"], ["▁ad", "ult"], ["▁n", "ative"], ["▁frequ", "ently"], ["▁se", "ems"], ["R", "S"], ["▁c", "ast"], ["▁f", "ol"], ["ar", "io"], ["▁inst", "ruct"], ["▁ad", "just"], ["ob", "ile"], ["St", "udents"], ["▁ent", "er"], ["租", "赁"], ["▁techn", "ologies"], ["T", "P"], ["L", "ear"], ["s", "ays"], ["st", "on"], ["图", "形"], ["干", "细胞"], ["显", "然"], ["te", "e"], ["part", "icularly"], ["遗", "址"], ["无论", "是"], ["▁bre", "ast"], ["og", "le"], ["燃", "料"], ["▁less", "ons"], ["▁m", "unicip"], ["不", "确定"], ["e", "ach"], ["▁se", "ven"], ["民", "众"], ["▁p", "ark"], ["row", "s"], ["的", "生产"], ["处", "置"], ["y", "cl"], ["生物", "学"], ["先", "生"], ["的", "国际"], ["▁to", "x"], ["▁im", "ag"], ["▁ex", "cess"], ["国有", "企业"], ["▁W", "ashington"], ["▁set", "ting"], ["感", "受"], ["▁D", "is"], ["撤", "销"], ["河", "南"], ["▁occ", "up"], ["d", "own"], ["自", "行"], ["▁imm", "un"], ["便", "利"], ["园", "区"], ["▁pe", "ace"], ["审", "理"], ["it", "tle"], ["的", "根本"], ["h", "igh"], ["▁aut", "hors"], ["反", "射"], ["分布", "式"], ["出", "来的"], ["▁profess", "ion"], ["发展", "中国家"], ["d", "ent"], ["▁previous", "ly"], ["记", "载"], ["d", "isc"], ["S", "w"], ["▁is", "land"], ["▁h", "ydro"], ["数", "的"], ["未", "成"], ["ish", "ing"], ["新", "冠"], ["N", "F"], ["▁fru", "it"], ["信", "任"], ["▁app", "ly"], ["▁sp", "ect"], ["▁inj", "ury"], ["ol", "id"], ["en", "ry"], ["▁in", "put"], ["▁nut", "ri"], ["▁though", "ts"], ["彻", "底"], ["第三", "节"], ["▁h", "it"], ["r", "d"], ["C", "L"], ["▁cour", "t"], ["in", "i"], ["gor", "ith"], ["发", "性"], ["ag", "er"], ["婚", "姻"], ["T", "rans"], ["▁g", "ave"], ["坚", "决"], ["▁mus", "cle"], ["地", "域"], ["指", "令"], ["的", "中"], ["部", "位"], ["▁rep", "e"], ["▁out", "comes"], ["工业", "化"], ["实", "例"], ["os", "en"], ["经", "理"], ["ilos", "oph"], ["▁Ar", "ch"], ["▁r", "h"], ["公", "园"], ["产业", "发展"], ["▁S", "ur"], ["▁b", "one"], ["▁bab", "y"], ["即", "可"], ["go", "ing"], ["占", "有"], ["十", "五"], ["▁comp", "ar"], ["每", "一"], ["性", "与"], ["团", "体"], ["研究", "员"], ["\n", "\t"], ["rodu", "ction"], ["▁com", "ing"], ["内容", "的"], ["世界", "的"], ["H", "z"], ["▁met", "al"], ["▁sc", "ale"], ["al", "a"], ["众", "多"], ["清", "洁"], ["构", "造"], ["▁del", "iver"], ["重要", "作用"], ["气候", "变化"], ["▁dis", "orders"], ["▁sa", "ve"], ["分", "割"], ["政", "权"], ["▁g", "ender"], ["▁v", "ary"], ["u", "it"], ["臺", "灣"], ["的", "企业"], ["这", "就是"], ["k", "now"], ["il", "m"], ["儒", "家"], ["样", "品"], ["▁r", "ule"], ["大", "众"], ["互", "相"], ["▁ele", "ction"], ["▁find", "ing"], ["例", "子"], ["C", "I"], ["az", "ing"], ["▁d", "irection"], ["关", "节"], ["▁d", "en"], ["▁ra", "ce"], ["ol", "ar"], ["▁", "urban"], ["皇", "帝"], ["▁pl", "astic"], ["成", "像"], ["asc", "ular"], ["特", "异"], ["▁streng", "th"], ["谈", "判"], ["(", ")"], ["的", "角度"], ["拒", "绝"], ["▁recomm", "end"], ["▁G", "reen"], ["流", "域"], ["▁mention", "ed"], ["维", "度"], ["▁subject", "s"], ["主要", "包括"], ["承", "诺"], ["時", "間"], ["凝", "聚"], ["olog", "ist"], ["单", "独"], ["o", "ke"], ["克", "服"], ["▁d", "ram"], ["·", "▁"], ["▁L", "ake"], ["▁sp", "ot"], ["▁sp", "ent"], ["M", "D"], ["否", "则"], ["▁v", "ess"], ["▁appear", "s"], ["um", "ber"], ["爱", "国"], ["▁cult", "ures"], ["▁lay", "er"], ["等", "方面的"], ["H", "ave"], ["葡", "萄"], ["▁rele", "vant"], ["简单", "的"], ["▁C", "up"], ["ir", "t"], ["▁he", "av"], ["▁top", "ics"], ["严重", "的"], ["por", "ts"], ["▁de", "eper"], ["心理", "学"], ["活动", "中"], ["扫", "描"], ["日", "起"], ["▁exper", "iment"], ["▁", "esc"], ["b", "urg"], ["▁independ", "ent"], ["常", "规"], ["事实", "上"], ["▁", ","], ["▁gard", "en"], ["ap", "ers"], ["不", "要"], ["▁f", "ields"], ["育", "人"], ["取", "消"], ["诱", "导"], ["pl", "ant"], ["通", "货"], ["▁ref", "ers"], ["声", "明"], ["N", "e"], ["htt", "p"], ["▁f", "ib"], ["▁he", "ar"], ["oc", "ol"], ["移", "植"], ["修", "正"], ["C", "ar"], ["之", "下"], ["歷", "史"], ["os", "h"], ["治理", "体系"], ["作", "战"], ["当", "今"], ["律", "师"], ["也", "就"], ["▁P", "at"], ["营", "造"], ["▁present", "ed"], ["ul", "s"], ["侵", "害"], ["▁Q", "ue"], ["ul", "um"], ["k", "i"], ["▁fil", "ms"], ["▁start", "ing"], ["常见", "的"], ["▁offic", "ial"], ["方法", "的"], ["▁ter", "rit"], ["在", "我国"], ["相同", "的"], ["分", "泌"], ["西", "南"], ["未", "来的"], ["d", "ep"], ["目标", "的"], ["▁cont", "rast"], ["公", "安"], ["共同", "富裕"], ["并", "发"], ["手", "机"], ["种", "植"], ["ruct", "ure"], ["Th", "ink"], ["▁h", "omes"], ["得", "主"], ["▁B", "ay"], ["▁up", "d"], ["▁let", "ter"], ["p", "resent"], ["的", "形成"], ["▁p", "en"], ["▁coun", "ter"], ["▁v", "oc"], ["▁", "--▁"], ["O", "f"], ["主要", "有"], ["▁temper", "atures"], ["▁col", "lege"], ["▁", "#"], ["▁pre", "par"], ["n", "orm"], ["▁are", "n"], ["T", "wo"], ["▁character", "istics"], ["▁tr", "ig"], ["▁favor", "ite"], ["物", "体"], ["明显", "的"], ["▁sol", "id"], ["▁S", "ch"], ["▁", "<"], ["具体", "的"], ["▁focus", "ed"], ["▁M", "or"], ["难", "度"], ["l", "a"], ["证", "实"], ["▁art", "icles"], ["▁J", "ames"], ["党的", "领导"], ["垃", "圾"], ["▁thous", "ands"], ["举", "办"], ["碳", "排放"], ["\u0007", "\u0007"], ["ot", "a"], ["yp", "es"], ["体制", "改革"], ["pp", "ort"], ["oth", "ing"], ["重", "建"], ["得", "出"], ["差", "别"], ["版", "权"], ["▁emot", "ional"], ["深", "圳"], ["▁rec", "ip"], ["▁pres", "ident"], ["校", "园"], ["il", "ed"], ["d", "en"], ["Ex", "pl"], ["ect", "or"], ["▁Sp", "anish"], ["▁incre", "ases"], ["al", "ong"], ["▁emot", "ions"], ["and", "om"], ["l", "ar"], ["飞", "行"], ["▁Ch", "ampions"], ["B", "N"], ["▁stud", "ied"], ["▁read", "ers"], ["起", "到"], ["列", "表"], ["M", "an"], ["D", "isc"], ["的一", "部分"], ["▁ro", "les"], ["▁t", "ask"], ["防", "护"], ["过", "渡"], ["市", "镇"], ["▁l", "at"], ["信", "念"], ["如", "图"], ["引", "进"], ["▁happ", "en"], ["含", "有"], ["节", "约"], ["推", "行"], ["riev", "ed"], ["進", "行"], ["本", "地"], ["助", "力"], ["初", "始"], ["管", "辖"], ["▁lead", "ers"], ["▁N", "or"], ["实", "习"], ["国家", "和"], ["安全", "性"], ["提", "示"], ["年", "至"], ["ra", "c"], ["▁re", "cept"], ["▁soc", "iet"], ["▁happ", "ened"], ["办", "学"], ["同时", "也"], [")▁", "–▁"], ["党的", "十八大"], ["促", "使"], ["化", "合物"], ["em", "ents"], ["职", "务"], ["l", "i"], ["O", "T"], ["政策", "的"], ["▁medic", "ine"], ["是", "我国"], ["▁min", "or"], ["年", "间"], ["粒", "子"], ["在", "这"], ["▁res", "ource"], ["中国", "经济"], ["ens", "us"], ["天", "津"], ["分", "化"], ["▁appro", "aches"], ["en", "a"], ["依", "法治"], ["▁not", "es"], ["▁w", "rong"], ["考", "古"], ["人", "和"], ["的", "知识"], ["K", "ey"], ["▁lead", "s"], ["▁gen", "es"], ["▁st", "ream"], ["常", "用"], ["者", "和"], ["▁consum", "ption"], ["我们", "可以"], ["▁near", "by"], ["包", "装"], ["更", "大"], ["随", "后"], ["▁major", "ity"], ["▁T", "V"], ["长", "江"], ["专", "题"], ["的", "相关"], ["和", "服务"], ["▁m", "aster"], ["▁experien", "ced"], ["ul", "ner"], ["太", "空"], ["▁educ", "ational"], ["▁hig", "hest"], ["就", "能"], ["物", "权"], ["小", "平"], ["▁le", "tt"], ["多", "少"], ["ang", "es"], ["▁Gen", "eral"], ["f", "ound"], ["▁camp", "aign"], ["调", "解"], ["顺", "利"], ["▁adv", "ance"], ["[", "@"], ["州", "市"], ["国", "情"], ["集", "合"], ["设备", "的"], ["c", "a"], ["▁Germ", "any"], ["k", "m"], ["▁c", "ere"], ["ient", "ists"], ["Ch", "ar"], ["▁s", "and"], ["后", "者"], ["最", "低"], ["师", "生"], ["反", "复"], ["—", "▁▁"], ["ri", "x"], ["▁al", "t"], ["审", "批"], ["标", "记"], ["▁aware", "ness"], ["▁w", "alk"], ["实", "力"], ["s", "ub"], ["ag", "s"], ["承", "认"], ["os", "a"], ["▁ro", "t"], ["gy", "pt"], ["是", "通过"], ["分", "辨"], ["为核心", "的"], ["中", "所"], ["作", "家"], ["olog", "ists"], ["一", "部分"], ["▁ch", "oice"], ["城镇", "化"], ["线", "的"], ["ul", "f"], ["l", "o"], ["和", "技术"], ["未", "能"], ["en", "ced"], ["ot", "al"], ["▁clos", "ely"], ["t", "wo"], ["▁M", "al"], ["ann", "el"], ["▁appe", "ared"], ["▁Cent", "ral"], ["和", "完善"], ["▁S", "un"], ["球", "員"], ["nd", "rome"], ["跟", "踪"], ["▁form", "ation"], ["重", "组"], ["sequ", "ently"], ["▁bec", "oming"], ["结构", "性"], ["色", "彩"], ["福", "建"], ["n", "ame"], ["il", "ing"], ["的", "光"], ["▁tre", "ated"], ["ot", "ic"], ["项目", "的"], ["▁man", "age"], ["it", "oring"], ["▁class", "room"], ["并", "将"], ["R", "ed"], ["p", "ed"], ["▁bro", "ther"], ["唯", "物"], ["优", "点"], ["在", "其"], ["内", "存"], ["H", "D"], ["b", "i"], ["c", "ious"], ["▁supp", "l"], ["下", "列"], ["调", "动"], ["古", "典"], ["江", "苏"], ["成", "的"], ["层", "的"], ["预", "警"], ["ur", "ation"], ["▁polic", "ies"], ["的", "前提"], ["电子", "商务"], ["历", "程"], ["带来", "了"], ["人", "均"], ["百", "姓"], ["▁expl", "ained"], ["▁s", "chol"], ["▁feel", "ing"], ["ind", "ows"], ["Th", "us"], ["意", "大利"], ["▁Cong", "ress"], ["▁in", "h"], ["▁rem", "ained"], ["带", "领"], ["经济社会", "发展"], ["全", "过程"], ["指", "定"], ["ov", "ing"], ["▁particip", "ants"], ["▁p", "ick"], ["实", "训"], ["研", "制"], ["大", "约"], ["期", "的"], ["主体", "的"], ["e", "very"], ["肺", "炎"], ["▁tre", "nd"], ["act", "ive"], ["M", "od"], ["ol", "f"], ["▁repl", "ace"], ["I", "R"], ["下", "来"], ["演", "員"], ["▁commer", "cial"], ["某", "个"], ["地", "质"], ["▁cy", "cle"], ["ars", "h"], ["▁v", "ital"], ["▁concent", "r"], ["新", "中国"], ["▁S", "um"], ["分", "钟"], ["ag", "on"], ["▁un", "its"], ["提", "起"], ["修", "订"], ["r", "m"], ["的", "重大"], ["破", "产"], ["升", "高"], ["▁f", "er"], ["话", "语"], ["法", "制"], ["us", "iness"], ["c", "el"], ["▁w", "est"], ["▁▁", "("], ["在", "一定"], ["部", "的"], ["rap", "y"], ["的", "需要"], ["▁chang", "ing"], ["erson", "al"], ["也就是", "说"], ["▁p", "al"], ["▁A", "ut"], ["rop", "ical"], ["▁d", "ial"], ["中", "華"], ["市场", "化"], ["防", "控"], ["生", "动"], ["电", "源"], ["N", "ational"], ["为", "代表"], ["s", "ur"], ["▁cont", "emporary"], ["海", "外"], ["▁", "\\"], ["c", "alled"], ["n", "ic"], ["▁b", "ed"], ["▁A", "lex"], ["▁we", "ak"], ["C", "E"], ["ann", "ed"], ["样", "的"], ["▁s", "em"], ["erv", "ed"], ["▁not", "e"], ["数字化", "转型"], ["L", "ike"], ["▁sex", "ual"], ["▁care", "fully"], ["▁S", "am"], ["▁e", "ast"], ["▁g", "ather"], ["}", "-"], ["▁comp", "rehens"], ["都", "要"], ["▁impro", "ved"], ["r", "ish"], ["▁imm", "edi"], ["at", "o"], ["lor", "ida"], ["▁re", "ached"], ["s", "ince"], ["G", "l"], ["可以", "说"], ["U", "N"], ["k", "in"], ["▁al", "cohol"], ["目", "录"], ["失", "业"], ["小", "鼠"], ["f", "ollow"], ["▁smo", "oth"], ["反映", "了"], ["ac", "ific"], ["▁cre", "ation"], ["佛", "教"], ["小", "说"], ["ict", "or"], ["经", "费"], ["正", "当"], ["ent", "h"], ["▁ch", "ronic"], ["▁def", "ined"], ["w", "ill"], ["调", "研"], ["等", "人"], ["一", "個"], ["衡", "量"], ["党", "委"], ["idd", "en"], ["re", "qu"], ["与", "社会"], ["is", "her"], ["打", "击"], ["▁em", "issions"], ["是", "最"], ["▁ins", "ights"], ["总", "统"], ["▁conduct", "ed"], ["与", "发展"], ["账", "户"], [".", ")▁"], ["▁prop", "osed"], ["io", "x"], ["在", "国际"], ["和", "方法"], ["前", "的"], ["学", "位"], ["▁ox", "ygen"], ["h", "and"], ["▁ele", "v"], ["H", "ar"], ["▁d", "u"], ["所得", "税"], ["ult", "ural"], ["美", "好"], ["的", "可"], ["举", "行"], ["青", "少年"], ["ich", "ard"], ["回", "收"], ["▁sp", "ring"], ["▁dis", "order"], ["e", "aking"], ["无", "疑"], ["部", "件"], ["▁G", "eorge"], ["C", "he"], ["▁s", "ample"], ["太", "平"], ["▁p", "u"], ["出现", "的"], ["▁act", "ual"], ["as", "p"], ["格", "式"], ["▁b", "illion"], ["There", "fore"], ["之", "所以"], ["▁hy", "per"], ["ell", "a"], ["▁v", "oice"], ["fess", "or"], ["▁deg", "rees"], ["师", "范"], ["变", "成"], ["第二", "次"], ["完整", "的"], ["▁M", "us"], ["▁immedi", "ately"], ["▁Is", "rael"], ["讲", "话"], ["b", "our"], ["影", "像"], ["n", "et"], ["Rem", "ember"], ["在", "这个"], ["G", "erm"], ["炎", "症"], ["解", "读"], ["ak", "ers"], ["▁sugg", "ests"], ["一", "段"], ["对", "照"], ["▁expl", "oring"], ["确", "定的"], ["▁require", "ments"], ["et", "ry"], ["图", "片"], ["▁is", "ol"], ["▁v", "ision"], ["仿", "真"], ["转", "载"], ["▁any", "one"], ["on", "a"], ["导", "体"], ["h", "ad"], ["与", "其"], ["杠", "杆"], ["战", "斗"], ["▁P", "ublic"], ["民", "营"], ["▁D", "avid"], ["▁wh", "ose"], ["飾", "演"], ["f", "low"], ["▁inter", "pret"], ["央", "行"], ["D", "ef"], ["ath", "olic"], ["较", "高的"], ["是", "从"], ["年", "底"], ["金", "额"], ["材料", "的"], ["▁mot", "or"], ["抓", "住"], ["▁world", "wide"], ["噪", "声"], ["▁ad", "vent"], ["Similar", "ly"], ["线", "上"], [")", ":"], ["▁s", "amples"], ["y", "e"], ["t", "ype"], ["▁jo", "ined"], ["▁", "iron"], ["ol", "a"], ["十", "七"], ["我们", "要"], ["▁c", "overed"], ["▁bott", "om"], ["信", "心"], ["湖", "南"], ["▁challeng", "ing"], ["▁card", "i"], ["O", "M"], ["▁A", "re"], ["的", "特征"], ["教育", "部"], ["乃", "至"], ["▁w", "all"], ["l", "ist"], ["▁ch", "ance"], ["ec", "k"], ["irgin", "ia"], ["edic", "ated"], ["or", "al"], ["邓", "小平"], ["试", "图"], ["分", "裂"], ["▁econom", "y"], ["抗", "原"], ["披", "露"], ["皮", "肤"], ["▁wond", "er"], ["▁re", "ality"], ["▁electric", "ity"], ["os", "c"], ["同", "年"], ["▁business", "es"], ["信", "托"], ["迁", "移"], ["▁vol", "ume"], ["▁M", "art"], ["an", "o"], ["▁prote", "ins"], ["ur", "d"], ["ellig", "ence"], ["P", "at"], ["▁lab", "el"], ["▁Med", "ic"], ["▁pain", "t"], ["政", "党"], ["id", "ers"], ["▁comm", "and"], ["容", "器"], ["之间的", "关系"], ["看", "出"], ["▁Serv", "ice"], ["立", "即"], ["▁mat", "hemat"], ["暴", "露"], ["▁citiz", "ens"], ["▁look", "ed"], ["几", "何"], ["h", "t"], ["▁L", "ife"], ["受", "体"], ["or", "ough"], ["非", "洲"], ["運動", "員"], ["▁W", "eb"], ["e", "lect"], ["Sp", "ec"], ["ym", "ph"], ["妇", "女"], ["▁fac", "ed"], ["▁P", "aul"], ["很", "大的"], ["viron", "ments"], ["三", "维"], ["形式", "的"], ["尺", "寸"], ["两", "大"], ["▁process", "ing"], ["R", "A"], ["▁bu", "y"], ["▁mil", "k"], ["▁exper", "t"], ["的", "生活"], ["resp", "ond"], ["▁un", "f"], ["▁L", "a"], ["W", "rit"], ["ra", "ction"], ["密", "集"], ["飞", "机"], ["▁sur", "gery"], ["(", ","], ["都", "在"], ["▁Car", "ol"], ["互", "联"], ["▁habit", "at"], ["丧", "失"], ["全国", "人大"], ["▁pre", "fer"], ["le", "vel"], ["企业", "在"], ["占", "比"], ["um", "s"], ["▁inc", "ome"], ["▁Pl", "an"], ["▁min", "im"], ["▁init", "i"], ["加", "拿"], ["Ke", "ep"], ["▁G", "reek"], ["L", "ist"], ["ed", "y"], ["寿", "命"], ["的", "组织"], [":", "("], ["放", "大"], ["ic", "ks"], ["F", "ollow"], ["较", "大的"], ["p", "ython"], ["▁M", "et"], ["M", "ed"], ["速", "率"], ["文化", "遗产"], ["▁u", "pper"], ["等", "领域"], ["▁rep", "resents"], ["s", "hip"], ["理论", "的"], ["血", "压"], ["c", "ers"], ["神经", "元"], ["▁f", "ear"], ["▁appear", "ance"], ["界", "定"], ["▁t", "iny"], ["文", "艺"], ["标准", "的"], ["▁fig", "ures"], ["利", "息"], ["归", "纳"], ["▁class", "es"], ["▁th", "ick"], ["研究", "中"], ["政", "协"], ["▁sou", "thern"], ["運動", "會"], ["加强", "对"], ["S", "ub"], ["药", "品"], ["看", "来"], ["涵", "盖"], ["英", "國"], ["尽", "可能"], ["B", "M"], ["ocr", "atic"], ["条", "约"], ["发", "出"], ["▁mar", "ried"], ["▁rel", "atively"], ["父", "母"], ["▁Can", "adian"], ["数据", "安全"], ["▁comb", "ination"], ["▁al", "gorith"], ["M", "ake"], ["令", "人"], ["新", "疆"], ["▁H", "all"], ["▁meet", "ing"], ["▁F", "irst"], ["▁out", "put"], ["a", "it"], ["▁L", "eg"], ["▁in", "sect"], ["▁lett", "ers"], ["线", "程"], ["密", "码"], ["倡", "导"], ["r", "ant"], ["adem", "y"], ["资源", "配置"], ["牌", "得主"], ["▁fore", "ign"], ["os", "ystem"], ["▁Comp", "any"], ["传", "染"], ["真", "理"], ["殖", "民"], ["in", "ations"], ["fere", "d"], ["or", "king"], ["▁G", "roup"], ["b", "and"], ["▁im", "agine"], ["▁O", "ff"], [":", "▁"], ["ph", "a"], ["▁mess", "age"], ["▁poss", "ess"], ["vironment", "al"], ["解", "析"], ["同", "学"], ["ys", "ical"], ["ro", "ke"], ["王", "朝"], ["▁Pro", "t"], ["▁pr", "ice"], ["▁wid", "ely"], ["▁Cour", "t"], ["等", "的"], ["▁particular", "ly"], ["最", "新"], ["▁inst", "all"], ["的", "地方"], ["ic", "ial"], ["▁assess", "ment"], ["▁sl", "ightly"], ["而", "非"], ["电", "磁"], ["▁was", "n"], ["▁elect", "ed"], ["▁sp", "eech"], ["o", "ften"], ["Eng", "lish"], ["▁M", "usic"], ["▁ass", "um"], ["认识", "到"], ["▁mechan", "isms"], ["▁▁", "-▁"], ["▁c", "ra"], ["▁enh", "ance"], ["指", "示"], ["▁redu", "cing"], ["ex", "pl"], ["不", "受"], ["▁des", "p"], ["重要", "的是"], ["的最", "大"], ["▁v", "ent"], ["▁move", "ments"], ["工", "商"], ["\u0005", "\u0006"], ["沒", "有"], ["▁car", "ried"], ["环境", "保护"], ["博物", "馆"], ["▁tra", "in"], ["▁t", "rou"], ["▁F", "ound"], ["▁gener", "ation"], ["的", "制度"], ["▁to", "w"], ["暴", "力"], ["▁fail", "ure"], ["▁determ", "ined"], ["补", "贴"], ["行政", "机关"], ["研究", "生"], ["▁ar", "m"], ["Ar", "t"], ["▁F", "ore"], ["S", "outh"], ["▁a", "ward"], ["▁rem", "ove"], ["寻", "求"], ["热", "点"], ["ress", "ed"], ["之", "处"], ["截", "至"], ["an", "i"], ["等", "于"], ["t", "ical"], ["▁fl", "ood"], ["he", "alth"], ["at", "al"], ["f", "ree"], ["体", "内"], ["新时代中国特色社会主义", "思想"], ["要", "有"], ["▁set", "s"], ["▁R", "ail"], ["预", "计"], ["度", "和"], ["▁involv", "ing"], ["W", "illiam"], ["教师", "的"], ["合", "适"], ["▁song", "s"], ["ul", "in"], ["供应", "商"], ["▁qu", "al"], ["R", "E"], ["▁s", "ac"], ["▁rem", "oved"], ["F", "ran"], ["四", "是"], ["▁b", "atter"], ["未", "经"], ["在", "这种"], ["电", "气"], ["技术", "创新"], ["in", "ent"], ["▁house", "hold"], ["▁m", "ath"], ["生", "平"], ["并", "未"], [",", "《"], ["▁B", "el"], ["at", "ically"], ["Ch", "apter"], ["ortun", "ately"], ["光", "学"], ["▁consequ", "ences"], ["▁n", "orthern"], ["病", "理"], ["▁t", "ail"], ["▁h", "ospital"], ["常", "常"], ["▁fa", "ith"], ["在", "一个"], ["难", "点"], ["▁Ar", "my"], ["og", "ue"], ["环境", "中"], ["▁Jew", "ish"], ["▁ro", "ll"], ["ar", "ah"], ["▁G", "ra"], ["到", "达"], ["▁st", "ations"], ["等", "方式"], ["▁cand", "id"], ["s", "im"], ["F", "e"], ["▁m", "ist"], ["生", "素"], ["▁o", "cean"], ["▁dest", "roy"], ["可", "分为"], ["▁squ", "are"], ["os", "ph"], ["买", "卖"], ["▁prim", "arily"], ["▁k", "id"], ["▁L", "ist"], ["▁health", "care"], ["as", "ure"], ["▁maintain", "ing"], ["▁eng", "age"], ["生活", "中"], ["▁symb", "ol"], ["▁sur", "vey"], ["▁t", "ouch"], ["▁me", "ant"], ["ri", "age"], ["vers", "e"], ["ar", "n"], ["▁sign", "al"], ["”", "("], ["▁inst", "rum"], ["尼", "亚"], ["▁ac", "ademic"], ["▁At", "l"], ["▁ev", "olution"], ["ro", "id"], ["pos", "es"], ["▁v", "ulner"], ["▁study", "ing"], ["生产", "的"], ["▁in", "ternal"], ["漏", "洞"], ["▁en", "vironments"], ["▁spec", "ifically"], ["决定", "了"], ["T", "S"], ["前", "往"], ["pro", "du"], ["上", "涨"], ["护", "理"], ["▁Pro", "gram"], ["▁h", "orm"], ["创", "意"], ["中", "等"], ["th", "rough"], ["流动", "性"], ["人员", "的"], ["iv", "ation"], ["▁creat", "ive"], ["形", "状"], ["▁ag", "g"], ["▁j", "u"], ["弹", "性"], ["面临", "的"], ["更", "高的"], ["▁fac", "ilit"], ["ot", "he"], ["▁th", "us"], ["--", "-"], ["设计", "的"], ["ig", "ration"], ["▁to", "oth"], ["▁R", "oyal"], ["被", "认为"], ["▁M", "ont"], ["系统", "性"], ["用", "途"], ["▁M", "ark"], ["u", "a"], ["中", "和"], ["▁them", "es"], ["合", "格"], ["raz", "il"], ["防", "御"], ["▁read", "y"], ["▁he", "ight"], ["P", "M"], ["▁wor", "th"], ["ab", "ase"], ["▁exam", "ine"], ["▁Y", "ear"], ["▁b", "ow"], ["▁par", "am"], ["-", "{"], ["技", "巧"], ["um", "a"], ["充", "满"], ["合", "规"], ["建设", "和"], ["▁C", "ap"], ["▁stra", "ight"], ["er", "ia"], ["▁ann", "ual"], ["现", "行"], ["实体", "经济"], ["he", "ther"], ["▁M", "at"], ["ant", "a"], ["▁of", "fered"], ["康", "复"], ["al", "ysis"], ["we", "ight"], ["的", "学生"], ["▁bir", "d"], ["▁el", "im"], ["st", "ruction"], ["决", "议"], ["的", "标准"], ["内", "外"], ["▁J", "esus"], ["国民", "党"], ["社会", "保障"], ["组", "件"], ["▁st", "orage"], ["ipp", "ed"], ["▁gr", "and"], ["是", "有"], ["b", "el"], ["对", "话"], ["值", "的"], ["▁met", "ab"], ["ar", "ter"], ["is", "hes"], ["获得", "了"], ["▁p", "arent"], ["▁dec", "ades"], ["H", "L"], ["的", "水"], ["▁T", "ur"], ["广", "告"], ["比", "赛"], ["▁lead", "er"], ["太阳", "能"], ["▁re", "ference"], ["▁l", "a"], ["微", "观"], ["信息", "系统"], ["ric", "ulum"], ["▁se", "eds"], ["网络", "空间"], ["模式", "的"], ["私", "人"], ["制", "备"], ["放", "射"], ["est", "ival"], ["满", "意"], ["单", "纯"], ["纪", "律"], ["通货", "膨胀"], ["▁dr", "ive"], ["共", "建"], ["支", "配"], ["与此", "同时"], ["ut", "ch"], ["▁b", "attle"], ["▁K", "ore"], ["▁Cl", "ass"], ["时期", "的"], ["Under", "standing"], ["▁cons", "ervation"], ["?", "\"▁"], ["省", "级"], ["官", "员"], ["▁am", "ounts"], ["武", "装"], ["调", "用"], ["▁estim", "ated"], ["▁", "ri"], ["y", "les"], ["隔", "离"], ["▁G", "e"], ["y", "r"], ["pr", "int"], ["c", "aus"], ["通", "胀"], ["国民", "经济"], ["ab", "out"], ["▁rep", "orts"], ["▁egg", "s"], ["R", "F"], ["▁m", "ice"], ["▁ra", "in"], ["cer", "tain"], ["▁r", "ul"], ["▁f", "lex"], ["需要", "的"], ["ric", "s"], ["似", "乎"], ["un", "te"], ["总", "额"], ["促进", "了"], ["注", "入"], ["m", "l"], ["▁O", "ld"], ["全", "方位"], ["本", "网"], ["时代", "的"], ["伤", "害"], ["裁", "判"], ["▁M", "il"], ["▁sp", "l"], ["征", "收"], ["论", "证"], ["▁H", "istor"], ["如", "今"], ["b", "ran"], ["▁link", "ed"], ["▁", "*"], ["▁T", "ime"], [""", "."], ["审", "核"], ["▁De", "velopment"], ["St", "ud"], ["▁King", "dom"], ["▁M", "ary"], ["▁not", "hing"], ["▁M", "ac"], ["▁s", "av"], ["ou", "l"], ["c", "m"], ["▁p", "ul"], ["M", "on"], ["独立", "的"], ["H", "E"], ["更", "好的"], ["D", "C"], ["生态", "系统"], ["▁d", "rop"], ["坚", "实"], ["▁B", "ro"], ["▁proper", "ly"], ["and", "a"], ["新", "增"], ["d", "i"], ["▁sp", "aces"], ["公", "元"], ["答", "案"], ["声", "音"], ["▁col", "le"], ["对", "接"], ["N", "ext"], ["静", "脉"], ["▁S", "en"], ["▁cl", "osed"], ["▁exc", "ell"], ["委", "員"], ["▁less", "on"], ["▁ch", "apter"], ["▁S", "al"], ["研究", "中心"], ["▁con", "ver"], ["建", "造"], ["对", "方"], ["书", "面"], ["A", "ss"], ["贯", "穿"], ["的重要", "性"], ["纪", "念"], ["▁help", "ing"], ["▁ne", "uro"], ["▁inter", "view"], ["政", "务"], ["玻", "璃"], ["▁atmosp", "here"], ["▁B", "er"], ["re", "y"], ["▁there", "fore"], ["累", "计"], ["清", "朝"], ["南", "北"], ["一", "级"], ["出", "资"], ["▁surv", "ival"], ["▁p", "ages"], ["▁m", "it"], ["美国", "的"], ["a", "ult"], ["ill", "er"], ["▁h", "uge"], ["工程", "师"], ["▁gr", "ass"], ["▁not", "ice"], ["打", "印"], ["▁", "especially"], ["▁g", "iving"], ["N", "S"], ["表现", "出"], ["弘", "扬"], ["O", "h"], ["▁dep", "ression"], ["因", "為"], ["▁d", "edicated"], ["引", "用"], ["▁▁▁▁", "▁▁"], ["饮", "食"], ["山", "西"], ["后", "期"], ["vent", "ional"], ["物", "品"], ["▁exp", "osed"], ["▁co", "ord"], ["un", "ch"], ["B", "A"], ["相当", "于"], ["全", "党"], ["h", "ire"], ["物", "种"], ["▁fin", "ally"], ["w", "ar"], ["不断", "提高"], ["激", "素"], ["▁encou", "rage"], ["重", "庆"], ["▁engine", "ering"], ["s", "ometimes"], ["az", "ine"], ["不", "开"], ["app", "ing"], ["ic", "ago"], ["H", "igh"], ["▁pict", "ures"], ["运动", "会"], ["主", "权"], ["溶", "液"], ["缺", "失"], ["semb", "ly"], ["re", "land"], ["oh", "ns"], ["▁select", "ed"], ["▁N", "et"], ["出", "血"], ["终", "止"], ["名", "义"], ["▁con", "v"], ["ent", "ed"], ["c", "hers"], ["▁c", "ateg"], ["p", "oint"], ["u", "h"], ["d", "em"], ["com", "mun"], ["D", "ep"], ["外", "资"], ["赋", "能"], ["加拿", "大"], ["▁cons", "ists"], ["▁a", "part"], ["产", "能"], ["党和", "国家"], ["▁comb", "ined"], ["后", "续"], ["ar", "row"], ["起", "诉"], ["▁strateg", "y"], ["A", "v"], ["量", "化"], ["清", "单"], ["▁extrem", "ely"], ["▁l", "ooks"], ["毕业", "生"], ["▁C", "he"], ["▁contain", "ing"], ["▁trans", "form"], ["V", "ol"], ["颁", "布"], ["车", "站"], ["▁k", "illed"], ["A", "c"], ["生", "效"], ["人", "数"], ["▁tra", "ffic"], ["o", "z"], ["S", "M"], ["▁gra", "de"], ["▁L", "atin"], ["肌", "肉"], ["▁interest", "s"], ["▁l", "iver"], ["遇", "到"], ["▁w", "ife"], ["转", "录"], ["Un", "ited"], ["▁adv", "oc"], ["消", "失"], ["lic", "k"], ["功能", "的"], ["▁b", "rief"], ["▁form", "at"], ["党", "内"], ["化", "解"], ["hem", "ical"], ["朝", "鲜"], ["▁l", "ibrary"], ["路", "由"], ["ang", "ed"], ["脂", "肪"], ["sp", "ect"], ["▁P", "en"], ["享", "受"], ["O", "C"], ["▁ingred", "ients"], ["体", "积"], ["e", "k"], ["合法", "权益"], ["研究", "和"], ["▁orig", "in"], ["▁an", "xiety"], ["致", "力"], ["年", "夏季"], ["担", "当"], ["oot", "ball"], ["▁mo", "ist"], ["▁conflic", "t"], ["▁t", "al"], ["标", "的"], ["B", "rit"], ["带", "有"], ["爆", "炸"], ["▁circ", "um"], ["▁industr", "ial"], ["▁refer", "red"], ["的", "战略"], ["地", "图"], ["权", "限"], ["▁regular", "ly"], ["演", "化"], ["电", "话"], ["un", "ct"], ["▁Austral", "ian"], ["▁Mex", "ico"], ["P", "ar"], ["▁clos", "er"], ["▁recomm", "ended"], ["说", "的"], ["对外", "开放"], ["A", "g"], ["▁prep", "ared"], ["ian", "a"], ["st", "ream"], ["▁diagn", "osis"], ["▁top", "ic"], ["设", "定"], ["负", "载"], ["m", "as"], ["eor", "g"], ["▁contin", "ues"], ["us", "es"], ["在", "内的"], ["搭", "建"], ["in", "et"], ["或", "是"], ["▁pre", "t"], ["待", "遇"], ["的", "政策"], ["▁discuss", "ion"], ["更", "大的"], ["m", "ic"], ["▁flow", "ers"], ["债务", "人"], ["▁frequ", "ency"], ["媒", "介"], ["▁liqu", "id"], ["▁oper", "ation"], ["体制", "机制"], ["肯", "定"], ["增", "大"], ["冠", "軍"], ["▁T", "own"], ["既", "是"], ["的", "分析"], ["▁b", "urn"], ["ib", "ilities"], ["奠", "定了"], ["情", "节"], ["▁W", "ater"], ["▁in", "form"], ["▁h", "un"], ["搜", "索"], ["ist", "ant"], ["黄", "河"], ["塑", "造"], ["▁rad", "iation"], ["表", "演"], ["G", "e"], ["u", "an"], ["对", "中国"], ["▁gener", "ations"], ["▁mus", "cles"], ["▁Pro", "ject"], ["名", "为"], ["▁manufact", "ure"], ["▁v", "ast"], ["▁M", "ag"], ["▁guid", "elines"], ["模", "糊"], ["▁follow", "s"], ["公", "约"], ["公", "有"], ["动", "能"], ["▁descri", "be"], ["▁car", "s"], ["▁D", "o"], ["▁op", "in"], ["▁d", "ro"], ["▁D", "irect"], ["▁y", "ellow"], ["协", "助"], ["市", "民"], ["▁b", "ank"], ["相", "信"], ["F", "l"], ["b", "ur"], ["个", "别"], ["这一", "点"], ["'", ",▁"], ["工作", "中"], ["其", "中的"], ["▁A", "D"], ["高", "端"], ["▁G", "old"], ["ar", "p"], ["任", "意"], ["g", "ment"], ["▁direct", "or"], ["曾", "经"], ["信息", "安全"], ["告", "诉"], ["▁B", "en"], ["▁veget", "ables"], ["as", "y"], ["又", "称"], ["fere", "nt"], ["坚持", "以"], ["ur", "ance"], ["av", "al"], ["的", "前"], ["活", "跃"], ["▁ra", "ised"], ["▁team", "s"], ["协", "定"], ["l", "s"], ["主", "教"], ["▁exper", "ts"], ["人", "生"], ["▁st", "orm"], ["▁As", "ia"], ["▁indic", "ate"], ["标", "签"], ["▁set", "tle"], ["诈", "骗"], ["聚", "集"], ["R", "C"], ["V", "D"], ["民", "国"], ["历史", "的"], ["▁bar", "ri"], ["▁profession", "als"], ["之", "後"], ["期", "刊"], ["獲", "得"], ["▁r", "andom"], ["or", "a"], ["确", "实"], ["的", "患者"], ["▁cl", "im"], ["▁cho", "ices"], ["▁c", "ognitive"], ["▁o", "ption"], ["▁partic", "les"], ["考虑", "到"], ["▁belief", "s"], ["▁p", "ric"], ["ult", "ure"], ["氛", "围"], ["就是", "要"], ["科学", "发展"], ["东", "南"], ["is", "ation"], ["ir", "ation"], ["▁nut", "rition"], ["主", "流"], ["利益", "的"], ["▁wor", "ry"], ["▁accur", "ate"], ["ers", "e"], ["▁air", "craft"], ["▁collect", "ed"], ["▁l", "ies"], ["▁period", "s"], ["充分", "利用"], ["A", "nt"], ["用", "地"], ["党的十八大", "以来"], ["遊", "戲"], ["▁treat", "ments"], ["c", "king"], ["▁E", "gypt"], ["▁nuc", "lear"], ["▁M", "iss"], ["▁s", "ides"], ["减", "排"], ["\b", "\u0006"], ["机器", "学习"], ["ose", "ph"], ["▁L", "ab"], ["作为", "一种"], ["P", "E"], ["伙", "伴"], ["ak", "s"], ["▁sustain", "able"], ["▁H", "IV"], ["压", "缩"], ["不仅", "仅"], ["人", "身"], ["▁react", "ion"], ["研究", "成果"], ["负责", "人"], ["类", "的"], [":▁", "“"], ["经济", "发展的"], ["ic", "ing"], ["今", "后"], ["▁ro", "ots"], ["五", "个"], ["▁impact", "s"], ["什么", "是"], ["▁famil", "iar"], ["标", "识"], ["▁Fran", "c"], ["▁art", "ist"], ["d", "ec"], ["d", "uring"], ["▁dang", "erous"], ["有关", "的"], ["还", "需要"], ["它们", "的"], ["▁J", "ournal"], ["金融", "危机"], ["▁respons", "es"], ["N", "orth"], ["▁c", "opy"], ["善", "于"], ["河", "北"], ["▁c", "ris"], ["l", "ig"], ["▁I", "t"], ["c", "her"], ["▁Z", "eal"], ["结", "算"], ["引", "擎"], ["▁ex", "ecut"], ["▁L", "ear"], ["▁dis", "p"], ["模型", "的"], ["▁R", "ad"], ["pp", "ing"], ["扩", "散"], ["▁keep", "ing"], ["▁f", "aster"], ["病", "例"], ["产业", "结构"], ["it", "a"], ["is", "p"], ["J", "apan"], ["over", "ty"], ["el", "ess"], ["u", "ps"], ["订", "立"], ["▁un", "ivers"], ["理论", "与"], ["ul", "ating"], ["d", "r"], ["高", "职"], ["都", "可以"], ["▁cent", "uries"], ["▁instit", "utions"], ["▁pl", "ot"], ["▁C", "atholic"], ["▁inf", "ections"], ["开", "启"], ["▁tum", "or"], ["延", "长"], ["▁suggest", "ed"], ["▁p", "ip"], ["f", "riend"], ["ic", "an"], ["ob", "e"], ["定", "量"], ["工业", "互联网"], ["▁S", "ing"], ["几", "种"], ["被", "动"], ["▁increasing", "ly"], ["▁ann", "ounced"], ["算", "力"], ["正", "如"], ["▁not", "ed"], ["▁viol", "ence"], ["▁me", "at"], ["提", "前"], ["所", "述"], ["ren", "ce"], ["教学", "的"], ["了", "对"], ["▁state", "ment"], ["第", "八"], ["…", "▁"], ["▁am", "azing"], ["规", "章"], ["▁effic", "iency"], ["ing", "ly"], ["调", "度"], ["▁Ac", "ademy"], ["阿", "尔"], ["▁d", "iversity"], ["初", "级"], ["f", "aces"], ["z", "ym"], ["▁inc", "red"], ["f", "irst"], ["in", "stead"], ["变化", "的"], ["就", "要"], ["▁Pro", "v"], ["红", "军"], ["epend", "ent"], [")▁", "-▁"], ["日", "报"], ["et", "te"], ["的一", "项"], ["各", "方"], ["很", "少"], ["ir", "ds"], ["o", "om"], ["L", "E"], ["原", "料"], ["▁pre", "m"], ["推", "理"], ["認", "為"], ["▁he", "aring"], ["ex", "pected"], ["天", "文"], ["夫", "妻"], ["▁C", "ivil"], ["▁reg", "ional"], ["▁t", "aught"], ["Ch", "rist"], ["▁st", "em"], ["时", "空"], ["机", "理"], ["▁v", "s"], ["的", "性质"], ["▁M", "em"], ["▁neigh", "bor"], ["他", "們"], ["建", "模"], ["表", "述"], ["交", "付"], ["同", "比"], ["arl", "iament"], ["▁found", "ed"], ["作", "了"], ["朋", "友"], ["需求", "的"], ["▁poll", "ution"], ["▁creat", "es"], ["二", "者"], ["孔", "子"], ["的重要", "组成部分"], ["部", "长"], ["▁oper", "ating"], ["▁beg", "ins"], ["▁Rec", "ords"], ["Ad", "d"], ["▁st", "ars"], ["报", "表"], ["▁E", "mp"], ["▁leg", "isl"], ["界", "面"], ["▁ec", "osystem"], ["▁Zeal", "and"], ["▁a", "id"], ["天", "气"], ["研究", "者"], ["▁m", "ort"], ["f", "it"], ["西", "藏"], ["关", "心"], ["起", "点"], ["F", "C"], ["临", "时"], ["▁meas", "ured"], ["ol", "y"], ["▁Brit", "ain"], ["▁New", "s"], ["▁O", "ut"], ["家", "长"], ["不", "动"], ["中", "文"], ["ens", "es"], ["\",", "\""], ["已", "知"], ["第三", "方"], ["多元", "化"], ["s", "es"], ["主要", "的"], ["ov", "es"], ["疼", "痛"], ["删", "除"], ["家", "的"], ["态", "势"], ["▁m", "m"], ["火", "箭"], ["▁sy", "ndrome"], ["加", "剧"], ["既", "要"], ["g", "r"], ["读", "者"], ["▁ph", "ase"], ["受", "益"], ["企业", "和"], ["▁phen", "omen"], ["来", "实现"], ["▁net", "works"], ["智", "力"], ["监", "察"], ["开", "设"], ["▁h", "our"], ["op", "es"], ["周", "边"], ["▁st", "one"], ["H", "O"], ["▁Sp", "ec"], ["▁R", "el"], ["▁dis", "app"], ["最", "小"], ["故", "意"], ["发生", "在"], ["晶", "体"], ["▁pol", "y"], ["▁for", "t"], ["数", "值"], ["▁val", "id"], ["or", "ph"], ["▁mot", "ion"], ["Wh", "o"], ["▁signific", "ance"], ["对", "抗"], ["▁ad", "op"], ["▁compon", "ent"], ["创造", "了"], ["网", "上"], ["ic", "ious"], ["▁reve", "aled"], ["▁comp", "os"], ["诚", "信"], ["▁ro", "w"], ["村", "民"], ["既", "有"], ["跨", "境"], ["▁pr", "iv"], ["长", "度"], ["▁Re", "ferences"], ["不", "久"], ["k", "ins"], ["不", "但"], ["限", "度"], ["代", "替"], ["线", "路"], ["快速", "发展"], ["▁j", "oint"], ["h", "an"], ["ind", "er"], ["pt", "ions"], ["▁com", "pl"], ["落", "后"], ["P", "I"], ["▁real", "ized"], ["In", "ter"], ["程度", "的"], ["▁ch", "osen"], ["将", "在"], ["二", "次"], ["ot", "o"], ["ant", "ed"], ["期", "望"], ["or", "ter"], ["上", "是"], ["ist", "an"], ["▁dou", "ble"], ["ch", "ing"], ["ay", "ing"], ["和", "应用"], ["Ex", "ample"], ["网络", "的"], ["cul", "es"], ["建", "築"], ["街", "道"], ["▁profess", "or"], ["he", "lp"], ["▁divid", "ed"], ["n", "p"], ["▁f", "ine"], ["数", "额"], ["▁fru", "its"], ["的", "存在"], ["▁def", "ic"], ["▁associ", "ation"], ["S", "uch"], ["可", "再生"], ["▁dep", "ending"], ["I", "G"], ["领", "先"], ["落", "地"], ["▁b", "rown"], ["年", "轻"], ["颜", "色"], ["高", "温"], ["二氧化", "碳"], ["l", "oc"], ["ell", "s"], [":", "《"], ["F", "ig"], ["rast", "ructure"], ["习近平", "新时代中国特色社会主义思想"], ["M", "ean"], ["负", "面"], ["已经", "成为"], ["▁clear", "ly"], ["退", "出"], ["生", "涯"], ["方式", "的"], ["农业", "生产"], ["▁n", "erv"], ["▁fre", "edom"], ["老", "年"], ["▁T", "est"], ["矩", "阵"], ["的", "现象"], ["大", "致"], ["▁P", "acific"], ["极", "端"], ["▁re", "new"], ["的", "范围"], ["剩", "余"], ["tain", "ing"], ["变", "异"], ["院", "士"], ["库", "存"], ["▁", ","], ["rol", "og"], ["ic", "ations"], ["顾", "客"], ["光", "伏"], ["和", "实践"], ["在", "不同"], ["oc", "c"], ["▁veh", "icle"], ["▁occur", "red"], ["▁m", "al"], ["L", "iving"], ["▁L", "ibrary"], ["k", "es"], ["▁sec", "ure"], ["當", "時"], ["简", "介"], ["▁girl", "s"], ["▁dog", "s"], ["st", "yle"], ["指", "引"], ["兴", "起"], ["▁l", "oved"], ["缺", "少"], ["▁desp", "ite"], ["▁fil", "es"], ["典型", "的"], ["Res", "earch"], ["在", "新"], ["部门", "的"], ["首", "要"], ["the", "ast"], ["广", "州"], ["▁spirit", "ual"], ["境", "内"], ["g", "al"], ["▁chemical", "s"], ["的", "第一"], ["管", "制"], ["▁perspect", "ives"], ["▁fasc", "inating"], ["直", "观"], ["▁en", "able"], ["▁elect", "rical"], ["人", "对"], ["在", "全球"], ["意义", "上"], ["意", "图"], ["特异", "性"], ["▁mus", "e"], ["韩", "国"], ["子", "女"], ["单", "个"], ["很", "快"], ["▁Div", "ision"], ["▁repl", "aced"], ["▁ex", "ternal"], ["尽", "量"], ["res", "pect"], ["▁part", "ies"], ["外部", "链接"], ["▁re", "b"], ["分", "支"], ["▁star", "ts"], ["的", "所有"], ["▁sett", "ings"], ["發", "展"], ["est", "ed"], ["▁Cl", "ub"], ["I", "A"], ["n", "es"], ["开", "辟"], ["▁fl", "oor"], ["降低", "了"], ["▁kn", "ew"], ["型", "的"], ["▁d", "ra"], ["U", "p"], ["▁ext", "ract"], ["W", "orld"], ["▁br", "ight"], ["较", "少"], ["体系", "建设"], ["▁cal", "c"], ["▁O", "ne"], ["▁add", "ing"], ["▁res", "idents"], ["起", "来的"], ["▁T", "or"], ["化", "石"], ["iction", "ary"], ["联", "动"], ["疗", "法"], ["▁H", "ill"], ["类", "别"], ["▁dis", "s"], ["不", "需要"], ["▁Ang", "el"], ["深化", "改革"], ["北京", "市"], ["▁open", "ing"], ["▁recogn", "ize"], ["ific", "ial"], ["该", "研究"], ["此", "类"], ["之", "为"], ["我们", "在"], ["▁In", "ternet"], ["We", "b"], ["缩", "小"], ["Ret", "rieved"], ["cy", "cl"], ["▁w", "aters"], ["ov", "iet"], ["法", "学"], ["建立", "健全"], ["教学", "内容"], ["组成", "的"], ["工作", "者"], ["▁pract", "ical"], ["广", "阔"], ["最", "重要的"], ["▁sm", "art"], ["综合", "征"], ["不", "应"], ["的", "时代"], ["▁w", "estern"], ["百分", "点"], ["e", "ff"], ["专", "用"], ["ot", "ed"], ["民法", "典"], ["和", "分析"], ["if", "orm"], ["▁ke", "pt"], ["br", "idge"], ["还", "原"], ["so", "ft"], ["民", "國"], ["A", "re"], ["由", "於"], ["▁att", "ribut"], ["▁mor", "ning"], ["b", "ra"], ["▁manag", "ed"], ["▁G", "rand"], ["oun", "ter"], ["▁fac", "ilities"], ["▁organ", "ic"], ["▁just", "ice"], ["▁c", "raft"], ["能", "耗"], ["全", "社会"], ["▁Russ", "ian"], ["i", "ro"], ["▁compet", "ition"], ["▁P", "e"], ["▁proced", "ure"], ["并", "对"], ["社会主义", "核心"], ["t", "op"], ["依赖", "于"], ["▁perspect", "ive"], ["▁f", "irm"], ["分别", "为"], ["▁tra", "ditions"], ["上市", "公司"], ["半", "导体"], ["▁Wh", "ite"], ["季", "度"], ["▁run", "s"], ["▁ne", "ur"], ["英", "雄"], ["ush", "ing"], ["到", "底"], ["广泛", "的"], ["跨", "越"], ["▁disc", "overy"], ["电", "极"], ["产业", "的"], ["Un", "iversity"], ["能", "在"], ["▁s", "en"], ["▁er", "a"], ["▁represent", "ed"], ["T", "A"], ["▁R", "ock"], ["▁T", "exas"], ["英", "文"], ["云", "南"], ["ke", "ep"], ["变", "换"], ["常", "态"], ["▁ind", "ex"], ["▁Th", "omas"], ["进", "化"], ["▁nutri", "ents"], ["\u0007", "\u0006"], ["▁pur", "poses"], ["h", "av"], ["生", "育"], ["▁S", "he"], ["▁const", "ant"], ["奧", "林匹克"], ["G", "et"], ["学生的", "学习"], ["R", "el"], ["那", "样"], ["n", "ut"], ["▁program", "ming"], ["▁forest", "s"], ["el", "ing"], ["om", "in"], ["附", "加"], ["阻", "碍"], ["长", "远"], ["着", "眼"], ["这", "次"], ["▁Sp", "ace"], ["▁S", "l"], ["D", "S"], ["▁advant", "age"], ["零", "售"], ["▁Comm", "ission"], ["一", "轮"], ["结构", "和"], ["ab", "il"], ["受", "害"], ["▁high", "light"], ["希", "腊"], ["▁ex", "change"], ["规定", "了"], ["明", "了"], ["▁collabor", "ation"], ["▁st", "ages"], ["创新", "的"], ["▁char", "ge"], ["光", "谱"], ["可", "视"], ["B", "el"], ["垂", "直"], ["▁comput", "ers"], ["▁w", "alls"], ["et", "erm"], ["▁ph", "one"], ["ab", "its"], ["▁sp", "end"], ["放", "弃"], ["▁Se", "a"], ["▁b", "ud"], ["对", "立"], ["阶段", "的"], ["几", "年"], ["▁f", "ab"], ["行政", "区"], ["结合", "起来"], ["▁tox", "ic"], ["▁interact", "ions"], ["▁int", "ended"], ["接", "入"], ["广", "播"], ["劳", "务"], ["▁Man", "agement"], ["复", "习"], ["▁Carol", "ina"], ["风险", "的"], ["明确", "了"], ["▁re", "in"], ["▁affect", "s"], ["▁s", "now"], ["it", "t"], ["in", "ity"], ["至关", "重要"], ["d", "on"], ["▁part", "ners"], ["▁A", "ward"], ["方法", "和"], ["社", "會"], ["▁t", "alking"], ["▁respons", "ibility"], ["为", "主要"], ["中", "山"], ["资产", "阶级"], ["L", "S"], ["二", "年"], ["L", "ast"], ["▁cor", "respond"], ["演", "出"], ["▁lay", "ers"], ["人类", "社会"], ["▁good", "s"], ["r", "un"], ["肠", "道"], ["it", "ness"], ["收", "购"], ["▁Soc", "ial"], [",▁", "("], ["的", "外"], ["对", "学生"], ["级", "别"], ["▁inflamm", "ation"], ["▁G", "ames"], ["C", "N"], ["im", "a"], ["▁C", "ast"], ["▁jo", "in"], ["扎", "实"], ["小", "于"], ["▁disc", "rim"], ["▁interest", "ed"], ["▁s", "udden"], ["包", "容"], ["▁behavi", "ors"], ["征", "程"], ["▁M", "iddle"], ["简", "化"], ["剂", "量"], ["▁see", "k"], ["inc", "re"], ["机构", "的"], ["表现", "在"], ["对", "待"], ["v", "ol"], ["ad", "s"], ["▁opt", "im"], ["W", "here"], ["现", "有的"], ["▁mount", "ain"], ["D", "R"], ["plic", "ated"], ["▁T", "er"], ["r", "at"], ["ult", "ing"], ["彼", "此"], ["嵌", "入"], ["▁res", "il"], ["高", "达"], ["ig", "an"], ["总", "是"], ["▁main", "ly"], ["Y", "es"], ["▁d", "ream"], ["ig", "ital"], ["▁flu", "id"], ["启", "发"], ["个性", "化"], ["▁m", "er"], ["x", "ts"], ["效", "能"], ["▁g", "od"], ["C", "re"], ["vent", "ions"], ["人民", "代表大会"], ["▁T", "imes"], ["的", "理解"], ["取", "向"], ["当", "中"], ["re", "al"], ["u", "ke"], ["▁Sm", "ith"], ["▁support", "ed"], ["全", "民"], ["质量", "和"], ["创新", "能力"], ["种", "子"], ["电", "解"], ["ten", "ance"], ["下", "面"], ["▁most", "ly"], ["(", "▁"], ["并", "通过"], ["L", "ess"], ["u", "ing"], ["▁mon", "itoring"], ["▁sol", "ve"], ["了一", "系列"], ["▁I", "II"], ["时", "刻"], ["的", "定义"], ["▁max", "imum"], ["走", "出"], ["▁ph", "ilosoph"], ["▁med", "ium"], ["管理", "体系"], ["习近平", "同志"], ["Q", "L"], ["或", "其他"], ["擔", "任"], ["▁gener", "ate"], ["mean", "ing"], ["汉", "语"], ["检", "索"], ["A", "lex"], ["es", "is"], ["▁inj", "uries"], ["梳", "理"], ["困", "境"], ["建立", "在"], ["▁show", "ing"], ["▁S", "im"], ["▁S", "k"], ["▁s", "alt"], ["▁design", "s"], ["M", "c"], ["中", "断"], ["▁P", "an"], ["▁rel", "ax"], ["▁T", "o"], ["D", "avid"], ["▁A", "rab"], ["reat", "ment"], ["▁P", "arliament"], ["▁she", "l"], ["R", "T"], ["至", "于"], ["▁vict", "im"], ["▁B", "ook"], ["▁a", "x"], ["又", "是"], ["定", "律"], ["▁un", "expected"], ["ad", "y"], ["F", "S"], ["am", "ental"], ["M", "r"], ["cl", "aim"], ["住", "宅"], ["▁fact", "s"], ["▁tr", "uth"], ["▁su", "itable"], ["i", "at"], ["a", "o"], ["▁fl", "at"], ["第二", "个"], ["未成", "年人"], ["脉", "冲"], ["A", "ustral"], ["▁def", "e"], ["病", "的"], ["▁appoint", "ed"], ["学", "说"], ["离", "婚"], ["常", "委会"], ["舞", "蹈"], ["耕", "地"], ["个", "百分点"], ["吸", "附"], ["的", "位置"], ["atur", "ally"], ["▁harm", "ful"], ["aw", "a"], ["▁shap", "es"], ["Am", "ong"], ["C", "urrent"], ["创", "设"], ["率", "的"], ["▁rec", "on"], ["解决", "问题"], ["▁ch", "ain"], ["巴", "黎"], ["建筑", "物"], ["設", "計"], ["▁Found", "ation"], ["▁recogn", "ized"], ["▁se", "ed"], ["re", "du"], ["▁un", "known"], ["im", "agine"], ["V", "ID"], ["诞", "生"], ["clus", "ive"], ["▁could", "n"], ["超", "声"], ["转型", "升级"], ["▁our", "selves"], ["A", "ut"], ["om", "er"], ["▁excell", "ent"], ["▁we", "alth"], ["▁you", "th"], ["等", "多"], ["▁landsc", "ape"], ["▁job", "s"], ["▁kind", "s"], ["T", "ake"], ["b", "ody"], ["htt", "ps"], ["it", "ivity"], ["ish", "op"], ["致力", "于"], ["st", "one"], ["▁r", "ural"], ["act", "s"], ["▁d", "ie"], ["▁l", "ic"], ["等", "因素"], ["增", "多"], ["▁turn", "s"], ["开", "创"], ["S", "te"], ["學", "校"], ["▁N", "A"], ["知", "名"], ["▁th", "in"], ["▁f", "if"], ["ill", "a"], ["▁potential", "ly"], ["依法治", "国"], ["ris", "on"], ["系", "統"], ["可", "在"], ["P", "T"], ["传", "导"], ["命", "题"], ["if", "ferent"], ["ific", "ations"], ["▁proced", "ures"], ["▁Sc", "ott"], ["上", "看"], ["介", "质"], ["▁w", "aves"], ["脱", "离"], ["电", "阻"], ["▁C", "am"], ["年", "在"], ["▁ph", "r"], ["▁k", "il"], ["▁ass", "ign"], ["开", "关"], ["▁help", "ful"], ["ut", "y"], ["▁rel", "ative"], ["武", "汉"], ["静", "态"], ["▁promot", "ing"], ["ell", "ed"], ["文", "獻"], ["▁guid", "ance"], ["▁cap", "able"], ["期", "货"], ["迫", "切"], ["发现", "了"], ["▁ide", "al"], [":", "▁("], ["限", "于"], ["▁orig", "inally"], ["▁wa", "it"], ["us", "ually"], ["▁Ital", "ian"], ["製", "作"], ["▁D", "i"], ["以", "外"], ["回", "到"], ["德", "育"], ["r", "ors"], ["其", "在"], ["▁f", "rag"], ["优", "惠"], ["p", "et"], ["o", "ir"], ["▁Eng", "ine"], ["尺", "度"], ["if", "ies"], ["▁caus", "ing"], ["本", "站"], ["ast", "y"], ["▁redu", "ction"], ["am", "ing"], ["报", "酬"], ["舆", "论"], ["离", "不开"], ["时间", "的"], ["双", "重"], ["感", "到"], ["东", "方"], ["持", "有"], ["▁r", "an"], ["清", "算"], ["思想", "的"], ["中的", "应用"], ["不", "存在"], ["he", "im"], ["onom", "y"], ["参", "见"], ["班", "牙"], ["西", "班牙"], ["IS", "BN"], ["从", "严"], ["不仅", "是"], ["▁he", "ro"], ["浪", "费"], ["自然", "科学"], ["▁W", "ild"], ["▁l", "ots"], ["▁tru", "ly"], ["处", "分"], ["激", "烈"], ["▁ab", "ilities"], ["r", "ate"], ["專", "輯"], ["C", "ent"], ["▁serv", "es"], ["d", "f"], ["▁sat", "is"], ["▁se", "at"], ["!", "\""], ["g", "ely"], ["细", "化"], ["纠", "正"], ["▁sens", "itive"], ["延", "迟"], ["前", "者"], ["图书", "馆"], ["▁co", "al"], ["▁w", "et"], ["▁ob", "s"], ["▁aim", "ed"], ["w", "a"], ["B", "ar"], ["▁n", "or"], ["▁sc", "ore"], ["ro", "gen"], ["▁veh", "icles"], ["经济", "体"], ["se", "x"], ["▁sign", "ed"], ["幅", "度"], ["O", "L"], ["▁extrem", "e"], ["▁for", "ced"], ["奧林匹克", "運動會"], ["▁M", "ad"], ["f", "ig"], ["est", "ion"], ["▁concent", "ration"], ["f", "ish"], ["月", "球"], ["▁b", "an"], ["▁ne", "ut"], ["▁Comm", "it"], ["▁crit", "ic"], ["▁Col", "umb"], ["罗", "马"], ["开", "拓"], ["最高", "人民法院"], ["n", "on"], ["基", "准"], ["▁p", "il"], ["地", "点"], ["az", "z"], ["enn", "y"], ["▁per", "man"], ["\"", ","], ["l", "ines"], ["水", "利"], ["各", "方面"], ["陷", "入"], ["中", "介"], ["▁d", "ensity"], ["▁dr", "ink"], ["会", "导致"], ["便", "于"], ["命运", "共同体"], ["T", "ime"], ["▁test", "ed"], ["ap", "h"], ["凸", "显"], ["和", "经济"], ["不", "平衡"], ["高", "水平"], ["的", "实践"], ["可", "行"], ["燃", "烧"], ["▁S", "T"], ["ion", "e"], ["ap", "es"], ["J", "ames"], ["水", "的"], ["▁c", "atch"], ["▁t", "ips"], ["都", "能"], ["▁rou", "te"], ["▁Medic", "ine"], ["争", "取"], ["▁mark", "ed"], ["G", "A"], ["煤", "炭"], ["史", "上"], ["▁sat", "ell"], ["▁tr", "ial"], ["办公", "室"], ["安", "徽"], ["c", "ou"], ["▁R", "obert"], ["供给", "侧"], ["C", "M"], ["▁D", "on"], ["▁vit", "amin"], ["H", "T"], ["一", "名"], ["as", "ive"], ["ult", "ane"], ["较", "多"], ["此", "次"], ["▁strong", "er"], ["▁emer", "gency"], ["要", "把"], ["这", "也是"], ["he", "t"], ["se", "m"], ["锻", "炼"], ["▁", "ign"], ["l", "ers"], ["介绍", "了"], ["▁t", "un"], ["发展", "战略"], ["ans", "ion"], ["st", "ood"], ["液", "体"], ["ub", "lished"], ["▁B", "as"], ["le", "ts"], ["理", "事"], ["收", "缩"], ["制度", "和"], ["相", "适应"], ["耦", "合"], ["H", "S"], ["—▁▁", "—▁▁"], ["est", "yle"], ["▁G", "overnment"], ["营", "业"], ["申", "报"], ["在", "全国"], ["利", "亚"], ["等", "多种"], ["▁T", "re"], ["▁dep", "th"], ["▁along", "side"], ["R", "ef"], ["率", "先"], ["要求", "的"], ["▁obtain", "ed"], ["▁k", "m"], ["▁mix", "ed"], ["源", "于"], ["聚", "合"], ["情", "景"], ["定", "价"], ["▁writ", "ers"], ["法", "和"], ["▁St", "e"], ["p", "ass"], ["新", "生"], ["这", "两个"], ["初", "中"], ["▁T", "ri"], ["研究", "表明"], ["元", "件"], ["的", "实际"], ["电", "信"], ["▁w", "el"], ["▁or", "al"], ["▁impro", "ving"], ["▁new", "sp"], ["实现", "中华民族伟大复兴"], ["▁list", "ed"], ["▁see", "king"], ["▁Val", "ley"], ["▁remain", "ing"], ["个", "人的"], ["可再生", "能源"], ["▁wh", "om"], ["▁tra", "dition"], ["维", "修"], ["i", "h"], ["安全", "的"], ["▁under", "lying"], ["▁ex", "cept"], ["招", "生"], ["▁D", "an"], ["▁loc", "ations"], ["▁Is", "lam"], ["▁interact", "ion"], ["or", "i"], ["S", "et"], ["无", "限"], ["ste", "in"], ["▁R", "ead"], ["▁doc", "uments"], ["▁g", "ar"], ["▁su", "c"], ["▁hor", "se"], ["▁writ", "er"], ["st", "udents"], ["▁L", "and"], ["全面", "建成"], ["极", "为"], ["组织", "和"], ["雷", "达"], ["准", "入"], ["▁mus", "ical"], ["W", "est"], ["st", "ances"], ["光", "纤"], ["D", "ata"], ["▁c", "ards"], ["▁controll", "ed"], ["er", "ies"], ["院", "长"], ["智慧", "城市"], ["▁d", "aughter"], ["▁result", "ing"], ["新", "一代"], ["▁say", "ing"], ["▁", "||"], ["。", "("], ["▁sign", "als"], ["erv", "ing"], ["▁w", "alking"], ["警", "察"], ["▁ha", "z"], ["▁platform", "s"], ["ohns", "on"], ["t", "ure"], ["M", "ark"], ["行政", "管理"], ["揭示", "了"], ["▁re", "n"], ["▁ext", "ended"], ["▁demonstr", "ate"], ["充", "电"], ["沉", "积"], ["电", "脑"], ["▁vacc", "ine"], ["▁found", "ation"], ["行业", "的"], ["▁D", "el"], ["m", "ain"], ["是", "为了"], ["▁Techn", "ology"], ["▁p", "le"], ["▁subst", "ant"], ["▁sc", "ri"], ["j", "o"], ["▁acc", "omp"], ["▁di", "am"], ["过", "于"], ["L", "a"], ["党的", "十九"], ["lish", "ing"], ["同", "時"], ["治", "党"], ["数字", "技术"], ["更", "有"], ["舞", "台"], ["▁d", "oll"], ["▁S", "y"], ["im", "my"], ["el", "lect"], ["▁C", "amp"], ["▁introdu", "ction"], ["the", "tic"], ["意", "愿"], ["站", "在"], ["▁mach", "ines"], ["▁P", "ower"], ["M", "em"], ["▁H", "enry"], ["▁exerc", "ises"], ["本", "土"], ["▁Or", "gan"], ["▁E", "lect"], ["经营", "者"], ["rain", "ing"], ["遭", "受"], ["演", "唱"], ["校", "长"], ["深", "远"], ["▁Par", "is"], ["▁rapid", "ly"], ["司", "令"], ["▁concer", "n"], ["ear", "ing"], ["一", "流"], ["b", "ar"], ["el", "i"], ["美", "丽"], ["E", "F"], ["E", "arly"], ["中", "期"], ["▁I", "reland"], ["自治", "区"], ["▁te", "xts"], ["▁A", "I"], ["s", "ocial"], ["相", "对于"], ["▁Char", "les"], ["▁m", "ac"], ["c", "reating"], ["变", "迁"], ["▁St", "and"], ["▁gu", "itar"], ["ou", "ts"], ["本", "章"], ["▁Fran", "k"], ["▁dec", "ide"], ["D", "L"], ["延", "续"], ["血", "糖"], ["事业", "单位"], ["意义", "的"], ["um", "in"], ["c", "al"], ["▁dr", "inking"], ["▁f", "iction"], ["为", "止"], ["he", "nt"], ["▁ch", "art"], ["▁V", "ictor"], ["▁ar", "ms"], ["▁ed", "ge"], ["om", "pl"], ["▁anc", "est"], ["也", "将"], ["明确", "的"], ["率", "为"], ["纲", "要"], ["▁hous", "es"], ["学生", "对"], ["盈", "利"], ["▁o", "d"], ["研", "讨"], ["自然", "资源"], ["社会主义", "市场经济"], ["i", "ological"], ["stit", "ution"], ["▁br", "idge"], ["▁aud", "ience"], ["恶", "性"], ["Th", "ose"], ["上", "有"], ["加", "坡"], ["▁sw", "im"], ["从", "中"], ["▁hand", "le"], ["Cons", "ider"], ["ract", "ice"], ["▁fin", "ished"], ["ipp", "ing"], ["▁support", "ing"], ["▁D", "ef"], ["总", "之"], ["离", "开"], ["il", "ation"], ["承", "载"], ["实", "务"], ["回", "顾"], ["具有", "重要"], ["▁act", "s"], ["▁not", "iced"], ["w", "ord"], ["S", "am"], ["▁E", "v"], ["th", "us"], ["▁typ", "ical"], ["ed", "uc"], ["um", "es"], ["设计", "和"], ["▁f", "le"], ["▁bi", "ological"], ["▁D", "ec"], ["▁pl", "ate"], ["▁commun", "icate"], ["▁s", "ort"], ["农", "户"], ["小康", "社会"], ["硕", "士"], ["腺", "癌"], ["W", "ater"], ["的", "效果"], ["比", "特"], ["t", "ry"], ["▁experim", "ents"], ["▁tell", "s"], ["的", "本质"], ["的", "空间"], ["列", "入"], ["▁hyp", "othes"], ["▁consist", "ent"], ["的", "意义"], ["参", "照"], ["▁lead", "ership"], ["原", "本"], ["▁decre", "ase"], ["封", "闭"], ["欢", "迎"], ["▁port", "ion"], ["▁", "+"], ["转变", "为"], ["▁att", "acks"], ["r", "us"], ["b", "efore"], ["here", "d"], ["江", "西"], ["▁capt", "ure"], ["▁mess", "ages"], ["▁ar", "ray"], ["尽", "快"], ["彰", "显"], ["Brit", "ish"], ["用", "水"], ["節", "目"], ["▁Sc", "ot"], ["污", "水"], ["阿", "拉"], ["▁instrum", "ents"], ["▁fl", "ight"], ["过", "错"], ["F", "orm"], ["%", ")▁"], ["u", "ous"], ["生命", "周期"], ["▁F", "orm"], ["m", "es"], ["B", "en"], ["ot", "ing"], ["▁F", "in"], ["起", "义"], ["消", "化"], ["高", "原"], ["无", "关"], ["選", "舉"], ["ian", "o"], ["▁vis", "ible"], ["H", "istor"], ["▁insp", "ired"], ["▁dou", "b"], ["呈现", "出"], ["▁he", "rit"], [")", "▁▁"], ["▁con", "clud"], ["▁n", "ations"], ["oss", "ible"], ["on", "ia"], ["追", "究"], ["▁l", "ose"], ["指", "向"], ["大", "批"], ["书", "中"], ["消", "灭"], ["▁narr", "atives"], ["应用", "的"], ["中小", "学"], ["▁young", "er"], ["d", "ata"], ["▁c", "ert"], ["解决", "了"], ["▁L", "ord"], ["组", "建"], ["化", "工"], ["比", "賽"], ["▁f", "oss"], ["ag", "ues"], ["权", "和"], ["每", "天"], ["增长", "的"], ["解放", "军"], ["▁w", "ants"], ["四", "大"], ["血", "清"], ["污染", "物"], ["一", "位"], ["▁c", "m"], ["南", "方"], ["操作", "系统"], ["▁second", "ary"], ["s", "ug"], ["ct", "ic"], ["or", "row"], ["▁cred", "it"], ["▁am", "b"], ["n", "ight"], ["P", "aul"], ["r", "ust"], ["▁sk", "y"], ["▁t", "ried"], ["er", "b"], ["四", "年"], ["▁sub", "s"], ["▁com", "ment"], ["D", "M"], ["坐", "标"], ["▁rec", "overy"], ["践", "行"], ["大", "报告"], ["\b", "\u0005"], ["治", "国"], ["▁in", "ternet"], ["L", "A"], ["ise", "ase"], ["导", "航"], ["全面", "建设"], ["的", "各种"], ["▁grow", "n"], ["▁on", "going"], ["▁adv", "ice"], ["▁gre", "w"], ["l", "og"], ["▁g", "ained"], ["▁t", "aste"], ["on", "al"], ["普", "惠"], ["进行", "分析"], ["出", "于"], ["检察", "院"], ["▁c", "ooking"], ["h", "i"], ["caus", "ing"], ["▁arr", "ived"], ["扮", "演"], ["ven", "ue"], ["ib", "eral"], ["多", "媒体"], ["▁D", "ata"], ["▁g", "un"], ["▁mov", "ie"], ["▁c", "art"], ["o", "il"], ["金融", "市场"], ["▁U", "N"], ["赢", "得"], ["th", "rop"], ["降", "解"], ["深度", "融合"], ["的", "建设"], ["▁sh", "if"], ["变", "形"], ["$", "$"], ["年", "以来"], ["上海", "市"], ["ain", "e"], ["此", "后"], ["集", "聚"], ["合同", "的"], ["以", "为"], ["和", "非"], ["持", "久"], ["▁int", "elligence"], ["▁p", "air"], ["▁d", "ive"], ["遭", "到"], ["▁mole", "cules"], ["▁d", "im"], ["频", "繁"], ["中国", "科学院"], ["yl", "van"], ["工作", "人员"], ["终", "身"], ["生产", "经营"], ["B", "I"], ["igh", "ter"], ["本", "课程"], ["▁all", "erg"], ["缺", "点"], ["onom", "ic"], ["form", "er"], ["▁w", "is"], ["澳", "大利"], ["神经", "网络"], ["入", "侵"], ["▁m", "ere"], ["▁slow", "ly"], ["▁S", "ub"], ["缩", "短"], ["▁R", "ob"], ["▁der", "ived"], ["g", "ent"], ["▁function", "al"], ["▁N", "orthern"], ["学习", "和"], ["rem", "e"], ["▁sc", "ene"], ["▁h", "idden"], ["否", "定"], ["▁Min", "ister"], ["占", "据"], ["筛", "选"], ["性", "疾病"], ["▁st", "ret"], ["s", "en"], ["互", "通"], ["》", ":"], ["又", "有"], ["机", "的"], ["▁relig", "ion"], ["T", "R"], ["▁acc", "ompl"], ["但", "由于"], ["时间", "内"], ["▁pain", "ting"], ["▁album", "s"], ["g", "s"], ["小", "结"], ["▁techn", "ical"], ["常", "用的"], ["P", "U"], ["▁inter", "vention"], ["独特", "的"], ["注", "射"], ["ter", "y"], ["at", "uring"], ["前", "后"], ["Sec", "ond"], ["▁mem", "bran"], ["▁ens", "ures"], ["▁ed", "ition"], ["早", "在"], ["在", "经济"], ["h", "at"], ["E", "lect"], ["k", "et"], ["自", "愿"], ["am", "ine"], ["心", "肌"], ["▁ab", "use"], ["发", "起"], ["论", "坛"], ["IS", "O"], ["er", "als"], ["▁list", "en"], ["参与", "者"], ["产", "出"], ["章", "程"], ["▁a", "thlet"], ["▁happ", "y"], ["第", "九"], ["▁", "rough"], ["▁C", "are"], ["▁f", "ant"], ["L", "C"], ["z", "en"], ["泄", "露"], ["二", "级"], ["▁rec", "ycl"], ["步", "伐"], ["产业", "化"], ["的一", "般"], ["▁pregn", "ancy"], ["相", "關"], ["发", "的"], ["%", "、"], ["宗", "旨"], ["学", "派"], ["▁Su", "per"], ["逝", "世"], ["的", "部分"], ["▁mult", "i"], ["不同", "于"], ["兄", "弟"], ["十四", "五"], ["适当", "的"], ["N", "O"], ["ost", "ering"], ["讲", "解"], ["▁comp", "osition"], ["业", "态"], ["流", "转"], ["万", "吨"], ["金融", "服务"], ["▁T", "em"], ["▁ar", "ts"], ["对", "策"], ["v", "ision"], ["▁Emp", "ire"], ["ak", "ed"], ["Lear", "n"], ["才", "是"], ["美", "的"], ["▁mechan", "ism"], ["▁so", "le"], ["性", "地"], ["援", "助"], ["射", "线"], ["e", "ut"], ["▁vol", "unte"], ["诉讼", "法"], ["▁defin", "ition"], ["f", "ortunately"], ["▁st", "ick"], ["▁cur", "riculum"], ["▁wild", "life"], ["where", "as"], ["▁St", "ar"], ["c", "ut"], ["▁virt", "ual"], ["一", "下"], ["另", "一种"], ["id", "ae"], ["z", "ed"], ["综合", "性"], ["保", "密"], ["le", "an"], ["ro", "t"], ["▁tw", "ice"], ["创新", "创业"], ["的", "选择"], ["ut", "ional"], ["▁en", "zym"], ["▁Commit", "tee"], ["h", "op"], ["校", "友"], ["▁acc", "ident"], ["▁employ", "ed"], ["原", "告"], ["思政", "课"], ["北", "方"], ["面临", "着"], ["室", "内"], ["▁sw", "itch"], ["有", "力的"], ["教育", "教学"], ["诗", "歌"], ["▁wind", "ow"], ["▁U", "p"], ["▁Off", "ice"], ["D", "ec"], ["▁trans", "ition"], ["作", "為"], ["水", "稻"], ["▁In", "f"], ["al", "se"], ["isc", "o"], ["少数", "民族"], ["op", "ulation"], ["固", "体"], ["▁H", "el"], ["▁se", "lection"], ["忽", "略"], ["ld", "er"], ["塑", "料"], ["的", "总"], ["▁M", "r"], ["im", "p"], ["ash", "ion"], ["▁dr", "iving"], ["收", "到"], ["il", "i"], ["sp", "an"], ["成", "人"], ["d", "irect"], ["▁employ", "ees"], ["收", "支"], ["▁demonstr", "ated"], ["▁particip", "ate"], ["直", "至"], ["w", "an"], ["作", "曲"], ["顶", "层"], ["▁fund", "amental"], ["良", "性"], ["培养", "学生的"], ["▁child", "hood"], ["ap", "ed"], ["鉴", "别"], ["世界", "经济"], ["rese", "archers"], ["复", "苏"], ["高度", "重视"], ["的", "主体"], ["▁exist", "ence"], ["P", "s"], ["重", "的"], ["▁fl", "o"], ["▁V", "irginia"], ["▁g", "all"], ["留", "下"], ["V", "is"], ["M", "O"], ["▁prep", "are"], ["第四", "节"], ["治理", "能力"], ["均", "匀"], ["制", "定的"], ["以下", "几个"], ["▁S", "oviet"], ["社会", "科学"], ["sequ", "ent"], ["▁init", "ially"], ["全面", "发展"], ["n", "ce"], ["ic", "king"], ["H", "A"], ["▁innov", "ative"], ["▁not", "able"], ["▁Sou", "thern"], ["也", "为"], ["效率", "和"], ["r", "h"], ["d", "raw"], ["od", "ing"], ["af", "ety"], ["根本", "上"], ["短", "板"], ["的", "责任"], ["世界", "各国"], ["▁sp", "eaking"], ["Ch", "ildren"], ["ost", "ic"], ["in", "ux"], ["▁d", "in"], ["b", "an"], ["r", "ather"], ["chn", "ology"], ["平方", "公里"], ["景", "观"], ["▁Pl", "ay"], ["ri", "ze"], ["▁f", "ellow"], ["▁inc", "hes"], ["结果", "表明"], ["v", "oc"], ["▁s", "ick"], ["▁agricult", "ural"], ["▁inf", "ected"], ["▁vess", "els"], ["的", "话"], ["索", "引"], ["战略", "性"], ["陕", "西"], ["来源", "于"], ["▁creat", "ures"], ["成", "都"], ["▁ass", "istance"], ["▁instruct", "ions"], ["绘", "画"], ["作用", "的"], ["也", "能"], ["服", "務"], ["▁le", "af"], ["▁architect", "ure"], ["▁farm", "ers"], ["▁s", "end"], ["▁w", "ire"], ["▁gener", "ated"], ["▁w", "ave"], ["▁organ", "ized"], ["一", "家"], ["春", "秋"], ["源", "头"], ["发布", "的"], ["ric", "ts"], ["欧", "元"], ["ab", "ul"], ["ro", "vers"], ["▁miss", "ing"], ["境", "外"], ["资本", "市场"], ["动", "员"], ["ylvan", "ia"], ["H", "el"], ["Bl", "ack"], ["v", "ity"], ["愿", "意"], ["立", "体"], ["▁in", "ject"], ["D", "id"], ["es", "ter"], ["在此", "基础上"], ["万", "亿元"], ["]", "。"], ["▁eng", "aging"], [")", "("], ["▁pol", "ice"], ["▁ar", "my"], ["M", "R"], ["在", "美国"], ["▁un", "iversity"], ["▁sent", "ence"], ["越", "大"], ["▁per", "haps"], ["阻", "止"], ["▁p", "overty"], ["▁neighbor", "hood"], ["▁", "ic"], ["文", "书"], ["原", "有"], ["期", "待"], ["▁crop", "s"], ["▁bl", "ocks"], ["发", "动"], ["演", "进"], ["▁protect", "ed"], ["發", "現"], ["在", "对"], ["▁st", "yles"], ["之", "上"], ["▁the", "rm"], ["▁rat", "io"], ["缓", "慢"], ["▁", ":"], ["▁t", "all"], ["无", "需"], ["oles", "ter"], ["c", "hen"], ["▁P", "ost"], ["人们", "的"], ["排", "列"], ["省", "份"], ["心", "血管"], ["am", "ps"], ["导致", "的"], ["基本", "的"], ["成", "員"], ["]", "("], ["▁lar", "gely"], ["介", "入"], ["]", ",▁"], ["▁schol", "ars"], ["▁Olymp", "ics"], ["无", "形"], ["负", "荷"], ["真正", "的"], ["周", "年"], ["及", "其他"], ["▁over", "l"], ["界", "的"], ["▁recogn", "ition"], ["發", "行"], ["j", "i"], ["og", "rap"], ["▁breat", "h"], ["M", "in"], ["▁def", "ine"], ["or", "ous"], ["▁bound", "aries"], ["▁reg", "ulations"], ["▁elect", "ronic"], ["▁Cont", "rol"], ["▁pos", "itions"], ["▁dist", "ingu"], ["最", "多"], ["习", "题"], ["保", "健"], ["Cal", "ifornia"], ["▁sk", "ill"], ["ut", "er"], ["恶", "意"], ["前", "期"], ["对", "手"], ["▁c", "up"], ["所", "未"], ["薄", "弱"], ["每", "次"], ["奥", "林匹克"], ["as", "er"], ["抵", "抗"], ["病", "原"], ["▁express", "ed"], ["▁author", "ity"], ["▁inf", "rastructure"], ["▁administ", "ration"], ["▁every", "day"], ["基本", "上"], ["能够", "在"], ["获得", "的"], ["thes", "is"], ["sh", "ow"], ["农", "药"], ["▁agre", "ed"], ["Follow", "ing"], ["▁H", "uman"], ["ir", "us"], ["L", "ife"], ["▁sh", "ips"], ["荧", "光"], ["高", "考"], ["新", "加坡"], ["ost", "on"], ["▁herit", "age"], ["表", "征"], ["法律", "规定"], ["草", "案"], ["但", "其"], ["奖", "励"], ["严", "峻"], ["湖", "北"], ["com", "ing"], ["▁mat", "ters"], ["▁suc", "ceed"], ["老", "年人"], ["较", "强的"], ["▁pr", "ison"], ["▁detail", "ed"], ["弥", "补"], ["▁in", "ner"], ["▁pro", "port"], ["S", "ch"], ["经历", "了"], ["会", "上"], ["磁", "场"], ["黄", "金"], ["ad", "ium"], ["▁fac", "ing"], ["近", "期"], ["▁P", "o"], ["▁mass", "ive"], ["▁L", "ine"], ["本", "国"], ["党", "史"], ["两", "国"], ["▁F", "e"], ["▁feature", "d"], ["遥", "感"], ["ura", "cy"], ["at", "re"], ["国", "土"], ["储", "存"], ["▁custom", "ers"], ["th", "ose"], ["e", "ffect"], ["出", "售"], ["▁V", "ol"], ["▁div", "ision"], ["年", "起"], ["契", "约"], ["中国", "式"], ["▁cou", "ple"], ["ir", "al"], ["▁p", "ig"], ["D", "F"], ["▁p", "it"], ["台", "北"], ["流", "感"], ["资产", "的"], ["▁sequ", "ence"], ["▁view", "s"], ["在", "实际"], ["ra", "ce"], ["▁F", "ood"], ["特殊", "的"], ["oc", "yt"], ["▁t", "ro"], ["高", "压"], ["国际", "化"], ["ival", "ent"], ["▁entire", "ly"], ["广", "义"], ["▁ast", "ron"], ["cons", "ider"], ["完成", "了"], ["▁inst", "ruction"], ["▁h", "abits"], ["ffic", "ial"], ["永", "远"], ["D", "em"], ["残", "疾"], ["om", "ething"], ["建立", "起"], ["双", "向"], ["I", "dent"], ["偏", "差"], ["的", "条件"], ["作出", "了"], ["▁vari", "ables"], ["▁man", "ip"], ["▁strugg", "le"], ["h", "y"], ["专业", "的"], ["m", "ade"], ["ex", "p"], ["▁sold", "iers"], ["On", "ly"], ["随", "时"], ["元", "年"], ["g", "iving"], ["ide", "os"], ["打", "开"], ["美", "学"], ["▁n", "aturally"], ["▁administ", "r"], ["▁Ch", "icago"], ["称", "之为"], ["▁ind", "igenous"], ["草", "原"], ["▁dep", "artment"], ["▁s", "ell"], ["着", "重"], ["学生", "学习"], ["▁f", "ly"], ["科", "院"], ["h", "us"], ["oc", "ation"], ["In", "c"], ["an", "es"], ["▁we", "ap"], ["▁control", "s"], ["▁mole", "cular"], ["ip", "al"], ["▁b", "ones"], ["▁con", "ventional"], ["▁k", "it"], ["le", "ments"], ["▁n", "arrow"], ["智能", "制造"], ["▁B", "ank"], ["Th", "ough"], ["▁att", "end"], ["os", "ite"], ["工", "会"], ["战", "役"], ["关", "闭"], ["▁mill", "ions"], ["▁pric", "es"], ["很", "好"], ["▁f", "ell"], ["▁st", "reet"], ["语", "音"], ["基", "督"], ["是", "实现"], ["带", "宽"], ["本", "案"], ["突", "发"], ["要", "坚持"], ["IN", "G"], ["在", "这一"], ["▁int", "ers"], ["k", "g"], ["细", "节"], ["授", "予"], ["和", "数据"], ["提", "到"], ["▁call", "s"], ["▁Med", "ical"], ["▁W", "ith"], ["▁answ", "ers"], ["近", "日"], ["评", "审"], ["科学发展", "观"], ["水", "资源"], ["▁s", "ections"], ["▁M", "er"], ["保护", "的"], ["研究", "发现"], ["▁n", "urs"], ["B", "et"], ["▁a", "f"], ["C", "B"], ["重要的", "作用"], ["与", "之"], ["动力", "学"], ["人类", "的"], ["▁n", "ine"], ["合", "约"], ["资", "助"], ["An", "y"], ["ang", "er"], ["▁comprehens", "ive"], ["g", "ers"], ["是", "因为"], ["势", "力"], ["和", "创新"], ["教师", "在"], ["▁ac", "know"], ["is", "k"], ["▁sh", "ot"], ["▁apprec", "iate"], ["改变", "了"], ["▁invest", "ment"], ["▁draw", "ing"], ["初", "心"], ["会", "有"], ["做", "了"], ["en", "cing"], ["▁c", "overs"], ["k", "l"], ["▁des", "ired"], ["书", "法"], ["in", "ning"], ["月", "份"], ["C", "lick"], ["▁su", "fficient"], ["▁few", "er"], ["▁v", "ibr"], ["ot", "ype"], ["新", "华"], ["摘", "要"], ["第三", "人"], ["▁rev", "olution"], ["▁en", "em"], ["form", "ing"], ["▁W", "ork"], ["增值", "税"], ["▁cut", "ting"], ["ast", "ers"], ["O", "pen"], ["在", "一"], ["▁cons", "ult"], ["▁s", "ector"], ["要", "以"], ["与", "管理"], ["的", "网络"], ["▁feed", "back"], ["x", "ford"], ["▁seem", "ed"], ["▁serv", "ing"], ["col", "or"], ["志", "愿"], ["抗", "战"], ["▁tr", "ials"], ["▁conf", "ir"], ["Ex", "amples"], ["▁j", "ump"], ["▁J", "ud"], ["阶", "层"], ["君", "主"], ["▁circum", "stances"], ["▁int", "ake"], ["▁st", "ored"], ["v", "a"], ["ist", "ers"], ["所需", "的"], ["▁swe", "et"], ["R", "ev"], ["▁B", "udd"], ["▁gl", "uc"], ["f", "in"], ["▁represent", "ation"], ["r", "ument"], ["▁sim", "pl"], ["參考", "文獻"], ["▁r", "ub"], ["法律", "的"], ["改", "为"], ["▁convers", "ation"], ["产", "阶级"], ["▁m", "obile"], ["责任", "的"], ["热", "情"], ["结", "核"], ["和", "文化"], ["itud", "es"], ["▁dom", "in"], ["分辨", "率"], ["本", "人"], ["act", "ion"], ["▁B", "ill"], ["▁str", "ing"], ["▁Cent", "re"], ["▁sim", "ultane"], ["▁sc", "hem"], ["瓶", "颈"], ["▁k", "ill"], ["毫", "米"], ["▁success", "fully"], ["还", "能"], ["▁som", "ew"], ["t", "w"], ["全", "身"], ["发挥", "了"], ["▁inst", "rument"], ["▁st", "ands"], ["我", "的"], ["olester", "ol"], ["▁cent", "re"], ["▁f", "old"], ["▁b", "ond"], ["有", "益"], ["里", "的"], ["▁mon", "itor"], ["ind", "s"], ["▁me", "als"], ["进程", "中"], ["受", "理"], ["G", "eorge"], ["共产", "主义"], ["F", "L"], ["壮", "大"], ["变", "为"], ["▁p", "aid"], ["Mean", "while"], ["▁al", "ter"], ["格", "尔"], ["各", "族"], ["甲", "基"], ["已", "被"], ["对", "企业"], ["M", "arch"], ["▁surv", "ive"], ["▁ra", "ise"], ["影响", "的"], ["olit", "ical"], ["ac", "hers"], ["有", "望"], ["▁expl", "an"], ["鐵", "路"], ["al", "i"], ["实", "证"], ["极", "其"], ["Res", "ear"], ["▁evalu", "ate"], ["侦", "查"], ["过", "剩"], ["著作", "权"], ["V", "I"], ["▁co", "ff"], ["高等", "学校"], ["小", "行星"], ["▁lat", "est"], ["优", "良"], ["祖", "国"], ["运动", "的"], ["▁suff", "ering"], ["▁te", "en"], ["辅", "导"], ["紧", "张"], ["管理", "制度"], ["▁phot", "os"], ["映", "射"], ["▁v", "en"], ["▁transport", "ation"], ["\"▁", "|▁"], ["牺", "牲"], ["摩", "擦"], ["r", "ons"], ["▁eas", "tern"], ["om", "ic"], ["▁claim", "s"], ["超", "级"], ["▁reg", "ul"], ["▁b", "le"], ["▁m", "igr"], ["▁br", "ings"], ["稱", "為"], ["提", "倡"], ["▁prevent", "ion"], ["▁end", "ed"], ["重", "构"], ["ib", "l"], ["分", "组"], ["▁d", "ys"], ["M", "at"], ["u", "is"], ["较", "小"], ["▁m", "amm"], ["東", "京"], ["ns", "ylvania"], ["管理", "系统"], ["▁J", "ust"], ["▁en", "ds"], ["湿", "地"], ["基础设施", "建设"], ["▁t", "ur"], ["▁do", "or"], ["▁F", "lorida"], ["st", "ud"], ["▁no", "ise"], ["▁pers", "ist"], ["互", "补"], ["有关", "部门"], ["的", "世界"], ["▁b", "ill"], ["▁beaut", "y"], ["ich", "igan"], ["加", "深"], ["不确定", "性"], ["ro", "at"], ["涉及", "到"], ["中", "医"], ["的", "支持"], ["▁G", "ard"], ["te", "en"], ["Un", "fortunately"], ["接", "种"], ["▁ext", "ensive"], ["一", "套"], ["S", "ur"], ["▁pret", "ty"], ["▁B", "ig"], ["丝", "绸"], ["相", "继"], ["人们", "对"], ["术", "语"], ["签", "署"], ["实现", "的"], ["▁S", "qu"], ["▁s", "ed"], ["染色", "体"], ["▁us", "age"], ["发", "动机"], ["注意", "的是"], ["du", "e"], ["▁cl", "oud"], ["的", "观点"], ["还", "没有"], ["ellect", "ual"], ["最", "後"], ["旋", "转"], ["▁N", "ations"], ["it", "ative"], ["多样", "化"], ["所谓", "的"], ["▁expect", "ations"], ["▁B", "razil"], ["▁react", "ions"], ["就", "有"], ["并发", "症"], ["顺", "应"], ["F", "ind"], ["北", "部"], ["Comm", "un"], ["▁she", "ll"], ["▁agricult", "ure"], ["选", "取"], ["对象", "的"], ["w", "ould"], ["照", "片"], ["全面", "推进"], ["派", "遣"], ["ph", "one"], ["期", "間"], ["▁del", "iv"], ["零", "件"], ["▁I", "rish"], ["▁En", "ergy"], ["▁or", "g"], ["解决", "问题的"], ["境", "界"], ["b", "ox"], ["at", "us"], ["冷", "却"], ["是", "为"], ["▁pro", "pos"], ["▁hor", "iz"], ["▁br", "and"], ["con", "nect"], ["质", "的"], ["\"▁", "–▁"], ["▁p", "ray"], ["▁descri", "bes"], ["▁P", "eter"], ["管", "控"], ["f", "ts"], ["▁Sec", "ond"], ["▁(", "\""], ["▁rem", "ark"], ["代", "价"], ["革命", "的"], ["唯物", "主义"], ["公有", "制"], ["▁Ar", "ts"], [")", ";"], ["法", "庭"], ["发展的", "重要"], ["▁th", "orough"], ["l", "if"], ["iv", "ated"], ["▁l", "ymph"], ["O", "rig"], ["在", "该"], ["▁medic", "ations"], ["il", "ly"], ["国际", "贸易"], ["om", "ach"], ["▁M", "el"], ["摆", "脱"], ["▁b", "order"], ["▁focus", "es"], ["b", "a"], ["▁B", "ur"], ["建立", "的"], ["教育", "和"], ["阳", "性"], ["▁K", "e"], ["▁polit", "ics"], ["▁under", "stood"], ["这", "意味着"], ["▁hundred", "s"], ["l", "aw"], ["▁deep", "ly"], ["p", "age"], ["时", "效"], ["回", "应"], ["约", "为"], ["选", "用"], ["opp", "ing"], ["▁vers", "ions"], ["es", "h"], ["ul", "pt"], ["▁Russ", "ia"], ["▁achie", "ved"], ["作为", "一个"], ["▁St", "r"], ["▁H", "aw"], ["U", "R"], ["▁s", "od"], ["▁d", "ance"], ["去", "年"], ["uck", "y"], ["等", "技术"], ["iz", "er"], ["▁Bo", "ard"], ["▁Rev", "olution"], ["ri", "z"], ["ol", "i"], ["男", "性"], ["致", "使"], ["Ab", "out"], ["d", "a"], ["物", "价"], ["宏观", "经济"], ["ans", "as"], ["▁main", "tenance"], ["诸", "如"], ["迭", "代"], ["▁b", "ot"], ["▁man", "ner"], ["▁rep", "rodu"], ["体", "会"], ["不得", "不"], ["的", "非"], ["us", "ual"], ["▁conf", "idence"], ["E", "A"], ["▁A", "ust"], ["▁ad", "opt"], ["\"", ";"], ["qu", "ality"], [")", "("], ["t", "est"], ["的", "质量"], ["环境", "下"], ["温", "室"], ["巴", "士"], ["实", "物"], ["com", "fort"], ["ir", "atory"], ["平", "稳"], ["隧", "道"], ["救", "济"], ["本", "专业"], ["▁dom", "estic"], ["ios", "ity"], ["c", "in"], ["▁S", "aint"], ["▁W", "ood"], ["h", "aving"], ["电", "动"], ["所有", "制"], ["和", "企业"], ["优秀", "传统文化"], ["▁", "/"], ["东", "部"], ["积", "分"], ["世", "紀"], ["▁p", "ull"], ["et", "ts"], ["▁p", "ump"], ["ec", "ess"], ["▁par", "alle"], ["储", "能"], ["影响", "力"], ["▁supp", "orts"], ["世界", "大"], ["小", "型"], ["a", "ired"], ["决", "定的"], ["▁leg", "s"], ["先", "行"], ["B", "i"], ["▁m", "aps"], ["abul", "ary"], ["人", "心"], ["N", "D"], ["▁laun", "ched"], ["st", "ract"], ["▁O", "cean"], ["▁cam", "era"], ["M", "en"], ["存在", "于"], ["ó", "n"], ["私", "有"], ["▁n", "it"], ["退", "休"], ["cri", "bed"], ["▁dat", "abase"], ["▁ste", "el"], ["两", "次"], ["等", "地"], ["日", "在"], ["▁N", "ot"], ["实际", "情况"], ["▁trans", "mission"], ["▁st", "re"], ["▁L", "ove"], ["碰", "撞"], ["焦", "点"], ["创", "立"], ["海", "上"], ["随", "之"], ["红", "外"], ["奋斗", "目标"], ["ins", "on"], ["E", "urop"], ["▁m", "oon"], ["▁stand", "ing"], ["▁govern", "ments"], ["制", "订"], ["集中", "在"], ["桥", "梁"], ["B", "ack"], ["▁M", "ass"], ["▁ad", "equ"], ["▁fight", "ing"], ["▁re", "ly"], ["混", "凝"], ["分析", "了"], ["▁ab", "norm"], ["▁tiss", "ues"], ["因", "果"], ["▁down", "load"], ["ident", "ial"], ["ru", "e"], ["使", "之"], ["兼", "顾"], ["要", "点"], ["\u0007", "\u0005"], ["u", "ce"], ["为", "一"], ["著名", "的"], ["eorg", "ia"], ["▁sh", "ift"], ["”", ",▁"], ["G", "reen"], ["份", "额"], ["西", "安"], ["▁st", "ock"], ["▁disc", "ipl"], ["O", "ut"], ["多", "项"], ["▁em", "ail"], ["▁part", "ner"], ["op", "l"], ["名", "字"], ["事", "物的"], ["ar", "ant"], ["看", "法"], ["▁sur", "faces"], ["国家", "级"], ["▁ag", "es"], ["行为", "人"], ["管理", "者"], ["▁count", "y"], ["▁F", "ort"], ["▁but", "ter"], ["op", "ic"], ["▁fund", "ing"], ["沿", "海"], ["需要", "在"], ["▁enc", "ount"], ["氨", "基"], ["ab", "ling"], ["为代表", "的"], ["天", "地"], ["▁care", "ful"], ["▁subst", "ance"], ["▁rest", "rict"], ["我国", "经济"], ["是", "如何"], ["Resear", "chers"], ["滥", "用"], ["▁al", "ign"], ["客户", "端"], ["▁vari", "able"], ["理", "工"], ["ri", "e"], ["ual", "ity"], ["印", "刷"], ["▁improve", "ment"], ["中", "美"], ["▁cour", "ses"], ["▁aff", "ord"], ["恐", "怖"], ["显", "得"], ["专业", "化"], ["克", "斯"], ["AP", "I"], ["後", "來"], ["ov", "ascular"], ["”", ".▁"], ["▁do", "ctors"], ["隐", "患"], ["和", "新"], ["▁l", "es"], ["▁heav", "ily"], ["▁repe", "ated"], ["养", "殖"], ["玉", "米"], ["城市", "的"], ["▁per", "ce"], ["▁▁", "\""], ["▁E", "astern"], ["会", "在"], ["紧", "急"], ["b", "ury"], ["▁opt", "imal"], ["eng", "er"], ["乡", "镇"], ["滞", "后"], ["con", "f"], ["通", "路"], ["w", "orld"], ["▁elect", "ron"], ["b", "u"], ["▁discuss", "ions"], ["▁eng", "aged"], ["▁other", "wise"], ["健康", "发展"], ["历史", "性"], ["▁C", "ross"], ["L", "ater"], ["”", "▁("], ["with", "out"], ["为", "学生"], ["贯彻", "落实"], ["人与", "自然"], ["▁S", "il"], ["ee", "k"], ["Th", "omas"], ["必", "需"], ["▁analy", "ze"], ["▁f", "ill"], ["here", "nt"], ["性", "问题"], ["侧", "重"], ["将", "军"], ["下", "游"], ["审", "议"], ["职", "权"], ["旗", "帜"], ["电", "商"], ["理论", "上"], ["▁see", "ing"], ["▁t", "ropical"], ["erv", "ative"], ["标志", "着"], ["▁discuss", "ed"], ["纷", "纷"], ["▁prom", "inent"], ["意义", "上的"], ["疾病", "的"], ["活", "動"], ["▁bud", "get"], ["▁form", "al"], ["人", "权"], ["总", "理"], ["的新", "型"], ["▁as", "king"], ["投", "票"], ["▁breat", "hing"], ["孪", "生"], ["合", "金"], ["的", "创新"], ["▁p", "ool"], ["st", "ra"], ["ab", "eth"], ["ask", "a"], ["城市", "化"], ["韓", "國"], ["▁adop", "ted"], ["教", "科"], ["▁tri", "p"], ["]", ".▁"], ["▁ins", "ulin"], ["og", "s"], ["中", "药"], ["突", "然"], ["▁Con", "f"], ["▁manag", "ing"], ["易", "于"], ["pr", "ing"], ["有", "必要"], ["推动", "了"], ["固定", "资产"], ["海", "关"], ["中", "毒"], ["m", "ary"], ["▁comfort", "able"], ["am", "i"], ["cre", "te"], ["▁▁", "||▁"], ["人", "人"], ["▁Des", "ign"], ["▁great", "est"], ["▁pre", "val"], ["▁M", "ichael"], ["农民", "工"], ["义务", "教育"], ["衍", "生"], ["▁new", "ly"], ["追", "溯"], ["▁L", "abor"], ["▁Sum", "mer"], ["h", "ost"], ["▁dam", "aged"], ["et", "ing"], ["▁ext", "ent"], ["启", "示"], ["也", "没有"], ["▁a", "head"], ["▁categ", "ories"], ["ut", "en"], ["的", "保护"], ["长", "征"], ["的", "活动"], ["使用", "权"], ["资本", "的"], ["▁inv", "ent"], ["可以", "看出"], ["▁circ", "uit"], ["m", "ond"], ["▁ent", "ry"], ["之", "大"], ["是", "将"], ["科学", "研究"], ["▁c", "row"], ["sm", "all"], ["▁O", "b"], ["管理", "人员"], ["留", "在"], ["▁N", "avy"], ["▁s", "ales"], ["▁sus", "p"], ["▁ult", "imately"], ["很大", "程度上"], ["给", "出"], ["▁L", "ouis"], ["u", "ber"], ["首", "都"], ["R", "obert"], ["▁decre", "ased"], ["服", "装"], ["的", "因素"], ["大学", "的"], ["id", "ity"], ["▁st", "ated"], ["▁dec", "or"], ["唐", "朝"], ["的一个", "重要"], ["借", "贷"], ["养老", "保险"], ["平", "成"], ["學", "家"], ["并", "行"], ["可以", "将"], ["影", "響"], ["▁m", "ent"], ["▁agre", "ement"], ["▁s", "an"], ["s", "l"], ["处", "的"], ["是", "国家"], ["ar", "ia"], ["胰", "岛"], ["受", "损"], ["监督", "管理"], ["▁T", "om"], ["▁accept", "ed"], ["▁Lear", "ning"], ["注", "明"], ["加", "重"], ["从", "根本上"], ["商业", "秘密"], ["机", "动"], ["▁P", "ers"], ["▁histor", "ic"], ["▁arg", "ument"], ["▁n", "erve"], ["M", "et"], ["杆", "菌"], ["c", "ount"], ["党", "组织"], ["发", "掘"], ["▁gu", "ess"], ["二", "维"], ["保", "守"], ["▁acc", "ounts"], ["▁St", "ation"], ["%", ")"], ["s", "chool"], ["▁manufact", "uring"], ["劳动", "关系"], ["▁med", "ication"], ["C", "are"], ["ress", "ing"], ["▁", "="], ["▁in", "formed"], ["ov", "a"], ["p", "rom"], ["ak", "a"], ["的", "产品"], ["企业", "家"], ["他", "认为"], ["an", "other"], ["▁magn", "etic"], [",", """], ["G", "S"], ["ach", "us"], ["▁(", "▁"], ["▁them", "e"], ["ist", "ical"], ["eut", "ic"], ["感", "情"], ["▁sub", "sequent"], ["加", "热"], ["制", "品"], ["ab", "el"], ["N", "et"], ["%", ";"], ["共", "赢"], ["作", "风"], ["种", "种"], ["领导", "干部"], ["水平", "和"], ["▁address", "ing"], ["ok", "en"], ["ail", "ed"], ["无", "产阶级"], ["▁F", "re"], ["民", "俗"], ["生产", "要素"], ["文物", "保护"], ["政策", "和"], ["ens", "uring"], ["溶", "解"], ["ful", "ness"], ["Se", "lect"], ["▁list", "ening"], ["普", "查"], ["为", "其"], ["▁symb", "ols"], ["_", "{"], ["▁cor", "por"], ["o", "ices"], ["▁benef", "icial"], ["的", "可能性"], ["▁er", "ror"], ["▁B", "attle"], ["▁mar", "riage"], ["光", "子"], ["造", "型"], ["横", "向"], ["B", "ased"], ["▁c", "ort"], ["直", "线"], ["▁sp", "ort"], ["▁a", "w"], ["▁four", "th"], ["▁ad", "ap"], ["被告", "人"], ["脱贫", "攻坚"], ["▁g", "al"], ["▁Sc", "iences"], ["▁f", "ract"], ["▁emer", "ged"], ["中", "部"], ["A", "ccess"], ["Gen", "eral"], ["▁rh", "yth"], ["▁r", "ig"], ["▁im", "aging"], ["t", "aking"], ["▁hold", "s"], ["▁me", "al"], ["en", "h"], ["监", "视"], ["▁pass", "ion"], ["中", "最"], ["▁In", "formation"], ["先进", "的"], ["c", "over"], ["▁construct", "ed"], ["▁l", "ake"], ["科", "目"], ["复杂", "性"], ["的", "数量"], ["催化", "剂"], ["▁", "。"], ["便", "是"], ["定", "制"], ["疗", "效"], ["与", "应用"], ["▁M", "o"], ["排", "序"], ["D", "is"], ["▁for", "get"], ["T", "ogether"], ["扶", "持"], ["实", "事"], ["这", "时"], ["▁cor", "rel"], ["▁offic", "ials"], ["▁dynam", "ics"], ["▁eng", "agement"], ["ex", "per"], ["Y", "et"], ["▁my", "th"], ["c", "or"], ["泡", "沫"], ["业", "绩"], ["不断", "地"], ["社会主义核心", "价值观"], ["测", "序"], ["▁r", "ank"], ["▁", "{"], ["很", "好的"], ["▁bro", "ken"], ["范", "式"], ["▁B", "ible"], ["以", "其"], ["宝", "贵"], ["▁neigh", "b"], ["被认为", "是"], ["ro", "oms"], ["p", "ower"], ["天然", "气"], ["▁l", "atter"], ["聯", "盟"], ["▁epis", "ode"], ["rim", "inal"], [";", "▁"], ["界", "限"], ["N", "ote"], ["▁acc", "um"], ["▁phot", "ograph"], ["G", "ood"], ["L", "ondon"], ["ol", "k"], ["▁antib", "iot"], ["中", "原"], ["▁town", "s"], ["密", "钥"], ["▁un", "iverse"], ["▁dep", "ends"], ["战", "场"], ["row", "ing"], ["▁to", "ler"], ["er", "ry"], ["▁rail", "way"], ["▁trend", "s"], ["处", "在"], ["奥林匹克", "运动会"], ["est", "ab"], ["法", "國"], ["▁mar", "ine"], ["R", "uss"], ["晚", "期"], ["Con", "clusion"], ["im", "m"], ["考", "查"], ["p", "read"], ["▁sess", "ions"], ["▁Go", "ogle"], ["救", "助"], ["取得", "的"], ["p", "ost"], ["▁T", "w"], ["免", "费"], ["wh", "ose"], ["▁territ", "ory"], ["le", "aving"], ["man", "n"], ["▁en", "ables"], ["▁opp", "osite"], ["▁liter", "ary"], ["造成", "了"], [";", "("], ["▁elect", "ro"], ["控制", "的"], ["▁H", "ome"], ["▁hon", "or"], ["▁R", "ights"], ["就", "必须"], ["▁s", "ke"], ["叫", "做"], ["▁resil", "ience"], ["it", "le"], ["就", "像"], ["▁n", "om"], ["可视", "化"], ["越", "南"], ["▁d", "ental"], ["gen", "er"], ["ac", "ent"], ["af", "e"], ["谋", "划"], ["最大", "限度"], ["社会", "经济"], ["分", "级"], ["▁know", "s"], ["▁suppl", "ies"], ["成为", "了"], ["ot", "ion"], ["in", "v"], ["明确", "提出"], ["的", "培养"], ["实施", "的"], ["▁fail", "ed"], ["▁L", "ong"], ["▁in", "n"], ["ra", "ys"], ["ides", "pread"], ["S", "ever"], ["西", "亚"], ["前", "列"], ["鉴", "于"], ["议", "会"], ["▁diagn", "osed"], ["▁produ", "cing"], ["ect", "s"], ["▁har", "vest"], ["两", "类"], ["▁influ", "enced"], ["▁muse", "um"], ["▁U", "s"], ["出", "現"], ["st", "art"], ["指", "的是"], ["▁fram", "ework"], ["st", "s"], ["▁a", "er"], ["▁P", "eople"], ["ograph", "ical"], ["▁cent", "ers"], ["ac", "cess"], ["形", "的"], ["宣", "告"], ["从而", "使"], ["公", "务"], ["关", "税"], ["▁ob", "vious"], ["▁different", "ly"], ["T", "ry"], ["娱", "乐"], ["▁ch", "ief"], ["▁vulner", "able"], ["▁insect", "s"], ["不利", "于"], ["窗", "口"], ["ult", "y"], ["▁M", "ars"], ["票", "据"], ["为主", "的"], ["复", "议"], ["市场", "主体"], ["奥", "运"], ["等", "待"], ["spec", "ific"], ["▁de", "but"], ["▁observ", "ations"], ["▁fab", "ric"], ["ov", "al"], ["▁As", "ian"], ["▁deliver", "y"], ["sc", "ale"], ["▁b", "oy"], ["太平", "洋"], ["主管", "部门"], ["硬", "化"], ["w", "orking"], ["▁E", "nd"], ["▁att", "ached"], ["最", "优"], ["ic", "ide"], ["--------", "----"], ["▁independ", "ence"], ["▁h", "tt"], ["▁acc", "el"], ["▁cons", "cious"], ["▁cy", "cl"], ["a", "is"], ["▁B", "i"], ["竞", "赛"], ["完", "备"], ["帮助", "学生"], ["▁habit", "ats"], ["混凝", "土"], ["▁societ", "al"], ["▁cris", "is"], ["机", "体"], ["ip", "her"], ["导致", "了"], ["▁dec", "line"], ["▁pr", "on"], ["▁aim", "s"], ["▁det", "ection"], ["G", "E"], ["侵", "略"], ["的", "系统"], ["P", "lease"], ["很", "容易"], ["m", "g"], ["our", "se"], ["▁Stud", "y"], ["l", "ights"], ["▁w", "itness"], ["▁broad", "er"], ["▁eval", "uation"], ["and", "on"], ["▁NA", "SA"], ["w", "ing"], ["▁subst", "ances"], ["磷", "酸"], ["▁Is", "lands"], ["▁im", "plications"], ["根", "源"], ["的", "任务"], ["唐", "代"], ["方式", "和"], ["跨", "国"], ["▁-", "▁▁-▁"], ["▁ra", "w"], ["▁redu", "ces"], ["▁col", "umn"], ["▁min", "imum"], ["Can", "ada"], ["▁d", "ust"], ["理解", "和"], ["生产", "和"], ["▁An", "n"], ["的", "利益"], ["▁exp", "ensive"], ["拉", "斯"], ["S", "l"], ["极大", "地"], ["▁C", "a"], ["ol", "ism"], ["▁Sw", "ed"], ["achus", "etts"], ["这", "也"], ["反", "而"], ["实践", "活动"], ["Cl", "ass"], ["w", "orth"], ["▁int", "ric"], ["潮", "流"], ["▁Ad", "minist"], ["▁bo", "ost"], ["iv", "ating"], ["▁v", "ote"], ["物质", "的"], ["it", "ter"], ["南", "部"], ["还", "会"], ["▁Christ", "mas"], ["▁happ", "ening"], ["▁B", "est"], ["ino", "is"], ["书", "写"], ["N", "on"], ["任", "命"], ["即", "将"], ["物", "资"], ["原", "材料"], ["▁", "·▁"], ["▁z", "one"], ["喜", "欢"], ["E", "p"], ["un", "ning"], ["▁comp", "are"], ["I", "ON"], ["词", "汇"], ["▁implement", "ation"], ["阐", "释"], ["优", "越"], ["聯", "賽"], ["de", "velop"], ["向", "量"], ["▁off", "ering"], ["▁direct", "ed"], ["▁l", "ip"], ["出", "租"], ["博", "弈"], ["M", "ichael"], ["装", "饰"], ["▁D", "ev"], ["▁st", "ability"], ["▁M", "oon"], ["前", "所未"], ["C", "am"], [".", "["], ["▁ph", "osph"], ["em", "ia"], ["▁G", "al"], ["e", "en"], ["▁H", "ow"], ["多", "边"], ["崛", "起"], ["▁result", "ed"], ["iet", "ies"], ["組", "織"], ["amb", "ig"], ["实现", "对"], ["仍", "有"], ["端", "口"], ["es", "ity"], ["▁app", "arent"], ["澳", "門"], ["T", "ax"], ["数", "量的"], ["螺", "旋"], ["虚", "假"], ["实践", "的"], ["支", "柱"], ["适", "宜"], ["手", "续"], ["的", "速度"], ["可以", "从"], ["S", "R"], ["ra", "cy"], ["▁O", "per"], ["▁fl", "av"], ["prov", "iding"], ["不", "当"], ["自", "贸"], ["从", "业"], ["新中国", "成立"], ["▁Ital", "y"], ["▁y", "ield"], ["日", "至"], ["来", "讲"], ["可", "通过"], ["▁B", "re"], ["开发", "的"], ["不", "符合"], ["經", "濟"], ["风险", "管理"], ["合作", "社"], ["技术", "在"], ["数据", "集"], ["▁second", "s"], ["ch", "o"], ["▁res", "olution"], ["说", "法"], ["▁rem", "ote"], ["字", "母"], ["气", "管"], ["进", "攻"], ["O", "P"], ["▁sun", "light"], ["完整", "性"], ["氨", "酸"], ["▁present", "ation"], ["▁A", "v"], ["▁ag", "ency"], ["▁mov", "es"], ["术", "后"], ["网", "膜"], ["适", "度"], ["澳大利", "亚"], ["▁re", "tain"], ["平", "行"], ["滤", "波"], ["年", "均"], ["▁N", "ative"], ["▁Mus", "lim"], ["▁m", "ild"], ["oc", "key"], ["威", "廉"], ["ang", "le"], ["司法", "解释"], ["核心", "技术"], ["永", "久"], ["He", "alth"], ["的", "状态"], ["▁F", "ederal"], ["不", "论"], ["控制", "系统"], ["的人", "口"], ["▁G", "ood"], ["▁st", "rict"], ["充", "足"], ["▁un", "usual"], ["歌", "手"], ["b", "ro"], ["模", "仿"], ["要", "件"], ["▁L", "anguage"], ["不", "管"], ["辩", "护"], ["直接", "影响"], ["也", "不能"], ["p", "H"], ["▁comm", "ission"], ["▁con", "vey"], ["osp", "it"], ["的", "产生"], ["▁po", "em"], ["▁threat", "s"], ["物理", "学"], ["▁fl", "ag"], ["▁acqu", "ired"], ["的", "方向"], ["海", "军"], ["可以", "用"], ["ir", "th"], ["▁inst", "alled"], ["董事", "会"], ["回", "报"], ["课程", "标准"], ["Un", "like"], ["▁discrim", "ination"], ["应", "在"], ["▁Net", "work"], ["一", "点"], ["移", "民"], ["▁norm", "ally"], ["ie", "val"], ["L", "i"], ["▁res", "on"], ["厂", "商"], ["嫌", "疑"], ["關", "係"], ["▁f", "iber"], ["ple", "te"], ["▁perman", "ent"], ["▁f", "av"], ["▁indic", "ates"], ["ir", "ty"], ["ed", "iate"], ["储", "蓄"], ["不", "高"], ["t", "oo"], ["有", "害"], ["恒", "星"], ["贝", "尔"], ["政治", "人物"], ["▁B", "C"], ["▁S", "ir"], ["▁ch", "rom"], ["▁occ", "asion"], ["城", "区"], ["也", "可能"], ["g", "reen"], ["▁B", "y"], ["▁recept", "or"], ["▁pe", "ak"], ["直", "径"], ["和", "产业"], ["见", "的"], ["▁C", "ur"], ["▁R", "ome"], ["l", "ast"], ["ass", "ion"], ["届", "三"], ["积极", "参与"], ["倡", "议"], ["ribut", "ion"], ["P", "ost"], ["▁organ", "isms"], ["语", "句"], ["per", "ial"], ["名", "稱"], ["处理", "的"], ["f", "ast"], ["ain", "ing"], ["P", "ublic"], ["又", "要"], ["▁ent", "hus"], ["海", "南"], ["足够", "的"], ["是", "基于"], ["还", "包括"], ["秘", "书"], ["▁fe", "els"], ["O", "b"], ["为", "导向"], ["分", "成"], ["▁character", "ized"], ["t", "age"], ["iz", "abeth"], ["et", "ics"], ["羅", "斯"], ["▁I", "ll"], ["▁st", "able"], ["睡", "眠"], ["▁creat", "ivity"], ["▁Angel", "es"], ["lement", "ary"], ["规", "制"], ["入", "手"], ["经济", "效益"], ["中央", "银行"], ["人", "之"], ["▁enc", "ounter"], ["▁municip", "ality"], ["▁pl", "anned"], ["T", "E"], ["o", "T"], ["G", "ra"], ["▁ex", "ists"], ["起", "着"], ["的大", "小"], ["Cre", "ate"], ["运", "维"], ["尤", "为"], ["为", "主体"], ["定", "性"], ["▁own", "ed"], ["▁investig", "ate"], ["贵", "族"], [")", ")"], ["列", "宁"], ["c", "ies"], ["respect", "ively"], ["布", "置"], ["制度", "改革"], ["发展", "新"], ["▁tra", "ined"], ["F", "A"], ["▁descri", "ption"], ["▁encourag", "es"], ["某", "某"], ["稳", "步"], ["自由", "贸易"], ["生产", "总"], ["中", "外"], ["d", "ist"], ["▁fund", "s"], ["便", "捷"], ["病", "情"], ["an", "ning"], ["▁corn", "er"], ["为核心的", "党中央"], ["野", "生"], ["▁nuc", "le"], ["▁m", "g"], ["▁imm", "ediate"], ["b", "les"], ["教学", "方法"], ["是", "要"], ["和", "高"], ["社会", "学"], ["▁med", "al"], ["▁O", "f"], ["▁st", "ores"], ["▁perform", "ing"], ["ear", "ly"], ["▁Jew", "s"], ["L", "ong"], ["▁col", "our"], ["▁le", "aving"], ["▁bran", "ch"], ["P", "ol"], ["携", "带"], ["不", "易"], ["仓", "库"], ["L", "P"], ["有效", "性"], ["▁ch", "air"], ["园", "林"], ["▁sh", "all"], ["▁cur", "ren"], ["▁art", "ificial"], ["ar", "ks"], ["这", "两种"], ["达到", "了"], ["这个", "问题"], ["ate", "ver"], ["次", "数"], ["▁Columb", "ia"], ["▁n", "an"], ["体系", "中"], ["▁expl", "ains"], ["▁exam", "ination"], ["▁mat", "rix"], ["▁expl", "oration"], ["▁pu", "zz"], ["▁ch", "annel"], ["as", "ma"], ["明确", "规定"], ["交通", "运输"], ["▁det", "ected"], ["是一", "项"], ["▁tra", "cks"], ["▁ab", "und"], ["▁f", "oster"], ["▁hold", "ing"], ["▁ent", "ered"], ["▁E", "conom"], ["決", "賽"], ["▁comp", "ounds"], ["课程", "的"], ["▁friend", "ly"], ["A", "ugust"], ["攻", "关"], ["副", "主任"], ["收入", "分配"], ["修", "饰"], ["▁coff", "ee"], ["ust", "er"], ["▁industr", "ies"], ["▁suff", "er"], ["b", "ot"], ["富", "有"], ["un", "c"], ["▁p", "apers"], ["象", "征"], ["位", "的"], ["深度", "学习"], ["E", "st"], ["Sever", "al"], ["年", "中国"], ["平方", "米"], ["告", "知"], ["ar", "ity"], ["▁mom", "ents"], ["Pl", "ay"], ["利用", "率"], ["与", "技术"], ["高效", "的"], ["▁cry", "st"], ["德", "國"], ["▁hous", "ing"], ["▁p", "up"], ["▁acc", "uracy"], ["▁cl", "othing"], ["笔者", "认为"], ["原", "来"], ["增", "进"], ["蕴", "含"], ["的", "成本"], ["科技", "成果"], ["多", "年来"], ["\"", "、"], ["▁Rev", "iew"], ["年", "开始"], ["一定", "要"], ["▁S", "ol"], ["年", "级"], ["on", "ym"], ["▁prof", "ile"], ["▁t", "ub"], ["▁", "–"], ["▁v", "ac"], ["▁arr", "ang"], ["拉", "克"], ["▁cont", "rovers"], ["▁Ch", "ildren"], ["数字", "孪生"], ["一", "国"], ["异", "议"], ["杭", "州"], ["p", "y"], ["i", "y"], ["减少", "了"], ["▁she", "et"], ["res", "ulting"], ["▁ent", "ertain"], ["ick", "en"], ["绘", "制"], ["大", "使"], ["的", "对象"], ["▁manag", "er"], ["年", "份"], ["▁rec", "ording"], ["per", "or"], ["流", "入"], ["远", "远"], ["生产", "率"], ["▁reg", "ulation"], ["社", "交"], ["O", "D"], ["ou", "red"], ["▁introdu", "ce"], ["▁wor", "se"], ["▁rep", "air"], ["和", "对"], ["▁res", "erv"], ["G", "reat"], ["▁Sp", "ain"], ["我们", "将"], ["▁affect", "ing"], ["▁reve", "al"], ["▁colle", "agues"], ["M", "art"], ["▁author", "ities"], ["Comm", "on"], ["L", "ook"], [";", "▁("], ["w", "hether"], ["协调", "发展"], ["预", "后"], ["公共", "卫生"], ["质", "疑"], ["▁out", "come"], ["L", "ouis"], ["▁crit", "eria"], ["屬", "於"], ["是", "我们"], ["触", "发"], ["发现", "的"], ["▁Stud", "ies"], ["考", "生"], ["▁shap", "ing"], ["师范", "大学"], ["▁smo", "ke"], ["▁w", "idespread"], ["可能", "的"], ["▁ad", "j"], ["去", "除"], ["▁spl", "it"], ["Che", "ck"], ["▁ac", "ids"], ["▁polit", "ician"], ["▁ag", "ents"], ["▁a", "qu"], ["可", "控"], ["当", "下"], ["▁pow", "ers"], ["▁ro", "of"], ["Through", "out"], ["▁incred", "ible"], ["acks", "on"], ["時", "期"], ["对应", "的"], ["插", "入"], ["必", "将"], ["一", "百"], ["▁Commun", "ity"], ["art", "ers"], ["▁Co", "ast"], ["机", "床"], ["▁cere", "mon"], ["▁rece", "iving"], ["陶", "瓷"], ["的", "指导"], ["▁he", "aling"], ["ur", "ric"], ["B", "o"], ["M", "ary"], ["常", "务"], ["▁destroy", "ed"], ["▁cre", "am"], ["姓", "名"], ["B", "re"], ["▁Atl", "antic"], ["过", "的"], ["P", "V"], ["G", "C"], ["▁mor", "al"], ["ac", "les"], ["兼", "容"], ["局限", "性"], ["不", "在"], ["▁M", "a"], ["▁P", "et"], ["▁ass", "igned"], ["▁rout", "ine"], ["▁simultane", "ously"], ["失", "效"], ["清", "除"], ["wh", "ite"], ["H", "R"], ["▁h", "ole"], ["▁b", "read"], ["du", "le"], ["▁eth", "ical"], ["两", "年"], ["▁s", "ight"], ["蔬", "菜"], ["教", "训"], ["的", "表达"], ["▁sess", "ion"], ["▁aut", "hent"], ["▁sil", "ver"], ["▁labor", "atory"], ["振", "动"], ["处理", "器"], ["br", "id"], ["z", "y"], ["學", "院"], ["▁met", "ers"], ["wh", "y"], ["B", "P"], ["客", "体"], ["▁access", "ible"], ["S", "an"], ["▁po", "etry"], ["▁W", "ales"], ["Ph", "il"], ["▁dep", "os"], ["h", "ma"], ["幼儿", "园"], ["找", "出"], ["了", "一种"], ["▁W", "omen"], ["Sc", "ience"], ["可以", "根据"], ["大力", "发展"], ["▁un", "s"], ["显", "微"], ["▁s", "ought"], ["▁fram", "e"], ["与", "中国"], ["环境", "和"], ["宽", "松"], ["am", "pl"], ["▁C", "reek"], ["H", "C"], ["yd", "r"], ["明", "代"], ["的前提", "下"], ["▁dep", "art"], ["Act", "ivity"], ["▁M", "icro"], ["厚", "的"], ["会", "产生"], ["▁sh", "oot"], ["ann", "els"], ["▁exam", "ined"], ["伊", "斯"], ["句", "话"], ["t", "es"], ["河", "流"], ["▁barri", "ers"], ["维", "生素"], ["壁", "垒"], ["不断", "完善"], ["碳", "中和"], ["Less", "on"], ["电", "荷"], ["▁D", "ou"], ["▁B", "ra"], ["▁re", "form"], ["办", "事"], ["全", "省"], ["在", "社会"], ["新", "一轮"], ["ne", "e"], ["时间", "和"], ["的", "比例"], ["可", "用于"], ["问题", "是"], ["▁W", "orks"], ["▁or", "ient"], ["根", "據"], ["▁R", "h"], ["上", "级"], ["的", "出现"], ["新兴", "产业"], ["教学", "模式"], ["安全", "生产"], ["D", "ist"], ["▁exp", "ansion"], ["▁ag", "encies"], ["未", "知"], ["▁con", "c"], ["em", "ploy"], ["A", "ng"], ["以下", "简称"], ["in", "us"], ["▁expl", "o"], ["▁measure", "ments"], ["的", "重点"], ["!", "\"▁"], ["▁m", "erg"], ["rit", "is"], ["w", "hel"], ["▁param", "eters"], ["▁B", "rown"], ["都", "需要"], ["控", "股"], ["▁oper", "ate"], ["▁visit", "ors"], ["K", "ing"], ["aut", "hor"], ["▁phot", "o"], ["▁stat", "istics"], ["ock", "et"], ["特", "別"], ["▁behavi", "our"], ["am", "ber"], ["ec", "onomic"], ["以", "习近平同志"], ["▁innov", "ation"], ["ot", "ypes"], ["▁Rep", "resent"], ["in", "ical"], ["▁purch", "ase"], ["參", "與"], ["ab", "s"], ["▁mar", "g"], ["▁r", "ivers"], ["▁fem", "ales"], ["为", "中国"], ["修", "养"], ["国", "债"], ["徒", "刑"], ["▁advant", "ages"], ["▁l", "ights"], ["格", "斯"], ["不", "明"], ["St", "art"], ["严格", "的"], ["点", "和"], ["imens", "ional"], ["▁gluc", "ose"], ["它", "在"], ["M", "al"], ["▁b", "io"], ["裁", "定"], ["大", "纲"], ["的", "其他"], ["」", "("], ["在一定", "程度上"], ["目标", "是"], ["▁st", "omach"], ["价值", "链"], ["损害", "赔偿"], ["全面", "深化改革"], ["▁", ">▁"], ["厘", "米"], ["会", "员"], ["▁dra", "wn"], ["过", "滤"], ["ater", "n"], ["M", "ax"], ["多", "层次"], ["文化", "和"], ["▁fer", "til"], ["▁ag", "ree"], ["去", "世"], ["拓", "宽"], ["切", "除"], ["ers", "ey"], ["▁bran", "ches"], ["k", "o"], ["▁ob", "st"], ["合适", "的"], ["v", "ar"], ["ist", "ing"], ["▁cre", "w"], ["▁ad", "oles"], ["控制", "器"], ["k", "er"], ["▁te", "a"], ["▁h", "olid"], ["千", "米"], ["▁B", "ob"], ["nt", "ario"], ["▁prov", "ince"], ["用", "电"], ["精神", "的"], ["多", "年的"], ["at", "ial"], ["▁cl", "ick"], ["▁warm", "ing"], ["ig", "ious"], ["节", "奏"], ["em", "a"], ["资源", "和"], ["▁ep", "id"], ["▁O", "pen"], ["届三", "中全会"], ["中的", "作用"], ["i", "ability"], ["J", "une"], ["ict", "ed"], ["首先", "要"], ["合", "一"], ["下", "一"], ["的", "全"], ["▁he", "m"], ["之", "間"], ["▁D", "isc"], ["▁p", "un"], ["半", "年"], ["先", "天"], ["抑制", "剂"], ["对", "该"], ["▁lim", "its"], ["M", "icro"], ["▁com", "plications"], ["vent", "ually"], ["▁v", "an"], ["▁g", "ently"], ["奠", "定"], ["养", "成"], ["食品", "安全"], ["P", "ort"], ["▁her", "self"], ["▁special", "ized"], ["讲", "授"], ["越来越", "多"], ["求", "是"], ["都", "市"], ["想", "法"], ["it", "o"], ["▁trou", "ble"], ["Ch", "ina"], ["edi", "at"], ["并", "购"], ["文明", "的"], ["▁com", "plicated"], ["學", "生"], ["看", "作"], ["En", "cou"], ["区", "间"], ["石", "墨"], ["毒", "性"], ["全面", "的"], ["里", "斯"], ["的", "优势"], ["CP", "U"], ["▁R", "ichard"], ["ab", "led"], ["承", "受"], ["▁de", "aling"], ["omm", "od"], ["M", "T"], ["▁m", "ood"], ["▁o", "v"], ["与", "时"], ["管", "道"], ["▁cont", "ained"], ["id", "st"], ["▁Ser", "ies"], ["ogen", "ic"], ["▁||", "▁▁||▁"], ["▁z", "ero"], ["M", "I"], ["丝绸", "之路"], ["▁equ", "ivalent"], ["组", "的"], ["和", "使用"], ["▁E", "p"], ["函数", "的"], ["给", "学生"], ["意识", "和"], ["pos", "ition"], ["▁capt", "ured"], ["▁fl", "our"], ["▁lif", "estyle"], ["ac", "her"], ["发挥", "着"], ["▁bo", "ys"], ["▁g", "ro"], ["▁gen", "us"], ["―", "―"], ["▁percent", "age"], ["▁stim", "ul"], ["E", "v"], ["▁anal", "ys"], ["▁p", "ure"], ["十", "年代"], ["u", "gh"], ["▁ro", "cks"], ["敢", "于"], ["和", "控制"], ["▁form", "ula"], ["hold", "ers"], ["比", "率"], ["是", "人类"], ["伴", "随着"], ["特征", "的"], ["所有", "者"], ["▁Scot", "land"], ["▁A", "cc"], ["▁c", "os"], ["▁ins", "ight"], ["当", "年"], ["日常", "生活"], ["农业", "农村"], ["合", "力"], ["C", "ount"], ["▁ad", "vert"], ["ru", "it"], ["▁it", "em"], ["文", "中"], ["钢", "铁"], ["不断", "发展"], ["GB", "T"], ["印", "象"], ["出", "身"], ["▁advent", "ure"], ["▁D", "en"], ["绿色", "发展"], ["约", "定的"], ["在", "大"], ["的", "三"], ["▁S", "ee"], ["五", "大"], ["研究", "了"], ["N", "ever"], ["▁activ", "ation"], ["成功", "的"], ["S", "ocial"], ["▁rel", "ief"], ["indu", "ced"], ["▁comp", "osed"], ["▁scri", "pt"], [":", "「"], ["纺", "织"], ["▁mag", "azine"], ["▁big", "ger"], ["而", "上"], ["港", "口"], ["▁h", "us"], ["進", "士"], ["较", "好的"], ["其", "一"], ["▁neg", "ot"], ["it", "amin"], ["撰", "写"], ["▁", ")"], ["▁H", "or"], ["施", "行"], ["浙江", "省"], ["制定", "了"], ["将", "来"], ["慈", "善"], ["r", "in"], ["技术", "与"], ["血", "症"], ["衰", "竭"], ["体系", "和"], ["对", "我国"], ["最", "好"], ["▁imp", "ossible"], ["▁ens", "uring"], ["病", "因"], ["▁d", "rain"], ["▁mort", "ality"], ["▁award", "ed"], ["▁le", "ague"], ["▁St", "ep"], ["年", "初"], ["ic", "it"], ["or", "ado"], ["▁batter", "y"], ["▁the", "ore"], ["上", "世纪"], ["▁c", "aught"], ["▁big", "gest"], ["▁smo", "king"], ["at", "hered"], ["▁epis", "odes"], ["必须", "在"], ["出现", "在"], ["▁fix", "ed"], ["ot", "ton"], ["ad", "or"], ["透", "过"], ["信号", "的"], ["ocol", "ate"], ["D", "i"], ["at", "i"], ["▁c", "ategory"], ["▁pre", "v"], ["资产", "负债"], ["决定", "性"], ["▁", "rom"], ["▁influ", "ences"], ["Ar", "ch"], ["▁r", "ice"], ["▁dis", "h"], ["清", "代"], ["行政", "法规"], ["it", "i"], ["▁continu", "ous"], ["的", "专业"], ["▁Te", "am"], ["X", "X"], ["eop", "les"], ["a", "ver"], ["▁cr", "ime"], ["▁For", "ce"], ["▁foss", "il"], ["▁inh", "abit"], ["j", "a"], ["▁t", "ack"], ["▁cir", "cle"], ["less", "ly"], ["农", "田"], ["re", "present"], ["定", "理"], ["入", "口"], ["out", "e"], ["n", "atural"], ["▁n", "est"], ["▁Comm", "on"], ["贵", "州"], ["E", "nd"], ["J", "o"], ["ust", "ain"], ["▁tra", "uma"], ["委員", "會"], ["\b", "\u0007"], ["举", "证"], ["越", "高"], ["破", "解"], ["澳", "门"], ["▁Air", "port"], ["▁Ex", "ternal"], ["▁N", "ature"], ["oc", "racy"], ["▁produ", "ces"], ["两个", "方面"], ["甘", "肃"], ["um", "ps"], ["ch", "ildren"], ["ar", "g"], ["▁calc", "ium"], ["▁sp", "ending"], ["d", "oor"], ["ol", "n"], ["联", "储"], ["▁wis", "dom"], ["▁fac", "ility"], ["你", "的"], ["废", "水"], ["面", "前"], ["供", "电"], ["层", "级"], ["y", "cle"], ["的", "整体"], ["领导", "人"], ["灵", "魂"], ["m", "i"], ["▁W", "ay"], ["▁read", "er"], ["ambig", "uation"], ["ut", "ed"], ["▁E", "th"], ["on", "to"], ["▁D", "utch"], ["的", "一些"], ["▁mark", "ets"], ["▁dis", "hes"], ["▁expand", "ed"], ["ir", "c"], ["追", "踪"], ["税", "率"], ["柔", "性"], ["贬", "值"], ["人民", "检察院"], ["浏", "览"], ["othe", "rapy"], ["只有", "在"], ["▁H", "ospital"], ["史", "料"], ["清", "华"], ["▁compar", "ison"], ["▁m", "ouse"], ["对", "社会"], ["▁efficient", "ly"], ["的", "机会"], ["采用", "了"], ["▁te", "le"], ["▁Pro", "fessor"], ["的一", "系列"], ["ud", "e"], ["▁navig", "ate"], ["特别", "是在"], ["st", "ic"], ["W", "omen"], ["体", "外"], ["各", "民族"], ["长期", "以来"], ["策", "划"], ["山", "水"], ["宣", "言"], ["ov", "en"], ["原", "创"], ["▁sub", "t"], ["▁ch", "olesterol"], ["▁le", "ct"], ["▁confir", "med"], ["▁psych", "ological"], ["党的", "建设"], ["▁F", "ootball"], ["▁M", "ax"], ["°", "▁"], ["\"", ")▁"], ["▁candid", "ate"], ["pt", "y"], ["V", "al"], ["▁st", "roke"], ["▁vol", "can"], ["▁certain", "ly"], ["▁D", "isease"], ["S", "E"], ["▁mix", "ture"], ["好", "处"], ["和", "政治"], ["el", "a"], ["m", "em"], ["▁reg", "ist"], ["熟", "练"], ["电", "机"], ["不断", "提升"], ["动", "手"], ["全", "新的"], ["▁sens", "itivity"], ["日", "的"], ["oc", "king"], ["法", "案"], ["▁", "、"], ["影响", "了"], ["灵", "活性"], ["同", "期"], ["全", "世界"], ["▁p", "ush"], ["▁v", "ideos"], ["▁St", "at"], ["議", "員"], ["所", "致"], ["导", "师"], ["身", "心"], ["提升", "了"], ["M", "il"], ["▁S", "o"], ["y", "al"], ["▁re", "ject"], ["想", "要"], ["w", "ords"], ["s", "is"], ["g", "ian"], ["微", "信"], ["的", "传统"], ["均", "为"], ["▁B", "et"], ["roll", "ed"], ["求", "解"], ["▁m", "eth"], ["消", "极"], ["积极", "的"], ["”", "、"], ["▁requ", "est"], ["em", "pl"], ["t", "re"], ["p", "ot"], ["時", "代"], ["B", "L"], ["俄", "国"], ["英", "格"], ["進", "入"], ["国", "企"], ["教师", "要"], ["发", "放"], ["创新", "发展"], ["▁exam", "ining"], ["▁surpr", "ise"], ["立", "方"], ["b", "ooks"], ["极", "大的"], ["绝", "大多数"], ["新冠", "肺炎"], ["休", "闲"], ["m", "ake"], ["中華", "民國"], ["▁org", "ans"], ["▁p", "ra"], ["May", "be"], ["低", "温"], ["系统", "和"], ["发", "扬"], ["的", "实施"], ["▁constit", "u"], ["ple", "ment"], ["干", "涉"], ["▁is", "lands"], ["▁be", "ar"], ["f", "amily"], ["M", "usic"], ["M", "ac"], ["▁ang", "le"], ["▁Serv", "ices"], ["ad", "el"], ["▁bas", "ket"], ["▁eth", "nic"], ["ag", "ram"], ["▁allow", "ing"], ["最", "終"], ["冬", "季"], ["▁sc", "ulpt"], ["确定", "了"], ["较", "好"], ["cycl", "op"], ["▁convers", "ations"], ["政治", "局"], ["▁D", "av"], ["枢", "纽"], ["▁dynam", "ic"], ["單", "曲"], ["all", "ing"], ["▁b", "at"], ["omet", "ry"], ["In", "ternational"], ["构成", "了"], ["l", "ik"], ["准确", "性"], ["拓", "扑"], ["ag", "en"], ["更", "快"], ["eg", "a"], ["查", "看"], ["N", "T"], ["▁O", "h"], ["战", "国"], ["====", "===="], ["分", "数"], ["ong", "s"], ["▁rel", "iable"], ["▁dec", "ade"], ["内", "蒙古"], ["▁satell", "ite"], ["县", "级"], ["转", "基因"], ["或者", "其他"], ["保险", "公司"], ["Sc", "ientists"], ["▁return", "s"], ["▁facilit", "ate"], ["▁H", "ot"], ["不", "知"], ["air", "y"], ["意", "外"], ["遭", "遇"], ["ay", "lor"], ["▁Que", "en"], ["E", "V"], ["诉", "求"], ["以下", "几"], ["社会", "治理"], ["增", "殖"], ["▁prepar", "ation"], ["Pro", "v"], ["▁contribut", "ed"], ["an", "ic"], ["废", "弃"], ["救", "援"], ["高", "血压"], ["在", "这里"], ["机", "场"], ["it", "ory"], ["▁A", "tt"], ["▁f", "ing"], ["hem", "istry"], ["all", "eng"], ["应用", "场景"], ["近", "似"], ["▁contribut", "ions"], ["ne", "ys"], ["▁particip", "ation"], ["▁know", "ing"], ["p", "es"], ["ay", "a"], ["清", "偿"], ["和", "市场"], [",▁", "▁"], ["ph", "ib"], ["演", "员"], ["的", "控制"], ["▁b", "ron"], ["y", "es"], [")", "\""], ["分", "区"], ["列", "车"], ["党", "派"], [":", """], ["为", "企业"], ["ri", "er"], ["起", "了"], ["来", "进行"], ["▁f", "ro"], ["▁sent", "ences"], ["▁princ", "iple"], ["▁t", "urb"], ["b", "ell"], ["▁offic", "er"], ["上", "面"], ["▁conflic", "ts"], ["▁frequ", "ent"], ["纲", "领"], ["结构性", "改革"], ["必须", "坚持"], ["人力", "资本"], ["思想", "和"], ["发展", "中"], ["op", "eration"], ["网", "格"], ["▁pers", "ons"], ["U", "K"], ["名", "单"], ["科", "普"], ["内", "核"], ["fl", "amm"], ["确立", "了"], ["期", "徒刑"], ["▁d", "ent"], ["占", "领"], ["▁S", "und"], ["▁Mart", "in"], ["美", "洲"], ["t", "elling"], ["候", "选"], ["间", "隔"], ["和", "国家"], ["▁difficult", "ies"], ["t", "ake"], ["还", "应"], ["敌", "人"], ["全球", "经济"], ["三个", "方面"], ["▁pres", "erve"], ["al", "m"], ["▁des", "c"], ["▁dis", "rupt"], ["合", "伙"], ["性", "别"], ["are", "t"], ["▁dist", "ricts"], ["具有", "一定的"], ["战", "线"], ["不仅", "要"], ["检察", "机关"], ["iox", "ide"], ["▁tro", "ops"], ["一致", "性"], ["编", "译"], ["pro", "t"], ["▁whe", "el"], ["▁object", "ive"], ["aterial", "s"], ["▁con", "crete"], ["关键", "技术"], ["各", "部门"], ["▁int", "ense"], ["▁abs", "ol"], ["▁consid", "ering"], ["▁moist", "ure"], ["▁qu", "iet"], ["▁t", "ap"], ["交易", "所"], ["数据", "处理"], ["R", "ad"], ["▁learn", "ers"], ["以", "外的"], ["▁st", "rain"], ["▁▁▁▁", "▁▁▁"], ["bre", "ak"], ["▁F", "amily"], ["▁st", "uff"], ["三", "次"], ["机制", "的"], ["黑", "色"], ["▁experim", "ental"], ["os", "ion"], ["ID", "S"], ["全面", "从严"], ["夯", "实"], ["拉", "动"], ["问题", "和"], ["应该", "是"], ["y", "an"], ["▁C", "ard"], ["▁streng", "then"], ["划", "分为"], ["il", "a"], ["▁ins", "urance"], ["▁concer", "ned"], ["▁iss", "ued"], ["lear", "ning"], ["完善", "的"], ["核心", "素养"], ["为", "人民"], ["并", "不能"], ["冠", "状"], ["▁Sec", "ret"], ["为", "实现"], ["地", "说"], ["Th", "ree"], ["com", "mon"], ["▁comb", "at"], ["F", "rench"], ["▁ad", "m"], ["dis", "ambiguation"], ["p", "ing"], ["印", "发"], ["合同", "法"], ["研究", "团队"], ["▁sh", "ut"], ["▁Champions", "hip"], ["ct", "u"], ["宿", "主"], ["▁V", "iet"], ["▁class", "ic"], ["▁pur", "su"], ["数据", "和"], ["其", "主要"], ["▁f", "ashion"], ["▁great", "ly"], ["财务", "管理"], ["授", "课"], ["恶", "化"], ["辽", "宁"], ["▁correct", "ly"], ["广泛", "应用"], ["▁encourag", "ed"], ["▁consum", "ers"], ["所", "属"], ["失", "衡"], ["环境", "污染"], ["季", "节"], ["涌", "现"], ["二", "元"], ["▁Prov", "ince"], ["Y", "ear"], ["R", "P"], ["act", "ions"], ["监", "护"], ["F", "F"], ["▁collect", "ive"], ["▁kil", "omet"], ["▁m", "ales"], ["▁oper", "ated"], ["in", "ch"], ["▁O", "l"], ["在", "国家"], ["但", "不"], ["▁neur", "ons"], ["os", "qu"], ["rag", "on"], ["▁green", "house"], ["▁rob", "ot"], ["下", "行"], ["共", "生"], ["当", "局"], ["▁R", "om"], ["\"", ")"], ["M", "ass"], ["▁investig", "ation"], ["bur", "gh"], ["习近平总书记", "指出"], ["思", "潮"], ["会议", "上"], ["究", "竟"], ["以习近平同志", "为核心的党中央"], ["技术", "的发展"], ["d", "espite"], ["S", "QL"], ["▁Gu", "ide"], ["陈", "述"], ["B", "r"], ["▁co", "ach"], ["st", "ep"], ["op", "her"], ["这种", "方法"], ["胚", "胎"], ["量", "和"], ["th", "ink"], ["et", "ime"], ["yp", "ically"], ["▁s", "olving"], ["集", "團"], ["在", "实践中"], ["密切", "相关"], ["采", "样"], ["▁L", "iter"], ["小", "麦"], ["▁therap", "eutic"], ["▁W", "rit"], ["v", "in"], ["▁rese", "arc"], ["▁own", "er"], ["读", "书"], ["关键", "词"], ["ym", "b"], ["▁un", "able"], ["b", "b"], ["▁emer", "ging"], ["l", "anguage"], ["大", "局"], ["会", "对"], ["的", "地"], ["▁r", "ing"], ["也", "被"], ["y", "et"], ["▁nerv", "ous"], ["▁se", "asons"], ["▁fac", "es"], ["提", "问"], ["▁man", "if"], ["▁am", "pl"], ["▁threat", "ened"], ["al", "ter"], ["c", "ase"], ["的", "表现"], ["申请", "人"], ["美", "联储"], ["当代", "中国"], ["▁integr", "ated"], ["戏", "剧"], ["L", "eg"], ["▁acc", "ommod"], ["▁L", "os"], ["▁trans", "p"], ["▁effect", "iveness"], ["用户", "的"], ["▁coast", "al"], ["▁identify", "ing"], ["A", "pril"], ["数", "控"], ["S", "arah"], ["而", "成"], ["▁f", "inger"], ["▁he", "l"], ["us", "hed"], ["em", "et"], ["▁l", "ens"], ["都", "不"], ["归", "属"], ["的", "有"], ["De", "velop"], ["▁exc", "iting"], ["重", "大的"], ["视", "网膜"], ["学", "分"], ["语", "法"], ["be", "an"], ["在", "本"], ["P", "eter"], ["藝", "術"], ["▁tra", "its"], ["in", "ction"], ["er", "us"], ["自", "学"], ["這", "些"], ["单位", "的"], ["▁pro", "ve"], ["W", "indows"], ["▁g", "iant"], ["In", "f"], ["违", "背"], ["▁ob", "esity"], ["是", "非常"], ["ace", "book"], ["▁ab", "andon"], ["▁E", "r"], ["%", ",▁"], ["歐", "洲"], ["▁plan", "e"], ["原", "型"], ["____", "____"], ["父", "亲"], ["等", "内容"], ["▁discuss", "ing"], ["做", "的"], ["▁prov", "iders"], ["▁A", "ge"], ["的", "计算"], ["▁complex", "ity"], ["也", "需要"], ["一", "号"], ["发展", "趋势"], ["▁n", "ic"], ["▁You", "ng"], ["背", "后"], ["第一", "百"], ["考", "验"], ["保护", "和"], ["应", "力"], ["▁flow", "er"], ["▁Bl", "ue"], ["汉", "字"], ["▁g", "ram"], ["▁saf", "ely"], ["▁target", "s"], ["电", "站"], ["h", "ard"], ["▁g", "ap"], ["▁g", "ent"], ["▁incorpor", "ate"], ["▁incorpor", "ating"], ["师", "资"], ["共产", "党的"], ["畅", "通"], ["意识", "到"], ["流", "失"], ["纵", "向"], ["真实", "性"], ["经济学", "家"], ["字", "符"], ["上", "了"], ["▁Kore", "a"], ["▁emp", "athy"], ["發", "生"], ["支", "援"], ["领导", "的"], ["政府", "部门"], ["出", "土"], ["大", "地"], ["的", "处理"], ["首", "席"], ["uss", "ion"], ["▁ad", "ds"], ["▁Franc", "isco"], ["在", "教学"], ["战", "后"], ["▁poss", "ibility"], ["▁t", "urning"], ["薄", "膜"], ["▁G", "r"], ["▁int", "est"], ["▁transl", "ation"], ["▁initi", "atives"], ["▁protect", "ive"], ["付", "款"], ["▁G", "ree"], ["▁membran", "e"], ["s", "omething"], ["贯", "通"], ["就", "没有"], ["th", "ree"], ["的", "重"], ["公", "告"], ["▁vari", "ations"], ["▁own", "ers"], ["iv", "a"], ["骨", "干"], ["这些", "问题"], ["再", "到"], ["原", "有的"], ["凭", "证"], ["▁keep", "s"], ["bet", "ween"], ["eli", "hood"], ["▁H", "y"], ["卓", "越"], ["▁s", "ister"], ["▁int", "ellectual"], ["生活", "方式"], ["当事", "人的"], ["财", "经"], ["之", "日起"], ["NA", "SA"], ["T", "T"], ["埃", "及"], ["得", "多"], ["线", "索"], ["▁esc", "ape"], ["m", "us"], ["为", "本"], ["不", "移"], ["运", "河"], ["▁exhib", "it"], ["▁pass", "ing"], ["减", "小"], ["▁st", "ake"], ["▁St", "ory"], ["大", "臣"], ["当时", "的"], ["th", "ur"], ["ail", "ing"], ["app", "ro"], ["加快", "推进"], ["应", "有"], ["短", "缺"], ["灵", "敏"], ["▁ev", "olved"], ["it", "age"], ["force", "ment"], ["h", "ar"], ["▁inter", "ventions"], ["am", "ong"], ["ish", "ment"], ["具有重要", "意义"], ["ps", "on"], ["er", "ior"], ["▁h", "op"], ["直", "流"], ["高质量", "发展的"], ["▁minim", "ize"], ["▁nec", "k"], ["封", "装"], ["J", "ava"], ["▁I", "V"], ["▁appro", "ved"], ["主", "義"], ["ibr", "aries"], ["▁newsp", "aper"], ["等", "一系列"], ["rou", "s"], ["U", "TC"], ["▁th", "read"], ["▁earth", "qu"], ["it", "ual"], ["D", "E"], ["▁over", "whel"], ["海", "水"], ["d", "id"], ["分", "之一"], ["▁mathemat", "ical"], ["不", "予"], ["中国式", "现代化"], ["萎", "缩"], ["领", "土"], ["规范", "化"], ["日", "军"], ["Pl", "us"], ["干", "燥"], ["g", "a"], ["M", "C"], ["▁hydro", "gen"], ["▁t", "ens"], ["▁art", "istic"], ["▁W", "indows"], ["s", "ign"], ["▁gu", "ard"], ["法", "则"], ["的一", "切"], ["▁I", "P"], ["▁commit", "ment"], ["H", "aving"], ["▁C", "at"], ["十三", "五"], ["人", "事"], ["前", "瞻"], ["传", "授"], ["削", "弱"], ["融合", "发展"], ["塞", "尔"], ["那", "里"], ["类似", "于"], ["C", "or"], ["发生", "变化"], ["▁do", "se"], ["▁sp", "ots"], ["is", "ode"], ["inc", "oln"], ["ors", "es"], ["▁sh", "ad"], ["h", "um"], ["以", "来的"], ["开展", "了"], ["▁t", "el"], ["fess", "ional"], ["▁gr", "id"], ["▁f", "rog"], ["▁t", "ube"], ["未", "有"], ["▁F", "ilm"], ["▁fil", "ter"], ["党", "建"], ["省", "委"], ["乾", "隆"], ["构", "筑"], ["oc", "ument"], ["▁U", "nder"], ["列", "为"], ["▁cont", "amin"], ["ru", "ption"], ["ont", "al"], ["sc", "ientists"], ["un", "til"], ["▁t", "ip"], ["▁webs", "ites"], ["▁mem", "ories"], ["▁sc", "ores"], ["M", "ain"], ["新", "征程"], ["配", "备"], ["▁out", "er"], ["道", "理"], ["他们", "在"], ["▁meaning", "ful"], ["cri", "be"], ["▁opin", "ion"], ["论", "的"], ["l", "t"], ["▁wa", "iting"], ["▁ear", "n"], ["起", "步"], ["▁calcul", "ate"], ["主", "角"], ["斯", "基"], ["atch", "ing"], ["▁Ind", "igenous"], ["S", "L"], ["▁ph", "arm"], ["▁watch", "ing"], ["▁emot", "ion"], ["y", "o"], ["学", "历"], ["议", "题"], ["国际", "合作"], ["知识", "点"], ["▁difficult", "y"], ["一", "部"], ["可以", "是"], ["演", "示"], ["we", "et"], ["Be", "ing"], ["iod", "iversity"], ["千", "年"], ["缓", "存"], ["▁express", "ions"], ["服", "从"], ["靶", "向"], ["混", "乱"], ["习近平总书记", "在"], ["数据", "分析"], ["umn", "i"], ["inn", "ers"], ["▁r", "u"], ["M", "iss"], ["int", "o"], ["▁measure", "ment"], ["F", "in"], ["st", "ery"], ["运", "转"], ["▁ra", "cial"], ["灾", "难"], ["文", "档"], ["  ", "  "], ["▁B", "ul"], ["▁gradu", "ally"], ["本质", "上"], ["ort", "ion"], ["el", "ly"], ["▁philosoph", "y"], ["p", "ublished"], ["▁tum", "ors"], ["D", "O"], ["▁att", "ended"], ["P", "N"], ["三", "农"], ["评", "分"], ["深", "层次"], ["诊", "疗"], ["全面建成", "小康社会"], ["▁ac", "ute"], ["使用", "了"], ["Pl", "ace"], ["▁bur", "ied"], ["▁excess", "ive"], ["▁A", "gency"], ["ps", "y"], ["长", "时间"], ["▁J", "oseph"], ["▁L", "ittle"], ["无人", "机"], ["▁sc", "hed"], ["▁to", "ys"], ["▁Rail", "way"], ["ig", "er"], ["巴", "西"], ["▁G", "all"], ["和", "中国"], ["th", "an"], ["越来越", "多的"], ["东", "亚"], ["▁M", "ur"], ["备", "份"], ["统计", "学"], ["中", "科院"], ["▁dig", "est"], ["法律", "责任"], ["违", "规"], ["社会", "组织"], ["的", "力量"], ["均", "有"], ["国", "王"], ["hel", "ial"], ["in", "er"], ["广", "西"], ["▁micro", "sc"], ["▁d", "ates"], ["▁arch", "ae"], ["▁works", "he"], ["n", "or"], ["质量", "的"], ["▁B", "ooks"], ["可能", "导致"], ["▁wind", "ows"], ["low", "er"], ["C", "ap"], ["雕", "塑"], ["有限", "的"], ["▁mechan", "ical"], ["足", "以"], ["Char", "les"], ["ag", "ers"], ["▁bab", "ies"], ["▁b", "onds"], ["▁colon", "ial"], ["acc", "o"], ["▁distribut", "ed"], ["红", "利"], ["内部", "的"], ["摄", "影"], ["▁comp", "rom"], ["▁un", "certain"], ["四", "种"], ["▁concentr", "ations"], ["▁pl", "enty"], ["友", "好"], ["▁Or", "der"], ["g", "ender"], ["▁Fore", "st"], ["上", "游"], ["决", "心"], ["M", "ult"], ["▁laun", "ch"], ["▁be", "ings"], ["年", "到"], ["p", "red"], ["A", "ir"], ["▁mod", "e"], ["情", "报"], ["基础", "研究"], ["▁M", "ethod"], ["▁find", "s"], ["▁intric", "ate"], ["▁real", "ize"], ["▁public", "ation"], ["▁my", "ster"], ["革", "新"], ["丢", "失"], ["传染", "病"], ["▁road", "s"], ["▁treat", "ing"], ["w", "estern"], ["▁System", "s"], ["▁voc", "abulary"], ["▁c", "ab"], ["惩", "罚"], ["衰", "退"], ["▁dr", "iver"], ["▁che", "st"], ["▁screen", "ing"], ["淘", "汰"], ["▁b", "rows"], ["叠", "加"], ["▁c", "ul"], ["▁l", "osing"], ["▁remark", "able"], ["的", "反"], ["▁T", "op"], ["o", "ids"], ["ils", "on"], ["星", "期"], ["▁societ", "ies"], ["评", "定"], ["放", "电"], ["来自", "于"], ["随", "意"], ["O", "H"], ["▁ed", "itor"], ["此", "前"], ["暂", "时"], ["▁del", "ay"], ["▁rem", "ind"], ["裁", "决"], ["蓬", "勃"], ["有", "哪些"], ["三", "十"], ["▁As", "sembly"], ["M", "B"], ["▁novel", "s"], ["▁T", "im"], ["牢", "牢"], ["c", "ient"], ["Con", "sequently"], ["▁substant", "ial"], ["▁sh", "arp"], ["D", "an"], ["動", "畫"], ["或", "不"], ["宋", "代"], ["老", "龄"], ["将", "成为"], ["的", "情形"], ["e", "enth"], ["▁sur", "ve"], ["▁rest", "aur"], ["L", "AN"], ["▁class", "ical"], ["emet", "ery"], ["共", "振"], ["r", "ine"], ["组", "装"], ["ord", "inary"], ["▁deb", "ate"], ["olog", "ic"], ["▁b", "ath"], ["▁indic", "ated"], ["old", "s"], ["om", "atic"], ["个人信息", "保护"], ["压", "迫"], ["的", "改革"], ["发表", "在"], ["中国", "古代"], ["ber", "ry"], ["▁d", "ioxide"], ["▁obs", "erve"], ["▁A", "st"], ["白", "色"], ["f", "ood"], ["言", "之"], ["投资", "的"], ["▁est", "imate"], ["▁hand", "ling"], ["▁ident", "ification"], ["写", "入"], ["ip", "e"], ["ass", "es"], ["▁flow", "s"], ["▁part", "n"], ["坚", "强"], ["勇", "于"], ["之", "道"], ["因", "其"], ["A", "tt"], ["原因", "是"], ["标准", "和"], ["c", "ard"], ["断", "裂"], ["上", "皮"], ["im", "als"], ["▁ch", "annels"], ["节", "省"], ["▁p", "and"], ["W", "ar"], ["▁B", "oston"], ["▁paralle", "l"], ["最大", "化"], ["轨", "迹"], ["讲", "述"], ["▁t", "ables"], ["路", "線"], ["D", "ue"], ["斯", "科"], ["▁strong", "ly"], ["▁fl", "avor"], ["迄", "今"], ["Des", "ign"], ["S", "N"], ["下", "去"], ["两", "岸"], ["其", "余"], ["的最", "高"], ["▁resp", "iratory"], ["▁re", "aching"], ["J", "uly"], ["J", "anuary"], ["潜在", "的"], ["總", "統"], ["注", "释"], ["▁pres", "ents"], ["▁equ", "ation"], ["▁p", "ed"], ["分", "开"], ["进", "出口"], ["生态文明", "建设"], ["目标", "和"], ["有", "什么"], ["有", "其"], ["改", "良"], ["ap", "se"], ["可", "达"], ["公", "園"], ["▁m", "ob"], ["阿拉", "伯"], ["的", "物质"], ["▁j", "oy"], ["G", "od"], ["下", "载"], ["ari", "os"], ["学科", "的"], ["是", "企业"], ["里", "程"], ["生物", "多样性"], ["艰", "苦"], ["飞", "跃"], ["生产总", "值"], ["并", "以"], ["的", "细胞"], ["eng", "ine"], ["\"", ",▁\""], ["ell", "o"], ["▁t", "ut"], ["伴", "随"], ["鐵", "道"], ["o", "a"], ["语", "义"], ["]", ","], ["P", "op"], ["中华", "优秀传统文化"], ["市场", "上"], ["实事", "求是"], ["新", "模式"], ["▁kid", "ney"], ["it", "ure"], ["hav", "ior"], ["▁t", "ension"], ["低", "成本"], ["存在", "的问题"], ["的", "经验"], ["百", "万"], ["em", "b"], ["▁fall", "s"], ["heim", "er"], ["U", "T"], ["l", "av"], ["治理体系", "和"], ["伟", "大的"], ["边缘", "计算"], ["甲", "状"], ["缴", "纳"], ["怀", "疑"], ["▁rel", "ation"], ["目前", "的"], ["名", "為"], ["梯", "度"], ["ospit", "als"], ["▁t", "ons"], ["omet", "ric"], ["▁m", "ic"], ["M", "E"], ["基本", "原理"], ["▁bi", "ology"], ["▁target", "ed"], ["▁offic", "ers"], ["在", "这些"], ["饱", "和"], ["经", "贸"], ["▁algorith", "ms"], ["m", "usic"], ["he", "dule"], ["iv", "ities"], ["▁transfer", "red"], ["▁F", "estival"], ["olic", "y"], ["D", "I"], ["tra", "ck"], ["神", "话"], ["传", "送"], ["▁CO", "VID"], ["▁sen", "ior"], ["▁supp", "lement"], ["ne", "g"], ["星", "系"], ["金融", "风险"], ["扣", "除"], ["被", "害"], ["创新", "驱动"], ["规", "避"], ["例", "外"], ["的", "共同"], ["成立", "了"], ["y", "roid"], ["F", "ood"], ["it", "ting"], ["综", "上"], ["▁un", "ion"], ["▁scient", "ist"], ["▁v", "eter"], ["C", "ur"], ["oper", "ative"], ["un", "ior"], ["设备", "和"], ["同", "盟"], ["空", "中"], ["▁tw", "enty"], ["现代", "农业"], ["的", "伟大"], ["在", "世界"], ["at", "oes"], [")", "-"], ["S", "ing"], ["▁Dem", "ocratic"], ["置", "于"], ["邮", "件"], ["康", "熙"], ["繁", "殖"], ["ic", "ating"], ["▁s", "izes"], ["▁Administ", "ration"], ["以及", "其他"], ["顶层", "设计"], ["链", "条"], ["▁D", "own"], ["▁ser", "ver"], ["ig", "inal"], ["▁struct", "ural"], ["▁M", "ore"], ["S", "chool"], ["引", "力"], ["认定", "为"], ["▁fe", "ver"], ["am", "ins"], ["▁horm", "one"], ["▁adequ", "ate"], ["▁I", "L"], ["色", "列"], ["发", "酵"], ["中", "医药"], ["p", "ublic"], ["用", "作"], ["为", "人"], ["▁d", "raft"], ["▁princ", "ipal"], ["▁fe", "aturing"], ["▁B", "ab"], ["B", "est"], ["▁E", "c"], ["有", "待"], ["坚定", "不移"], ["发", "作"], ["▁design", "ated"], ["▁imm", "igr"], ["▁dom", "ain"], ["▁bl", "og"], ["反", "之"], ["固", "醇"], ["▁car", "b"], ["▁insp", "iration"], ["▁protect", "ing"], ["▁vis", "iting"], ["▁would", "n"], ["金", "山"], ["▁V", "er"], ["改革开放", "以来"], ["日", "趋"], ["实", "效"], ["的", "理念"], ["A", "F"], ["▁arg", "ue"], ["S", "I"], ["▁P", "res"], ["imens", "ions"], ["Re", "al"], ["Ch", "oose"], ["让", "人"], ["碎", "片"], ["股份", "有限公司"], ["▁W", "all"], [")", "▁▁"], ["▁algorith", "m"], ["Se", "ptember"], ["our", "i"], ["医疗", "卫生"], ["人类", "命运共同体"], ["课", "时"], ["收", "费"], ["港", "澳"], ["群", "体的"], ["▁carry", "ing"], ["▁g", "one"], ["▁pract", "icing"], ["ER", "P"], [".▁", "["], ["▁coun", "cil"], ["▁cur", "ious"], ["there", "by"], ["定", "向"], ["和", "研究"], ["的", "自然"], ["重要", "性"], ["学", "研究"], ["可", "供"], ["m", "ult"], ["eng", "ers"], ["变", "局"], ["并", "与"], ["北京", "大学"], ["权", "人"], ["▁ex", "ec"], ["other", "s"], ["v", "ard"], ["▁expert", "ise"], ["▁feed", "ing"], ["▁min", "erals"], ["▁recommend", "ations"], ["邀", "请"], ["C", "s"], ["名", "的"], ["▁sus", "cept"], ["▁l", "aid"], ["外", "界"], ["▁m", "and"], ["Germ", "an"], ["海", "拔"], ["▁st", "ere"], ["▁experien", "cing"], ["伴", "有"], ["的", "价格"], ["程序", "的"], ["这", "两"], ["▁int", "ent"], ["▁prom", "pt"], ["▁phenomen", "on"], ["动", "画"], ["p", "ers"], ["觉", "得"], ["M", "o"], ["▁D", "et"], ["▁object", "ives"], ["▁Rad", "io"], ["writ", "ing"], ["外", "科"], ["▁exc", "it"], ["▁claim", "ed"], ["上", "层"], ["处理", "好"], ["冠", "军"], ["Ex", "per"], ["▁t", "ank"], ["▁pre", "ferences"], ["b", "ow"], ["▁dis", "pl"], ["重", "塑"], ["介", "石"], ["▁L", "ight"], ["如果", "没有"], ["it", "ely"], ["▁im", "pl"], ["▁Direct", "or"], ["她", "的"], ["面", "積"], ["管理", "体制"], ["发", "言"], ["欣", "赏"], ["前", "面"], ["▁po", "ison"], ["▁voc", "als"], ["▁dang", "er"], ["st", "ant"], ["這", "個"], ["▁in", "equ"], ["▁l", "ie"], ["高速", "公路"], ["学", "界"], ["c", "at"], ["手", "法"], ["▁suff", "ered"], [":", "《"], ["▁e", "lder"], ["供给侧", "结构性改革"], ["脊", "髓"], ["▁P", "ub"], ["ell", "er"], ["▁settle", "ment"], ["og", "a"], ["成立", "的"], ["ain", "ts"], ["▁cur", "iosity"], ["骨", "髓"], ["reg", "ular"], ["球", "隊"], ["▁cardi", "ovascular"], ["▁R", "et"], ["朝", "廷"], ["坏", "死"], ["颠", "覆"], ["▁K", "h"], ["and", "y"], ["▁ch", "ose"], ["不", "如"], ["B", "as"], ["▁c", "e"], ["Av", "oid"], ["ot", "or"], ["▁consum", "er"], ["内", "需"], ["这", "与"], ["展", "望"], ["▁P", "sych"], ["通", "過"], ["发展", "规划"], ["▁pass", "age"], ["月", "台"], ["端", "的"], ["R", "N"], ["心", "的"], ["az", "on"], ["G", "PS"], ["▁shap", "ed"], ["▁tem", "ple"], ["定义", "为"], ["P", "o"], ["enn", "is"], ["读", "取"], ["同", "一个"], ["决", "赛"], ["▁prof", "ound"], ["金融", "监管"], ["干", "旱"], ["模", "具"], ["素质", "教育"], ["市场", "需求"], ["相关", "性"], ["图", "谱"], ["▁er", "rors"], ["者", "在"], ["除", "外"], ["ak", "i"], ["H", "P"], ["▁improve", "ments"], ["人民", "为中心"], ["工程", "技术"], ["和", "历史"], ["中国", "社会"], ["非", "物质"], ["▁print", "ed"], ["▁us", "ual"], ["的最", "佳"], ["h", "uman"], ["▁Port", "ug"], ["▁re", "ct"], ["▁hypothes", "is"], ["▁cap", "abilities"], ["▁m", "ir"], ["腐", "蚀"], ["强烈", "的"], ["殖民", "地"], ["▁H", "ead"], ["f", "ile"], ["克", "隆"], ["其", "所"], ["资", "讯"], ["歧", "视"], ["陆", "续"], ["哪", "里"], ["R", "ichard"], ["▁h", "oles"], ["▁m", "ur"], ["▁phys", "ics"], [";", "\""], ["正", "面"], ["为", "目的"], ["全面建设", "社会主义现代化"], ["宏观", "调控"], ["课程", "思政"], ["思想政治", "教育"], ["搜", "集"], ["▁Histor", "ic"], ["日", "志"], ["▁min", "ing"], ["▁app", "lying"], ["▁bre", "eding"], ["限", "定"], ["vest", "ig"], ["s", "ize"], [")", "》"], ["re", "ens"], ["▁commit", "ted"], ["权利", "的"], ["更", "容易"], ["▁Ch", "ild"], ["▁poss", "ibly"], ["▁ben", "e"], ["数据", "进行"], ["W", "ashington"], ["M", "us"], ["ak", "istan"], ["地位", "和"], ["在", "整个"], ["排", "斥"], ["▁head", "s"], ["Ind", "ia"], ["发", "力"], ["增", "高"], ["抓", "好"], ["天", "线"], ["肝", "脏"], ["成员", "国"], ["行政", "部门"], ["与", "企业"], ["T", "otal"], ["che", "ck"], ["▁c", "rick"], ["N", "or"], ["ys", "ics"], ["it", "led"], ["▁the", "ories"], ["尼", "亞"], ["渐", "进"], ["全", "书"], ["ool", "s"], ["向", "前"], ["比", "亚"], ["官", "僚"], ["延", "安"], ["育", "种"], ["过", "敏"], ["结果", "显示"], ["▁P", "ython"], ["le", "ased"], ["▁w", "ish"], ["overn", "or"], ["可", "信"], ["显", "现"], ["▁f", "r"], ["se", "veral"], ["这是", "一个"], ["支", "架"], ["ple", "x"], ["▁F", "ree"], ["ig", "ue"], ["D", "el"], ["公司", "法"], ["与", "实践"], ["创新", "型"], ["俱", "进"], ["因此", "在"], ["▁isol", "ated"], ["▁may", "be"], ["om", "ers"], ["Go", "ogle"], ["oun", "ce"], ["▁ag", "ent"], ["ist", "ed"], ["y", "er"], ["▁g", "ly"], ["▁se", "g"], ["ient", "ific"], ["c", "os"], ["▁sit", "ting"], ["g", "ress"], ["▁farm", "ing"], ["用", "药"], ["发挥", "作用"], ["减", "弱"], ["基础", "知识"], ["上", "一"], ["热", "带"], ["rit", "ical"], ["▁inst", "ances"], ["▁mind", "s"], ["為", "了"], ["新发展", "格局"], ["韧", "性"], ["班", "级"], ["胰岛", "素"], ["的", "增长"], ["心", "灵"], ["▁Spec", "ial"], ["▁pan", "el"], ["O", "ften"], ["总", "的"], ["学", "问"], ["性", "格"], ["以", "色列"], ["▁line", "ar"], ["E", "xt"], ["▁connect", "ing"], ["▁des", "ire"], ["▁represent", "ing"], ["▁t", "ales"], ["本", "法"], ["法律", "制度"], ["氨基", "酸"], ["▁l", "iv"], ["它", "可以"], ["m", "al"], ["t", "em"], ["Int", "roduction"], ["im", "port"], ["占", "用"], ["运行", "的"], ["氧化", "物"], ["底", "层"], ["配", "送"], ["平台", "的"], ["ew", "is"], ["▁J", "ersey"], ["▁Engine", "ering"], ["▁Col", "l"], ["ard", "less"], ["选", "项"], ["▁bene", "ath"], ["▁un", "iform"], ["自", "强"], ["国有", "资产"], ["不", "用"], ["流", "体"], ["▁g", "ut"], ["pl", "ot"], ["的", "分"], ["▁W", "ill"], ["▁fair", "ly"], ["▁min", "ute"], ["▁f", "urn"], ["re", "p"], ["am", "ination"], ["Germ", "any"], ["本", "次"], ["▁En", "vironmental"], ["Mod", "ern"], ["電視", "劇"], ["▁ar", "ise"], ["許", "多"], ["Not", "es"], ["▁C", "E"], ["基本", "原则"], ["从", "此"], ["操", "纵"], ["还", "在"], ["▁as", "p"], ["▁interact", "ive"], ["▁const", "antly"], ["▁sustain", "ability"], ["v", "anced"], ["率", "和"], ["节", "目"], ["A", "fric"], ["R", "ob"], ["iz", "z"], ["▁c", "ensus"], ["是", "与"], ["神经", "系统"], ["约", "翰"], ["▁V", "en"], ["▁for", "th"], ["▁mat", "ches"], ["▁ar", "rest"], ["▁norm", "s"], ["▁list", "ing"], ["片", "段"], ["▁al", "ike"], ["▁wear", "ing"], [")", "="], ["新发展", "理念"], ["不断", "增强"], ["订", "单"], ["基", "建"], ["▁al", "ive"], ["ag", "raph"], ["ra", "it"], ["▁necess", "arily"], ["on", "ents"], ["▁mar", "ks"], ["▁Ed", "ward"], [",", "'▁"], ["▁hus", "band"], ["包含", "了"], ["ri", "p"], ["T", "om"], ["▁n", "od"], ["自主", "学习"], ["紧", "紧"], ["发展", "到"], ["有", "针对"], ["与时", "俱进"], ["follow", "ed"], ["”", ";"], ["相", "连"], ["▁W", "il"], ["▁rep", "ut"], ["▁Ex", "per"], ["▁g", "ast"], ["▁O", "ver"], ["▁sur", "ge"], ["om", "al"], ["▁<", "▁"], ["▁contain", "er"], ["迎", "来"], ["人", "际"], ["摄", "像"], ["問", "題"], ["是", "其"], ["狭", "窄"], ["▁mag", "ical"], ["▁qu", "arter"], ["up", "reme"], ["導", "演"], ["民主", "主义"], ["而", "被"], ["或", "许"], ["很", "高"], ["代表", "性"], ["t", "r"], ["劳动", "争议"], ["S", "um"], ["▁A", "p"], ["▁ox", "id"], ["F", "ree"], ["▁s", "ad"], ["▁acknow", "led"], ["▁he", "ating"], ["内", "生"], ["食", "用"], ["ur", "ches"], ["瑞", "典"], ["ential", "ly"], ["▁n", "ob"], ["▁w", "ound"], ["题", "目"], ["▁C", "orpor"], ["结", "晶"], ["▁M", "ah"], ["公", "斤"], ["▁tra", "ct"], ["凭", "借"], ["阻", "塞"], ["f", "our"], ["合法", "性"], ["▁conf", "ig"], ["▁vary", "ing"], ["直", "播"], ["Or", "gan"], ["一", "度"], ["friend", "ly"], ["▁ed", "ges"], ["▁Mount", "ain"], ["各族", "人民"], ["很", "强的"], ["▁h", "all"], ["并", "为"], ["得到", "的"], ["▁int", "ra"], ["▁cor", "on"], ["▁Cast", "le"], ["▁sp", "ark"], ["S", "ign"], ["▁m", "igration"], ["▁in", "herent"], ["拍", "卖"], ["m", "ath"], ["▁f", "u"], ["ers", "ion"], ["▁liter", "acy"], ["olv", "es"], ["和", "安全"], ["自", "律"], ["问", "卷"], ["的", "艺术"], ["ret", "urn"], ["m", "uch"], ["及", "相关"], ["区域", "的"], ["一", "组"], ["主要", "由"], ["▁correspond", "ing"], ["u", "rolog"], ["的", "作品"], ["第一", "章"], ["经济", "建设"], ["活", "化"], ["中心", "的"], ["▁in", "tern"], ["▁in", "her"], ["▁f", "alse"], ["在", "中"], ["▁R", "em"], ["核", "酸"], ["erm", "an"], ["▁comp", "ris"], ["▁estim", "ates"], ["a", "uc"], ["her", "ic"], ["G", "O"], ["▁J", "ul"], ["▁r", "id"], ["ous", "es"], ["m", "iss"], ["W", "TO"], ["管理", "与"], ["净", "化"], ["竞争", "优势"], ["调", "制"], ["▁mathemat", "ics"], ["以", "确保"], ["P", "e"], ["he", "art"], ["inn", "es"], ["机构", "和"], ["沿", "线"], ["▁calcul", "ated"], ["▁dial", "ogue"], ["▁A", "f"], ["人为", "本"], ["由此", "可见"], ["政治", "经济学"], ["内容", "和"], ["广东", "省"], ["理", "性的"], ["这", "对"], ["服务", "于"], ["梦", "想"], ["▁G", "irl"], [".▁", ".▁"], ["▁", "*▁"], ["參", "見"], ["这", "将"], ["的", "程度"], ["▁abs", "ence"], ["▁str", "ange"], ["助", "理"], ["ocyt", "es"], ["▁N", "az"], ["学", "前"], ["五", "四"], ["等", "相关"], ["学校", "的"], ["日", "前"], ["问题", "上"], ["aw", "are"], ["▁implement", "ed"], ["▁t", "act"], ["Fig", "ure"], ["▁meas", "uring"], ["▁", "ille"], ["▁paint", "ings"], ["化", "疗"], ["在", "进行"], ["Con", "nect"], ["en", "ess"], ["▁D", "ar"], ["地", "形"], ["▁athlet", "es"], ["▁S", "at"], ["▁path", "ways"], ["试", "题"], ["一", "线"], ["明", "清"], ["ik", "i"], ["▁dem", "ands"], ["▁eng", "ines"], ["▁est", "ate"], ["##", "▁"], ["第二", "章"], ["。", "」"], ["器", "和"], ["以", "太"], ["采", "访"], ["设", "有"], ["ann", "a"], ["。", "▁▁"], ["▁mit", "ig"], ["文物保护", "单位"], ["传统", "产业"], ["脆", "弱"], ["俄", "羅斯"], ["高", "性能"], ["參", "加"], ["基督", "教"], ["▁def", "ense"], ["char", "ge"], ["地", "进行"], ["F", "our"], ["ath", "an"], ["▁Gl", "obal"], ["▁sh", "ares"], ["U", "SA"], ["▁int", "rig"], ["▁equ", "ally"], ["▁mount", "ains"], ["ed", "eration"], ["万", "物"], ["极", "限"], ["分析", "方法"], ["Wh", "ite"], ["中", "对"], ["V", "A"], ["▁mag", "ic"], ["纽", "约"], ["▁ref", "uge"], ["ad", "der"], ["注意", "力"], ["医", "师"], ["▁Rep", "ort"], ["reg", "on"], ["ang", "ered"], ["▁st", "ead"], ["▁vol", "tage"], ["其中", "包括"], ["▁bur", "ning"], ["▁celebr", "ate"], ["▁sole", "ly"], ["▁V", "is"], ["▁F", "our"], ["心理", "健康"], ["另", "有"], ["证明", "了"], ["opy", "right"], ["▁int", "ensity"], ["▁res", "id"], ["▁light", "ing"], ["▁over", "come"], ["ater", "al"], ["江", "南"], ["接", "着"], ["恩", "格斯"], ["▁tow", "er"], ["亞", "洲"], ["营", "商"], ["竞争", "力的"], ["增加", "值"], ["最", "高的"], ["F", "i"], ["rou", "d"], ["▁M", "en"], ["消", "毒"], ["附", "属"], ["ac", "ob"], ["▁old", "est"], ["▁victim", "s"], ["教", "研"], ["连", "带"], ["我们", "必须"], ["▁custom", "er"], ["Writ", "e"], ["T", "w"], ["z", "er"], ["可", "知"], ["结果", "的"], ["©", "▁"], ["升", "值"], ["可以", "分为"], ["和", "政策"], ["缺", "血"], ["适应", "性"], ["国际", "社会"], ["P", "en"], ["ol", "t"], ["▁g", "athered"], ["f", "ocus"], ["收", "藏"], ["使用", "者"], ["空间", "的"], ["愿", "望"], ["L", "aw"], ["▁gu", "arant"], ["ran", "ch"], ["▁J", "ack"], ["▁O", "ther"], ["▁cover", "age"], ["▁fin", "ish"], ["新", "聞"], ["C", "oll"], ["瑞", "士"], ["几", "十"], ["薪", "酬"], ["预", "报"], ["要", "加强"], ["调", "试"], ["模", "板"], ["▁even", "ing"], ["▁exc", "ited"], ["▁b", "ag"], ["▁bi", "om"], ["▁neut", "ral"], ["▁p", "eoples"], ["▁accur", "ately"], ["▁r", "itual"], ["▁prob", "ability"], ["▁H", "is"], ["F", "rance"], ["l", "ook"], ["d", "el"], ["▁ecosystem", "s"], ["。", "["], ["的", "态度"], ["为", "指导"], ["电", "能"], ["过", "多"], ["欺", "诈"], ["完成", "的"], ["al", "ian"], ["h", "istor"], ["中国人民", "解放军"], ["▁F", "red"], ["ed", "u"], ["▁Can", "cer"], ["▁broad", "cast"], ["▁t", "rick"], ["▁interpret", "ation"], ["an", "ied"], ["昭", "和"], ["三", "级"], ["▁rob", "ust"], ["德", "里"], ["▁Br", "idge"], ["▁mod", "ified"], ["权", "重"], ["更", "重要的是"], ["案件", "的"], ["是", "由于"], ["▁wood", "en"], ["▁Mod", "ern"], ["判", "定"], ["根", "基"], ["▁concer", "ning"], ["位", "点"], ["条", "第"], ["马克思主义", "中国"], ["治理体系和", "治理能力"], ["业", "主"], ["公务", "员"], ["应", "以"], ["现", "阶段"], ["要", "从"], ["的", "治疗"], ["R", "O"], ["▁app", "eal"], ["联", "赛"], ["▁prevent", "ing"], ["▁scen", "es"], ["c", "ultural"], ["也", "不是"], ["做", "出了"], ["▁Phil", "ipp"], ["L", "ittle"], ["ha", "ust"], ["▁cal", "m"], ["▁act", "ing"], ["▁decl", "ared"], ["▁n", "ose"], ["▁(", ")▁"], ["更", "具"], ["周", "恩"], ["展", "览"], ["公", "允"], ["分别", "是"], ["ct", "ive"], ["课题", "组"], ["▁clean", "ing"], ["▁grow", "s"], ["▁purch", "ased"], ["▁r", "ats"], ["▁involve", "ment"], ["明", "白"], ["业务", "的"], ["f", "ire"], ["T", "exas"], ["Sm", "ith"], ["iox", "id"], ["酒", "店"], ["▁diam", "eter"], ["可以", "使用"], ["un", "s"], ["倾", "斜"], ["装", "配"], ["并", "无"], ["潜", "能"], ["偿", "还"], ["实", "在"], ["武", "帝"], ["ys", "elf"], ["▁cell", "ular"], [":", "("], ["皇", "家"], ["▁enh", "anced"], ["自动", "驾驶"], ["分", "別"], ["innes", "ota"], ["▁ep", "it"], ["▁prov", "ed"], ["ru", "b"], ["▁integ", "ration"], ["党的", "二十"], ["供", "需"], ["开发", "利用"], ["范围", "的"], ["se", "y"], ["羽", "毛"], ["终", "于"], ["項", "目"], ["▁ast", "hma"], ["▁fish", "ing"], ["l", "ive"], ["▁attem", "pts"], ["▁M", "id"], ["结构", "调整"], ["皮", "质"], ["▁Med", "ia"], ["▁R", "NA"], ["▁con", "clusion"], ["d", "oes"], ["sec", "ond"], ["▁def", "end"], ["▁supp", "osed"], ["d", "ate"], ["▁spect", "rum"], ["▁sens", "ors"], ["税", "法"], ["蒋", "介石"], ["月", "至"], ["▁to", "y"], ["ro", "ck"], ["O", "ff"], ["o", "ons"], ["▁depend", "ent"], ["卡", "尔"], ["▁virus", "es"], ["▁prec", "ise"], ["和", "不"], ["自然", "界"], ["Su", "pp"], ["pro", "cess"], ["▁vis", "ited"], ["到", "期"], ["的", "综合"], ["过", "失"], ["有", "很多"], ["的", "统一"], ["▁t", "ight"], ["▁analy", "zed"], ["▁phr", "ase"], ["▁pres", "erving"], ["▁rec", "over"], ["f", "eed"], ["荷", "兰"], ["Q", "ue"], ["▁F", "ire"], ["▁engine", "ers"], ["lect", "ing"], ["轻", "松"], ["据", "此"], ["也", "许"], ["被", "视为"], ["sc", "ience"], ["他", "说"], ["用", "工"], ["临床", "试验"], ["每", "个人"], ["何", "种"], ["公共", "利益"], ["林", "业"], ["有", "无"], ["还", "可"], ["b", "ul"], ["除", "此"], ["ian", "ts"], ["I", "g"], ["▁B", "u"], ["信", "道"], ["要", "想"], ["De", "cember"], ["國", "民"], ["▁stud", "io"], ["I", "ll"], ["同比", "增长"], ["人民", "民主"], ["附", "录"], ["大", "胆"], ["并", "存"], ["ess", "ment"], ["im", "pro"], ["op", "en"], ["e", "ast"], ["iss", "ance"], ["ple", "ase"], ["▁var", "ieties"], ["外", "来"], ["▁person", "ality"], ["▁deliv", "ered"], ["▁well", "being"], ["千", "瓦"], ["犯罪", "嫌疑"], ["投", "影"], ["汉", "族"], ["▁o", "vers"], ["法", "典"], ["年", "和"], ["adel", "ph"], ["▁weap", "ons"], ["ogen", "esis"], ["→", "▁"], ["线", "下"], ["是", "社会"], ["天", "主教"], ["itz", "er"], ["▁Budd", "h"], ["▁U", "r"], ["示", "例"], ["s", "um"], ["▁renew", "able"], ["▁techn", "ological"], ["▁ext", "end"], ["J", "ournal"], ["龙", "江"], ["結", "果"], ["u", "i"], ["▁Oh", "io"], ["ricult", "ure"], ["▁put", "ting"], ["▁c", "riminal"], ["》", "."], ["和", "处理"], ["经营", "管理"], ["增", "量"], ["仔", "细"], ["和", "生产"], ["每", "日"], ["▁L", "ee"], ["▁employ", "ment"], ["▁f", "lying"], ["▁hard", "er"], ["▁N", "atural"], ["制造", "商"], ["顾", "问"], ["器", "械"], ["聚", "合物"], ["B", "D"], ["▁P", "rize"], ["▁K", "ong"], ["▁L", "im"], ["。", "$"], ["座", "谈"], ["我国", "在"], ["▁b", "anks"], ["Mem", "bers"], ["▁min", "i"], ["p", "ur"], ["form", "ance"], ["选择", "性"], ["焊", "接"], ["和", "组织"], ["强制", "性"], ["输", "送"], ["▁con", "ven"], ["▁satis", "f"], ["▁consider", "ation"], ["以下几个", "方面"], ["分", "层"], ["余", "额"], ["淀", "粉"], ["基础", "性"], ["ex", "cept"], ["L", "ar"], ["let", "on"], ["▁c", "ash"], ["it", "ively"], ["▁display", "ed"], ["▁M", "ain"], ["▁C", "orn"], ["▁sec", "re"], ["sh", "aped"], ["以", "实现"], ["ividual", "s"], ["under", "standing"], ["▁cal", "ories"], ["▁lung", "s"], ["青", "春"], [".", "|"], ["产品", "质量"], ["国家", "战略"], ["設", "有"], ["▁pregn", "ant"], ["▁pro", "ceed"], ["▁qu", "alities"], ["▁scen", "arios"], ["ble", "m"], ["As", "k"], ["t", "d"], ["小", "說"], ["世界", "观"], ["可以", "帮助"], ["S", "er"], ["缓", "冲"], ["c", "n"], ["O", "ctober"], ["st", "orm"], ["ipp", "i"], ["▁Hol", "y"], ["感", "受到"], ["因", "地"], ["纳税", "人"], ["屏", "障"], ["保险", "人"], ["还", "将"], ["par", "ts"], ["ove", "ment"], ["M", "RI"], ["▁ris", "ing"], ["N", "ature"], ["P", "ersonal"], ["▁legisl", "ation"], ["低", "的"], ["和", "国际"], ["個", "人"], ["ress", "es"], ["▁tem", "por"], ["犯罪", "的"], ["儒", "学"], ["一个", "国家"], ["▁stre", "ets"], ["ether", "lands"], ["数据", "传输"], ["▁var", "iation"], ["▁can", "cers"], ["▁w", "ine"], ["一", "份"], ["出", "任"], ["隐", "藏"], ["S", "al"], ["im", "ents"], ["▁dis", "aster"], ["文化", "建设"], ["密集", "型"], ["adelph", "ia"], ["▁R", "ich"], ["v", "ance"], ["▁ag", "ed"], ["▁contribut", "es"], ["其", "二"], ["准确", "地"], ["互联", "互通"], ["理论", "基础"], ["不可", "避免"], ["沿", "着"], ["汇", "聚"], ["确定", "性"], ["身", "上"], ["he", "at"], ["▁Res", "ources"], ["行政区", "划"], ["雖", "然"], ["仍然", "是"], ["为基础", "的"], ["▁be", "at"], ["尼", "斯"], ["▁att", "ach"], ["▁sh", "op"], ["▁c", "av"], ["▁L", "uc"], ["不", "容"], ["所", "说的"], ["工", "伤"], ["P", "a"], ["▁He", "art"], ["j", "ud"], ["ie", "ve"], ["(,", "),"], ["公元", "前"], ["f", "oot"], ["i", "op"], ["am", "ous"], ["▁path", "way"], ["分析", "与"], ["即", "在"], ["胎", "儿"], ["我们", "对"], ["rese", "arch"], ["▁domin", "ant"], ["▁extra", "ordinary"], ["人", "員"], ["ik", "a"], ["▁Just", "ice"], ["金融", "业"], ["为", "重点"], ["增强", "了"], ["边", "际"], ["进入", "了"], ["▁review", "s"], [":", "“"], ["▁Ex", "pl"], ["的最", "终"], ["这是", "因为"], ["▁st", "ones"], ["男", "女"], ["un", "n"], ["ig", "ma"], ["本", "体"], ["广", "场"], ["伯", "特"], ["D", "oes"], ["▁b", "att"], ["▁min", "imal"], ["俱", "乐"], ["临", "界"], ["▁limit", "ations"], ["▁narr", "ative"], ["ut", "ely"], ["▁poss", "ibilities"], ["St", "ate"], ["遏", "制"], ["▁gal", "ax"], ["ict", "ional"], ["文", "的"], ["▁sub", "sequently"], ["仅", "有"], ["这", "么"], ["浪", "潮"], ["否", "认"], ["体", "重"], ["▁t", "ick"], ["累", "积"], ["▁mem", "or"], ["u", "er"], ["月", "的"], ["▁de", "ploy"], ["第三", "章"], ["宅", "基地"], ["摄", "入"], ["课", "外"], ["ym", "ptoms"], ["▁for", "g"], ["▁orig", "ins"], ["▁cl", "ient"], ["描", "绘"], ["▁sur", "g"], ["▁p", "ounds"], ["p", "m"], ["▁vess", "el"], ["民事", "诉讼"], ["饲", "料"], ["中", "枢"], ["恰", "当"], ["热", "量"], ["教", "会"], ["较", "快"], ["治疗", "的"], ["西", "洋"], ["▁ch", "ampions"], ["▁elect", "ions"], ["▁function", "ing"], ["\t\t", "\t\t"], ["▁K", "en"], ["▁execut", "ive"], ["itar", "ian"], ["▁pan", "els"], ["会", "出现"], ["▁ord", "inary"], ["c", "ap"], ["G", "old"], ["诗", "人"], ["Cont", "in"], ["▁H", "on"], ["▁emphas", "is"], ["▁sac", "r"], ["▁res", "c"], ["淋巴", "结"], ["el", "d"], ["首", "位"], ["用", "以"], ["負", "責"], ["C", "a"], ["▁cl", "ock"], ["▁min", "eral"], ["a", "very"], ["▁prov", "en"], ["▁am", "idst"], ["▁vibr", "ant"], ["ra", "ine"], ["谨", "慎"], ["致", "病"], ["▁l", "ingu"], ["as", "m"], ["gra", "de"], ["in", "flamm"], ["add", "ing"], ["▁dest", "ruction"], ["N", "ovember"], ["▁activ", "ely"], ["▁ident", "ities"], ["▁R", "am"], ["”,", "“"], ["\n", "  "], ["文化", "产业"], ["零", "部件"], ["着眼", "于"], ["水", "土"], ["制", "宜"], ["智", "库"], ["清", "醒"], ["诱", "发"], ["时", "机"], ["选", "拔"], ["国", "会"], ["综", "述"], ["▁Champions", "hips"], ["标", "本"], ["▁cl", "ients"], ["Su", "per"], ["下", "了"], ["也", "应"], ["曾", "任"], ["盲", "目"], ["Can", "adian"], ["z", "heimer"], ["▁bre", "aking"], ["▁marg", "inal"], ["igh", "th"], ["su", "pport"], ["▁ve", "ctor"], ["事件", "的"], ["物", "业"], ["水", "质"], ["离", "散"], ["规", "格"], ["不仅仅", "是"], ["角", "膜"], ["▁", "±"], ["十", "字"], ["Wh", "ich"], ["▁Con", "ference"], ["▁focus", "ing"], ["▁T", "wo"], ["▁E", "xt"], ["ol", "is"], ["▁T", "ype"], ["▁rem", "oval"], ["▁adap", "ted"], ["低", "收入"], ["清", "理"], ["超", "出"], ["P", "CR"], ["年", "后"], ["火", "山"], ["▁gent", "le"], ["賽", "事"], ["大", "夫"], ["第三", "次"], ["▁form", "ing"], ["▁maintain", "ed"], ["▁En", "ter"], ["d", "y"], ["的重要", "内容"], ["专", "制"], ["损", "耗"], ["和", "环境"], ["根据", "地"], ["中国", "人"], ["构成", "的"], ["ric", "ks"], ["e", "ither"], ["N", "a"], ["▁autom", "atically"], ["▁person", "nel"], ["的", "土地"], ["▁ne", "ural"], ["将", "是"], ["▁Bar", "on"], ["am", "ie"], ["▁ste", "am"], ["新的", "历史"], ["必", "修"], ["权利", "人"], ["设", "想"], ["望", "远"], ["ill", "age"], ["▁f", "ur"], ["av", "en"], ["in", "als"], ["古", "老"], ["▁pur", "s"], ["▁O", "F"], ["T", "H"], ["存", "量"], ["等", "多个"], ["签", "名"], ["精", "细"], ["色", "的"], ["▁cl", "othes"], ["▁ind", "eed"], ["▁phys", "ically"], ["ut", "ies"], ["N", "E"], ["You", "ng"], ["画", "面"], ["▁break", "s"], ["▁dist", "urb"], ["ro", "c"], ["▁ra", "c"], ["l", "ation"], ["能", "动"], ["制", "裁"], ["基", "石"], ["生态", "保护"], ["des", "ign"], ["▁sp", "r"], ["母", "亲"], ["▁vict", "ory"], ["村", "庄"], ["m", "ax"], ["播", "出"], ["row", "th"], ["▁p", "airs"], ["▁F", "ield"], ["照", "明"], ["en", "er"], ["▁ent", "ering"], ["▁port", "ray"], ["不", "大"], ["荣", "誉"], ["D", "irect"], ["▁s", "hed"], ["。", "。"], ["S", "W"], ["新", "业态"], ["绿色", "低碳"], ["品", "德"], ["底", "线"], ["见", "解"], ["感", "性"], ["固", "定的"], ["With", "in"], ["▁Are", "a"], ["e", "h"], ["W", "in"], ["al", "o"], ["显微", "镜"], ["的", "语言"], ["▁tit", "les"], ["▁comput", "ing"], ["医", "学院"], ["也", "包括"], ["ourn", "ament"], ["▁bet", "a"], ["▁war", "ning"], ["▁F", "ar"], ["的", "联系"], ["实", "地"], ["高", "新技术"], ["水", "肿"], ["源", "泉"], ["的", "现实"], ["ut", "her"], ["With", "out"], ["▁inter", "ior"], ["▁pass", "es"], ["士", "兵"], ["争", "论"], ["忠", "诚"], ["点", "击"], ["▁P", "ot"], ["ia", "h"], ["▁dis", "par"], ["可行", "性"], ["面", "貌"], ["之", "地"], ["的", "基因"], ["更", "改"], ["大", "事"], ["c", "ould"], ["cept", "ions"], ["▁aud", "io"], ["▁avail", "ability"], ["和", "地方"], ["会", "使"], ["备", "案"], ["的", "必要"], ["组", "分"], ["以", "提高"], ["的", "评价"], ["的", "服务"], ["com", "b"], ["▁I", "mp"], ["▁trans", "formation"], ["in", "te"], ["Fran", "k"], ["▁Sec", "urity"], ["▁con", "vert"], ["▁v", "el"], ["▁but", "ton"], ["D", "ou"], ["捕", "获"], ["性质", "的"], ["▁requ", "iring"], ["▁establish", "ments"], ["形势", "下"], ["医疗", "服务"], ["基础", "教育"], ["大幅", "度"], ["一", "词"], ["▁M", "ichigan"], ["▁vill", "ages"], ["▁gr", "ant"], ["▁earl", "iest"], ["▁ful", "f"], ["▁D", "ie"], ["山", "区"], ["gra", "du"], ["sug", "gest"], ["▁determ", "ination"], ["R", "D"], ["公平", "正义"], ["即", "便"], ["束", "缚"], ["他", "人的"], ["▁prog", "ression"], ["▁ear", "ned"], ["iz", "ers"], ["ing", "ing"], ["▁E", "U"], ["都", "具有"], ["估", "算"], ["本身", "的"], ["网", "关"], ["发表", "了"], ["变", "量的"], ["人口", "的"], ["ess", "ion"], ["per", "haps"], ["▁enthus", "ias"], ["▁explan", "ation"], ["戰", "爭"], ["有", "期徒刑"], ["细胞", "中"], ["中国共产党", "领导"], ["外", "观"], ["aw", "ay"], ["a", "que"], ["▁Scott", "ish"], ["Austral", "ia"], ["▁inhabit", "ants"], ["教", "堂"], ["s", "it"], ["重", "力"], ["和", "个人"], ["公安", "机关"], ["所", "学"], ["临床", "表现"], ["隐", "性"], ["常", "识"], ["帝国", "主义"], ["转移", "到"], ["▁comp", "ound"], ["拍", "摄"], ["amil", "iar"], ["孤", "立"], ["▁fl", "ash"], ["o", "is"], ["交换", "机"], ["有", "一定的"], ["▁Ch", "ange"], ["▁se", "ver"], ["▁print", "ing"], ["qu", "est"], ["▁ro", "yal"], ["▁high", "lights"], ["▁car", "cin"], ["▁vers", "us"], ["pt", "ic"], ["年夏季", "奥林匹克运动会"], ["图", "的"], ["石墨", "烯"], ["观察", "到"], ["▁or", "bit"], ["催", "生"], ["州", "的"], ["amp", "ion"], ["氧", "气"], ["▁enem", "y"], ["水", "量"], [".", "'▁"], ["▁apprec", "iation"], ["▁Reg", "ion"], ["既", "然"], ["理论", "体系"], ["▁f", "estival"], ["望远", "镜"], ["为", "何"], ["▁thous", "and"], ["ra", "v"], ["吉", "林"], ["为", "目标"], ["▁v", "oices"], ["导", "入"], ["▁assess", "ed"], ["riz", "ona"], ["职业", "技能"], ["理想", "信念"], ["严", "密"], ["也", "存在"], ["并", "进行"], ["ac", "qu"], ["ram", "e"], ["▁ro", "se"], ["▁S", "ign"], ["▁cur", "ve"], ["同", "类"], ["过去", "的"], ["▁music", "ians"], ["s", "ens"], ["in", "ates"], ["on", "ce"], ["Reg", "ular"], ["▁St", "an"], ["六", "年"], ["图", "表"], ["制度", "建设"], ["医疗", "机构"], ["与", "传统"], ["担", "心"], ["一", "人"], ["▁L", "ead"], ["▁con", "j"], ["ict", "ions"], ["▁fun", "g"], ["▁engine", "er"], ["n", "ecess"], ["▁emb", "ra"], ["aw", "n"], ["st", "ers"], ["C", "F"], ["出版", "的"], ["是", "个"], ["ric", "ted"], ["▁authent", "ic"], ["▁B", "ow"], ["▁t", "or"], ["團", "體"], ["所", "产生的"], ["操作", "性"], ["党", "政"], ["▁B", "al"], ["B", "O"], ["%", "~"], ["解", "散"], ["▁P", "oint"], ["H", "uman"], ["iss", "ippi"], ["▁sl", "avery"], ["聯", "合"], ["牢", "固"], ["均", "可"], ["重", "量"], ["ict", "ure"], ["▁J", "eff"], ["▁t", "on"], ["▁c", "ats"], ["ant", "i"], ["l", "an"], ["治", "安"], ["民营", "企业"], ["收入", "的"], ["可持续", "发展的"], ["权", "力的"], ["民族", "的"], ["▁High", "way"], ["▁consum", "e"], ["本", "研究"], ["▁elev", "ated"], ["D", "own"], ["ed", "ge"], ["▁et", "c"], ["▁evalu", "ated"], ["ne", "um"], ["ot", "ional"], ["在这种", "情况下"], ["波", "长"], ["应", "收"], ["影响", "到"], ["药", "物的"], ["京", "津"], ["手", "中"], ["世纪", "初"], ["成熟", "的"], ["▁tem", "porary"], ["▁contribut", "ing"], ["▁diet", "ary"], ["大", "陸"], ["不", "稳定"], ["类似", "的"], ["妻", "子"], ["er", "as"], ["f", "all"], ["▁W", "eek"], ["▁B", "at"], ["增长", "率"], ["植", "入"], ["▁dis", "abilities"], ["網", "站"], ["▁observ", "ation"], ["um", "er"], ["▁c", "ord"], ["物", "料"], ["叙", "述"], ["显示", "出"], ["▁bl", "ind"], ["dep", "ending"], ["▁household", "s"], ["▁ch", "ances"], ["▁ord", "ered"], ["m", "ates"], ["▁fing", "ers"], ["旅", "行"], ["▁football", "ers"], ["▁separ", "ated"], ["运营", "商"], ["ter", "ior"], ["e", "z"], ["▁Car", "l"], ["Europ", "ean"], ["▁A", "ff"], ["}", "{"], ["艰", "巨"], ["公", "主"], ["Sc", "ott"], ["的", "两"], ["▁fif", "th"], ["▁M", "arc"], ["▁C", "ub"], ["▁imp", "air"], ["和", "解"], ["▁H", "am"], ["▁G", "ame"], ["控制", "和"], ["效", "用"], ["▁hard", "ware"], ["▁stop", "ped"], ["r", "ial"], ["i", "ating"], ["▁Tr", "ust"], ["as", "ant"], ["▁l", "y"], ["严", "谨"], ["供", "求"], ["贫", "血"], ["▁inc", "ident"], ["▁collect", "ions"], ["共和", "國"], ["pre", "ne"], ["▁therm", "al"], ["已", "經"], ["▁In", "c"], ["还", "存在"], ["被", "迫"], ["ig", "her"], ["▁phys", "ician"], ["▁re", "ward"], ["▁f", "ostering"], ["計", "劃"], ["▁Re", "al"], ["S", "il"], ["ic", "ting"], ["设计", "与"], ["学", "员"], ["辉", "煌"], ["内部", "审计"], ["本", "来"], ["▁S", "anta"], ["少", "的"], ["画", "家"], ["並", "且"], ["▁K", "ent"], ["编", "号"], ["▁arg", "uments"], ["ou", "ds"], ["g", "ence"], ["d", "am"], ["S", "k"], ["性", "原则"], ["进一步", "提高"], ["不", "了"], ["提", "醒"], ["影", "片"], ["配", "音"], ["技", "術"], ["ed", "er"], ["▁med", "ieval"], ["▁rough", "ly"], ["光", "明"], ["保", "全"], ["试验", "区"], ["历", "代"], ["化学", "反应"], ["溶", "剂"], ["在", "一些"], ["二", "世"], ["艺术", "家"], ["▁m", "yself"], ["ex", "ts"], ["y", "ard"], ["▁direct", "ions"], ["▁rout", "es"], ["湿", "度"], ["关注", "的"], ["re", "prene"], ["”", "."], ["领", "袖"], ["▁Her", "itage"], ["c", "ur"], ["yn", "asty"], ["u", "z"], ["w", "ind"], ["\u0006", "\u0006"], ["全面从严", "治党"], ["之", "内"], ["征", "求"], ["科", "举"], ["pro", "duct"], ["一般", "来说"], ["以及", "对"], ["功", "夫"], ["凝", "胶"], ["即", "是"], ["播", "放"], ["有", "趣"], ["▁prepar", "ing"], ["▁when", "ever"], ["生物", "质"], ["▁pro", "spect"], ["名", "词"], ["财", "物"], ["看", "待"], ["阐述", "了"], ["企业", "管理"], ["致", "的"], ["之", "初"], ["高", "峰"], ["用", "例"], ["明", "治"], ["水", "分"], ["▁w", "at"], ["og", "y"], ["源", "自"], ["f", "ront"], ["是", "非"], ["开发", "和"], ["空", "白"], ["▁An", "alysis"], ["ib", "li"], ["erc", "ise"], ["▁obst", "acles"], ["社会", "保险"], ["趋", "于"], ["整", "治"], ["▁T", "our"], ["?", "**"], ["是指", "在"], ["概", "论"], ["的", "实验"], ["仅", "为"], ["az", "e"], ["ediat", "ric"], ["▁Olymp", "ic"], ["c", "ence"], ["▁h", "orses"], ["行政", "行为"], ["有关", "规定"], ["范围", "内的"], ["▁J", "ones"], ["▁loss", "es"], ["▁ch", "ocolate"], ["P", "ower"], ["▁sc", "hedule"], ["▁J", "an"], ["▁flex", "ible"], ["▁re", "aches"], ["b", "uilding"], ["F", "ebruary"], ["建设", "工程"], ["集体", "经济"], ["长", "效"], ["的", "事实"], ["打", "通"], ["御", "史"], ["的主要", "内容"], ["补", "助"], ["▁ass", "ets"], ["发布", "了"], ["▁dr", "inks"], ["▁l", "aser"], ["K", "now"], ["b", "est"], ["▁", ")▁"], ["细胞", "和"], ["通过", "了"], ["改", "制"], ["这样", "一个"], ["题", "材"], ["素", "材"], ["▁N", "ight"], ["▁sem", "i"], ["▁equ", "ality"], ["▁t", "ough"], ["▁deb", "t"], ["▁B", "ase"], ["▁", "id"], ["ut", "s"], ["行政", "处罚"], ["理论", "研究"], ["ail", "able"], ["原", "来的"], ["精", "心"], ["▁inf", "ect"], ["k", "ind"], ["▁F", "act"], ["▁B", "usiness"], ["or", "b"], ["elf", "are"], ["▁K", "now"], ["可以", "实现"], ["知识", "分子"], ["▁ju", "ice"], ["inc", "orpor"], ["▁leg", "end"], ["sh", "ould"], ["▁bal", "anced"], ["▁Sur", "vey"], ["自然", "保护"], ["规划", "和"], ["施", "加"], ["青", "藏"], ["▁expl", "ored"], ["▁veget", "ation"], ["▁su", "it"], ["▁m", "osqu"], ["▁plan", "ets"], ["▁di", "pl"], ["中国", "在"], ["相", "等"], ["之", "际"], ["杂", "交"], ["▁dro", "pped"], ["▁will", "ing"], ["的", "事"], ["i", "ations"], ["T", "op"], ["▁k", "in"], ["T", "ype"], ["、", "《"], ["主要", "矛盾"], ["银行", "的"], ["举", "例"], ["消费", "者的"], ["起", "草"], ["北", "宋"], ["抓", "手"], ["可以", "为"], ["▁class", "ified"], ["▁ver", "tical"], ["门", "槛"], ["▁B", "oy"], ["Pro", "t"], ["B", "er"], ["Japan", "ese"], ["▁trans", "mit"], ["▁contribut", "ion"], ["]", ";"], ["村", "落"], ["ran", "ean"], ["▁f", "ought"], ["▁sudden", "ly"], ["▁sh", "ock"], ["in", "ition"], ["土", "耳"], ["iv", "o"], ["▁prefer", "red"], ["中华", "文明"], ["更", "要"], ["亲", "自"], ["充分", "的"], ["温室", "气体"], ["政府", "在"], ["▁F", "er"], ["▁doll", "ars"], ["▁s", "elling"], ["日本", "的"], ["总", "部"], ["▁Aut", "hor"], ["▁indu", "ced"], ["ach", "ine"], ["app", "ed"], ["▁own", "ership"], ["安全", "和"], ["天", "的"], ["功", "耗"], ["ow", "a"], ["商", "人"], ["▁Th", "is"], ["isc", "ons"], ["▁illustr", "ate"], ["中", "长期"], ["尚", "不"], ["银", "行业"], ["废", "除"], ["▁d", "imensions"], ["▁mod", "erate"], ["▁C", "re"], ["状态", "的"], ["將", "軍"], ["▁Ch", "arl"], ["el", "ve"], ["a", "ug"], ["▁vir", "al"], ["▁sp", "oken"], ["Sm", "all"], ["▁strugg", "les"], ["届", "全国人大"], ["相", "位"], ["各", "界"], ["周恩", "来"], ["ane", "ous"], ["学", "和"], ["▁ar", "ter"], ["相", "邻"], ["▁lo", "op"], ["iscons", "in"], ["▁gl", "obe"], ["俱乐", "部"], ["水", "中"], ["精", "英"], ["的主", "题"], ["F", "M"], ["um", "ns"], ["電", "子"], ["▁b", "inding"], ["爱国", "主义"], ["复", "发"], ["产业", "集群"], ["数", "十"], ["见", "于"], ["综合", "素质"], ["赤", "字"], ["视", "力"], ["一直", "是"], ["教", "室"], ["党员", "干部"], ["分", "歧"], ["▁anal", "yt"], ["arm", "ing"], ["▁wonder", "ful"], ["決", "定"], ["▁comb", "ine"], ["▁tax", "es"], ["as", "is"], ["代理", "人"], ["黑", "龙江"], ["总", "局"], ["火", "灾"], ["特点", "是"], ["最", "好的"], ["▁man", "ual"], ["▁camp", "us"], ["共", "性"], ["中国特色社会主义", "制度"], ["发展", "与"], ["管理", "等"], ["健康", "的"], ["什么", "样的"], ["船", "舶"], ["sim", "ilar"], ["á", "n"], ["agn", "etic"], ["▁G", "eorgia"], ["▁Sh", "ow"], ["成", "品"], ["通常", "是"], ["▁diagn", "ostic"], ["▁f", "ert"], ["L", "L"], ["arch", "y"], ["S", "i"], ["海", "岸"], ["课堂", "上"], ["阵", "地"], ["▁J", "o"], ["缔", "约"], ["的", "东西"], ["▁sc", "ar"], ["▁com", "ments"], ["▁cho", "osing"], ["的", "含义"], ["废", "物"], ["▁S", "arah"], ["▁celebr", "ated"], ["▁character", "istic"], ["▁proport", "ion"], ["▁conf", "ident"], ["市", "的"], ["ur", "is"], ["土耳", "其"], ["Sh", "ort"], ["政", "法"], ["不动", "产"], ["加大", "对"], ["立", "案"], ["峰", "值"], ["文", "人"], ["语", "境"], ["▁B", "ut"], ["即", "为"], ["观", "众"], ["%", ".▁"], ["一个", "人"], ["要", "么"], ["s", "per"], ["▁c", "as"], ["▁gard", "ens"], ["▁haz", "ard"], ["▁than", "ks"], ["p", "ain"], ["▁El", "izabeth"], ["▁recept", "ors"], ["▁co", "at"], ["▁dr", "ivers"], ["新", "建"], ["▁c", "oc"], ["工业", "革命"], ["同", "等"], ["给", "付"], ["欧", "美"], ["的", "道路"], ["▁tra", "il"], ["ere", "n"], ["真", "空"], ["▁al", "le"], ["ok", "es"], ["com", "put"], ["▁sing", "er"], ["终", "结"], ["▁swim", "ming"], ["到", "来"], ["立", "德"], ["rem", "ember"], ["E", "r"], ["d", "imensional"], ["▁Mod", "el"], ["x", "im"], ["专业", "知识"], ["应", "变"], ["提", "炼"], ["收", "获"], ["▁sett", "led"], ["一", "支"], ["▁act", "ors"], ["特", "区"], ["l", "ink"], ["P", "resident"], ["▁par", "as"], ["▁A", "venue"], ["▁perform", "ances"], ["史", "学"], ["光", "电"], ["学", "业"], ["纯", "粹"], ["port", "ation"], ["依", "次"], ["t", "ension"], ["on", "ent"], ["出", "席"], ["▁h", "yd"], ["统一", "战线"], ["自然", "人"], ["军", "区"], ["▁a", "es"], ["▁g", "um"], ["▁elim", "inate"], ["有", "用"], ["▁psych", "ology"], ["▁O", "tt"], ["id", "al"], ["▁pr", "ime"], ["▁bo", "at"], ["▁replace", "ment"], ["ag", "re"], ["▁occur", "ring"], ["的", "限制"], ["體", "育"], ["b", "urn"], ["▁pro", "lif"], ["ard", "ing"], ["▁aud", "iences"], ["▁del", "icious"], ["▁win", "ning"], ["抗日", "战争"], ["外", "商"], ["创造", "力"], ["质", "押"], ["返", "还"], ["领", "会"], ["启", "蒙"], ["欲", "望"], ["的大", "量"], ["olit", "an"], ["▁se", "gment"], ["▁per", "mission"], ["青", "山"], ["▁ant", "icip"], ["▁pre", "y"], ["不", "超过"], ["更多", "地"], ["▁deg", "rad"], ["f", "old"], ["ch", "ron"], ["逮", "捕"], ["▁dat", "as"], ["▁A", "z"], ["▁repl", "ied"], ["▁super", "ior"], ["ol", "ly"], ["M", "el"], ["▁v", "on"], ["外", "贸"], ["下", "一步"], ["大", "体"], ["商业", "模式"], ["折", "旧"], ["前所未", "有的"], ["汉", "代"], ["龙", "头"], ["亲", "属"], ["▁pl", "asma"], ["▁upd", "ated"], ["▁Organ", "ization"], ["f", "ly"], ["f", "s"], ["▁C", "r"], ["ut", "ing"], ["罪", "的"], ["清华", "大学"], ["倾向", "于"], ["的", "机制"], ["ra", "q"], ["展示", "了"], ["▁M", "ath"], ["▁J", "ohnson"], ["▁cool", "ing"], ["▁equ", "ipped"], ["条", "的规定"], ["网", "友"], ["县", "域"], ["头", "脑"], ["节", "课"], ["学习", "者"], ["列", "举"], ["支", "部"], ["有", "两种"], ["t", "able"], ["▁cover", "ing"], ["▁develop", "ments"], ["▁d", "il"], ["et", "ary"], ["▁promot", "ed"], ["och", "ond"], ["there", "fore"], ["▁", ";"], ["u", "v"], ["合理", "性"], ["▁analy", "zing"], ["ul", "ed"], ["网络", "化"], ["准备", "金"], ["或", "缺"], ["预", "见"], ["房", "产"], ["校", "企"], ["射", "频"], ["全", "年"], ["起", "到了"], ["▁inter", "face"], ["一", "半"], ["’", ",▁"], ["▁adj", "acent"], ["▁opin", "ions"], ["bor", "ne"], ["▁rec", "re"], ["reg", "ation"], ["職", "業"], ["▁pol", "ar"], ["B", "ill"], ["▁ext", "ension"], ["▁l", "ists"], ["▁expl", "icit"], ["▁popular", "ity"], ["]", "\\"], ["质", "生产力"], ["和", "信息"], ["工", "农"], ["▁establish", "ment"], ["er", "ted"], ["phib", "ians"], ["g", "roup"], ["▁p", "y"], ["ast", "ics"], ["V", "R"], ["G", "R"], ["财政", "部"], ["一", "场"], ["显著", "的"], ["计划", "的"], ["▁st", "ood"], ["标", "题"], ["▁sh", "orter"], ["▁we", "igh"], ["i", "ac"], ["ug", "s"], [")", "{"], ["发展", "规律"], ["解", "答"], ["主要", "体现在"], ["量子", "计算"], ["都", "必须"], ["甲状", "腺"], ["柴", "油"], ["th", "od"], ["学术", "界"], ["w", "omen"], ["▁market", "ing"], ["队", "列"], ["▁E", "qu"], ["酸", "盐"], ["▁J", "ackson"], ["产", "权的"], ["各", "省"], ["抵", "御"], ["▁happ", "iness"], ["▁conf", "irm"], ["才", "会"], ["介", "导"], ["g", "ien"], ["▁design", "ing"], ["▁landsc", "apes"], ["ecut", "ive"], ["ry", "ing"], ["lic", "ations"], ["h", "ops"], ["江苏", "省"], ["实践", "教学"], ["主", "机"], ["经济", "的发展"], ["bl", "ack"], ["▁per", "ception"], ["▁", "|"], ["但是", "在"], ["有所", "不同"], ["writ", "ten"], ["rain", "ed"], ["话", "题"], ["植", "被"], ["规模", "的"], ["七", "年"], ["help", "ing"], ["▁William", "s"], ["str", "ong"], ["T", "im"], ["▁dis", "ability"], ["要", "实现"], ["数据", "采集"], ["最大限度", "地"], ["思维", "的"], ["主动", "性"], ["▁rad", "ical"], ["查", "找"], ["道", "的"], ["曾", "在"], ["▁A", "wards"], ["▁Sund", "ay"], ["cyclop", "edia"], ["▁flex", "ibility"], ["有", "两个"], ["构建", "了"], ["低", "下"], ["条件", "和"], ["▁color", "ful"], ["sh", "ort"], ["T", "ur"], ["app", "y"], ["B", "R"], ["▁be", "ach"], ["制", "剂"], ["适", "用的"], ["▁mere", "ly"], ["L", "O"], ["▁fat", "ty"], ["▁controll", "ing"], ["▁met", "res"], ["第十", "二"], ["课", "文"], ["当", "作"], ["夫", "人"], ["i", "ary"], ["Sh", "are"], ["yd", "ney"], ["▁Pro", "cess"], ["▁ab", "stract"], ["▁d", "uration"], ["▁em", "pty"], ["▁fall", "ing"], ["发展", "道路"], ["其", "对"], ["必然", "要求"], ["现实", "的"], ["上", "诉"], ["In", "cre"], ["'", ".▁"], ["▁w", "ise"], ["re", "port"], ["解", "剖"], ["尔", "斯"], ["所在", "地"], ["▁P", "rim"], ["the", "less"], ["▁un", "cle"], ["生", "產"], ["数据", "显示"], ["认识", "和"], ["收", "取"], ["S", "ir"], ["的", "模式"], ["▁On", "line"], ["全", "程"], ["口", "头"], ["事", "先"], ["错误", "的"], ["▁char", "ts"], ["▁quant", "um"], ["▁mor", "ph"], ["du", "ction"], ["Rec", "ent"], ["y", "te"], ["oc", "ated"], ["▁count", "less"], ["▁priv", "acy"], ["经济", "全球化"], ["应用", "型"], ["内部", "控制"], ["不", "宜"], ["厚", "度"], ["▁trans", "plant"], ["▁v", "ocal"], ["防", "火"], ["▁Histor", "ical"], ["▁tri", "bes"], ["▁h", "urt"], ["▁incorpor", "ated"], ["▁prec", "ious"], ["end", "ar"], ["▁±", "▁"], ["▁", ">"], ["以", "致"], ["▁U", "SA"], ["伦", "敦"], ["▁scen", "ario"], ["▁Ab", "out"], ["er", "ts"], ["ll", "a"], ["的", "自"], ["▁w", "ing"], ["S", "H"], ["▁absor", "b"], ["V", "ar"], ["阐", "明"], ["▁adv", "ers"], ["as", "ures"], ["ig", "ion"], ["▁exp", "ed"], ["▁mark", "ers"], ["▁perce", "ived"], ["表", "的"], ["▁Pr", "ince"], ["開", "發"], ["▁produ", "cer"], ["管理", "部门"], ["交易", "的"], ["集", "约"], ["链", "路"], ["局限", "于"], ["▁b", "omb"], ["▁Str", "ateg"], ["F", "lorida"], ["W", "ill"], ["战", "胜"], ["创", "办"], ["bre", "aking"], ["结束", "后"], ["▁base", "ball"], ["▁Pr", "inc"], ["应用", "中"], ["▁analys", "es"], ["▁cop", "ies"], ["▁excit", "ement"], ["▁ro", "oms"], ["第四", "章"], ["测", "评"], ["信息", "和"], ["力", "量的"], ["国家", "公园"], ["验", "收"], ["医", "保"], ["胆", "固醇"], ["肾", "脏"], ["专", "注"], ["Lear", "ning"], ["系统", "地"], ["keep", "ing"], ["N", "C"], ["it", "ches"], ["ag", "g"], ["S", "V"], ["▁L", "et"], ["G", "r"], ["与", "方法"], ["在", "企业"], ["▁cardi", "ac"], ["獎", "牌得主"], ["▁conver", "ted"], ["▁p", "ione"], ["▁inter", "pre"], ["B", "uilding"], ["▁ag", "ing"], ["cont", "in"], ["深入", "推进"], ["收益", "率"], ["成本", "的"], ["着", "手"], ["精", "力"], ["开放", "的"], ["在", "内"], ["▁assist", "ant"], ["獨", "立"], ["手", "工"], ["es", "ides"], ["▁text", "ure"], ["沉", "淀"], ["^", "{"], ["一", "类"], ["▁Alex", "ander"], ["▁par", "ks"], ["l", "ater"], ["并", "于"], ["▁S", "upreme"], ["ol", "ph"], ["▁pil", "ot"], ["or", "us"], ["全体", "人民"], ["非物质", "文化遗产"], ["作品", "的"], ["患", "病"], ["的基本", "原则"], ["▁gr", "anted"], ["▁somew", "hat"], ["▁D", "ictionary"], ["機", "構"], ["偶", "然"], [")▁", "=▁"], ["l", "en"], ["机动", "车"], ["过", "来"], ["实际", "的"], ["那", "种"], ["得", "益"], ["▁b", "low"], ["上", "帝"], ["夺", "取"], ["▁Count", "ry"], ["p", "ersonal"], ["ay", "er"], ["▁B", "ang"], ["▁trig", "ger"], ["ment", "ed"], ["精神", "和"], ["的", "意见"], ["语言", "文字"], ["合作", "的"], ["仍", "是"], ["艰", "难"], ["年", "限"], ["▁s", "oph"], ["▁Christian", "ity"], ["受到", "了"], ["年", "第"], ["c", "ule"], ["機", "場"], ["▁state", "ments"], ["en", "abling"], ["▁stru", "ck"], ["▁ex", "ch"], ["Tra", "ck"], ["▁surpr", "ising"], ["是否", "有"], ["品", "格"], ["保", "護"], ["▁", "es"], ["纪", "录"], ["▁Cons", "ervation"], ["▁R", "oute"], ["▁htt", "p"], ["▁", "£"], ["S", "F"], ["▁N", "orm"], ["iv", "als"], ["▁altern", "atives"], ["▁gra", "ins"], ["▁insp", "ire"], ["▁weak", "ness"], ["而", "对"], ["上", "年"], ["考", "量"], ["交", "际"], ["因地", "制宜"], ["标", "注"], ["▁H", "un"], ["▁g", "rain"], ["部分", "的"], ["感", "兴趣"], ["▁graph", "ic"], ["p", "res"], ["▁en", "comp"], ["▁adv", "is"], ["游", "泳"], ["稳", "健"], ["但", "它"], ["亟", "待"], ["兴", "奋"], ["特", "质"], ["审", "视"], ["▁class", "ification"], ["▁inflamm", "atory"], ["▁diff", "er"], ["the", "w"], ["▁Tem", "ple"], ["▁g", "ases"], ["▁sever", "ity"], ["is", "ition"], ["▁cop", "per"], ["▁Represent", "atives"], ["▁w", "ings"], [".", ";▁"], ["税", "制"], ["阵", "列"], ["探测", "器"], ["指导", "下"], ["力", "求"], ["针对", "性"], ["在", "学习"], ["V", "iew"], ["尚", "书"], ["关系", "到"], ["sy", "stem"], ["H", "y"], ["快", "乐"], ["那", "个"], ["M", "or"], ["ort", "ed"], ["ri", "um"], ["时", "钟"], ["岩", "石"], ["▁H", "and"], ["加快", "建设"], ["规模", "化"], ["中", "进行"], ["破", "裂"], ["约", "占"], ["五", "是"], ["存", "货"], ["市", "政府"], ["与", "国际"], ["患", "儿"], ["我们", "认为"], ["阻", "力"], ["权利", "和"], ["如", "同"], ["眼", "睛"], ["平", "原"], ["▁illness", "es"], ["▁inf", "ant"], ["ine", "a"], ["D", "et"], ["加", "利"], ["高", "层"], ["▁report", "ing"], ["irt", "ual"], ["▁under", "ground"], ["▁human", "ity"], ["b", "ound"], ["alleng", "es"], ["坚持", "和发展"], ["管理", "办法"], ["事", "后"], ["老", "百姓"], ["奴", "隶"], ["焦", "虑"], ["D", "raw"], ["引起", "了"], ["和", "大"], ["▁er", "u"], ["▁fact", "ory"], ["n", "amed"], ["▁g", "est"], ["ven", "ile"], ["En", "ter"], ["p", "ow"], ["多", "为"], ["进", "度"], ["适", "时"], ["d", "iv"], ["王", "国"], ["再", "度"], ["▁prov", "ider"], ["▁met", "als"], ["▁opp", "osed"], ["▁plant", "ing"], ["提", "及"], ["b", "en"], ["职业", "道德"], ["户", "籍"], ["积极", "探索"], ["改革", "发展"], ["W", "ork"], ["An", "n"], ["▁Prot", "ection"], ["▁I", "ran"], ["▁univers", "al"], ["▁defe", "ated"], ["▁seem", "ingly"], ["擁", "有"], ["▁chem", "istry"], ["ag", "an"], ["自", "立"], ["G", "iven"], ["▁mov", "ies"], ["▁inf", "ants"], ["▁pe", "ers"], ["▁Kore", "an"], ["亿", "吨"], ["独立", "性"], ["君", "子"], ["ent", "er"], ["数", "组"], ["六", "个"], ["Histor", "ical"], ["▁pract", "ition"], ["▁investig", "ated"], ["▁min", "ister"], ["加", "州"], ["enn", "es"], ["當", "地"], ["od", "ed"], ["▁Con", "stitution"], ["health", "y"], ["B", "ur"], ["九", "年"], ["中", "西"], ["互", "助"], ["人", "性"], ["oc", "a"], ["m", "outh"], ["▁comb", "ining"], ["H", "enry"], ["要求", "学生"], ["战", "术"], ["是否", "存在"], ["▁ir", "rit"], ["书", "籍"], ["紀", "錄"], ["B", "E"], ["in", "th"], ["▁Sen", "ate"], ["▁program", "me"], ["正常", "的"], ["无", "力"], ["经验", "的"], ["级", "的"], ["计", "数"], ["衰", "老"], ["▁emb", "ry"], ["▁P", "ur"], ["l", "ock"], ["▁po", "et"], ["▁hun", "ting"], ["人民", "生活"], ["新能源", "汽车"], ["有机", "结合"], ["教育", "与"], ["新", "时期"], ["技术", "等"], ["毒", "素"], ["議", "會"], ["坚", "守"], ["书", "院"], ["电", "场"], ["錦", "標"], ["cell", "ular"], ["▁consider", "able"], ["失去", "了"], ["ure", "au"], ["▁W", "ord"], ["▁H", "eb"], ["▁ret", "ire"], ["▁ch", "icken"], ["▁consist", "ently"], ["▁surg", "ical"], ["和", "支持"], ["流", "传"], ["规范", "的"], ["的", "性能"], ["一", "座"], ["k", "ed"], ["▁bacter", "ial"], ["▁club", "s"], ["▁dist", "ances"], ["▁ess", "ays"], ["赔偿", "责任"], ["中", "去"], ["刑事", "责任"], ["课程", "体系"], ["执行", "的"], ["▁ch", "lor"], ["狭", "义"], ["因为", "它"], ["E", "ast"], ["str", "ial"], ["▁sp", "atial"], ["▁antibiot", "ics"], ["▁flav", "ors"], ["▁view", "ed"], ["if", "ier"], ["口", "腔"], ["已", "有的"], ["卷", "积"], ["he", "a"], ["老", "人"], ["▁Corpor", "ation"], ["ch", "a"], ["▁un", "w"], ["claim", "ed"], ["行政", "诉讼"], ["和", "精神"], ["葡萄", "糖"], ["肺", "癌"], ["ol", "er"], ["fore", "st"], ["▁essential", "ly"], ["病毒", "感染"], ["▁", "..."], ["v", "ia"], ["▁Ar", "m"], ["▁S", "afety"], ["▁ord", "ers"], ["h", "u"], ["▁demonstr", "ates"], ["▁un", "less"], ["像", "素"], ["社会主义", "建设"], ["经营", "权"], ["▁antib", "odies"], ["im", "b"], ["W", "hether"], ["▁ex", "haust"], ["m", "ers"], ["路", "易"], ["图", "中"], ["刑", "罚"], ["ze", "ch"], ["▁metab", "olism"], ["死亡", "率"], ["额", "外"], ["L", "inux"], ["▁Pen", "nsylvania"], ["p", "ack"], ["S", "how"], ["mon", "ary"], ["Per", "haps"], ["▁B", "ack"], ["教学", "目标"], ["全国", "人民代表大会"], ["民主", "政治"], ["知", "情"], ["就", "在于"], ["理解", "为"], ["基因", "的"], ["显", "着"], ["特", "有的"], ["L", "D"], ["ir", "k"], ["po", "ints"], ["▁f", "et"], ["inc", "ial"], ["▁ant", "ioxid"], ["J", "oseph"], ["F", "P"], ["此", "种"], ["骨", "折"], ["M", "ont"], ["s", "yn"], ["▁Pol", "and"], ["P", "O"], ["实质", "性"], ["日", "内"], ["依", "存"], ["局", "长"], ["场", "合"], ["et", "ition"], ["已", "在"], ["▁O", "ur"], ["F", "T"], ["▁basket", "ball"], ["▁conclud", "ed"], ["▁dram", "a"], ["▁h", "oney"], ["(", "\""], ["▁gra", "d"], ["ep", "h"], ["atern", "al"], ["的", "手段"], ["叙", "事"], ["▁adv", "erse"], ["句", "子"], ["▁photograph", "s"], ["的", "实现"], ["國", "立"], ["▁Ber", "lin"], ["e", "fficient"], ["两", "条"], ["消", "防"], ["源", "性"], ["南", "海"], ["年夏季", "奧林匹克運動會"], ["g", "ood"], ["▁pand", "emic"], ["▁bra", "ins"], ["▁far", "ms"], ["▁mist", "akes"], ["▁recycl", "ing"], ["吸", "烟"], ["rid", "ay"], ["招", "聘"], ["需要", "对"], ["段", "的"], ["not", "e"], ["▁rare", "ly"], ["▁p", "in"], ["ass", "oci"], ["兩", "個"], ["罚", "款"], ["污染", "防治"], ["电", "容"], ["市场", "竞争"], ["可", "将"], ["张", "力"], ["非", "遗"], ["混", "淆"], ["▁volunte", "ers"], ["坦", "克"], ["ap", "or"], ["n", "ia"], ["N", "H"], ["不", "对称"], ["形成", "一个"], ["光", "源"], ["▁manufacture", "rs"], ["▁", "】"], ["▁influ", "ential"], ["▁gra", "vity"], ["if", "er"], ["▁Un", "it"], ["Oh", "io"], ["\u0005", "\u0005"], ["不", "懈"], ["意识", "的"], ["弊", "端"], ["[", "[@"], ["北", "美"], ["一", "道"], ["存", "活"], ["的", "水平"], ["溃", "疡"], ["▁M", "aster"], ["▁process", "ed"], ["▁strateg", "ic"], ["▁par", "ish"], ["O", "lymp"], ["栽", "培"], ["马", "来"], ["▁n", "one"], ["▁H", "ung"], ["▁aut", "o"], ["▁Pl", "ant"], ["▁Pol", "ish"], ["▁al", "umni"], ["w", "id"], ["▁achie", "ving"], ["▁dec", "ay"], ["您", "的"], ["八", "年"], ["抗", "生素"], ["紫", "外"], ["社会", "化"], ["B", "ig"], ["波", "兰"], ["um", "atic"], ["Expl", "oring"], ["▁or", "b"], ["T", "ele"], ["T", "r"], ["ens", "is"], ["▁occ", "as"], ["▁Victor", "ia"], ["▁trans", "formed"], ["转换", "为"], ["▁Ch", "ief"], ["tain", "s"], ["▁agg", "ressive"], ["▁tra", "ins"], ["值", "为"], ["西", "哥"], ["pt", "on"], ["▁dr", "iven"], ["▁ret", "ired"], ["更加", "注重"], ["促进", "学生"], ["调查", "研究"], ["过", "高"], ["的", "内涵"], ["全", "市"], ["这", "在"], ["首先", "是"], ["应", "付"], ["中国", "政府"], ["來", "源"], ["B", "u"], ["H", "IV"], ["I", "O"], ["的", "城市"], [".", "'"], ["▁h", "am"], ["▁implement", "ing"], ["▁se", "am"], ["价", "的"], ["少", "量"], ["别", "人"], ["让", "我们"], ["▁administr", "ative"], ["T", "CP"], ["▁D", "am"], ["▁Al", "zheimer"], ["M", "M"], ["多", "重"], ["▁S", "ports"], ["▁product", "ivity"], ["sh", "ire"], ["▁any", "where"], ["▁Viet", "nam"], ["▁V", "an"], ["理", "学"], ["选择", "的"], ["确", "诊"], ["都", "将"], ["图", "案"], ["st", "ar"], ["pr", "ise"], ["该", "项"], ["微", "波"], ["当", "选"], ["巨", "噬"], ["同", "事"], ["无", "机"], ["精", "密"], ["▁sp", "in"], ["唱", "片"], ["comp", "ared"], ["三", "类"], ["会计", "准则"], ["整", "体的"], ["伪", "造"], ["规则", "的"], ["主", "编"], ["b", "usiness"], ["海", "域"], ["只", "需"], ["Eng", "land"], ["▁lif", "etime"], ["的一", "個"], ["原", "文"], ["▁char", "ged"], ["R", "oman"], ["为", "民"], ["的", "特殊"], ["所", "能"], ["RF", "ID"], ["r", "ange"], ["▁b", "ought"], ["▁circ", "ulation"], ["正", "处于"], ["照", "射"], ["能力的", "培养"], ["自主", "创新"], ["紧", "缩"], ["在", "北京"], ["在", "使用"], ["olog", "ically"], ["▁re", "verse"], ["ist", "ent"], ["不", "清"], ["科学家", "们"], ["ic", "on"], ["▁a", "ster"], ["▁b", "ags"], ["ong", "ue"], ["▁background", "s"], ["▁fib", "ers"], ["▁w", "ider"], ["elt", "a"], ["三", "者"], ["不可", "或缺"], ["优", "于"], ["仪", "式"], ["t", "i"], ["可靠", "的"], ["▁promot", "es"], ["▁m", "ine"], ["羽毛", "球"], ["▁r", "iding"], ["▁wond", "ered"], ["同", "行"], ["司", "马"], ["万", "个"], ["契", "机"], ["主要", "内容"], ["▁initi", "ative"], ["太", "子"], ["▁encount", "ered"], ["▁partn", "ership"], ["▁G", "ar"], ["▁log", "ic"], ["n", "ear"], ["快速", "增长"], ["营商", "环境"], ["完", "美"], ["成本", "和"], ["一个", "重要"], ["资金", "的"], ["评价", "体系"], ["▁N", "O"], ["哪", "个"], ["as", "hes"], ["▁independ", "ently"], ["A", "K"], ["▁comp", "ens"], ["就", "在"], ["海", "量"], ["总", "线"], ["投", "放"], ["管理", "模式"], ["v", "it"], ["篇", "文章"], ["与", "环境"], ["始", "于"], ["天", "体"], ["Th", "anks"], ["▁cele", "b"], ["S", "un"], ["紀", "念"], ["ustain", "able"], ["▁pre", "ced"], ["较", "强"], ["和", "发展的"], ["ap", "ore"], ["传", "说"], ["iter", "ranean"], ["St", "and"], ["amm", "a"], ["▁E", "ffect"], ["W", "S"], ["▁Cent", "ury"], ["▁Cl", "imate"], ["强调", "了"], ["cons", "cious"], ["▁cl", "ar"], ["的", "程序"], ["高", "雄"], ["▁lab", "els"], ["pl", "us"], ["al", "em"], ["read", "ing"], ["o", "op"], ["发展", "阶段"], ["可", "使"], ["山东", "省"], ["筹", "资"], ["真实", "的"], ["▁d", "ies"], ["▁stri", "ke"], [",", "\""], ["对", "这些"], ["切", "换"], ["▁pro", "of"], ["▁wh", "atever"], ["称", "作"], ["很好", "地"], ["s", "il"], ["ib", "bean"], ["分", "校"], ["之", "时"], ["数", "目"], ["的", "趋势"], ["不", "多"], ["ap", "el"], ["u", "ate"], ["向", "上"], ["正", "规"], ["z", "o"], ["行动", "计划"], ["初级", "阶段"], ["各", "领域"], ["作用", "下"], ["清洁", "能源"], ["助", "推"], ["湾", "区"], ["▁max", "im"], ["al", "ks"], ["准确", "的"], ["▁s", "ampl"], ["主", "演"], ["▁L", "i"], ["▁f", "ires"], ["▁point", "ed"], ["的", "高度"], ["把", "它"], ["预", "先"], ["造", "就"], ["描", "写"], ["Care", "er"], ["ht", "ml"], ["s", "ite"], ["se", "ud"], ["▁t", "one"], ["g", "ov"], ["▁res", "idential"], ["▁app", "s"], ["▁ur", "ine"], ["公", "证"], ["嘉", "靖"], ["E", "ss"], ["不", "一致"], ["偏", "好"], ["这", "条"], ["奇", "迹"], ["亦", "有"], ["▁U", "k"], ["位", "一体"], ["備", "註"], ["Other", "s"], ["B", "V"], ["pr", "im"], ["是", "用"], ["转", "发"], ["骨", "骼"], ["m", "il"], ["rum", "s"], ["on", "ial"], ["▁sum", "mary"], ["▁l", "oud"], ["▁manag", "ers"], ["▁▁", "《"], ["思维", "能力"], ["可以", "使"], ["为", "由"], ["而", "来"], ["牵", "引"], ["▁T", "HE"], ["一般", "的"], ["指", "针"], ["华", "北"], ["▁L", "incoln"], ["▁inv", "asion"], ["▁F", "und"], ["cl", "er"], ["▁B", "uilding"], ["全", "國"], ["西部", "地区"], ["要", "通过"], ["中", "日"], ["L", "ow"], ["▁gen", "u"], ["不", "充分"], ["降", "至"], ["违法", "行为"], ["趋", "向"], ["回", "避"], ["安", "置"], ["残", "留"], ["治理", "的"], ["ivers", "ary"], ["不", "必"], ["等", "特点"], ["不", "太"], ["▁s", "in"], ["莱", "茵"], ["▁M", "ap"], ["▁jud", "ge"], ["em", "an"], ["▁fant", "astic"], ["D", "iv"], ["▁The", "atre"], ["下", "午"], ["生", "化"], ["职业", "学校"], ["试", "剂"], ["nd", "s"], ["福", "祉"], ["su", "ccess"], ["▁doub", "t"], ["▁b", "ands"], ["▁re", "ferences"], ["AC", "E"], ["多", "人"], ["对照", "组"], ["知识", "与"], ["重", "症"], ["增", "收"], ["筹", "划"], ["的", "地位"], ["aw", "s"], ["▁c", "odes"], ["▁meet", "ings"], ["ang", "a"], ["▁researc", "her"], ["▁according", "ly"], ["Mart", "in"], ["▁F", "air"], ["婴", "儿"], ["灌", "溉"], ["如何", "在"], ["肥", "胖"], ["B", "eg"], ["lik", "ely"], ["▁ex", "ceed"], ["▁predict", "ed"], ["re", "ction"], ["Cent", "ral"], ["动", "产"], ["新", "材料"], ["疫情", "防控"], ["死", "刑"], ["尤其", "是在"], ["▁gl", "ob"], ["ens", "ed"], ["ad", "ed"], ["的", "心"], ["qu", "arters"], ["Con", "f"], ["om", "pson"], ["▁offic", "ially"], ["▁preval", "ence"], ["tern", "oon"], ["fact", "ion"], ["湖", "泊"], ["花", "费"], ["急", "剧"], ["N", "K"], ["▁d", "rought"], ["d", "ied"], ["▁leg", "acy"], ["▁sc", "ored"], ["▁un", "ity"], ["舉", "行"], ["▁metab", "olic"], ["%", ";"], ["全面建设社会主义现代化", "国家"], ["民", "意"], ["自我", "革命"], ["建设", "用地"], ["法律", "关系"], ["▁mut", "ual"], ["、", "、"], ["常", "数"], ["靠", "近"], ["▁holid", "ay"], ["▁gra", "des"], ["▁m", "ature"], ["n", "ames"], ["▁Islam", "ic"], ["▁ec", "ological"], ["却", "是"], ["双", "边"], ["if", "ts"], ["▁L", "y"], ["在", "某些"], ["给", "出了"], ["病毒", "的"], ["▁candid", "ates"], ["▁b", "ite"], ["▁sp", "oke"], ["▁O", "bs"], ["▁P", "rem"], ["世界大", "战"], ["外", "在"], ["主体", "地位"], ["医疗", "保险"], ["不", "具有"], ["盗", "窃"], ["较", "差"], ["放", "置"], ["任务", "的"], ["g", "overnment"], ["▁address", "ed"], ["▁inv", "asive"], ["相", "机"], ["ris", "k"], ["▁mut", "ations"], ["不", "好"], ["研究", "对象"], ["之", "以"], ["刚", "刚"], ["孟", "子"], ["hed", "ral"], ["▁En", "vironment"], ["高", "科技"], ["ang", "ers"], ["▁Mar", "ia"], ["ac", "ial"], ["C", "reating"], ["▁Ar", "ctic"], ["▁Be", "ach"], ["▁pow", "der"], ["墨", "西哥"], ["科研", "人员"], ["舉", "人"], ["结", "点"], ["工", "序"], ["导", "弹"], ["特色", "的"], ["系统", "工程"], ["▁num", "er"], ["▁bro", "ke"], ["▁coun", "sel"], ["▁else", "where"], ["成", "績"], ["▁to", "m"], ["石", "器"], ["B", "orn"], ["▁convers", "ion"], ["▁P", "rop"], ["▁pres", "erved"], ["is", "ely"], ["▁Pol", "it"], ["ile", "y"], ["国家和", "地区"], ["保", "管"], ["辩", "论"], ["▁cast", "le"], ["▁r", "ide"], ["▁educ", "ators"], ["▁se", "ats"], ["值得", "注意的是"], ["妊", "娠"], ["查", "阅"], ["ic", "hel"], ["單", "位"], ["▁c", "otton"], ["性", "是"], ["课", "件"], ["浸", "润"], ["阻", "断"], ["流", "向"], ["不", "合理"], ["en", "ergy"], ["越", "多"], ["热", "爱"], ["j", "e"], ["▁sens", "or"], ["▁b", "iodiversity"], ["clus", "ions"], ["▁b", "orrow"], ["▁out", "door"], ["推", "断"], ["%", "-"], ["uc", "lear"], ["▁low", "est"], ["受害", "人"], ["各", "有"], ["创", "伤"], ["为", "我国"], ["r", "ated"], ["ag", "u"], ["amil", "ton"], ["▁Haw", "ai"], ["ce", "ans"], ["▁f", "ans"], ["ues", "e"], ["▁z", "ones"], ["N", "N"], ["lect", "ed"], ["erc", "ury"], ["和", "实施"], ["阶段", "性"], ["阳", "光"], ["at", "ile"], ["ip", "edia"], ["ap", "ing"], ["▁K", "n"], ["▁l", "ibraries"], ["ather", "s"], ["te", "in"], ["▁ob", "lig"], ["▁consum", "ed"], ["▁e", "ase"], ["su", "pp"], ["制度", "体系"], ["指导", "思想"], ["苏", "州"], ["真", "菌"], ["除此", "之外"], ["近", "年"], ["Te", "chn"], ["ok", "ed"], ["▁compet", "itive"], ["要", "注意"], ["这", "使得"], ["就是", "在"], ["因素", "的"], ["交通", "事故"], ["患", "有"], ["作", "的"], ["▁defic", "iency"], ["ak", "h"], ["▁emp", "ower"], ["▁p", "roud"], ["儿", "子"], ["el", "and"], ["C", "G"], ["社会主义市场经济", "体制"], ["党", "对"], ["犯罪嫌疑", "人"], ["制度", "创新"], ["至", "上"], ["血", "浆"], ["的一", "致"], ["r", "ary"], ["▁sp", "inal"], ["▁dram", "atic"], ["▁t", "ale"], ["入", "学"], ["act", "ly"], ["協", "會"], ["f", "ol"], ["ol", "ished"], ["P", "H"], ["机制", "和"], ["并", "能"], ["支", "气管"], ["美好", "生活"], ["实验", "教学"], ["客观", "上"], ["带", "头"], ["折", "射"], ["契", "合"], ["住", "院"], ["统治", "者"], ["!", "!"], ["he", "ro"], ["▁con", "ference"], ["嵌入", "式"], ["▁C", "ode"], ["▁ille", "gal"], ["▁Mex", "ican"], ["▁p", "ace"], ["▁ground", "s"], ["▁accomp", "anied"], ["▁f", "ats"], ["p", "ath"], ["f", "red"], ["oc", "ity"], ["休", "息"], ["▁sc", "ales"], ["▁enzym", "e"], ["▁ass", "ume"], ["ject", "s"], ["▁em", "bed"], ["放", "疗"], ["司法", "机关"], ["空", "调"], ["▁O", "ntario"], ["▁sod", "ium"], ["P", "al"], ["Up", "on"], ["漫", "畫"], ["回", "忆"], ["▁p", "H"], ["connect", "ed"], ["诠", "释"], ["放射", "性"], ["剖", "析"], ["▁A", "k"], ["」", "、"], ["S", "ource"], ["社会", "发展"], ["极", "化"], ["非常", "重要"], ["不", "满"], ["劳动", "者的"], ["不断", "扩大"], ["事业", "的"], ["构", "件"], ["建", "党"], ["重", "心"], ["N", "orm"], ["▁s", "ale"], ["影", "视"], ["臺", "北"], ["▁Reg", "ister"], ["▁h", "ier"], ["▁ar", "th"], ["C", "ase"], ["無", "法"], ["▁b", "orders"], ["如", "在"], ["高", "频"], ["如果", "不"], ["青", "海"], ["月", "底"], ["公", "開"], ["ura", "ble"], ["D", "ay"], ["修", "建"], ["▁ref", "lection"], ["og", "ens"], ["若干", "问题的"], ["应当", "在"], ["中国", "梦"], ["世纪", "的"], ["背", "后的"], ["体现", "出"], ["色", "谱"], ["进一步", "完善"], ["剧", "烈"], ["淋巴", "细胞"], ["人才", "的"], ["pro", "fit"], ["▁act", "or"], ["▁appro", "ached"], ["▁fu", "els"], ["种", "族"], ["▁K", "ey"], ["▁▁", "-"], ["▁achieve", "ment"], ["的基本", "原理"], ["绝", "缘"], ["选", "修"], ["▁div", "ine"], ["▁h", "ospitals"], ["▁n", "ice"], ["有", "许多"], ["結", "束"], ["首", "个"], ["中国共产党", "人"], ["队伍", "建设"], ["的", "民族"], ["表现", "形式"], ["强", "有力的"], ["与", "合作"], ["应", "有的"], ["互", "利"], ["▁ear", "s"], ["教科", "书"], ["是", "根据"], ["▁M", "ill"], ["部", "落"], ["w", "ich"], ["▁inc", "idence"], ["▁sh", "ore"], ["▁ha", "ven"], ["研究", "方法"], ["的人", "工"], ["而", "又"], ["增", "生"], ["变", "性"], ["gl", "as"], ["▁ch", "a"], ["▁G", "ulf"], ["▁thorough", "ly"], ["▁m", "old"], ["角度", "看"], ["财政", "收入"], ["业务", "流程"], ["加", "息"], ["等", "同"], ["招", "标"], ["金融", "体系"], ["阻", "抗"], ["不", "敢"], ["机", "车"], ["县", "城"], ["▁syn", "thesis"], ["ones", "ia"], ["▁opp", "osition"], ["中", "性"], ["f", "at"], ["bet", "a"], ["le", "m"], ["ord", "an"], ["(", ")▁"], ["A", "G"], ["领导", "下"], ["强", "迫"], ["▁bi", "as"], ["In", "it"], ["的一", "次"], ["地", "名"], ["(", "-"], ["the", "astern"], ["B", "al"], ["educ", "ation"], ["▁equ", "ations"], ["▁vit", "amins"], ["责任", "感"], ["一", "件"], ["仓", "储"], ["南", "宋"], ["负", "有"], ["学", "期"], ["陆", "军"], ["但", "从"], ["三角", "形"], ["傳", "統"], ["▁h", "ockey"], ["▁particip", "ated"], ["中央", "政府"], ["凋", "亡"], ["名", "誉"], ["在", "现代"], ["动", "荡"], ["的", "生物"], ["▁Read", "ing"], ["今", "日"], ["epend", "ence"], ["▁gr", "asp"], ["Al", "ways"], ["▁determ", "ining"], ["ef", "its"], ["▁to", "b"], ["ph", "ones"], ["▁horm", "ones"], ["▁occasion", "ally"], ["T", "M"], ["第五", "章"], ["三个", "代表"], ["务", "实"], ["市", "委"], ["和谐", "社会"], ["充", "实"], ["而", "已"], ["]", "["], ["▁J", "ean"], ["超过", "了"], ["长", "达"], ["▁J", "r"], ["L", "ab"], ["▁Con", "nect"], ["▁prom", "ise"], ["▁c", "rown"], ["p", "op"], ["roph", "y"], ["层面", "的"], ["主", "力"], ["▁regul", "atory"], ["▁S", "pring"], ["T", "est"], ["▁pay", "ing"], ["▁Mem", "orial"], ["ol", "as"], ["过", "分"], ["国家", "治理体系和治理能力"], ["国家", "机关"], ["和", "行为"], ["不仅", "可以"], ["集成", "电路"], ["业", "的"], ["模型", "中"], ["的", "特性"], ["T", "D"], ["的", "资源"], ["R", "h"], ["▁K", "ar"], ["▁par", "agraph"], ["警", "告"], ["▁gold", "en"], ["▁perfect", "ly"], ["▁rem", "oving"], ["un", "a"], ["这种", "情况"], ["法", "等"], ["华", "为"], ["W", "ood"], ["ar", "ound"], ["▁ent", "ities"], ["▁surround", "ed"], ["▁B", "and"], ["ch", "i"], ["之一", "的"], ["创新", "性"], ["养老", "金"], ["生产", "方式"], ["矿", "物"], ["▁to", "t"], ["我们", "需要"], ["仍", "在"], ["e", "em"], ["E", "ducation"], ["▁rel", "ate"], ["J", "ohnson"], ["▁Gold", "en"], ["▁Comm", "ons"], ["和", "水"], ["主要", "用于"], ["动", "物的"], ["无线", "电"], ["阴", "阳"], ["▁Gu", "ard"], ["▁m", "uc"], ["▁behavior", "al"], ["视", "图"], ["V", "E"], ["▁adv", "ances"], ["大", "道"], ["ur", "ring"], ["▁pup", "ils"], ["▁C", "ost"], ["第五", "节"], ["理论", "创新"], ["出发", "点"], ["人类", "文明"], ["联", "想"], ["付", "出"], ["紧", "迫"], ["言", "论"], ["牢", "记"], ["具有", "重要的"], ["行", "動"], ["▁quant", "ities"], ["Ph", "ysical"], ["▁dis", "pos"], ["▁do", "ors"], ["没有", "任何"], ["▁d", "uty"], ["公", "交"], ["经验", "和"], ["res", "hold"], ["▁att", "itudes"], ["▁ex", "ception"], ["▁Le", "vel"], ["c", "ents"], ["气", "温"], ["父", "親"], ["ã", "o"], ["产品", "和"], ["立德", "树"], ["财政", "政策"], ["提起", "诉讼"], ["价", "款"], ["两", "侧"], ["反映", "出"], ["▁B", "road"], ["the", "ns"], ["分析", "的"], ["迫", "使"], ["bo", "ards"], ["▁cont", "ents"], ["▁gen", "re"], ["▁univers", "ities"], ["▁I", "S"], ["ob", "b"], ["自", "发"], ["转", "为"], ["农", "场"], ["▁und", "ers"], ["▁particip", "ating"], ["▁situ", "ated"], ["主义", "者"], ["ik", "ipedia"], ["完", "工"], ["Bet", "ween"], ["ru", "ce"], ["M", "ajor"], ["生产", "者"], ["稿", "件"], ["高", "素质"], ["物", "体的"], ["姿", "态"], ["有", "一定"], ["不", "一定"], ["解决", "的"], ["主义", "和"], ["采取", "了"], ["蔓", "延"], ["▁br", "ush"], ["▁med", "itation"], ["▁in", "ch"], ["▁B", "BC"], ["不", "過"], ["▁f", "an"], ["▁box", "es"], ["is", "a"], ["a", "a"], ["地", "上"], ["达", "峰"], ["▁thr", "ive"], ["的", "女"], ["u", "its"], ["現", "在"], ["ge", "bra"], ["但", "也"], ["实验", "中"], ["肿瘤", "细胞"], ["行政", "复议"], ["实际", "问题"], ["往", "来"], ["征", "税"], ["▁sign", "aling"], ["等", "工作"], ["扭", "曲"], ["Austral", "ian"], ["ins", "ula"], ["bum", "s"], ["▁t", "ang"], ["J", "ack"], ["b", "as"], ["er", "ick"], ["reat", "ive"], ["▁spec", "ified"], ["他", "是"], ["▁football", "er"], ["会", "的"], ["注意", "到"], ["产", "值"], ["被害", "人"], ["板", "块"], ["副", "教授"], ["地", "表"], ["自然", "的"], ["发", "光"], ["rain", "ts"], ["ian", "ces"], ["AP", "P"], ["▁al", "though"], ["▁recip", "es"], ["f", "a"], ["痛", "苦"], ["收", "敛"], ["m", "ia"], ["▁batter", "ies"], ["H", "ome"], ["cl", "ick"], ["est", "ock"], ["▁", "...▁"], ["▁alt", "ered"], ["▁rhyth", "m"], ["?", "▁"], ["▁exhib", "ition"], ["▁inj", "ured"], ["▁c", "a"], ["科技", "革命"], ["理", "政"], ["富", "强"], ["支持", "和"], ["限制", "了"], ["遗", "嘱"], ["度", "量"], ["▁C", "ulture"], ["em", "or"], ["可以", "被"], ["▁stat", "istical"], ["▁stake", "holders"], ["▁And", "rew"], ["减", "税"], ["除", "非"], ["b", "ial"], ["圆", "形"], ["现", "存"], ["▁re", "vers"], ["ain", "st"], ["年代", "初"], ["▁cl", "ouds"], ["▁exist", "ed"], ["▁P", "op"], ["ement", "ia"], ["国际", "上"], ["诸", "侯"], ["服务", "提供"], ["盆", "地"], ["電視", "台"], ["▁par", "l"], ["▁f", "o"], ["writ", "er"], ["w", "all"], ["▁cl", "ay"], ["▁prop", "ag"], ["▁imp", "ressive"], ["▁tra", "cking"], ["Stud", "ies"], ["▁carb", "oh"], ["Last", "ly"], ["▁art", "work"], ["▁stream", "s"], ["效率", "的"], ["vent", "h"], ["▁reve", "als"], ["▁sac", "red"], ["al", "pha"], ["m", "ethod"], ["▁bu", "ff"], ["▁bound", "ary"], ["平", "时"], ["理想", "的"], ["结构", "与"], ["指", "明了"], ["租", "金"], ["内", "心"], ["出", "行"], ["地", "利"], ["In", "ternet"], ["▁M", "ult"], ["▁ver", "b"], ["▁Gree", "ce"], ["▁jo", "ints"], ["bour", "ne"], ["工作", "会议"], ["可以", "利用"], ["可", "为"], ["公", "示"], ["趣", "味"], ["▁Col", "orado"], ["▁ent", "rance"], ["化", "为"], ["▁r", "anges"], ["d", "eg"], ["se", "ction"], ["br", "is"], ["▁pain", "ted"], ["D", "ev"], ["克", "兰"], ["经济增长", "的"], ["迫切", "需要"], ["长", "三角"], ["环境", "影响"], ["s", "un"], ["ok", "yo"], ["med", "iate"], ["h", "ans"], ["性", "状"], ["rag", "ing"], ["ax", "is"], ["▁p", "el"], ["▁commit", "tee"], ["▁loc", "ally"], ["▁util", "ize"], ["p", "erson"], ["ix", "ed"], ["▁Cor", "ps"], ["小", "板"], ["或者", "说"], ["▁G", "overnor"], ["同时", "也是"], ["概念", "的"], ["▁reflect", "ed"], ["▁pro", "hib"], ["▁advance", "ments"], ["的", "分类"], ["L", "og"], ["▁s", "ch"], ["呼吸", "道"], ["细", "分"], ["可", "作为"], ["解决", "的问题"], ["特", "权"], ["▁Mount", "ains"], ["起", "始"], ["▁S", "et"], ["▁appear", "ances"], ["▁enjoy", "ed"], ["▁travel", "ing"], ["st", "ru"], ["▁", "ion"], ["O", "ld"], ["▁Ar", "gent"], ["Pro", "fessor"], ["▁propos", "al"], ["的", "先"], ["多", "方"], ["残疾", "人"], ["不", "知道"], ["▁fem", "in"], ["▁L", "GBT"], ["▁cont", "exts"], ["il", "st"], ["▁Dan", "iel"], ["▁distinct", "ive"], ["▁▁▁▁▁▁▁▁", "▁"], ["S", "ports"], ["▁E", "arly"], ["b", "one"], ["就", "需要"], ["抽", "样"], ["的", "直接"], ["听", "力"], ["在", "生产"], ["管理", "学"], ["ect", "ors"], ["系", "的"], ["区", "和"], ["可以", "对"], ["中", "被"], ["▁kit", "chen"], ["是", "目前"], ["▁encourag", "ing"], ["Res", "ults"], ["▁S", "us"], ["d", "eterm"], ["▁pe", "er"], ["ograp", "her"], ["风险", "评估"], ["继承", "人"], ["ber", "ries"], ["p", "arents"], ["▁N", "etherlands"], ["▁was", "h"], ["▁harm", "ony"], ["al", "og"], ["情", "況"], ["qu", "ir"], ["ros", "is"], ["十", "条"], ["和", "价值"], ["通过", "的"], ["事业", "发展"], ["长期", "的"], ["子", "宫"], ["生活", "中的"], ["礼", "仪"], ["精", "品"], ["奉", "献"], ["期", "权"], ["g", "rad"], ["▁S", "ab"], ["l", "iter"], ["▁sh", "oes"], ["深入", "研究"], ["概", "况"], ["E", "ventually"], ["▁co", "operation"], ["▁The", "ory"], ["天", "文学"], ["▁B", "on"], ["ad", "vant"], ["海", "軍"], ["E", "ffect"], ["eg", "u"], ["ond", "er"], ["▁Secret", "ary"], ["may", "be"], ["▁bre", "ed"], ["▁land", "ing"], ["▁mother", "s"], ["筛", "查"], ["ry", "pt"], ["bu", "ilt"], ["▁aut", "ism"], ["▁manif", "est"], ["十", "大"], ["资产负债", "表"], ["发病", "率"], ["扭", "转"], ["缺", "口"], ["会", "被"], ["个", "体的"], ["an", "z"], ["▁H", "a"], ["▁h", "at"], ["▁tel", "esc"], ["es", "ium"], ["b", "ass"], ["▁bring", "ing"], ["人", "以"], ["在", "网络"], ["汇", "总"], ["与", "否"], ["创", "始"], ["val", "ue"], ["▁elder", "ly"], ["con", "duct"], ["l", "ocal"], ["▁conf", "ront"], ["会", "影响"], ["损害", "的"], ["是一", "门"], ["历", "经"], ["培养", "目标"], ["电", "位"], ["再", "现"], ["往往", "是"], ["人", "脸"], ["前提", "下"], ["ond", "ay"], ["▁sou", "l"], ["ors", "hip"], ["▁as", "sembly"], ["f", "are"], ["D", "en"], ["▁ident", "ical"], ["▁ext", "ens"], ["▁at", "oms"], ["▁sl", "aves"], ["青", "岛"], ["侵", "入"], ["推", "翻"], ["代", "数"], ["內", "容"], ["▁dev", "ast"], ["▁bu", "ying"], ["▁t", "elling"], ["思考", "题"], ["公益", "诉讼"], ["但", "对"], ["受", "教育"], ["紧密", "结合"], ["联系", "的"], ["京津", "冀"], ["以", "满足"], ["青藏", "高原"], ["帮", "扶"], ["但", "这"], ["H", "on"], ["雙", "打"], ["▁E", "st"], ["▁reg", "ulate"], ["▁vacc", "ines"], ["▁prom", "ising"], ["▁tob", "acco"], ["b", "eg"], ["项目", "管理"], ["血", "小板"], ["最", "具"], ["的", "区域"], ["市", "政"], ["p", "rop"], ["▁B", "ern"], ["▁as", "ide"], ["▁transl", "ated"], ["N", "R"], ["b", "acks"], ["会计", "师"], ["这就", "要求"], ["质", "性"], ["位", "移"], ["寄", "存"], ["的最", "新"], ["amil", "ies"], ["c", "ore"], ["玩", "家"], ["▁path", "s"], ["▁story", "telling"], ["▁sc", "r"], ["▁speak", "ers"], ["等", "信息"], ["和", "法律"], ["有限", "责任"], ["▁adapt", "ation"], ["▁E", "ss"], ["▁accompl", "ish"], ["提高", "到"], ["中", "之"], ["新", "课"], ["义务", "的"], ["应", "注意"], ["表面", "的"], ["吸引", "力"], ["牵", "头"], ["和", "教育"], ["党", "章"], ["▁S", "and"], ["▁chrom", "os"], ["该", "方法"], ["▁nutri", "ent"], ["▁be", "ans"], ["▁gradu", "ate"], ["F", "ound"], ["▁Ch", "art"], ["h", "ome"], ["长", "沙"], ["](", "#"], ["较", "长"], ["em", "ale"], ["ibl", "ical"], ["O", "pt"], ["▁g", "ift"], ["▁soc", "io"], ["▁Gard", "en"], ["在", "未来"], ["金融", "科技"], ["情况", "的"], ["始终", "坚持"], ["敏感", "性"], ["专", "科"], ["全", "力"], ["中", "也"], ["L", "uc"], ["马", "斯"], ["Ident", "ify"], ["the", "t"], ["▁p", "ets"], ["简单", "地"], ["西", "斯"], ["▁s", "ew"], ["▁ancest", "ors"], ["▁re", "ign"], ["ious", "ly"], ["sp", "ring"], ["▁E", "ll"], ["计划", "经济"], ["早", "已"], ["▁A", "ction"], ["▁collect", "ing"], ["▁prof", "it"], ["▁sav", "ed"], ["▁be", "es"], ["akes", "pe"], ["变", "的"], ["loc", "ated"], ["▁teach", "ings"], ["I", "oT"], ["ar", "ray"], ["深", "层"], ["共同", "体的"], ["和", "工作"], ["生命", "力"], ["不", "平等"], ["地位", "的"], ["积极", "作用"], ["畸", "形"], ["发", "热"], ["军", "的"], ["与", "非"], ["传", "达"], ["▁A", "sh"], ["▁comp", "an"], ["微", "分"], ["Encou", "rage"], ["B", "ro"], ["▁Th", "ree"], ["▁H", "T"], ["m", "ega"], ["▁pack", "age"], ["下", "来的"], ["切", "入"], ["▁sym", "pt"], ["▁cust", "oms"], ["pl", "ate"], ["P", "ut"], ["▁g", "ran"], ["we", "b"], ["▁Ant", "ar"], ["球", "队"], ["C", "omb"], ["治国", "理政"], ["西方", "国家"], ["产", "学"], ["发", "票"], ["庞", "大的"], ["严", "肃"], ["结构", "化"], ["▁cir", "cul"], ["不", "属于"], ["Ind", "eed"], ["▁ev", "il"], ["▁or", "ange"], ["▁reflect", "s"], ["▁sub", "tle"], ["▁t", "ribut"], ["h", "k"], ["现在", "的"], ["火", "星"], ["it", "us"], ["语言", "的"], ["ash", "ing"], ["年", "被"], ["ai", "wan"], ["att", "ered"], ["▁B", "a"], ["▁St", "adium"], ["通信", "技术"], ["新冠肺炎", "疫情"], ["之间", "存在"], ["在", "不"], ["作", "詞"], ["反", "向"], ["rop", "olitan"], ["▁su", "icide"], ["▁contain", "ers"], ["万", "亿"], ["教学", "法"], ["各级", "政府"], ["承", "租"], ["情", "怀"], ["基", "站"], ["血", "栓"], ["走", "进"], ["纽", "带"], ["又", "能"], ["的", "局面"], ["▁ad", "here"], ["要素", "的"], ["成", "型"], ["需求", "和"], ["do", "i"], ["▁rest", "ore"], ["▁abandon", "ed"], ["▁territ", "ories"], ["▁c", "ran"], ["亚", "太"], ["共同", "的"], ["▁L", "og"], ["▁hy", "brid"], ["▁per", "ipher"], ["tain", "ment"], ["捕", "捉"], ["▁", "【"], ["ph", "abet"], ["▁ren", "amed"], ["岁", "的"], ["耐", "药"], ["变", "成了"], ["群", "落"], ["通", "俗"], ["宽", "带"], ["加", "之"], ["试", "行"], ["服务", "体系"], ["▁W", "ars"], ["》", "▁▁"], ["c", "oll"], ["了", "一些"], ["M", "ex"], ["生", "殖"], ["▁F", "ig"], ["这是", "一种"], ["成为", "一个"], ["ch", "ant"], ["有", "多"], ["并", "将其"], ["Al", "ong"], ["Ad", "ditional"], ["che", "ster"], ["▁ann", "ually"], ["▁every", "where"], ["▁le", "mon"], ["▁A", "M"], ["十二", "五"], ["学", "时"], ["重点", "领域"], ["中", "指出"], ["询", "问"], ["酒", "精"], ["▁Su", "pport"], ["而", "生"], ["Ind", "ian"], ["fl", "ies"], ["▁B", "ell"], ["▁bot", "tle"], ["▁t", "ou"], ["l", "oss"], ["o", "king"], ["▁L", "ive"], ["副", "主席"], ["股", "市"], ["后", "世"], ["柏", "林"], ["北", "海"], ["▁expand", "ing"], ["T", "immy"], ["▁del", "icate"], ["▁space", "craft"], ["om", "ot"], ["生态环境", "保护"], ["数字", "货币"], ["人工智能", "技术"], ["日", "元"], ["建", "制"], ["自然科学", "基金"], ["ig", "a"], ["ogn", "ition"], ["M", "a"], ["ab", "ama"], ["▁rest", "oration"], ["▁spec", "imens"], ["▁gather", "ing"], ["▁strugg", "ling"], ["c", "urrent"], ["O", "xford"], ["长", "安"], ["任何", "一个"], ["不", "一"], ["eed", "s"], ["▁therap", "ies"], ["三", "国"], ["▁Sp", "irit"], ["▁S", "av"], ["公允", "价值"], ["家", "具"], ["外部", "环境"], ["自然", "灾害"], ["审", "慎"], ["estab", "lished"], ["aff", "e"], ["十", "月"], ["衰", "减"], ["用", "了"], ["▁P", "akistan"], ["ove", "re"], ["C", "ast"], ["▁c", "ub"], ["▁correl", "ation"], ["▁del", "ight"], ["▁n", "u"], ["▁del", "ve"], ["▁integr", "ity"], ["▁pos", "itively"], ["▁Tor", "onto"], ["c", "ond"], ["ow", "nt"], ["▁▁", "."], ["N", "ame"], ["w", "er"], ["更", "换"], ["剥", "夺"], ["est", "one"], ["g", "rams"], ["CA", "D"], ["te", "chn"], ["演", "奏"], ["▁surv", "iv"], ["▁wor", "ship"], ["un", "ar"], ["ennes", "see"], ["粮食", "安全"], ["来", "确定"], ["而", "后"], ["弱", "势"], ["с", "т"], ["真", "的"], ["▁smooth", "ly"], ["不", "等"], ["en", "za"], ["iber", "ty"], ["els", "on"], ["inflamm", "atory"], ["要求", "和"], ["得", "不到"], ["应", "激"], ["很", "可能"], ["▁res", "istant"], ["和", "中"], ["play", "ing"], ["▁po", "ems"], ["▁streng", "ths"], ["()", "`▁"], ["▁com", "ic"], ["AR", "T"], ["▁A", "ND"], ["▁over", "view"], ["▁opt", "ical"], ["▁instit", "ution"], ["ic", "ts"], ["发展", "为"], ["马克思主义", "的"], ["的", "证据"], ["年", "我国"], ["城市", "群"], ["迈", "向"], ["汲", "取"], ["肝", "炎"], ["am", "ents"], ["平", "民"], ["×", "▁"], ["gien", "e"], ["▁c", "ow"], ["▁tail", "ored"], ["伊", "朗"], ["akespe", "are"], ["▁t", "y"], ["對", "於"], ["umb", "ers"], ["▁enh", "ancing"], ["b", "ral"], ["建", "国"], ["he", "ld"], ["▁earthqu", "ake"], ["的最", "后"], ["▁she", "ets"], ["▁din", "ner"], ["▁r", "anging"], ["C", "ong"], ["il", "ms"], ["E", "conom"], ["利", "于"], ["的", "运动"], ["在", "国内"], ["改革", "创新"], ["外", "语"], ["测", "绘"], ["▁stri", "king"], ["子", "公司"], ["we", "alth"], ["▁soc", "cer"], ["▁th", "roat"], ["▁schem", "e"], ["St", "ar"], ["che", "stra"], ["d", "ependent"], ["to", "k"], ["T", "or"], ["mar", "ks"], ["▁Labor", "atory"], ["erus", "alem"], ["s", "ing"], ["深", "厚"], ["相结合", "的"], ["两", "方面"], ["投", "标"], ["测", "算"], ["与", "学生"], ["代表", "性的"], ["来", "解决"], ["这", "场"], ["余", "人"], ["方法", "论"], ["作", "文"], ["▁week", "ly"], ["▁col", "umns"], ["结", "婚"], [",▁", "'"], ["球", "员"], ["sec", "ut"], ["▁p", "od"], ["这", "表明"], ["建设", "项目"], ["反应", "的"], ["▁crit", "ically"], ["▁dist", "ant"], ["elect", "ric"], ["▁sav", "ings"], ["ES", "T"], ["id", "elines"], ["▁polit", "icians"], ["课程", "内容"], ["原则", "上"], ["交", "融"], ["军", "民"], ["同学", "们"], ["放", "松"], ["▁bow", "l"], ["▁c", "ater"], ["▁ac", "res"], ["▁call", "ing"], ["▁inv", "ited"], ["ip", "h"], ["effect", "ive"], ["神", "秘"], ["as", "ia"], ["▁end", "ing"], ["▁fac", "ulty"], ["▁G", "re"], ["世纪", "末"], ["在", "不同的"], ["维", "埃"], ["向", "往"], ["祖", "父"], ["可", "扩展"], ["葡萄", "牙"], ["▁Pl", "ace"], ["ov", "ak"], ["唯一", "的"], ["▁O", "xford"], ["l", "iving"], ["ant", "e"], ["▁m", "i"], ["v", "i"], ["法", "令"], ["▁h", "arsh"], ["follow", "ing"], ["▁Heb", "rew"], ["▁sp", "ray"], ["新华", "社"], ["生", "机"], ["小", "微"], ["知识产权", "保护"], ["事", "关"], ["基础", "和"], ["磁", "盘"], ["风", "景"], ["临床", "上"], ["保证", "了"], ["转", "运"], ["知", "縣"], ["畢", "業"], ["▁pl", "ain"], ["int", "on"], ["ook", "ed"], ["▁rob", "ots"], ["▁belie", "ves"], ["▁int", "ention"], ["▁p", "estic"], ["▁pl", "ates"], ["▁sun", "ny"], ["ch", "ain"], ["▁B", "ol"], ["的", "抗"], ["负面", "影响"], ["me", "ans"], ["▁F", "arm"], ["非", "线性"], ["F", "ore"], ["d", "et"], ["c", "op"], ["over", "ning"], ["▁conf", "usion"], ["▁pres", "ervation"], ["C", "r"], ["▁v", "ig"], ["核", "电"], ["免疫", "系统"], ["充分", "考虑"], ["必须", "是"], ["的", "义务"], ["总体", "上"], ["参", "观"], ["当", "家"], ["n", "i"], ["登", "录"], ["at", "on"], ["▁spread", "ing"], ["▁acc", "idents"], ["▁g", "ear"], ["▁represent", "ative"], ["\"", "}"], ["私", "营"], ["任", "职"], ["一", "天"], ["东", "京"], ["▁M", "unicip"], ["和", "相关"], ["▁D", "un"], ["區", "域"], ["小", "時"], ["編", "曲"], ["in", "it"], ["与", "经济"], ["收", "回"], ["万", "美元"], ["游", "客"], ["游", "击"], ["红", "细胞"], ["原", "生"], ["重", "叠"], ["人", "所"], ["ag", "a"], ["▁l", "ig"], ["k", "h"], ["ann", "er"], ["▁J", "ava"], ["的", "转变"], ["作出", "的"], ["议", "员"], ["必须", "要"], ["内", "地"], ["S", "en"], ["自", "旋"], ["地", "主"], ["在", "他"], ["恰", "恰"], ["▁phenomen", "a"], ["▁ra", "inf"], ["▁w", "ars"], ["篇", "章"], ["课程", "教学"], ["政府", "对"], ["▁Un", "ivers"], ["第十", "三"], ["长", "城"], ["ra", "ham"], ["▁c", "attle"], ["▁Pre", "vention"], ["▁inequ", "ality"], ["▁Ind", "ians"], ["▁ret", "urning"], ["tre", "ated"], ["▁de", "bris"], ["部", "份"], ["Sp", "ace"], ["▁I", "D"], ["g", "ae"], ["在", "高"], ["尔", "省"], ["ang", "el"], ["▁ch", "urches"], ["▁comprehens", "ion"], ["▁res", "erved"], ["▁Republic", "an"], ["技术", "进步"], ["激励", "机制"], ["再", "审"], ["通", "风"], ["协议", "的"], ["尔", "德"], ["rit", "ic"], ["推", "测"], ["R", "un"], ["▁R", "esp"], ["▁quant", "ity"], ["▁val", "ley"], ["▁upd", "ate"], ["▁stra", "ins"], ["IS", "T"], ["▁ax", "is"], ["▁af", "ternoon"], ["▁s", "aving"], ["一段", "时间"], ["造", "血"], ["蒸", "发"], ["演", "讲"], ["域", "网"], ["rig", "ation"], ["▁sp", "ons"], ["C", "V"], ["for", "cing"], ["相", "较"], ["Not", "able"], ["▁O", "s"], ["人民群众", "的"], ["涉及", "的"], ["的", "依据"], ["老龄", "化"], ["变", "压"], ["这", "部分"], ["同样", "的"], ["舆", "情"], ["强", "劲"], ["财", "税"], ["以", "人为本"], ["的", "内在"], ["立方", "米"], ["假", "定"], ["大", "阪"], ["▁restrict", "ions"], ["▁world", "s"], ["▁D", "igital"], ["D", "ifferent"], ["单", "词"], ["E", "th"], ["ig", "m"], ["W", "estern"], ["Tax", "onomy"], ["人", "是"], ["保", "卫"], ["对外", "贸易"], ["前", "途"], ["▁my", "stery"], ["S", "U"], ["年", "版"], ["▁R", "od"], ["ev", "in"], ["p", "an"], ["un", "ctions"], ["这项", "研究"], ["诉讼", "时效"], ["全国", "各族人民"], ["案件", "中"], ["放", "缓"], ["关", "怀"], ["▁comp", "aring"], ["很", "小"], ["▁des", "cent"], ["▁al", "pha"], ["▁commun", "ications"], ["彼", "得"], ["▁des", "ert"], ["istic", "ated"], ["一", "门"], ["不", "出"], ["os", "aur"], ["he", "tic"], ["▁ble", "eding"], ["▁inters", "ection"], ["丈", "夫"], ["▁sequ", "ences"], ["<", "/"], ["▁I", "T"], ["▁bl", "ank"], ["建设", "社会主义"], ["中", "级"], ["区域", "内"], ["吸", "纳"], ["取", "证"], ["▁reput", "ation"], ["和", "投资"], ["姆", "斯"], ["接", "下来"], ["魅", "力"], ["ph", "ot"], ["h", "yd"], ["n", "m"], ["ro", "ve"], ["act", "ivity"], ["▁vis", "its"], ["▁cy", "cles"], ["▁dream", "s"], ["l", "ined"], ["▁shel", "ter"], ["▁cou", "rage"], ["▁hon", "est"], ["综上", "所述"], ["说明", "了"], ["bl", "ood"], ["h", "istory"], ["表", "格"], ["Dep", "artment"], ["icip", "ants"], ["'", "'"], ["▁arr", "anged"], ["▁colon", "ies"], ["▁me", "ets"], ["▁out", "break"], ["▁so", "ap"], ["▁su", "g"], ["国", "产"], ["黑", "格尔"], ["因果", "关系"], ["迈", "进"], ["蓝", "图"], ["车", "间"], ["如", "有"], ["风", "暴"], ["▁S", "ound"], ["St", "r"], ["▁L", "at"], ["▁con", "d"], ["h", "arm"], ["b", "us"], ["S", "erv"], ["▁imag", "ery"], ["B", "ook"], ["▁col", "ored"], ["明", "晰"], ["许可", "证"], ["爱", "好"], ["拟", "合"], ["竣", "工"], ["▁M", "arsh"], ["阿", "里"], ["Im", "age"], ["▁Ill", "inois"], ["▁ver", "te"], ["Al", "tern"], ["▁var", "ied"], ["▁F", "riend"], ["作用", "于"], ["妥", "善"], ["胶", "质"], ["将", "对"], ["脉", "络"], ["风险", "和"], ["拥", "护"], ["金", "钱"], ["改", "编"], ["列", "車"], ["f", "ive"], ["c", "ost"], ["Gen", "er"], ["▁k", "nee"], ["▁plant", "ed"], ["um", "ing"], ["]", ")"], ["▁D", "ub"], ["rou", "ps"], ["▁p", "ill"], ["red", "it"], ["sc", "reen"], ["明确", "指出"], ["另一", "方"], ["的主要", "原因"], ["过程", "和"], ["不", "难"], ["着", "陆"], ["问", "责"], ["在", "法律"], ["在", "同一"], ["是", "很"], ["▁R", "ay"], ["▁W", "inter"], ["▁o", "w"], ["▁conscious", "ness"], ["▁cour", "ts"], ["▁comp", "assion"], ["▁p", "ose"], ["▁C", "T"], ["P", "et"], ["特", "性的"], ["召开", "的"], ["基", "质"], ["标志", "物"], ["L", "im"], ["ak", "ota"], ["默", "认"], ["▁pl", "us"], ["▁theore", "tical"], ["eng", "ths"], ["▁De", "ath"], ["▁Pro", "duct"], ["中华", "文化"], ["市场", "和"], ["乡村振兴", "战略"], ["静", "止"], ["而", "产生的"], ["产", "教"], ["论", "断"], ["降", "水"], ["▁arr", "ival"], ["o", "en"], ["植", "物的"], ["应", "答"], ["ob", "by"], ["ik", "es"], ["導", "致"], ["J", "an"], ["Des", "cription"], ["比", "利"], ["Int", "eg"], ["N", "Y"], ["í", "a"], ["大", "师"], ["并", "根据"], ["诚", "实"], ["▁row", "s"], ["督", "导"], ["▁cl", "ust"], ["▁nit", "rogen"], ["▁Wild", "life"], ["?", "”▁"], ["▁health", "ier"], ["包括", "了"], ["ro", "se"], ["Im", "pro"], ["相互", "促进"], ["层次", "的"], ["用", "好"], ["规范", "性"], ["投", "融资"], ["账", "款"], ["征", "信"], ["固", "化"], ["▁Ph", "ot"], ["都", "被"], ["F", "ocus"], ["m", "o"], ["▁l", "unch"], ["▁S", "on"], ["uris", "d"], ["在", "政治"], ["听", "取"], ["▁tra", "ce"], ["▁A", "R"], ["对其", "进行"], ["▁par", "ad"], ["▁Med", "iterranean"], ["▁displ", "ays"], ["名", "人"], ["PL", "C"], ["▁d", "uties"], ["时", "有"], ["居", "世界"], ["法定", "代表"], ["功能", "障碍"], ["污", "泥"], ["口", "服"], ["影响", "着"], ["的人", "物"], ["r", "é"], ["▁accel", "er"], ["方法", "是"], ["▁Mc", "C"], ["▁observ", "ing"], ["it", "ations"], ["▁govern", "or"], ["▁mot", "ivation"], ["河南", "省"], ["p", "are"], ["▁respect", "ive"], ["建设", "中"], ["的", "两个"], ["▁o", "ils"], ["▁var", "ies"], ["urric", "ane"], ["▁br", "id"], ["分子", "的"], ["河北", "省"], ["矛盾", "和"], ["为", "依据"], ["建立", "一个"], ["财", "力"], ["不", "正当"], ["黑", "洞"], ["▁bus", "y"], ["▁expl", "ores"], ["▁ess", "ence"], ["▁nutrition", "al"], ["▁ra", "ising"], ["▁art", "if"], ["A", "h"], ["m", "ail"], ["公", "尺"], ["哲学", "家"], ["ic", "ut"], ["am", "ic"], ["▁C", "ape"], ["无", "穷"], ["交", "给"], ["▁h", "ip"], ["▁medic", "ines"], [".", "’"], ["V", "er"], ["立足", "于"], ["联", "结"], ["国际", "经济"], ["ey", "ond"], ["艺术", "的"], ["▁cent", "ered"], ["▁C", "emetery"], ["▁shif", "ts"], ["▁stay", "ing"], ["▁were", "n"], ["M", "V"], ["來", "自"], ["c", "hem"], ["art", "en"], ["F", "R"], ["CA", "R"], ["拉", "丁"], ["页", "面"], ["e", "at"], ["▁address", "es"], ["▁diet", "s"], ["▁tack", "le"], ["下", "跌"], ["参", "谋"], ["增", "效"], ["▁saf", "er"], ["▁sp", "ine"], ["财务", "报表"], ["▁b", "in"], ["得", "分"], ["▁les", "ions"], ["▁Mass", "achusetts"], ["上升", "到"], ["管理", "工作"], ["仪", "表"], ["损", "益"], ["全", "覆盖"], ["所", "带来的"], ["班", "主任"], ["霸", "权"], ["有", "为"], ["▁cook", "ed"], ["▁discover", "ies"], ["▁ne", "ither"], ["▁veget", "able"], ["▁comp", "ost"], ["光", "的"], ["▁F", "uture"], ["eth", "yl"], ["▁div", "ide"], ["在", "前"], ["商品", "的"], ["苏", "维埃"], ["洪", "水"], ["M", "ad"], ["白", "血"], ["s", "al"], ["he", "el"], ["▁H", "ong"], ["▁P", "ass"], ["▁p", "itch"], ["▁arg", "ued"], ["▁imag", "ination"], ["▁b", "ic"], ["▁che", "ese"], ["▁l", "akes"], ["▁sens", "ory"], ["本章", "小结"], ["实施", "了"], ["外汇", "储备"], ["尊", "严"], ["急", "需"], ["氢", "气"], ["设计", "中"], ["轻", "重"], ["疲", "劳"], ["戏", "曲"], ["片", "面"], ["相对", "应"], ["的", "逻辑"], ["est", "ions"], ["▁d", "ating"], ["▁rul", "ed"], ["▁rail", "road"], ["▁fre", "ely"], ["▁tw", "ist"], ["开", "源"], ["虚拟", "化"], ["区", "为"], ["p", "ol"], ["▁p", "iano"], ["ad", "ing"], ["uten", "ant"], ["▁part", "ial"], ["F", "amily"], ["▁pass", "engers"], ["▁post", "s"], ["▁pred", "ators"], ["▁g", "ate"], ["一", "书"], ["百年", "奋斗"], ["技术的", "应用"], ["与", "创新"], ["习", "俗"], ["事", "中"], ["全", "新"], ["ar", "o"], ["收", "錄"], ["o", "ys"], ["b", "irds"], ["马", "尔"], ["▁dem", "ocracy"], ["環", "境"], ["▁c", "ure"], ["▁d", "ense"], ["▁wor", "st"], ["l", "is"], ["is", "ons"], ["▁rainf", "all"], ["▁succeed", "ed"], ["电池", "的"], ["流", "的"], ["设计", "师"], ["as", "a"], ["▁C", "op"], ["▁distingu", "ish"], ["▁regard", "ed"], ["▁pick", "ed"], ["侵权", "责任"], ["方", "略"], ["亮", "点"], ["本", "病"], ["串", "联"], ["教育", "资源"], ["的", "投资"], ["公", "认"], ["浪", "漫"], ["最", "有"], ["的", "故事"], ["▁R", "ef"], ["▁dr", "um"], ["伊斯", "兰"], ["▁en", "orm"], ["▁ne", "urolog"], ["企", "業"], ["▁B", "ad"], ["风", "电"], ["色", "素"], ["ch", "ild"], ["直", "辖"], ["显示", "了"], ["▁L", "ib"], ["oc", "ols"], ["Olymp", "ic"], ["▁ele", "ph"], ["▁select", "ing"], ["an", "th"], ["aun", "a"], ["▁ut", "ility"], ["民族", "复兴"], ["本", "领"], ["无形", "资产"], ["如果", "说"], ["都", "没有"], ["水", "源"], ["▁res", "ist"], ["▁im", "per"], ["和", "保护"], ["D", "B"], ["▁belong", "ing"], ["▁f", "raction"], ["癌", "细胞"], ["市场", "营销"], ["正", "向"], ["▁barri", "er"], ["▁mult", "ip"], ["▁p", "anc"], ["end", "ers"], ["▁c", "yl"], ["▁lik", "elihood"], ["d", "ess"], ["▁rele", "ases"], ["当今", "世界"], ["可", "行的"], ["涉", "案"], ["反", "抗"], ["▁assign", "ment"], ["▁absor", "ption"], ["▁cut", "s"], ["▁▁▁▁▁▁▁▁", "▁▁▁▁"], ["U", "C"], ["Bl", "ue"], ["n", "um"], ["▁Christ", "ians"], ["▁mamm", "als"], ["▁wor", "n"], ["▁vol", "umes"], ["▁Con", "vention"], ["▁m", "es"], ["\u0007", "\b"], ["历史", "文化"], ["理", "财"], ["办", "案"], ["一致", "的"], ["确", "切"], ["we", "gian"], ["▁b", "are"], ["▁abnorm", "al"], ["▁pro", "long"], ["h", "ot"], ["C", "arl"], ["h", "ydro"], ["ot", "yp"], ["▁he", "ter"], ["思维", "方式"], ["派", "的"], ["就", "不能"], ["也", "不会"], ["固", "有"], ["技", "艺"], ["电", "器"], ["▁occup", "ied"], ["▁N", "ic"], ["▁add", "iction"], ["▁haz", "ards"], ["▁minor", "ity"], ["▁pain", "ful"], ["u", "ated"], ["u", "j"], ["▁F", "rom"], ["▁Min", "istry"], ["▁U", "se"], ["i", "ors"], ["ins", "p"], ["权", "责"], ["经济", "结构"], ["的", "比重"], ["各个", "方面"], ["传统", "文化的"], ["用", "品"], ["朝", "着"], ["偏", "离"], ["▁School", "s"], ["散", "射"], ["可用", "性"], ["▁critic", "ism"], ["▁f", "ictional"], ["▁att", "ending"], ["▁continu", "ing"], ["р", "а"], ["边", "境"], ["▁l", "ib"], ["▁per", "m"], ["▁en", "forcement"], ["两", "部分"], ["后", "代"], ["首", "批"], ["ibli", "ography"], ["▁fol", "k"], ["▁he", "pat"], ["▁how", "ever"], ["▁speak", "er"], ["og", "ene"], ["gh", "an"], ["itzer", "land"], ["▁Stand", "ard"], ["C", "u"], ["v", "as"], ["▁b", "ub"], ["▁v", "ascular"], ["为", "国家"], ["还", "不"], ["规章", "制度"], ["千", "万"], ["受", "托"], ["各个", "环节"], ["损", "坏"], ["紊", "乱"], ["当前", "的"], ["▁emer", "ge"], ["▁mole", "cule"], ["通", "行"], ["系统", "中的"], ["▁end", "angered"], ["▁R", "o"], ["▁t", "ag"], ["E", "mb"], ["P", "an"], ["▁Car", "ibbean"], ["▁J", "oe"], ["证", "人"], ["▁assum", "ed"], ["com", "m"], ["for", "ced"], ["款", "规定"], ["模块", "化"], ["军", "委"], ["但", "却"], ["推", "定"], ["▁document", "ary"], ["牛", "顿"], ["ustr", "ial"], ["透", "過"], ["J", "ew"], ["▁capt", "ivating"], ["▁phr", "ases"], ["▁surround", "ings"], ["以太", "网"], ["k", "ay"], ["▁P", "olicy"], ["aren", "cy"], ["▁Pl", "aces"], ["et", "he"], ["P", "rior"], ["▁lo", "an"], ["▁per", "pet"], ["跨", "学科"], ["影响", "因素"], ["判", "处"], ["表", "决"], ["转", "折"], ["说", "服"], ["价格", "的"], ["这里", "的"], ["甚至", "是"], ["的研究", "人员"], ["的安全", "性"], ["in", "cess"], ["ly", "n"], ["▁car", "ries"], ["▁municip", "alities"], ["▁recip", "e"], ["▁sk", "illed"], ["▁ter", "ror"], ["▁Th", "at"], ["ot", "ten"], ["▁T", "a"], ["▁f", "ra"], ["▁parl", "iament"], ["▁w", "elfare"], ["m", "ont"], ["▁m", "issions"], ["▁pl", "acing"], ["整体", "性"], ["国有", "资本"], ["现代", "企业"], ["卒", "中"], ["更", "能"], ["下", "滑"], ["将", "为"], ["接", "壤"], ["as", "al"], ["▁Med", "al"], ["ri", "ers"], ["on", "i"], ["P", "ractice"], ["i", "king"], ["发展", "水平"], ["产品", "和服务"], ["孩", "子的"], ["广泛", "应用于"], ["东南", "亚"], ["L", "ocal"], ["ü", "r"], ["itect", "ure"], ["▁isol", "ation"], ["oun", "s"], ["ard", "o"], ["超", "級"], ["生产", "力的"], ["辩证", "法"], ["表", "型"], ["农", "作物"], ["必", "不可"], ["频", "谱"], ["作", "主"], ["鄉", "試"], ["im", "en"], ["讲", "座"], ["play", "ers"], ["L", "ight"], ["▁N", "ov"], ["▁explain", "ing"], ["▁interview", "s"], ["apt", "ers"], ["▁attempt", "ed"], ["▁d", "oses"], ["▁g", "aps"], ["▁am", "ino"], ["oc", "hemical"], ["连续", "性"], ["额", "外的"], ["▁N", "a"], ["##", "##▁"], ["▁b", "its"], ["▁n", "odes"], ["▁prev", "ents"], ["哺", "乳"], ["M", "ount"], ["▁L", "ady"], ["▁t", "ongue"], ["到", "位"], ["中国特色社会主义", "道路"], ["投", "机"], ["超", "過"], ["th", "lete"], ["▁orient", "ation"], ["中", "學"], ["斯", "拉"], ["▁cra", "ck"], ["▁sk", "et"], ["ur", "se"], ["▁public", "ations"], ["Christ", "ian"], ["Im", "p"], ["▁N", "ob"], ["現", "代"], ["。", "▁("], ["功能", "和"], ["主要", "通过"], ["心脏", "病"], ["五", "十"], ["的", "反应"], ["V", "irginia"], ["an", "ia"], ["中", "叶"], ["▁dig", "it"], ["▁partic", "le"], ["▁f", "est"], ["▁c", "her"], ["▁batt", "les"], ["▁teac", "hes"], ["It", "alian"], ["▁be", "am"], ["▁F", "acebook"], ["需要", "进行"], ["计", "入"], ["城乡", "居民"], ["飞", "船"], ["一", "律"], ["涉", "外"], ["高职", "院校"], ["推", "导"], ["是", "大"], ["ne", "x"], ["▁R", "ena"], ["是", "可以"], ["成功", "地"], ["▁qu", "e"], ["▁in", "clusion"], ["的", "操作"], ["P", "rodu"], ["它", "与"], ["le", "ting"], ["f", "ather"], ["▁ad", "mitted"], ["▁c", "ave"], ["▁among", "st"], ["▁establish", "ing"], ["黄", "色"], ["s", "er"], ["▁Tur", "k"], ["p", "olitical"], ["▁M", "ovement"], ["国家", "治理"], ["所", "处"], ["加快", "发展"], ["节能", "减排"], ["是", "把"], ["的", "心理"], ["微", "型"], ["公平", "竞争"], ["工", "匠"], ["应", "根据"], ["号", "召"], ["理论", "知识"], ["探", "针"], ["邮", "政"], ["▁s", "le"], ["ograph", "ics"], ["▁Em", "peror"], ["这些", "数据"], ["的", "工具"], ["▁W", "ilson"], ["▁horiz", "ontal"], ["▁sp", "ir"], ["▁c", "able"], ["▁campaign", "s"], ["▁digest", "ive"], ["▁f", "isher"], ["▁last", "ing"], ["▁wind", "s"], ["ou", "stic"], ["▁mel", "an"], ["O", "l"], ["pl", "ed"], ["百", "科"], ["和", "基本"], ["了", "我国"], ["争", "夺"], ["恶", "劣"], ["里", "面"], ["ag", "le"], ["增加", "到"], ["Ch", "inese"], ["振", "荡"], ["字", "节"], ["f", "lu"], ["c", "s"], ["mod", "ern"], ["Spec", "ial"], ["▁d", "ictionary"], ["N", "i"], ["国家", "对"], ["电解", "质"], ["享", "有的"], ["开始", "了"], ["产学", "研"], ["眼", "光"], ["不足", "以"], ["▁prior", "ity"], ["ol", "ine"], ["乳", "腺癌"], ["pro", "b"], ["J", "ud"], ["ipl", "inary"], ["或", "在"], ["▁A", "ud"], ["天文", "台"], ["in", "ces"], ["W", "A"], ["上", "来"], ["才", "有"], ["提供了", "一个"], ["寄", "生"], ["▁king", "dom"], ["即", "时"], ["Int", "erest"], ["int", "erest"], ["▁A", "ccess"], ["▁Pal", "est"], ["▁col", "ony"], ["A", "p"], ["重要", "思想"], ["构建", "新发展格局"], ["的", "正确"], ["人民币", "汇率"], ["督", "促"], ["边", "疆"], ["气", "氛"], ["节", "水"], ["汇", "报"], ["渔", "业"], ["▁pay", "ment"], ["逆", "转"], ["▁sh", "opping"], ["的", "自由"], ["d", "in"], ["▁th", "yroid"], ["om", "ical"], ["at", "abase"], ["▁cir", "cles"], ["就", "越"], ["海", "底"], ["无", "数"], ["St", "ill"], ["`", ",▁"], ["▁dim", "in"], ["经济", "和"], ["▁H", "an"], ["on", "el"], ["未成", "年"], ["P", "G"], ["R", "ank"], ["hemat", "ics"], ["m", "ind"], ["▁N", "ame"], ["ph", "al"], ["cast", "ing"], ["生产", "过程"], ["准确", "把握"], ["分析", "法"], ["理论", "课"], ["短期", "内"], ["农村", "土地"], ["高等", "院校"], ["开放", "性"], ["企", "图"], ["多", "家"], ["税务", "机关"], ["▁S", "her"], ["▁regist", "ered"], ["in", "formation"], ["这", "段"], ["▁prot", "ocol"], ["▁T", "O"], ["主", "題"], ["end", "ment"], ["▁tra", "ding"], ["▁works", "hops"], ["m", "ap"], ["s", "qu"], ["▁dist", "ract"], ["▁ent", "reprene"], ["▁integ", "ral"], ["各自", "的"], ["心", "律"], ["u", "um"], ["v", "y"], ["ent", "i"], ["c", "r"], ["▁D", "ream"], ["舉", "辦"], ["▁defin", "itions"], ["u", "f"], ["▁appl", "ies"], ["necess", "ary"], ["▁I", "raq"], ["▁kilomet", "ers"], ["省", "市"], ["实践", "性"], ["电动", "汽车"], ["而", "不能"], ["洞", "察"], ["大", "革命"], ["派", "出"], ["来", "到"], ["▁dist", "ress"], ["▁dest", "ination"], ["▁immigr", "ants"], ["▁se", "es"], ["▁bul", "lying"], ["Pl", "ant"], ["▁B", "or"], ["采用", "的"], ["方", "差"], ["乙", "烯"], ["演", "绎"], ["采", "纳"], ["物理", "学家"], ["的", "好"], ["冗", "余"], ["M", "er"], ["附近", "的"], ["▁cons", "ent"], ["▁cam", "eras"], ["▁pray", "er"], ["▁suggest", "ions"], ["▁trans", "mitted"], ["公共", "安全"], ["区", "内"], ["的基本", "概念"], ["目前", "我国"], ["惯", "例"], ["还", "需"], ["科学", "与"], ["于", "一"], ["的", "热"], ["表达", "式"], ["工作", "报告"], ["得", "知"], ["EN", "T"], ["▁Am", "azon"], ["M", "arc"], ["ram", "a"], ["▁gra", "y"], ["t", "ered"], ["off", "ering"], ["▁man", "us"], ["▁prec", "isely"], ["b", "ird"], ["▁C", "ultural"], ["再", "加上"], ["直", "肠"], ["▁mod", "ule"], ["▁lect", "ure"], ["”", "("], ["▁associ", "ate"], ["vious", "ly"], ["马克思主义中国", "化"], ["生产", "资料"], ["市场", "经济的"], ["呼", "吁"], ["的", "区别"], ["感", "应"], ["应当", "按照"], ["年", "逝世"], ["之后", "的"], ["▁R", "en"], ["元素", "的"], ["De", "ath"], ["的", "开发"], ["▁T", "reat"], ["se", "a"], ["▁jud", "gment"], ["▁document", "ed"], ["▁rest", "ricted"], ["*", ":▁"], ["L", "and"], ["敦", "煌"], ["可以", "看到"], ["m", "aster"], ["下", "一个"], ["▁on", "set"], ["传", "媒"], ["天", "皇"], ["拍", "攝"], ["▁s", "ulf"], ["▁suscept", "ible"], ["▁an", "ch"], ["荷", "蘭"], ["西", "亞"], ["▁S", "a"], ["▁T", "aylor"], ["法治", "化"], ["市场", "机制"], ["不", "履行"], ["矫", "正"], ["专门", "的"], ["优秀", "的"], ["存储", "器"], ["让学生", "在"], ["侧重", "于"], ["ul", "ates"], ["市", "长"], ["▁fat", "igue"], ["amm", "ad"], ["▁E", "dition"], ["ject", "ive"], ["导", "演"], ["ol", "o"], ["ym", "e"], ["让", "他们"], ["进行", "研究"], ["▁d", "ual"], ["下", "属"], ["和", "多"], ["有", "不同的"], ["两", "项"], ["thod", "ox"], ["U", "nt"], ["一", "同"], ["▁sc", "ope"], ["GF", "R"], ["redu", "cing"], ["▁d", "airy"], ["▁dis", "comfort"], ["▁phot", "ography"], ["▁writ", "es"], ["th", "ony"], ["on", "ing"], ["L", "ead"], ["cont", "rol"], ["m", "RNA"], ["主", "线"], ["胜", "任"], ["党", "校"], ["ind", "ex"], ["在", "很大程度上"], ["的", "增加"], ["旅", "客"], ["大", "同"], ["明", "的"], ["C", "ut"], ["▁supp", "lements"], ["▁Pr", "ime"], ["N", "atural"], ["化", "物"], ["▁stim", "ulation"], ["状态", "下"], ["口", "号"], ["科", "學"], ["联系", "起来"], ["每", "月"], ["O", "U"], ["▁system", "ic"], ["▁P", "it"], ["or", "ig"], ["▁h", "ide"], ["aus", "es"], ["n", "ational"], ["指导", "意见"], ["重要", "讲话"], ["信息", "披露"], ["课程", "改革"], ["支付", "的"], ["所", "长"], ["五", "代"], ["▁inv", "ention"], ["▁B", "alt"], ["▁S", "ydney"], ["every", "one"], ["suggest", "ing"], ["▁bel", "oved"], ["一", "张"], ["lar", "ge"], ["結", "構"], ["▁cy", "t"], ["ourn", "als"], ["顯", "示"], ["▁L", "ewis"], ["▁I", "mm"], ["▁sc", "iences"], ["N", "G"], ["涵盖", "了"], ["基础", "上的"], ["▁V", "iew"], ["em", "in"], ["的有效", "性"], ["▁sing", "ing"], ["▁brother", "s"], ["▁c", "ups"], ["▁cl", "ues"], ["▁sh", "ade"], ["方", "言"], ["截", "止"], ["y", "g"], ["P", "rom"], ["中", "使用"], ["的", "角色"], ["▁k", "g"], ["少", "女"], ["▁Har", "vard"], ["复合", "型"], ["创新", "和"], ["办公", "厅"], ["贫困", "地区"], ["从而", "实现"], ["毕", "竟"], ["电", "图"], ["比较", "优势"], ["等", "形式"], ["为", "我们"], ["膜", "炎"], ["监", "会"], ["μ", "m"], ["▁fit", "ness"], ["–", "▁▁"], ["j", "an"], ["蓝", "色"], ["有", "一些"], ["So", "on"], ["▁re", "venue"], ["▁sing", "les"], ["▁B", "all"], ["y", "ers"], ["▁m", "apping"], ["ment", "ation"], ["▁separ", "ation"], ["▁enzym", "es"], ["年", "内"], ["资源", "共享"], ["逃", "避"], ["减", "缓"], ["▁desc", "end"], ["▁bron", "ze"], ["挪", "威"], ["之前", "的"], ["管理", "局"], ["Never", "theless"], ["▁consist", "ed"], ["▁manufacture", "r"], ["m", "el"], ["党", "在"], ["四川", "省"], ["方向", "的"], ["组织", "中"], ["机", "电"], ["西", "汉"], ["上", "限"], ["制", "药"], ["州", "府"], ["近", "现代"], ["东", "盟"], ["校", "准"], ["第六", "章"], ["走", "势"], ["新", "区"], ["优越", "性"], ["主要", "表现在"], ["▁d", "ress"], ["▁absol", "ute"], ["起源", "于"], ["和", "维护"], ["▁celeb", "ration"], ["▁magn", "itude"], ["▁J", "on"], ["▁M", "ajor"], ["m", "ount"], ["不", "及"], ["▁sl", "ave"], ["in", "ery"], ["▁ch", "amber"], ["▁arth", "ritis"], ["Vol", "ume"], ["f", "iction"], ["▁const", "raints"], ["的", "解释"], ["很", "重要"], ["泄", "漏"], ["的", "材料"], ["病", "灶"], ["▁should", "er"], ["D", "T"], ["ob", "ic"], ["Afric", "an"], ["選", "區"], ["▁I", "dent"], ["S", "aint"], ["all", "enge"], ["▁se", "al"], ["r", "ise"], ["Sp", "anish"], ["▁th", "row"], ["财产", "的"], ["请求", "权"], ["乐", "观"], ["议", "事"], ["▁accept", "ance"], ["▁ex", "clud"], ["地", "带"], ["拆", "除"], ["ph", "ysical"], ["▁pred", "omin"], ["▁defin", "itely"], ["▁sett", "lers"], ["▁w", "ra"], ["▁work", "place"], ["一", "大"], ["航空", "航天"], ["第三", "个"], ["流行", "病"], ["开", "通"], ["ag", "h"], ["职", "位"], ["入", "选"], ["u", "pp"], ["▁s", "ons"], ["这一", "问题"], ["团结", "带领"], ["超", "导"], ["功", "效"], ["孕", "育"], ["新", "的发展"], ["条", "文"], ["这一", "时期"], ["知", "觉"], ["军", "人"], ["▁F", "ront"], ["大", "都"], ["D", "ate"], ["▁gram", "mar"], ["▁F", "ox"], ["as", "hed"], ["w", "ent"], ["▁St", "one"], ["▁cy", "ber"], ["▁defe", "at"], ["▁in", "clusive"], ["T", "able"], ["创造", "的"], ["无", "所"], ["理事", "会"], ["E", "G"], ["」、", "「"], ["per", "ature"], ["在", "日本"], ["▁can", "al"], ["Ph", "ot"], ["▁gen", "ome"], ["O", "s"], ["norm", "al"], ["omet", "er"], ["国内", "生产总值"], ["和", "学生"], ["臺", "南"], ["填", "补"], ["校", "外"], ["逐", "年"], ["▁Dav", "is"], ["批", "量"], ["半", "径"], ["ustr", "ated"], ["t", "own"], ["調", "查"], ["ues", "ts"], ["▁bo", "ards"], ["▁with", "draw"], ["ro", "b"], ["这", "对于"], ["B", "razil"], ["面", "上"], ["哈", "尔"], ["▁Phil", "adelphia"], ["ym", "n"], ["PP", "P"], ["▁toler", "ance"], ["▁assum", "ptions"], ["d", "d"], ["▁b", "ass"], ["▁c", "ig"], ["s", "ized"], ["at", "ri"], ["T", "urn"], ["ect", "ive"], ["从", "这个"], ["新", "民主主义"], ["膜", "的"], ["积极", "推进"], ["较低", "的"], ["与", "分析"], ["带", "着"], ["积极", "开展"], ["上", "腺"], ["停", "车"], ["家", "园"], ["T", "reatment"], ["employ", "ment"], ["运", "载"], ["示", "意图"], ["相", "近"], ["▁prec", "ip"], ["▁bur", "den"], ["▁p", "ale"], ["’", ".▁"], ["▁incred", "ibly"], ["▁install", "ation"], ["▁viol", "ent"], ["au", "x"], ["进行", "比较"], ["课", "本"], ["基因", "表达"], ["刺", "史"], ["以及", "在"], ["不", "忘"], ["ik", "h"], ["roll", "ing"], ["\"", "|"], ["▁bas", "ics"], ["▁mean", "ings"], ["▁ret", "ail"], ["J", "ul"], ["▁\\", "[[@"], ["Am", "phibians"], ["▁b", "aking"], ["代表", "团"], ["P", "res"], ["现代化", "建设"], ["可以", "作为"], ["大力", "推进"], ["周期", "性"], ["等", "离子"], ["必须", "以"], ["新", "动能"], ["载", "人"], ["等", "功能"], ["CP", "I"], ["▁whe", "at"], ["▁architect", "ural"], ["▁n", "ick"], ["▁repe", "at"], ["年", "中"], ["▁r", "ational"], ["▁Th", "rough"], ["▁ph", "ilos"], ["▁produ", "cers"], ["採", "用"], ["ask", "et"], ["市", "場"], ["K", "en"], ["▁S", "ong"], ["F", "ar"], ["巨噬", "细胞"], ["说", "是"], ["营", "利"], ["合作", "伙伴"], ["io", "let"], ["umin", "um"], ["▁associ", "ations"], ["▁element", "ary"], ["▁surv", "ived"], ["利", "亞"], ["▁B", "ureau"], ["▁wid", "th"], ["O", "per"], ["各", "地区"], ["农民", "的"], ["理论和", "实践"], ["进一步", "加强"], ["排", "水"], ["梗", "死"], ["感", "悟"], ["不断", "推进"], ["抑", "郁"], ["主", "事"], ["pl", "t"], ["年代", "末"], ["is", "ations"], ["▁co", "ins"], ["读", "写"], ["▁be", "ars"], ["▁conf", "used"], ["▁speed", "s"], ["l", "ib"], ["▁ret", "ro"], ["or", "ney"], ["S", "yn"], ["方", "形"], ["兼", "任"], ["以", "保证"], ["董事", "长"], ["ass", "ium"], ["受", "试"], ["l", "ob"], ["▁Aff", "airs"], ["▁v", "ice"], ["re", "leased"], ["▁ref", "used"], ["▁soph", "isticated"], ["▁high", "way"], ["omm", "y"], ["球", "菌"], ["▁L", "inux"], ["x", "y"], ["▁J", "ane"], ["精", "细化"], ["民主", "党派"], ["教学", "活动"], ["感", "和"], ["聚", "类"], ["全国", "政协"], ["电力", "系统"], ["直接", "投资"], ["侵", "蚀"], ["辛", "亥"], ["次", "会议"], ["民", "办"], ["▁prec", "ision"], ["程序", "设计"], ["困", "扰"], ["▁f", "ed"], ["ydr", "ates"], ["▁b", "ike"], ["▁entertain", "ment"], ["菲", "律"], ["▁R", "oss"], ["▁m", "ask"], ["乌", "克兰"], ["和", "提高"], ["镜", "头"], ["Cl", "imate"], ["▁off", "ices"], ["▁t", "ape"], ["▁ang", "les"], ["e", "ared"], ["母", "親"], ["T", "ube"], ["▁th", "reshold"], ["par", "ing"], ["ad", "ron"], ["应", "是"], ["反", "腐败"], ["血", "流"], ["税", "款"], ["细", "致"], ["▁en", "cl"], ["就是", "一个"], ["生物", "技术"], ["陷", "阱"], ["将", "被"], ["▁le", "an"], ["▁st", "ems"], ["水", "域"], ["的", "单"], ["▁", "•▁"], ["最早", "的"], ["场", "地"], ["og", "ram"], ["一", "世"], ["st", "all"], [";", "}-"], ["lic", "t"], ["th", "ings"], ["N", "P"], ["B", "uild"], ["▁Swed", "ish"], ["▁brows", "er"], ["从而", "提高"], ["的", "做法"], ["安", "定"], ["随", "访"], ["%", "),▁"], ["▁accomp", "any"], ["▁categ", "or"], ["▁educ", "ated"], ["咖", "啡"], ["▁R", "ab"], ["▁rad", "i"], ["spec", "ies"], ["▁pass", "word"], ["▁season", "al"], ["ug", "by"], ["犯罪", "行为"], ["的", "权力"], ["指标", "体系"], ["的", "结合"], ["伊", "拉克"], ["p", "a"], ["▁Liter", "ature"], ["spec", "ifically"], ["▁brief", "ly"], ["后", "面"], ["流", "行的"], ["ic", "iency"], ["▁to", "mat"], ["reg", "ardless"], ["▁beg", "un"], ["▁relax", "ation"], ["A", "bs"], ["集", "中的"], ["冻", "结"], ["装", "机"], ["j", "u"], ["陆", "地"], ["恩", "斯"], ["v", "als"], ["▁Res", "erve"], ["e", "ffic"], ["L", "ee"], ["▁Miss", "issippi"], ["▁abund", "ant"], ["▁c", "ough"], ["▁god", "s"], ["▁sa", "uce"], ["▁v", "ot"], ["的", "决定"], ["及", "应用"], ["特点", "和"], ["鼓励", "学生"], ["副", "作用"], ["目的", "在于"], ["淡", "化"], ["为", "首"], ["▁cry", "pt"], ["短", "暂"], ["ore", "r"], ["▁dis", "put"], ["▁an", "at"], ["inc", "ome"], ["▁st", "abil"], ["b", "ase"], ["▁oper", "ational"], ["▁fore", "ver"], ["▁sleep", "ing"], ["反", "垄断"], ["固", "态"], ["每", "周"], ["研究", "结果"], ["一", "开始"], ["公司", "在"], ["計", "畫"], ["onom", "ous"], ["av", "oid"], ["甲基", "化"], ["▁Y", "ears"], ["ag", "us"], ["▁arrang", "ements"], ["▁deb", "ates"], ["▁prot", "est"], ["▁adopt", "ion"], ["▁re", "ef"], ["坚持", "和完善"], ["教学", "过程"], ["之间的", "矛盾"], ["校", "正"], ["费", "用的"], ["可", "谓"], ["里程", "碑"], ["内", "皮"], ["开", "采"], ["毫", "无"], ["社会", "中"], ["力", "争"], ["上", "行"], ["总", "数"], ["▁H", "ay"], ["▁progress", "ive"], ["ac", "le"], ["sk", "i"], ["平方", "千米"], ["有机", "物"], ["授", "权的"], ["上", "调"], ["It", "aly"], ["ill", "ance"], ["口", "岸"], ["M", "aking"], ["Est", "ab"], ["經", "過"], ["L", "ove"], ["▁cra", "fts"], ["ad", "r"], ["判", "例"], ["弱", "化"], ["看", "成"], ["量", "刑"], ["与", "人"], ["ellig", "ent"], ["enn", "edy"], ["w", "orm"], ["山", "市"], ["提", "案"], ["了", "大量"], ["▁Tur", "key"], ["▁comb", "inations"], ["▁F", "ederation"], ["l", "isher"], ["t", "ogether"], ["▁R", "un"], ["il", "er"], ["i", "ć"], ["安徽", "省"], ["共", "计"], ["代表", "的"], ["然后", "再"], ["▁W", "ed"], ["▁prolif", "eration"], ["程", "式"], ["▁descri", "bing"], ["onym", "ous"], ["▁ph", "ones"], ["▁o", "ceans"], ["▁reprodu", "ctive"], ["E", "arth"], ["科", "创"], ["预", "案"], ["思维", "和"], ["言", "语"], ["祭", "祀"], ["精", "华"], ["劳动", "教育"], ["服务", "平台"], ["上", "进行"], ["ast", "ing"], ["udden", "ly"], ["▁s", "ending"], ["▁complet", "ion"], ["▁t", "rem"], ["▁p", "neum"], ["质量", "管理"], ["bl", "ue"], ["塑", "性"], ["有", "三"], ["AT", "P"], ["or", "ient"], ["▁myster", "ious"], ["ier", "re"], ["▁her", "b"], ["▁fol", "ks"], ["▁overwhel", "ming"], ["ard", "ed"], ["▁Ant", "on"], ["H", "and"], ["ic", "ul"], ["国际", "货币"], ["要", "对"], ["法律", "体系"], ["全球", "化的"], ["组织", "结构"], ["病", "人的"], ["经济社会", "发展的"], ["商", "事"], ["等", "奖"], ["重点", "实验室"], ["he", "nd"], ["p", "oss"], ["民", "政"], ["▁m", "art"], ["ropri", "ate"], ["▁ceremon", "y"], ["▁e", "ager"], ["▁show", "c"], ["alk", "er"], ["▁reg", "ister"], ["崩", "溃"], ["公", "社"], ["Disc", "uss"], ["g", "iven"], ["▁des", "k"], ["Form", "er"], ["▁stret", "ch"], ["▁ar", "tery"], ["▁gu", "ides"], ["▁upd", "ates"], ["D", "eterm"], ["▁rece", "ives"], ["十二", "条"], ["▁Mar", "ine"], ["改", "為"], ["'", ")"], ["▁Ag", "riculture"], ["▁D", "uke"], ["▁ra", "b"], ["刑事", "诉讼"], ["能力", "建设"], ["职业", "院校"], ["财务", "会计"], ["房", "价"], ["携", "手"], ["水", "体"], ["古", "城"], ["变", "暖"], ["从", "来"], ["出", "让"], ["是", "现代"], ["A", "st"], ["ir", "ms"], ["章", "节"], ["row", "span"], ["的", "时"], ["▁v", "ivo"], ["▁comb", "ines"], ["▁puzz", "le"], ["分布", "在"], ["▁h", "al"], ["▁the", "sis"], ["▁require", "ment"], ["规律", "的"], ["等", "进行"], ["打", "下"], ["扩大", "了"], ["打破", "了"], ["博士", "生"], ["经济", "活动"], ["▁sol", "o"], ["可以", "直接"], ["H", "um"], ["▁se", "iz"], ["▁L", "o"], ["▁air", "port"], ["▁illustr", "ations"], ["▁v", "ine"], ["▁need", "le"], ["設", "立"], ["硫", "酸"], ["ex", "ample"], ["▁Ad", "vent"], ["哈", "佛"], ["布", "鲁"], ["網", "路"], ["价值", "和"], ["违约", "金"], ["污水", "处理"], ["服务", "贸易"], ["波", "形"], ["办", "好"], ["破", "除"], ["向", "社会"], ["斯", "塔"], ["以下", "的"], ["▁L", "ow"], ["他", "对"], ["ad", "i"], ["▁assess", "ments"], ["▁com", "edy"], ["▁review", "ed"], ["▁D", "u"], ["ole", "cular"], ["▁mit", "ochond"], ["有", "關"], ["ft", "ware"], ["关系", "和"], ["處", "理"], ["早期", "的"], ["传", "入"], ["Pat", "ients"], ["▁controvers", "ial"], ["▁dram", "atically"], ["▁fav", "our"], ["▁not", "ion"], ["▁retire", "ment"], ["▁st", "unning"], ["Cam", "bridge"], ["t", "ah"], ["加", "哥"], ["芝", "加哥"], ["wid", "th"], ["錦標", "賽"], ["▁R", "og"], ["和", "网络"], ["基本", "实现"], ["转移", "支付"], ["沈", "阳"], ["大规模", "的"], ["废弃", "物"], ["不", "尽"], ["裁", "量"], ["失", "误"], ["开", "支"], ["的", "矛盾"], ["umb", "led"], ["▁m", "RNA"], ["▁util", "ized"], ["指", "定的"], ["崇", "拜"], ["選", "擇"], ["f", "ilm"], ["▁F", "ord"], ["▁T", "ips"], ["会", "造成"], ["创造", "出"], ["蒸", "汽"], ["with", "in"], ["▁absor", "bed"], ["▁employ", "ee"], ["▁N", "ut"], ["are", "st"], ["悠", "久"], ["▁Tre", "nds"], ["az", "ines"], ["S", "ystem"], ["▁M", "ind"], ["▁def", "ects"], ["▁indic", "ators"], ["▁h", "ill"], ["的", "观念"], ["产业", "体系"], ["新", "质生产力"], ["保障", "体系"], ["可", "根据"], ["改", "正"], ["课", "后"], ["款", "项"], ["服务", "等"], ["▁exp", "enses"], ["▁ra", "ces"], ["了", "新的"], ["子", "系统"], ["uls", "ion"], ["▁J", "erusalem"], ["▁so", "ils"], ["▁curren", "cy"], ["▁discipl", "ine"], ["▁special", "ist"], ["马来", "西亚"], ["▁pack", "aging"], ["▁tri", "be"], ["av", "ed"], ["基本", "技能"], ["流", "水"], ["ther", "s"], ["质", "子"], [":", "||"], ["ret", "t"], ["U", "lt"], ["▁mut", "ation"], ["▁practition", "ers"], ["R", "L"], ["▁te", "ens"], ["Current", "ly"], ["▁friends", "hip"], ["▁merg", "ed"], ["▁pot", "atoes"], ["人与自然", "和谐"], ["企业", "经营"], ["迅速", "发展"], ["从而", "导致"], ["公", "积"], ["你", "们"], ["严", "厉"], ["电", "缆"], ["资产", "管理"], ["一直", "在"], ["修正", "案"], ["▁Gall", "ery"], ["生成", "的"], ["▁model", "ing"], ["▁I", "g"], ["▁Tra", "de"], ["▁vel", "ocity"], ["do", "ors"], ["▁el", "abor"], ["ab", "ases"], ["▁jo", "ining"], ["▁h", "ol"], ["B", "esides"], ["▁neighb", "ors"], ["▁virt", "ually"], ["全面", "依法治国"], ["很", "高的"], ["已经", "在"], ["知识", "产权的"], ["领域", "中"], ["发表", "的"], ["u", "ity"], ["r", "int"], ["▁cr", "imes"], ["ays", "ia"], ["P", "oint"], ["us", "hes"], ["▁as", "h"], ["▁elect", "rons"], ["莫", "斯科"], ["威", "尔"], ["▁L", "ar"], ["编码", "为"], ["等", "都"], ["能源", "消费"], ["持", "股"], ["的", "平均"], ["规范", "和"], ["所", "占"], ["日益", "增长的"], ["相关", "部门"], ["上下", "游"], ["多", "彩"], ["人", "次"], ["融", "通"], ["地", "铁"], ["place", "ment"], ["是", "具有"], ["优", "异"], ["精", "彩"], ["V", "M"], ["ut", "ical"], ["val", "ues"], ["銀", "行"], ["uis", "ine"], ["lear", "n"], ["▁cl", "oth"], ["整", "数"], ["的", "第"], ["▁N", "ap"], ["th", "ird"], ["表", "中"], ["停", "留在"], ["加", "权"], ["实质", "上"], ["没", "收"], ["if", "ice"], ["任务", "是"], ["的", "类型"], ["▁dys", "function"], ["征", "服"], ["▁sm", "ell"], ["▁T", "el"], ["Def", "inition"], ["▁achieve", "ments"], ["▁t", "ends"], ["▁tw", "elve"], ["▁vit", "ro"], ["科技", "进步"], ["交", "织"], ["添加", "剂"], ["参与", "到"], ["政府", "职能"], ["耐", "受"], ["必要", "时"], ["绿", "化"], ["罕", "见"], ["y", "st"], ["W", "orks"], ["大", "城市"], ["J", "ean"], ["m", "icro"], ["维", "尔"], ["om", "ed"], ["M", "ag"], ["pl", "ants"], ["▁el", "ig"], ["▁hom", "ework"], ["奥", "斯"], ["▁d", "iving"], ["▁sum", "mar"], ["▁t", "ied"], ["▁travel", "ed"], ["▁met", "ap"], ["form", "s"], ["了一", "定的"], ["单一", "的"], ["B", "T"], ["tain", "ed"], ["▁Leg", "isl"], ["▁l", "oyal"], ["▁Stand", "ards"], ["▁lay", "out"], ["幻", "想"], ["▁", "×▁"], ["▁development", "al"], ["b", "ad"], ["▁m", "im"], ["创新", "精神"], ["湖南", "省"], ["分", "期"], ["的人", "文"], ["不", "具备"], ["使", "他们"], ["打", "好"], ["模式", "和"], ["▁comp", "at"], ["▁corpor", "ate"], ["▁ext", "ends"], ["▁search", "ing"], ["列", "出"], ["▁trans", "f"], ["特", "许"], ["弯", "曲"], ["精", "髓"], ["的", "革命"], ["洛", "克"], ["▁Col", "lection"], ["▁f", "ate"], ["B", "B"], ["▁ind", "irect"], ["z", "one"], ["▁ph", "on"], ["行政", "许可"], ["主要", "以"], ["应", "由"], ["孵", "化"], ["解", "题"], ["担", "忧"], ["可", "是"], ["et", "ically"], ["加", "速度"], ["惯", "性"], ["品", "的"], ["▁out", "line"], ["也", "称"], ["▁tit", "led"], ["▁p", "enc"], ["+", "+"], ["im", "ore"], ["▁P", "ap"], ["▁d", "a"], ["▁H", "op"], ["细胞", "内"], ["想", "到"], ["种", "群"], ["▁Mag", "azine"], ["j", "amin"], ["不再", "是"], ["其", "后"], ["▁aff", "airs"], ["et", "ed"], ["d", "rums"], ["▁develop", "ers"], ["I", "X"], ["In", "s"], ["m", "ill"], ["▁Reg", "ional"], ["重大", "问题"], ["经济", "体系"], ["企", "事业单位"], ["常", "委"], ["价值", "取向"], ["采取", "的"], ["可以", "提高"], ["霉", "素"], ["肺", "部"], ["步", "入"], ["回", "路"], ["民事", "行为"], ["规律", "和"], ["海", "默"], ["手", "册"], ["领", "事"], ["▁E", "mer"], ["克", "拉"], ["▁term", "inal"], ["可", "有"], ["▁ra", "ys"], ["▁tub", "es"], ["退", "化"], ["m", "akers"], ["Dep", "ending"], ["▁develop", "s"], ["▁enorm", "ous"], ["加利", "福"], ["p", "iece"], ["几", "十年"], ["注册", "商标"], ["以", "期"], ["资", "质"], ["▁app", "le"], ["▁char", "ges"], ["▁cre", "ations"], ["▁Pub", "lishing"], ["▁", "~"], ["G", "rand"], ["▁L", "iberal"], ["▁", "\"▁"], ["lic", "ation"], ["▁mark", "er"], ["制", "成"], ["制度", "化"], ["的发展", "和"], ["责", "令"], ["多样", "化的"], ["接", "地"], ["中国", "革命"], ["新", "颖"], ["粘", "膜"], ["身", "边"], ["公司", "治理"], ["碳", "达峰"], ["第一", "位"], ["报", "纸"], ["▁f", "illing"], ["oc", "ate"], ["▁cal", "endar"], ["▁work", "er"], ["二", "人"], ["其", "後"], ["▁B", "ir"], ["B", "ab"], ["ord", "on"], ["經", "營"], ["c", "asts"], [").▁", "\""], ["局", "势"], ["▁w", "ww"], ["任", "期"], ["▁collabor", "ative"], ["▁cook", "ies"], ["▁part", "ially"], ["稳", "态"], ["群", "岛"], ["you", "ng"], ["的", "首"], ["I", "BM"], ["▁st", "er"], ["▁ke", "ys"], ["▁nurs", "ing"], ["act", "ic"], ["实施", "方案"], ["总", "量的"], ["化", "肥"], ["的", "商品"], ["替", "换"], ["骨", "质"], ["失", "调"], ["废", "气"], ["头", "痛"], ["▁consider", "ations"], ["麻", "醉"], ["公", "立"], ["▁M", "innesota"], ["▁prot", "agon"], ["▁un", "likely"], ["▁Pe", "ace"], ["▁dr", "ives"], ["▁effic", "acy"], ["距", "離"], ["▁re", "nt"], ["▁elev", "ation"], ["中华", "民国"], ["非常", "重要的"], ["▁C", "ru"], ["P", "olit"], ["▁ann", "iversary"], ["▁attribut", "ed"], ["d", "rop"], ["在", "外"], ["软件", "开发"], ["▁M", "ess"], ["並", "在"], ["▁gra", "ce"], ["屏", "幕"], ["▁calcul", "ations"], ["▁recogn", "izing"], ["十四", "条"], ["全面", "领导"], ["的", "压力"], ["满意", "度"], ["文", "体"], ["由于", "其"], ["所有", "人"], ["s", "olving"], ["▁conduct", "ing"], ["不", "完全"], ["一个", "新的"], ["▁D", "C"], ["已经", "被"], ["\"▁", "-▁"], ["▁Squ", "are"], ["n", "ings"], ["▁H", "indu"], ["▁cross", "ing"], ["ist", "ically"], ["▁arr", "ive"], ["而", "对于"], ["吸", "取"], ["皮", "书"], ["一次", "性"], ["St", "at"], ["出", "自"], ["繼", "續"], ["高", "地"], ["a", "qu"], ["rict", "ion"], ["ect", "ing"], ["p", "opulation"], ["▁th", "umb"], ["En", "vironmental"], ["▁promot", "ion"], ["數", "據"], ["安", "德"], ["▁l", "ift"], ["▁advoc", "ate"], ["▁dis", "asters"], ["》", ")"], ["我", "认为"], ["当家", "作主"], ["高", "技术"], ["中国", "共产党的"], ["的重要", "手段"], ["监", "理"], ["受", "伤"], ["等", "手段"], ["转", "入"], ["儿童", "的"], ["研究", "与"], ["必", "由"], ["的", "资金"], ["不", "强"], ["守", "法"], ["F", "act"], ["福建", "省"], ["黑", "客"], ["核", "苷"], ["两", "位"], ["大", "樓"], ["c", "ross"], ["▁G", "h"], ["L", "ED"], ["In", "formation"], ["?", "”"], ["ob", "s"], ["▁compet", "ing"], ["▁trig", "gers"], ["▁psych", "iat"], ["am", "an"], ["d", "ated"], ["天", "堂"], ["F", "re"], ["不", "相"], ["开", "工"], ["形", "而上"], ["的", "地区"], ["飞", "速"], ["退", "役"], ["mar", "ine"], ["▁wa", "vel"], ["▁an", "throp"], ["S", "ymptoms"], ["▁avoid", "ing"], ["的", "背景下"], ["各", "环节"], ["的", "成功"], ["但", "如果"], ["利益", "相关"], ["民事", "责任"], ["肥", "料"], ["提", "名"], ["b", "age"], ["异", "构"], ["皇", "后"], ["清", "洗"], ["Dan", "iel"], ["F", "red"], ["▁L", "ev"], ["R", "ail"], ["▁be", "e"], ["▁de", "als"], ["新", "产品"], ["避免", "了"], ["kl", "ah"], ["t", "urn"], ["▁comp", "elling"], ["▁regard", "less"], ["back", "ground"], ["ar", "ms"], [")", "/"], ["的", "无"], ["习近平总书记", "强调"], ["性", "强"], ["根本", "性"], ["民", "用"], ["不", "全"], ["昂", "贵"], ["削", "减"], ["政府", "和"], ["涉", "嫌"], ["宁", "夏"], ["小", "学生"], ["走出", "去"], ["Im", "port"], ["法", "系"], ["s", "ay"], ["古", "希腊"], ["▁j", "urisd"], ["the", "ning"], ["▁ind", "oor"], ["▁inv", "ented"], ["▁pract", "iced"], ["空", "間"], ["s", "ix"], ["战争", "的"], ["艾", "滋"], ["照", "顾"], ["▁prot", "ocols"], ["白血", "病"], ["duc", "ational"], ["н", "и"], ["比", "分"], ["Co", "V"], ["I", "B"], ["W", "ild"], ["vel", "s"], ["▁real", "istic"], ["▁l", "oose"], ["▁harm", "on"], ["E", "X"], ["▁emphas", "ize"], ["▁tra", "v"], ["W", "atch"], ["生", "于"], ["組", "成"], ["坚持和发展", "中国特色社会主义"], ["高速", "增长"], ["应对", "气候变化"], ["中国", "与"], ["与", "国家"], ["示范", "区"], ["责任", "制"], ["制度", "安排"], ["均", "等"], ["造", "影"], ["妨", "碍"], ["▁D", "aily"], ["防火", "墙"], ["的", "能量"], ["拥", "有的"], ["但", "他"], ["v", "ation"], ["祖", "先"], ["Gl", "obal"], ["M", "uch"], ["▁attract", "ive"], ["fect", "ure"], ["▁c", "ope"], ["in", "h"], ["文", "學"], ["以", "达到"], ["十二", "年"], ["从", "未"], ["中", "止"], ["乡", "土"], ["员", "的"], ["▁I", "N"], ["的", "执行"], ["▁im", "plant"], ["▁rel", "atives"], ["布", "尔"], ["▁design", "ers"], ["▁function", "ality"], ["▁intrig", "uing"], ["em", "pt"], ["Y", "e"], ["一种", "是"], ["和", "改善"], ["庞", "大"], ["职业", "技术"], ["缺", "氧"], ["知识和", "技能"], ["典", "范"], ["社会", "责任"], ["党的十九", "大"], ["int", "ers"], ["肿瘤", "的"], ["▁R", "os"], ["全", "文"], ["▁pip", "e"], ["▁writ", "ings"], ["arr", "hea"], ["el", "come"], ["▁end", "ot"], ["f", "urther"], ["ub", "le"], ["人", "机"], ["极", "管"], ["incre", "ased"], ["▁represent", "ations"], ["议", "院"], ["▁electron", "ics"], ["▁creat", "ure"], ["▁workshe", "ets"], ["▁gu", "ided"], ["M", "ap"], ["at", "ories"], ["▁Ind", "ust"], ["car", "bon"], ["发现", "问题"], ["与", "市场"], ["贯穿", "于"], ["兑", "换"], ["凡", "是"], ["社", "团"], ["多", "万"], ["一定", "程度上"], ["H", "F"], ["第二", "种"], ["ble", "ms"], ["▁Swed", "en"], ["▁priv", "ile"], ["▁g", "overning"], ["▁design", "er"], ["▁consist", "ing"], ["▁ingred", "ient"], ["Sw", "ed"], ["**", "▁"], ["▁D", "oes"], ["▁dis", "k"], ["定义", "的"], ["也", "对"], ["看", "似"], ["▁Philipp", "ines"], ["▁te", "ch"], ["▁s", "ail"], ["▁pen", "et"], ["C", "as"], ["▁j", "ew"], ["▁vis", "ually"], ["P", "y"], ["的", "值"], ["會", "議"], ["▁F", "ac"], ["P", "F"], ["半", "岛"], ["abil", "itation"], ["on", "ge"], ["▁d", "ementia"], ["中等", "收入"], ["前瞻", "性"], ["和", "政府"], ["之大", "变局"], ["当", "期"], ["社会主义现代化", "建设"], ["地下", "水"], ["网络", "强国"], ["落", "到"], ["误", "解"], ["的", "差异"], ["摆", "在"], ["▁F", "riday"], ["▁ser", "um"], ["给", "了"], ["很", "有"], ["▁m", "ile"], ["▁k", "illing"], ["▁br", "ill"], ["au", "ge"], ["▁def", "ault"], ["▁acqu", "isition"], ["p", "olit"], ["▁embed", "ded"], ["处理", "和"], ["条件", "下的"], ["原", "先"], ["畜", "牧"], ["su", "per"], ["▁her", "bs"], ["国", "立"], ["p", "ool"], ["▁Ch", "annel"], ["▁S", "ar"], ["An", "aly"], ["▁A", "rizona"], ["▁depos", "its"], ["Every", "one"], ["▁consist", "ency"], ["在", "与"], ["定", "金"], ["百年", "奋斗目标"], ["新", "农村"], ["技能", "人才"], ["必要", "性"], ["翻", "转"], ["选", "题"], ["展现", "出"], ["撞", "击"], ["区域", "经济"], ["家", "属"], ["▁kind", "ness"], ["总", "经理"], ["稳定", "性和"], ["▁sh", "allow"], ["R", "ather"], ["▁consum", "ing"], ["▁introdu", "cing"], ["▁municip", "al"], ["分", "鐘"], ["語", "言"], ["W", "W"], ["克", "蘭"], ["电视", "台"], ["▁inter", "val"], ["▁rot", "ation"], ["....", ".."], ["▁appro", "val"], ["▁subs", "id"], ["国际", "关系"], ["外", "包"], ["沙", "漠"], ["月", "初"], ["或", "有"], ["▁read", "ily"], ["▁real", "m"], ["▁rest", "ored"], ["▁sympt", "om"], ["事", "務"], ["给", "定"], ["是", "世界"], ["oy", "d"], ["复杂", "度"], ["▁S", "olar"], ["ig", "s"], ["▁le", "uk"], ["▁p", "ap"], ["▁E", "arl"], ["ather", "ine"], ["過", "程"], ["ber", "ta"], ["▁mob", "ility"], ["文化", "自信"], ["理论与", "实践"], ["综合", "运用"], ["功能", "性"], ["新", "常态"], ["等", "各种"], ["流", "派"], ["汇", "编"], ["O", "K"], ["▁sm", "iled"], ["的", "项目"], ["族", "群"], ["ib", "et"], ["h", "ol"], ["▁continu", "ously"], ["▁tour", "ism"], ["工业", "和"], ["技术", "人员"], ["可以", "向"], ["不断", "增加"], ["成", "因"], ["多", "名"], ["明", "星"], ["th", "al"], ["Read", "ing"], ["▁S", "n"], ["接受", "了"], ["設", "施"], ["等", "方法"], ["▁t", "ournament"], ["牙", "利"], ["S", "at"], ["▁Wh", "o"], ["▁dis", "advant"], ["▁J", "im"], ["▁Nor", "way"], ["▁advent", "ures"], ["▁purs", "ue"], ["▁somew", "here"], ["writ", "e"], ["来", "表示"], ["以", "学生"], ["小", "区"], ["服务", "和"], ["党和", "人民"], ["原则", "的"], ["产", "地"], ["扩展", "到"], ["的人", "力"], ["被", "执行"], ["贫", "富"], ["兼", "并"], ["实践", "证明"], ["配", "偶"], ["但", "仍"], ["年", "世界"], ["ew", "orks"], ["▁mult", "ipl"], ["▁C", "R"], ["inet", "eenth"], ["ist", "a"], ["▁pow", "ered"], ["at", "ics"], ["ri", "ble"], ["de", "velopment"], ["保持", "在"], ["旋", "律"], ["不", "被"], ["h", "ind"], ["н", "а"], ["勇", "气"], ["华", "盛"], ["Pen", "nsylvania"], ["ou", "ston"], ["▁Die", "go"], ["l", "ie"], ["▁d", "ried"], ["▁h", "ang"], ["ox", "ic"], ["建", "于"], ["▁ev", "ident"], ["▁fund", "ed"], ["▁press", "ing"], ["▁st", "adium"], ["教育", "改革"], ["区别", "于"], ["全面", "发展的"], ["灵敏", "度"], ["重", "在"], ["现实", "意义"], ["导", "电"], ["白", "细胞"], ["懂", "得"], ["投", "保"], ["主要", "为"], ["进", "取"], ["▁immun", "ity"], ["ple", "t"], ["的", "现代"], ["共", "產"], ["▁syn", "thetic"], ["|", "-▁"], ["C", "at"], ["克", "里"], ["▁ra", "cing"], ["▁gra", "ms"], ["问题的", "能力"], ["将", "这些"], ["多", "学科"], ["神", "圣"], ["最", "新的"], ["▁reserv", "oir"], ["i", "ón"], ["乘", "客"], ["▁pro", "sper"], ["▁Test", "ament"], ["至", "此"], ["▁M", "rs"], ["under", "stand"], ["▁e", "rect"], ["▁inject", "ion"], ["▁pres", "cribed"], ["enc", "ou"], ["发展", "史"], ["\n\n", "  "], ["是", "利用"], ["竞", "业"], ["黏", "膜"], ["课", "前"], ["信息", "共享"], ["古", "建筑"], ["公", "顷"], ["的", "物理"], ["致", "癌"], ["iv", "ia"], ["v", "iol"], ["▁H", "ard"], ["resp", "ons"], ["▁descri", "ptions"], ["▁Portug", "uese"], ["▁exc", "av"], ["Su", "pport"], ["▁un", "t"], ["▁sus", "pect"], ["迅", "猛"], ["通", "量"], ["中", "立"], ["观", "看"], ["鼓", "舞"], ["冷", "冻"], ["空", "军"], ["els", "h"], ["ig", "e"], ["ob", "i"], ["s", "ky"], ["▁stead", "y"], ["▁rele", "vance"], ["▁serious", "ly"], ["▁un", "necessary"], ["Access", "ed"], ["ang", "ular"], ["实践", "能力"], ["标的", "物"], ["社会主义", "初级阶段"], ["相", "统一"], ["活动", "和"], ["员工", "的"], ["生产", "线"], ["开", "来"], ["渊", "源"], ["为主", "导"], ["报", "警"], ["免", "责"], ["刚", "性"], ["it", "ic"], ["成", "年"], ["年", "美国"], ["号", "线"], ["▁", "→▁"], ["▁b", "ell"], ["▁cam", "ps"], ["▁end", "emic"], ["C", "all"], ["▁O", "fficial"], ["S", "elf"], ["imm", "une"], ["实际上", "是"], ["兵", "团"], ["感", "官"], ["路", "军"], ["对", "环境"], ["存", "放"], ["osc", "ow"], ["▁post", "ed"], ["都", "是在"], ["年", "末"], ["atur", "day"], ["ow", "ers"], ["▁M", "ir"], ["▁flu", "or"], ["▁Miss", "ouri"], ["▁organ", "ize"], ["匈", "牙利"], ["基金", "会"], ["▁accept", "able"], ["▁care", "ers"], ["▁h", "ills"], ["Mass", "achusetts"], ["分", "類"], ["d", "ou"], ["}", "}"], ["E", "qu"], ["h", "abilitation"], ["klah", "oma"], ["一体", "化的"], ["东", "汉"], ["鸦", "片"], ["个", "案"], ["下", "一代"], ["烈", "士"], ["酸", "性"], ["▁M", "other"], ["oh", "ann"], ["▁emb", "ark"], ["f", "requ"], ["PD", "F"], ["u", "ction"], ["op", "ter"], ["In", "clud"], ["人们", "在"], ["▁val", "ve"], ["华盛", "顿"], ["阴", "性"], ["B", "rown"], ["▁invest", "ments"], ["▁f", "ost"], ["roph", "ic"], ["a", "ffect"], ["▁f", "usion"], ["ace", "utical"], ["▁Rena", "issance"], ["▁pl", "aque"], ["安全", "问题"], ["比", "上年"], ["网络", "技术"], ["期限", "内"], ["是", "推动"], ["肾", "上腺"], ["风", "湿"], ["政治", "制度"], ["em", "p"], ["st", "an"], ["同", "性"], ["▁infect", "ious"], ["▁st", "ew"], ["▁arrang", "ement"], ["▁exec", "ution"], ["▁orig", "inated"], ["▁ult", "imate"], ["的", "意思"], ["r", "anging"], ["▁d", "rag"], ["▁T", "ree"], ["b", "uild"], ["S", "n"], ["太", "陽"], ["国家", "标准"], ["总结", "了"], ["绝", "大部分"], ["不", "佳"], ["孩子", "们"], ["▁tr", "ies"], ["的", "和"], ["▁as", "ks"], ["▁dep", "icted"], ["▁st", "ops"], ["標", "準"], ["▁Wh", "at"], ["P", "erson"], ["Th", "ank"], ["s", "outh"], ["A", "V"], ["关键", "核心技术"], ["免疫", "细胞"], ["信息", "技术的"], ["侵", "占"], ["毛泽东", "同志"], ["与", "现代"], ["嫦", "娥"], ["领导", "者"], ["剥", "削"], ["不", "一样"], ["院", "所"], ["ot", "te"], ["▁h", "ung"], ["lu", "x"], ["结", "肠"], ["▁rese", "mb"], ["▁neg", "atively"], ["B", "usiness"], ["▁Ar", "thur"], ["▁di", "agram"], ["▁t", "ort"], ["▁O", "S"], ["th", "ood"], ["▁sim", "ulation"], ["s", "oc"], ["部", "和"], ["与", "健康"], ["数", "百"], ["以", "内"], ["出", "境"], ["▁b", "alls"], ["寄存", "器"], ["▁a", "wards"], ["clus", "ively"], ["▁re", "ar"], ["oc", "ent"], ["▁R", "eb"], ["gradu", "ate"], ["dem", "onstr"], [")", ":"], ["L", "T"], ["生产", "效率"], ["未有", "之大变局"], ["产教", "融合"], ["金融", "资产"], ["突出", "问题"], ["自主", "权"], ["产能", "过剩"], ["外", "周"], ["承", "接"], ["还", "必须"], ["生态", "补偿"], ["远", "离"], ["萃", "取"], ["发展", "方向"], ["征求", "意见"], ["新", "媒体"], ["t", "ons"], ["▁comm", "emor"], ["医疗", "器械"], ["在", "各"], ["▁express", "ing"], ["▁found", "er"], ["▁p", "ediatric"], ["▁ph", "ases"], ["▁A", "PI"], ["N", "B"], ["pro", "gram"], ["p", "in"], ["他", "曾"], ["d", "ie"], ["S", "ix"], ["▁B", "an"], ["▁Al", "aska"], ["▁pass", "enger"], ["那", "就是"], ["的", "中心"], ["不断", "的"], ["结", "节"], ["▁hum", "or"], ["▁hy", "giene"], ["▁important", "ly"], ["设计", "了"], ["从", "一个"], ["b", "in"], ["城市", "规划"], ["C", "opyright"], ["▁R", "est"], ["▁L", "ED"], ["d", "ers"], ["亨", "利"], ["Al", "low"], ["U", "V"], ["安全", "管理"], ["进一步", "的"], ["获得", "感"], ["失业", "率"], ["充", "当"], ["参与", "的"], ["攻", "克"], ["▁O", "regon"], ["▁works", "hop"], ["▁bl", "end"], ["▁Ex", "p"], ["粉", "末"], ["掌握", "了"], ["末", "端"], ["ro", "it"], ["▁target", "ing"], ["▁lingu", "istic"], ["t", "ypically"], ["om", "iting"], ["▁Egypt", "ian"], ["▁an", "ger"], ["▁thick", "ness"], ["应用", "到"], ["比", "值"], ["are", "r"], ["题", "为"], ["▁Ex", "press"], ["▁system", "atic"], ["cel", "and"], ["▁pro", "state"], ["oc", "ard"], ["高", "能"], ["市场", "准入"], ["高", "低"], ["贫困", "人口"], ["严重", "影响"], ["立德树", "人"], ["口", "径"], ["国民", "政府"], ["愿", "景"], ["中华民族", "的"], ["▁n", "ode"], ["建", "設"], ["hem", "atic"], [".▁", "*"], ["bal", "ance"], ["有", "毒"], ["生活", "在"], ["▁M", "ember"], ["▁P", "C"], ["▁reg", "ression"], ["ol", "ia"], ["▁aff", "il"], ["ment", "al"], ["ar", "ium"], ["dom", "inal"], ["▁adoles", "cents"], ["▁ar", "med"], ["▁record", "ings"], ["▁t", "ies"], ["▁b", "ars"], ["京", "都"], ["sp", "eed"], ["所", "需要的"], ["认为", "是"], ["lor", "a"], ["▁activ", "ated"], ["Rev", "iew"], ["ira", "ble"], ["▁reason", "able"], ["se", "ason"], ["▁attribut", "es"], ["▁j", "azz"], ["ind", "ividuals"], ["▁nod", "ded"], ["▁u", "pl"], ["型", "企业"], ["的", "产业"], ["侵权", "行为"], ["虚拟", "现实"], ["了一", "批"], ["组织", "形式"], ["较", "小的"], ["南", "昌"], ["庆", "祝"], ["杀", "死"], ["中", "继"], ["必由", "之路"], ["燃料", "电池"], ["相", "辅"], ["提", "质"], ["d", "ev"], ["的", "代表"], ["代表", "了"], ["第一", "作者"], ["苹", "果"], ["w", "ick"], ["▁mur", "der"], ["▁D", "akota"], ["▁t", "orn"], ["l", "ooking"], ["▁v", "otes"], ["▁Dem", "ocr"], ["nes", "day"], ["▁flood", "ing"], ["▁inc", "ent"], ["▁d", "ownt"], ["▁sh", "r"], ["V", "ictor"], ["d", "ig"], ["为", "解决"], ["媒", "体的"], ["心", "室"], ["为中心", "的"], ["▁sed", "iment"], ["v", "ae"], ["▁attempt", "ing"], ["▁an", "x"], ["▁Lab", "our"], ["互联网", "金融"], ["和", "要求"], ["行政", "执法"], ["为主", "线"], ["推", "向"], ["得", "的"], ["cri", "pts"], ["um", "ed"], ["▁ch", "ron"], ["ad", "ays"], ["▁he", "al"], ["h", "alf"], ["H", "ol"], ["P", "ress"], ["▁S", "ky"], ["am", "el"], ["》", ")"], ["找", "到了"], ["的", "效率"], ["磁", "性"], ["▁Techn", "iques"], ["是", "美国"], ["▁d", "ict"], ["▁mix", "ing"], ["▁Micro", "soft"], ["▁class", "rooms"], ["And", "rew"], ["的", "客观"], ["中央", "政治局"], ["两", "制"], ["从业", "人员"], ["透明", "度"], ["以", "后的"], ["舒", "适"], ["的一", "大"], ["皮", "层"], ["脂", "质"], ["失", "常"], ["推", "移"], ["新", "旧"], ["方向", "发展"], ["和", "功能"], ["▁T", "raining"], ["▁g", "ang"], ["斯", "的"], ["萨", "克"], ["al", "most"], ["incre", "asing"], ["▁gr", "at"], ["▁afford", "able"], ["▁gu", "est"], ["▁host", "s"], ["▁men", "u"], ["▁oper", "ates"], ["▁travel", "s"], ["▁b", "old"], ["S", "pring"], ["ash", "i"], ["Don", "ald"], ["▁L", "ess"], ["B", "G"], ["推", "出了"], ["之", "心"], ["的", "道德"], ["谈", "到"], ["不", "上"], ["轴", "承"], ["访问", "控制"], ["单", "向"], ["g", "ly"], ["▁che", "cks"], ["des", "igned"], ["comfort", "able"], ["產", "生"], ["▁E", "nt"], ["十分", "重要的"], ["为", "人类"], ["专利", "权"], ["常务", "委员会"], ["不动", "摇"], ["加速", "器"], ["承担", "责任"], ["独立", "自主"], ["见", "证"], ["基", "底"], ["差", "额"], ["优先", "级"], ["轻", "度"], ["大", "豆"], ["解放", "思想"], ["等", "活动"], ["在", "教育"], ["综合", "治理"], ["前", "行"], ["疑", "问"], ["中", "发挥"], ["▁P", "ractice"], ["进", "制"], ["包", "围"], ["必", "备"], ["y", "ll"], ["G", "ive"], ["h", "our"], ["▁satis", "faction"], [")", "》"], ["t", "aken"], ["▁P", "ope"], ["th", "reat"], ["win", "ning"], ["▁advert", "ising"], ["▁label", "ed"], ["▁P", "M"], ["▁cort", "ex"], ["▁C", "ab"], ["大學", "校友"], ["iz", "ational"], ["ve", "get"], ["万", "亿美元"], ["需要", "通过"], ["大", "宗"], ["对", "不同"], ["羅", "馬"], ["▁p", "or"], ["▁s", "lic"], ["ast", "ed"], ["▁g", "ains"], ["ab", "etic"], ["▁S", "ant"], ["▁Cam", "bridge"], ["新", "人"], ["新", "世纪"], ["正", "是在"], ["证券", "市场"], ["亏", "损"], ["得益", "于"], ["谋", "求"], ["阻", "滞"], ["进程", "的"], ["雇", "佣"], ["国家", "发展"], ["和", "风险"], ["我国", "社会"], ["mer", "cial"], ["Bel", "ow"], ["轻", "微"], ["抚", "养"], ["▁allerg", "ic"], ["▁disapp", "oint"], ["▁flu", "ctu"], ["▁stere", "otypes"], ["▁ge", "ographical"], ["▁rac", "ism"], ["▁surve", "ys"], ["▁sust", "ained"], ["h", "m"], ["'", ","], ["南", "极"], ["▁peripher", "al"], ["▁Sing", "apore"], ["——", "——"], ["▁be", "et"], ["▁fac", "ial"], ["W", "ow"], ["数据", "包"], ["He", "ad"], ["W", "HO"], ["▁comp", "leting"], ["▁liv", "estock"], ["▁log", "ical"], ["▁phys", "iological"], ["ur", "ally"], ["为", "一个"], ["英", "美"], ["H", "ard"], ["並", "於"], ["ar", "an"], ["re", "ve"], ["Cont", "emporary"], ["国内", "国际"], ["提高", "学生的"], ["录", "取"], ["康", "德"], ["冠", "心"], ["空", "前"], ["统筹", "推进"], ["说", "话"], ["C", "ity"], ["▁administ", "ered"], ["▁gre", "y"], ["是", "不可"], ["虚拟", "机"], ["单", "体"], ["is", "er"], ["▁Pol", "bot"], ["▁compet", "e"], ["M", "aster"], ["Th", "ird"], ["政治", "家"], ["pos", "itive"], ["▁F", "le"], ["mon", "th"], ["ues", "day"], ["▁En", "cyclopedia"], ["▁U", "V"], ["▁pers", "u"], ["▁dis", "charge"], ["商业", "化"], ["并", "结合"], ["水", "泥"], ["靶", "点"], ["并且", "在"], ["▁St", "ock"], ["ut", "ter"], ["l", "ived"], ["▁G", "et"], ["遇", "到的"], ["探讨", "了"], ["▁H", "amilton"], ["详细", "的"], ["中的", "一个"], ["s", "in"], ["軍", "事"], ["C", "amp"], ["om", "on"], ["E", "ns"], ["P", "olitical"], ["工", "業"], ["▁glob", "ally"], ["▁w", "ake"], ["百年", "未有之大变局"], ["专注", "于"], ["具有", "良好的"], ["统一", "领导"], ["要", "根据"], ["规", "程"], ["通过", "在"], ["事", "变"], ["国", "力"], ["執", "行"], ["▁T", "urn"], ["▁represent", "atives"], ["▁contamin", "ated"], ["▁furn", "iture"], ["▁mir", "ror"], ["▁neigh", "bour"], ["▁nerv", "es"], ["▁v", "ivid"], ["科技", "大学"], ["和", "挑战"], ["F", "ilm"], ["乙", "醇"], ["而", "有"], ["发", "行的"], ["ig", "o"], ["▁Ind", "ex"], ["▁F", "M"], ["P", "ub"], ["▁secre", "ts"], ["▁uncertain", "ty"], ["▁M", "and"], ["▁pat", "ience"], ["第十", "一"], ["和", "优化"], ["前", "述"], ["▁Ad", "d"], ["T", "L"], ["R", "ight"], ["oc", "yte"], ["commun", "ity"], ["▁circ", "ular"], ["▁dent", "ist"], ["▁found", "ing"], ["▁ic", "onic"], ["▁p", "ink"], ["▁predict", "ions"], ["▁t", "ender"], ["深刻", "的"], ["教学", "质量"], ["内容", "包括"], ["秘书", "长"], ["是", "社会主义"], ["自由", "主义"], ["连带", "责任"], ["中国人民", "银行"], ["锁", "定"], ["质", "谱"], ["主", "干"], ["层面", "上"], ["普惠", "金融"], ["词", "语"], ["关键", "在于"], ["决定性", "作用"], ["挂", "钩"], ["周", "转"], ["重大", "战略"], ["和", "科学"], ["char", "acter"], ["和", "治疗"], ["覆盖", "率"], ["部", "隊"], ["第十", "四"], ["加", "载"], ["▁J", "acob"], ["阿", "根"], ["S", "em"], ["▁h", "opes"], ["▁con", "qu"], ["▁ly", "rics"], ["▁drain", "age"], ["▁s", "ectors"], ["▁attract", "ed"], ["▁ent", "itled"], ["▁respond", "ed"], ["时", "应"], ["▁P", "age"], ["orn", "s"], ["le", "ans"], ["▁discipl", "ines"], ["te", "achers"], ["▁appoint", "ment"], ["▁host", "ed"], ["▁poll", "ut"], ["▁press", "ures"], ["▁similar", "ities"], ["放大", "器"], ["一", "块"], ["大", "循环"], ["都", "不能"], ["个人", "所得税"], ["基本", "知识"], ["线", "条"], ["行", "驶"], ["能", "使"], ["一", "生"], ["可", "比"], ["之", "子"], ["At", "l"], ["Med", "ical"], ["▁b", "on"], ["▁under", "water"], ["C", "ard"], ["G", "IS"], ["▁similar", "ly"], ["胁", "迫"], ["x", "x"], ["▁met", "ast"], ["测", "量的"], ["较", "短"], ["不", "以"], ["争", "端"], ["▁", "©▁"], ["el", "le"], ["模式", "下"], ["▁Econom", "ic"], ["▁er", "osion"], ["im", "ated"], ["▁re", "plic"], ["▁gener", "ating"], ["▁ir", "rigation"], ["▁sp", "elling"], ["erv", "es"], ["▁tri", "ps"], ["▁ent", "ers"], ["▁frequ", "encies"], ["▁ill", "um"], ["▁ref", "rig"], ["D", "igital"], ["ricult", "ural"], ["消费", "品"], ["企业", "内部"], ["政府", "采购"], ["进一步", "提升"], ["税", "负"], ["适用", "范围"], ["贴", "近"], ["实用", "性"], ["az", "a"], ["Vis", "ual"], ["购", "物"], ["▁degrad", "ation"], ["E", "c"], ["or", "ic"], ["▁ap", "opt"], ["Unt", "il"], ["urs", "day"], ["▁impro", "ves"], ["▁histor", "ian"], ["▁prof", "iles"], ["Spec", "ifically"], ["▁pain", "ter"], ["<0xF0>", "<0x9F>"], ["d", "ifferent"], ["帝", "國"], ["党的", "政治"], ["两", "者的"], ["内", "战"], ["叶", "片"], ["细胞", "因子"], ["é", "e"], ["▁R", "ose"], ["樂", "團"], ["g", "ium"], ["produ", "cing"], ["access", "ed"], ["阿根", "廷"], ["▁decre", "ases"], ["▁encount", "ers"], ["▁pu", "pp"], ["▁int", "r"], ["T", "rue"], ["é", "s"], ["王", "子"], ["ant", "ry"], ["会计", "信息"], ["据", "统计"], ["所", "具有"], ["劳动合同", "法"], ["常态", "化"], ["担", "负"], ["智能", "合约"], ["自觉", "地"], ["先天", "性"], ["医", "务"], ["构建", "人类命运共同体"], ["简", "要"], ["它", "将"], ["惠", "及"], ["监管", "部门"], ["的", "临床"], ["il", "ib"], ["Pro", "per"], ["▁sym", "met"], ["it", "ime"], ["晚", "上"], ["珊", "瑚"], ["ro", "le"], ["U", "r"], ["▁div", "isions"], ["Ex", "p"], ["▁organ", "ism"], ["▁allerg", "ies"], ["▁genu", "ine"], ["▁wat", "ched"], ["▁C", "ra"], ["▁bl", "ess"], ["S", "ou"], ["▁co", "h"], ["而", "导致"], ["和", "改进"], ["罪", "犯"], ["永", "恒"], ["的发展", "趋势"], ["erg", "arten"], ["▁M", "att"], ["英格", "蘭"], ["的", "现代化"], ["全面", "深化"], ["后", "再"], ["市场", "在"], ["中的", "重要"], ["解决", "好"], ["出", "具"], ["具有", "较强的"], ["文化", "交流"], ["尤为", "重要"], ["接受", "的"], ["或", "服务"], ["一种", "新的"], ["企业", "与"], ["区", "位"], ["奠定了", "基础"], ["服", "用"], ["事务", "所"], ["职", "称"], ["危险", "因素"], ["收入", "差距"], ["ne", "a"], ["群众", "的"], ["直辖", "市"], ["enti", "eth"], ["發", "表"], ["▁agg", "reg"], ["▁lic", "ense"], ["▁peace", "ful"], ["▁atmosp", "heric"], ["ul", "ent"], ["▁drop", "s"], ["AS", "T"], ["▁Franc", "is"], ["▁exped", "ition"], ["▁cont", "amination"], ["▁conv", "in"], ["▁pr", "one"], ["▁st", "raw"], ["▁Rel", "ations"], ["stit", "utional"], ["▁All", "iance"], ["ack", "ing"], ["大", "类"], ["或", "多"], ["最", "多的"], ["T", "er"], ["光", "合"], ["▁hyper", "tension"], ["or", "rect"], ["▁g", "erm"], ["ug", "g"], ["▁d", "ough"], ["▁p", "ond"], ["yt", "ic"], ["associ", "ated"], ["发生", "率"], ["研讨", "会"], ["变压", "器"], ["促进", "社会"], ["工程", "建设"], ["学生", "们"], ["抽", "取"], ["联", "络"], ["毛泽东", "思想"], ["致", "富"], ["外", "延"], ["个", "国家"], ["feed", "ing"], ["Eng", "ine"], ["主", "人"], ["▁Comp", "uter"], ["▁R", "aj"], ["▁restaur", "ant"], ["▁breat", "he"], ["▁counter", "parts"], ["▁tun", "nel"], ["▁hot", "el"], ["─", "─"], ["分", "发"], ["▁P", "R"], ["站", "点"], ["\"", ":"], ["▁be", "er"], ["生命", "的"], ["莱茵", "省"], ["向", "下"], ["中", "将"], ["基本", "概念"], ["同", "位"], ["上", "午"], ["观", "的"], ["p", "df"], ["o", "ard"], ["▁Int", "eg"], ["興", "建"], ["ation", "ally"], ["▁Gu", "inea"], ["毕业", "后"], ["▁coun", "ts"], ["▁flow", "ing"], ["▁sc", "reens"], ["其他", "的"], [".\"", "\""], ["er", "ness"], ["所", "说"], ["的历史", "性"], ["和", "保障"], ["学前", "教育"], ["的基本", "理论"], ["突破", "口"], ["但", "对于"], ["原", "发性"], ["电", "化学"], ["F", "ire"], ["▁b", "ust"], ["▁recycl", "ed"], ["erm", "at"], ["▁inc", "idents"], ["▁p", "ushing"], ["南", "非"], ["老", "化"], ["▁V", "illage"], ["▁I", "de"], ["局", "的"], ["过", "大"], ["矛盾", "的"], ["鲜明", "的"], ["▁aqu", "atic"], ["路", "上"], ["的", "正"], ["▁b", "ark"], ["华", "东"], ["透", "露"], [",", "「"], ["ene", "z"], ["▁c", "er"], ["sh", "aring"], ["▁evolution", "ary"], ["▁form", "ats"], ["其次", "是"], ["开辟", "了"], ["的", "良好"], ["十六", "条"], ["利用", "效率"], ["油", "气"], ["不", "允许"], ["最高人民法院", "关于"], ["可", "实现"], ["的重要", "因素"], ["领导", "小组"], ["恐", "惧"], ["终", "点"], ["夫妻", "共同"], ["相辅", "相"], ["b", "rain"], ["▁he", "ated"], ["▁qual", "ified"], [",▁", "‘"], ["甲", "烷"], ["ev", "al"], ["金", "牌"], ["早", "年"], ["A", "E"], ["m", "ans"], ["▁b", "er"], ["▁sc", "an"], ["av", "irus"], ["▁fro", "zen"], ["▁hero", "es"], ["▁neighb", "oring"], ["▁ro", "d"], ["人", "道"], ["这", "为"], ["治", "愈"], ["sem", "ble"], ["▁concer", "t"], ["in", "ely"], ["▁innov", "ations"], ["serv", "ing"], ["廣", "東"], ["内", "陆"], ["切", "割"], ["他", "还"], ["醫", "院"], ["範", "圍"], ["P", "ass"], ["商", "店"], ["描述", "了"], ["Ass", "oci"], ["K", "D"], ["▁put", "s"], ["ra", "id"], ["表", "現"], ["▁al", "lev"], ["肢", "体"], ["环境", "监测"], ["的人", "格"], ["土地", "使用权"], ["新", "鲜"], ["综合", "考虑"], ["特殊", "性"], ["的", "数字"], ["▁res", "olve"], ["相似", "的"], ["mod", "el"], ["P", "resent"], ["▁G", "il"], ["Bl", "ood"], ["▁A", "thlet"], ["abit", "at"], ["▁Ch", "ile"], ["▁rec", "all"], ["▁challeng", "ed"], ["▁em", "it"], ["▁stim", "ulate"], ["通过", "将"], ["隐私", "保护"], ["并", "向"], ["水", "和"], ["ear", "l"], ["ce", "pts"], ["▁M", "iller"], ["▁co", "in"], ["eng", "u"], ["▁leg", "it"], ["▁execut", "ed"], ["▁emp", "ire"], ["▁Ass", "essment"], ["▁bel", "t"], ["▁elect", "oral"], ["▁highlight", "ed"], ["进", "士"], ["分", "担"], ["四", "中全会"], ["进一步", "发展"], ["不", "服"], ["内", "阁"], ["心", "力"], ["融资", "租赁"], ["暂", "行"], ["美好", "生活的"], ["第一", "步"], ["通", "则"], ["▁D", "rug"], ["or", "f"], ["在", "上海"], ["遗", "迹"], ["学", "士"], ["次", "年"], ["op", "athy"], ["R", "a"], ["m", "id"], ["'", "."], ["spec", "ial"], ["P", "ay"], ["▁mist", "ake"], ["▁pul", "monary"], ["▁sampl", "ing"], ["m", "other"], ["▁ste", "ep"], ["▁trans", "actions"], [")", "|"], ["Ge", "ography"], ["▁port", "ions"], ["滤波", "器"], ["影响", "力的"], ["宪", "政"], ["仍然", "存在"], ["既", "能"], ["工作", "和"], ["其", "三"], ["如果", "你"], ["▁N", "on"], ["▁v", "oting"], ["F", "ort"], ["▁account", "ing"], ["▁bas", "eline"], ["▁coll", "apse"], ["國", "王"], ["▁reason", "ing"], ["s", "ource"], ["\u0006", "\b"], ["各", "方面的"], ["的主", "导"], ["处", "处"], ["领", "悟"], ["抵", "制"], ["好", "奇"], ["宏", "伟"], ["特别", "行政区"], ["减", "灾"], ["遗传", "学"], ["轮", "廓"], ["仅仅", "是"], ["文件", "的"], ["参加", "了"], ["山", "大"], ["M", "s"], ["it", "ched"], ["al", "ways"], ["有", "以下"], ["▁C", "ore"], ["▁oper", "ator"], ["▁v", "ow"], ["st", "able"], ["He", "y"], ["l", "ab"], ["off", "s"], ["▁nucle", "us"], ["c", "reat"], ["▁burn", "ed"], ["▁eat", "en"], ["▁navig", "ating"], ["▁P", "ract"], ["在", "许多"], ["为", "基本"], ["宽", "度"], ["北", "斗"], ["il", "ateral"], ["unc", "iation"], ["new", "s"], ["迄今", "为止"], ["il", "ty"], ["模", "态"], ["J", "eff"], ["网", "页"], ["▁seg", "ments"], ["▁al", "phabet"], ["▁d", "ying"], ["▁poor", "ly"], ["▁treat", "s"], ["▁he", "sit"], ["an", "ol"], ["oot", "s"], ["损失", "的"], ["网络", "中"], ["循环", "经济"], ["马克思", "列宁"], ["纤维", "素"], ["学校", "教育"], ["等", "诸多"], ["风", "俗"], ["肾", "小"], ["并", "举"], ["计算", "的"], ["欺", "骗"], ["▁D", "al"], ["联合", "会"], ["▁trig", "g"], ["▁occup", "ation"], ["▁artif", "acts"], ["▁bra", "ve"], ["▁decl", "ined"], ["▁saf", "egu"], ["J", "esus"], ["北", "大"], ["te", "chnology"], ["在", "过去"], ["升", "华"], ["权", "衡"], ["珍", "贵"], ["引", "人"], ["先", "导"], ["iz", "oph"], ["製", "造"], ["▁res", "ident"], ["O", "W"], ["▁per", "f"], ["▁att", "itude"], ["▁cont", "est"], ["▁partners", "hips"], ["维", "亚"], ["▁Que", "bec"], ["▁depart", "ments"], ["anc", "ies"], ["sh", "ape"], ["▁different", "iation"], ["▁Base", "ball"], ["的", "认知"], ["企业", "对"], ["十五", "条"], ["能够", "实现"], ["%", ","], ["积极", "推动"], ["四个", "方面"], ["水", "准"], ["之", "分"], ["纵", "深"], ["要", "约"], ["这种", "方式"], ["的", "探索"], ["道", "光"], ["一般", "情况下"], ["▁D", "eb"], ["暗", "示"], ["氏", "族"], ["於", "是"], ["衰", "落"], ["f", "ight"], ["這", "種"], ["托", "管"], ["▁ch", "ains"], ["▁App", "ro"], ["l", "ied"], ["P", "ot"], ["k", "al"], ["出", "去"], ["的基础", "设施"], ["的大", "型"], ["杂", "质"], ["或者", "是"], ["篡", "改"], ["m", "etic"], ["T", "reat"], ["▁Frank", "lin"], ["G", "roup"], ["disc", "uss"], ["▁H", "al"], ["▁E", "lementary"], ["pp", "ers"], ["Te", "am"], ["▁acqu", "ire"], ["▁preval", "ent"], ["▁relig", "ions"], ["▁H", "u"], ["▁C", "ensus"], ["为", "前提"], ["权利", "义务"], ["线", "粒"], ["矿", "产"], ["缺", "损"], ["运行", "机制"], ["防", "疫"], ["研究", "领域"], ["名", "录"], ["ke", "ys"], ["ox", "ide"], ["▁can", "n"], ["▁al", "ert"], ["▁persist", "ent"], ["col", "span"], ["▁cr", "ust"], ["▁rese", "m"], ["初始", "化"], ["▁L", "ocal"], ["▁Le", "on"], ["▁D", "ead"], ["▁C", "zech"], ["提供了", "新的"], ["史", "记"], ["筹", "集"], ["将", "从"], ["所以", "在"], ["▁W", "ind"], ["▁pat", "ch"], ["Fran", "c"], ["O", "fficial"], ["▁N", "ation"], ["▁en", "rich"], ["▁ac", "adem"], ["p", "ace"], ["▁I", "ng"], ["娛", "樂"], ["最初", "的"], ["全", "生命周期"], ["环境", "质量"], ["劳动", "生产率"], ["这", "不仅"], ["掌", "控"], ["教学", "资源"], ["下", "调"], ["警", "惕"], ["红", "线"], ["▁coord", "ination"], ["▁sub", "str"], ["袭", "击"], ["的", "分子"], ["见", "图"], ["▁cy", "tok"], ["主", "办"], ["阈", "值"], ["H", "ence"], ["ro", "ts"], ["陸", "軍"], ["N", "I"], ["or", "se"], ["izoph", "ren"], ["▁Rail", "road"], ["他们", "对"], ["该", "技术"], ["听", "证"], ["侦", "察"], ["厦", "门"], ["必须", "有"], ["上", "网"], ["ex", "ual"], ["青", "铜"], ["上", "映"], ["▁R", "ole"], ["▁count", "ing"], ["SA", "RS"], ["▁Mil", "itary"], ["end", "a"], ["Rec", "ogn"], ["▁sched", "uled"], ["▁should", "n"], ["▁M", "onday"], ["K", "ent"], ["▁ch", "ip"], ["ate", "ur"], ["p", "ract"], ["量", "为"], ["技术", "手段"], ["应当", "承担"], ["主要", "是指"], ["投资", "和"], ["改革开放", "和"], ["集", "资"], ["抗", "辩"], ["云", "端"], ["信用", "卡"], ["应急", "管理"], ["摄像", "头"], ["本", "位"], ["信息", "资源"], ["总体", "规划"], ["较", "多的"], ["为了", "实现"], ["应收", "账款"], ["萨", "斯"], ["闭", "环"], ["毛", "细"], ["物权", "法"], ["的", "长"], ["交", "替"], ["引发", "的"], ["在", "校"], ["▁h", "its"], ["是", "位於"], ["Mar", "ia"], ["▁B", "ah"], ["來", "的"], ["媒", "體"], ["gen", "eration"], ["▁gradu", "ated"], ["是", "全球"], ["病原", "体"], ["隐", "蔽"], ["游", "离"], ["a", "ire"], ["L", "ine"], ["ac", "erb"], ["▁W", "isconsin"], ["▁con", "clusions"], ["and", "ra"], ["该", "公司"], ["yl", "on"], ["▁kn", "ock"], ["▁al", "oud"], ["▁connect", "s"], ["▁enjoy", "ing"], ["l", "ings"], ["一", "片"], ["tern", "s"], ["U", "til"], ["▁C", "ell"], ["合", "唱"], ["商", "業"], ["研究", "小组"], ["时期", "内"], ["工业", "生产"], ["既", "可以"], ["配", "额"], ["我", "省"], ["蓬勃", "发展"], ["备", "课"], ["口", "语"], ["联", "通"], ["二", "号"], ["依法", "行政"], ["先进", "性"], ["企业", "所得税"], ["降低", "成本"], ["▁pharm", "ac"], ["▁clos", "est"], ["勋", "章"], ["昆", "虫"], ["Ph", "oto"], ["▁An", "cient"], ["%", "▁▁"], ["指", "揮"], ["棒", "球"], ["Hel", "p"], ["▁P", "DF"], ["▁hear", "ts"], ["cle", "an"], ["▁extra", "ction"], ["▁", "с"], ["▁phys", "icians"], ["H", "ER"], ["而", "这些"], ["九", "龍"], ["复", "旦"], ["两", "点"], ["▁LGBT", "Q"], ["▁dis", "miss"], ["▁fe", "as"], ["▁walk", "ed"], ["人", "有"], ["其", "为"], ["▁so", "y"], ["ific", "ate"], ["▁ic", "on"], ["ro", "st"], ["▁L", "ie"], ["▁b", "ull"], ["▁storm", "s"], ["let", "al"], ["ic", "ated"], ["bl", "ock"], ["▁stri", "p"], ["结构", "中"], ["孙", "中山"], ["地方", "的"], ["屋", "顶"], ["新", "阶段"], ["的主", "观"], ["集中", "于"], ["之", "于"], ["如果", "我们"], ["留", "置"], ["社", "保"], ["周", "知"], ["的", "业务"], ["voc", "als"], ["omb", "ia"], ["▁mind", "fulness"], ["▁rein", "force"], ["▁up", "set"], ["▁p", "ine"], ["▁pr", "ide"], ["▁sp", "an"], ["和", "资源"], ["率", "领"], ["平", "安"], ["cont", "rolled"], ["O", "bs"], ["▁L", "es"], ["ir", "s"], ["德", "尔"], ["▁en", "abled"], ["▁eth", "ics"], ["ar", "ians"], ["d", "ale"], ["gu", "itar"], ["M", "Hz"], ["急", "救"], ["进行", "分类"], ["V", "ideo"], ["eral", "d"], ["?", "▁("], ["▁Step", "hen"], ["▁M", "RI"], ["On", "line"], ["g", "rim"], ["O", "F"], ["Ill", "inois"], ["▁comp", "lement"], ["▁t", "ab"], ["▁de", "leg"], ["▁L", "uther"], ["M", "ur"], ["act", "ing"], ["emb", "ered"], ["First", "ly"], ["强调", "的是"], ["政策", "措施"], ["成员", "的"], ["要", "将"], ["共同", "发展"], ["具体", "而言"], ["回", "升"], ["攻击", "者"], ["区域", "性"], ["落", "脚"], ["而", "没有"], ["论", "语"], ["沿", "革"], ["众", "所"], ["▁enh", "ances"], ["一", "日"], ["C", "lear"], ["n", "ie"], ["od", "ge"], ["ill", "o"], ["▁Cap", "tain"], ["od", "d"], ["▁g", "ifts"], ["v", "o"], ["▁dis", "agre"], ["▁res", "erve"], ["int", "rodu"], ["基础", "的"], ["免疫", "反应"], ["免", "除"], ["业", "界"], ["is", "ol"], ["受", "限"], ["完", "毕"], ["P", "sych"], ["urg", "ical"], ["ir", "cle"], ["▁poly", "mer"], ["▁T", "ower"], ["▁d", "ivers"], ["ver", "ages"], ["▁illustr", "ated"], ["old", "ing"], ["▁b", "ills"], ["▁wel", "come"], ["中国", "传统"], ["更", "强"], ["反", "腐"], ["活", "力的"], ["副", "院长"], ["只", "需要"], ["知", "府"], ["势", "必"], ["一", "审"], ["合同", "中"], ["整", "改"], ["党", "领导"], ["不同", "类型"], ["e", "ur"], ["▁O", "ffic"], ["ont", "in"], ["p", "i"], ["F", "inal"], ["▁organ", "izing"], ["erv", "atory"], ["▁sm", "ile"], ["▁consequ", "ence"], ["▁gen", "res"], ["編", "號"], ["r", "ative"], ["▁O", "wn"], ["纠", "缠"], ["听", "觉"], ["行", "走"], ["西", "域"], ["行", "之"], ["▁Hel", "p"], ["的", "低"], ["了", "许多"], ["g", "aret"], ["▁sc", "al"], ["▁tim", "ing"], ["P", "ers"], ["▁ch", "ips"], ["▁see", "ks"], ["▁crow", "d"], ["▁pl", "ug"], ["▁wor", "ried"], ["经济", "利益"], ["药物", "治疗"], ["体现", "为"], ["相", "差"], ["货币", "的"], ["体", "征"], ["国家", "在"], ["现", "行的"], ["等", "领域的"], ["我们", "应该"], ["西", "欧"], ["仍", "处于"], ["因素", "的影响"], ["无", "序"], ["惩", "戒"], ["股权", "转让"], ["直接", "的"], ["古", "今"], ["quir", "y"], ["河", "道"], ["行", "為"], ["當", "中"], ["can", "cer"], ["▁N", "eed"], ["收", "录"], ["▁B", "iology"], ["▁r", "ival"], ["▁P", "ath"], ["▁rock", "et"], ["▁asp", "ir"], ["Ep", "isode"], ["▁M", "S"], ["大", "中"], ["文化", "与"], ["一", "对"], ["中", "存在"], ["完成", "后"], ["ras", "ound"], ["動", "物"], ["▁L", "u"], ["▁agre", "ements"], ["Int", "rodu"], ["p", "aper"], ["▁sn", "ake"], ["bec", "ame"], ["▁ir", "regular"], ["▁was", "hing"], ["ur", "ated"], ["▁M", "ot"], ["▁S", "ac"], ["oc", "occ"], ["国家治理体系和治理能力", "现代化"], ["系统", "集成"], ["教师", "应"], ["以", "至"], ["水", "果"], ["政策", "性"], ["相互", "关系"], ["洗", "钱"], ["不同", "类型的"], ["事", "宜"], ["北", "极"], ["杀", "伤"], ["偏", "低"], ["可持续", "性"], ["人民", "当家作主"], ["浮", "动"], ["股", "价"], ["的", "案件"], ["副", "书记"], ["apt", "ist"], ["▁B", "rad"], ["诺", "贝尔"], ["算法", "的"], ["后", "来的"], ["ac", "ity"], ["直", "觉"], ["形", "容"], ["ch", "t"], ["D", "av"], ["ir", "ical"], ["▁g", "er"], ["we", "ed"], ["▁resc", "ue"], ["▁The", "rapy"], ["develop", "ed"], ["▁answ", "ered"], ["▁fil", "ters"], ["▁res", "idence"], ["E", "val"], ["数", "列"], ["间", "隙"], ["侧", "面"], ["科研", "机构"], ["十一", "年"], ["合", "併"], ["不", "相同"], ["方程", "式"], ["目的", "地"], ["ail", "and"], ["吻", "合"], ["R", "est"], ["ac", "on"], ["▁A", "ns"], ["P", "ython"], ["和", "建设"], ["并", "提出"], ["标准", "体系"], ["十一", "条"], ["第二", "百"], ["是", "不是"], ["帝", "王"], ["细", "则"], ["反", "动"], ["简", "便"], ["获", "利"], ["长效", "机制"], ["关", "乎"], ["议", "程"], ["台", "阶"], ["增", "设"], ["核", "实"], ["筑", "牢"], ["数据", "挖掘"], ["淡", "水"], ["所", "用"], ["总", "和"], ["赞", "同"], ["u", "ct"], ["▁P", "rom"], ["属", "性的"], ["快", "捷"], ["▁D", "ark"], ["▁per", "mit"], ["▁M", "un"], ["t", "ook"], ["行政", "法"], ["b", "ian"], [":", "▁▁"], ["fe", "el"], ["get", "s"], ["▁H", "art"], ["这", "三个"], ["同", "胞"], ["不", "起"], ["大", "连"], ["研究", "方向"], ["人民", "共和國"], ["必", "須"], ["—▁", "—▁"], ["▁s", "our"], ["s", "aying"], ["▁ju", "venile"], ["▁product", "ive"], ["▁pe", "pt"], ["▁H", "ills"], ["教学", "设计"], ["外商", "投资"], ["马克思主义", "理论"], ["优惠", "政策"], ["由", "政府"], ["这就", "需要"], ["势", "头"], ["也", "成为"], ["职业", "病"], ["西", "周"], ["洛", "阳"], ["指标", "的"], ["回", "落"], ["并", "用"], ["即使", "是"], ["▁Que", "ens"], ["Micro", "soft"], ["most", "ly"], ["▁dat", "abases"], ["art", "icles"], ["ro", "d"], ["▁", "ul"], ["戰", "鬥"], ["▁cr", "ash"], ["定", "居"], ["F", "ull"], ["▁brid", "ges"], ["并", "重"], ["家", "人"], ["话语", "权"], ["\\", "_"], ["的", "原"], ["生", "死"], ["▁d", "ynasty"], ["P", "rim"], ["▁A", "qu"], ["▁integr", "ate"], ["▁interpret", "ations"], ["▁view", "ers"], ["▁roll", "ing"], ["金", "的"], ["▁O", "pp"], ["ober", "ts"], ["ht", "m"], ["▁W", "W"], ["im", "age"], ["in", "ator"], ["cler", "osis"], ["人口", "普查"], ["科学", "性"], ["异", "化"], ["的", "挑战"], ["能", "为"], ["诉讼", "请求"], ["变", "频"], ["电子", "邮件"], ["集", "权"], ["盛", "行"], ["富", "集"], ["成", "交"], ["摩", "尔"], ["查", "明"], ["北", "魏"], ["绿色", "金融"], ["做", "大"], ["▁contin", "ent"], ["行", "列"], ["A", "ust"], ["direct", "or"], ["▁path", "ogens"], ["▁k", "ick"], ["▁emb", "race"], ["▁rom", "antic"], ["▁sal", "mon"], ["▁sw", "elling"], ["h", "r"], ["▁econom", "ics"], ["in", "ian"], ["iot", "ic"], ["▁S", "i"], ["停", "滞"], ["合", "法的"], ["uer", "to"], ["(", "'"], ["RC", "EP"], ["先", "前"], ["—▁▁—▁▁", "—▁▁—▁▁"], ["▁bott", "les"], ["▁ch", "apters"], ["▁m", "urd"], ["▁month", "ly"], ["os", "é"], ["英", "語"], ["▁st", "atic"], ["▁Ter", "rit"], ["▁shad", "ow"], ["复", "合物"], ["▁N", "i"], ["**", "*"], ["▁met", "eor"], ["▁Prem", "ier"], ["ro", "kes"], ["十三", "条"], ["风险", "挑战"], ["突破", "了"], ["杠杆", "率"], ["了一", "条"], ["财产", "权"], ["各种", "各"], ["而", "来的"], ["评", "议"], ["买", "方"], ["共", "存"], ["工人", "阶级"], ["涂", "层"], ["创造", "条件"], ["顺", "差"], ["信息", "基础设施"], ["大", "湾区"], ["中的", "地位"], ["研究", "工作"], ["加快", "构建"], ["什么", "样"], ["身份", "认证"], ["▁an", "ten"], ["元", "宇宙"], ["in", "ic"], ["oc", "he"], ["it", "an"], ["unt", "ary"], ["g", "raph"], ["e", "u"], ["▁j", "et"], ["▁B", "ishop"], ["▁che", "ap"], ["▁cap", "tain"], ["书", "的"], ["可能", "在"], ["是", "当前"], ["中", "具有"], ["断", "层"], ["未", "被"], ["每", "种"], ["▁st", "uck"], ["▁surviv", "ors"], ["▁y", "ields"], ["简", "洁"], ["扩", "增"], ["一", "台"], ["▁L", "ast"], ["烏", "克蘭"], ["●", "▁"], ["s", "ound"], ["▁M", "ission"], ["ro", "sc"], ["▁ge", "ometry"], ["▁Author", "ity"], ["朝", "鮮"], ["▁Bro", "ok"], ["▁comm", "ands"], ["▁govern", "ance"], ["会计", "核算"], ["发达", "地区"], ["全面", "提升"], ["国土", "空间"], ["树", "脂"], ["选择", "了"], ["功", "利"], ["硬", "盘"], ["风", "貌"], ["廉", "政"], ["奋", "进"], ["组", "长"], ["▁d", "ed"], ["▁con", "g"], ["▁cha", "os"], ["▁ritual", "s"], ["第十", "五"], ["▁T", "al"], ["o", "oth"], ["電", "腦"], ["相", "當"], ["and", "ed"], ["s", "i"], ["be", "y"], ["pos", "ure"], ["▁F", "C"], ["op", "ing"], ["▁S", "ix"], ["▁acc", "ord"], ["list", "ed"], ["▁accompl", "ished"], ["▁ch", "ampion"], ["▁prolong", "ed"], [";", "("], ["欠", "缺"], ["则", "为"], ["中", "亚"], ["▁M", "oh"], ["C", "ultural"], ["▁Y", "outh"], ["ul", "ative"], ["unct", "ure"], ["▁Rec", "ord"], ["▁Gra", "de"], ["▁count", "ies"], ["▁dec", "omp"], ["▁flo", "ating"], ["Us", "ually"], ["▁gl", "ac"], ["▁cor", "related"], ["▁marginal", "ized"], ["土地", "利用"], ["则", "在"], ["到", "一个"], ["控制", "在"], ["发达", "国家的"], ["往往", "会"], ["的基本", "要求"], ["以下几", "点"], ["信息", "服务"], ["提高", "学生"], ["公", "信"], ["的研究", "成果"], ["举", "行的"], ["一般", "为"], ["op", "ath"], ["▁C", "ro"], ["im", "s"], ["▁sh", "ield"], ["▁K", "han"], ["inte", "gr"], ["▁w", "ed"], ["▁un", "c"], ["▁Mary", "land"], ["▁e", "co"], ["bor", "iginal"], ["▁she", "ep"], ["▁support", "ive"], ["▁K", "al"], ["▁ar", "c"], ["布", "拉"], ["ar", "on"], ["弟", "子"], ["甲", "骨"], ["公众", "号"], ["反", "过来"], ["敏", "捷"], ["来", "完成"], ["疱", "疹"], ["к", "о"], ["在", "其他"], ["▁fin", "ance"], ["W", "orking"], ["▁I", "ce"], ["举", "报"], ["開", "放"], ["vers", "ion"], ["▁pol", "ym"], ["▁de", "er"], ["▁c", "oding"], ["▁pr", "iest"], ["App", "lying"], ["▁con", "secut"], ["▁dang", "ers"], ["ache", "lor"], ["▁j", "aw"], ["教育", "工作"], ["协同", "创新"], ["资料", "的"], ["和", "学习"], ["哲学", "的"], ["座谈", "会"], ["开启", "了"], ["突发", "事件"], ["主要", "集中在"], ["共产", "国际"], ["生产", "关系"], ["的人", "生"], ["通", "气"], ["是", "我们党"], ["并", "由"], ["开发", "了"], ["限", "额"], ["这些", "都"], ["最", "重要"], ["▁Writ", "ing"], ["▁T", "okyo"], ["▁Im", "perial"], ["M", "F"], ["H", "ung"], ["尔", "兰"], ["▁op", "ens"], ["▁che", "cking"], ["▁T", "oday"], ["用", "法"], ["cer", "y"], ["light", "ing"], ["▁distingu", "ished"], ["▁navig", "ation"], ["un", "es"], ["學", "習"], ["▁newsp", "apers"], ["Supp", "ose"], ["▁med", "ian"], ["▁loc", "ate"], ["印", "尼"], ["id", "el"], ["性", "等"], ["学院", "教授"], ["卵", "巢"], ["多样", "的"], ["占", "总"], ["pl", "ane"], ["音", "频"], ["▁N", "otes"], ["▁antib", "ody"], ["▁le", "ak"], ["▁su", "p"], ["▁sk", "ull"], ["▁cl", "uster"], ["泰", "国"], ["▁collabor", "ate"], ["▁g", "uests"], ["▁K", "ansas"], ["经济", "制度"], ["不", "成"], ["变", "法"], ["对", "人类"], ["方向", "和"], ["人与", "人"], ["劳", "工"], ["声", "誉"], ["大", "赛"], ["制", "止"], ["层", "层"], ["税", "费"], ["不", "分"], ["近", "几年"], ["Tra", "ditional"], ["以下", "是"], ["《", "》"], ["S", "ources"], ["▁tra", "ditionally"], [".", "),▁"], ["st", "ory"], ["自由", "的"], ["笔", "记"], ["走", "上"], ["兵", "力"], ["上", "而"], ["打", "算"], ["Ed", "ward"], ["▁T", "able"], ["德", "的"], ["相较", "于"], ["暂", "停"], ["】", "▁"], ["ograp", "hers"], ["▁vacc", "ination"], ["T", "aking"], ["▁vulner", "ability"], ["r", "ights"], ["路", "口"], ["est", "eem"], ["▁d", "rew"], ["▁except", "ional"], ["▁o", "live"], ["f", "ostering"], ["▁flu", "ids"], ["▁prevent", "ed"], ["协同", "发展"], ["国", "资"], ["在", "当前"], ["的一", "方"], ["抵押", "权"], ["核心", "竞争力"], ["非", "公有制"], ["恶性", "肿瘤"], ["边", "区"], ["基", "数"], ["和", "监督"], ["之", "所"], ["▁inf", "o"], ["开发", "人员"], ["优", "化的"], ["生理", "学"], ["▁vari", "ant"], ["on", "line"], ["R", "en"], ["平台", "上"], ["▁im", "perial"], ["ER", "S"], [".", ").▁"], ["Gener", "ally"], ["▁pal", "m"], ["▁break", "fast"], ["▁har", "ness"], ["▁reg", "ime"], ["ru", "p"], ["▁impair", "ment"], ["A", "thlet"], ["并", "从"], ["路由", "器"], ["及", "以上"], ["丰富", "了"], ["提供", "服务"], ["行", "人"], ["的", "条件下"], ["▁datas", "et"], ["Sp", "ain"], ["▁anal", "og"], ["ibl", "ings"], ["▁histor", "ians"], ["▁evalu", "ating"], ["英格", "兰"], ["是一", "位"], ["a", "er"], ["社会", "和"], ["配", "电"], ["强", "国的"], ["课程", "设置"], ["法律", "和"], ["规模", "和"], ["变得", "更加"], ["道", "教"], ["勘", "探"], ["在", "现实"], ["膳", "食"], ["访", "谈"], ["并不", "意味着"], ["十四", "年"], ["着力", "点"], ["l", "ades"], ["inn", "ish"], ["开", "了"], ["该", "系统"], ["ip", "ation"], ["oth", "s"], ["vel", "y"], ["▁hist", "ories"], ["pow", "ered"], ["®", "▁"], ["▁c", "erv"], ["▁m", "ast"], ["▁key", "board"], ["▁music", "ian"], ["ind", "a"], ["自", "動"], ["▁F", "DA"], ["U", "D"], ["而", "无"], ["活", "泼"], ["大会", "上"], ["较", "弱"], ["中", "发现"], ["先", "锋"], ["im", "eter"], ["level", "and"], ["資", "訊"], ["▁Bl", "ood"], ["re", "hend"], ["▁crit", "ics"], ["酰", "胺"], ["S", "oc"], ["▁M", "P"], ["準", "決賽"], ["▁Def", "ense"], ["▁Im", "port"], ["▁O", "w"], ["n", "est"], ["的", "社会主义"], ["技术", "应用"], ["和", "关键"], ["机", "组"], ["治疗", "方法"], ["等", "行业"], ["坚持以", "人民为中心"], ["病", "虫"], ["一", "九"], ["单", "片"], ["放", "宽"], ["李", "某"], ["排", "出"], ["思想", "道德"], ["节", "日"], ["注意", "事项"], ["案例", "分析"], ["第二", "大"], ["▁str", "ings"], ["▁R", "ound"], ["▁H", "en"], ["an", "ese"], ["▁occur", "rence"], ["pr", "ising"], ["▁W", "in"], ["ous", "ing"], ["▁citiz", "en"], ["ag", "ger"], ["thet", "ics"], ["ob", "a"], ["▁g", "land"], ["电视", "剧"], ["识别", "和"], ["▁Ch", "air"], ["▁N", "eg"], ["▁c", "ues"], ["▁pack", "ed"], ["▁present", "ing"], ["▁ra", "ises"], ["▁", "·"], ["in", "burgh"], ["App", "ro"], ["and", "ing"], ["m", "ix"], ["地理", "学"], ["工业", "企业"], ["至关", "重要的"], ["肝", "癌"], ["双方", "的"], ["发现", "和"], ["驳", "回"], ["主体", "性"], ["人大", "代表"], ["多", "维"], ["基", "特"], ["图", "示"], ["众所", "周知"], ["n", "umber"], ["l", "ay"], ["剂", "的"], ["在", "研究"], ["e", "ating"], ["▁compos", "er"], ["▁investig", "ations"], ["结", "局"], ["扩", "充"], ["▁accommod", "ate"], ["▁assign", "ments"], ["▁miss", "ed"], ["Ex", "actly"], ["屏", "蔽"], ["/", "-▁"], ["nov", "ation"], ["ul", "u"], ["大", "理"], ["全国人大", "常委会"], ["二", "百"], ["太", "多"], ["表达", "的"], ["Writ", "ing"], ["▁gen", "etics"], ["格", "拉"], ["ind", "ers"], ["可能", "与"], ["之", "和"], ["通讯", "作者"], ["国家", "自然科学基金"], ["▁dist", "inction"], ["Pro", "ject"], ["R", "esp"], ["▁C", "ase"], ["建築", "物"], ["an", "alysis"], ["▁o", "ste"], ["約", "翰"], ["危险", "性"], ["而", "成的"], ["落", "后的"], ["产生", "影响"], ["巧", "妙"], ["禀", "赋"], ["能", "量的"], ["微", "课"], ["载", "荷"], ["进入", "新时代"], ["闲", "置"], ["大", "运河"], ["旅游", "业"], ["归", "根"], ["情况", "进行"], ["民族", "团结"], ["绿", "水"], ["上", "半年"], ["和", "能力"], ["ab", "ove"], ["affe", "ine"], ["人", "類"], ["的", "唯一"], ["▁cav", "ity"], ["▁colle", "ges"], ["▁super", "hero"], ["▁alt", "itude"], ["▁attack", "ed"], ["▁s", "orts"], ["类", "比"], ["Russ", "ian"], ["at", "able"], ["v", "ideo"], ["編", "劇"], ["ody", "nam"], ["n", "orth"], ["▁galax", "y"], ["年", "由"], ["us", "er"], ["▁ad", "hes"], ["穿", "透"], ["上", "去"], ["换", "言之"], ["天", "人"], ["▁belong", "s"], ["▁cap", "s"], ["G", "al"], ["L", "V"], ["鱼", "类"], ["Aut", "hor"], ["Is", "rael"], ["▁Imp", "act"], ["cre", "ate"], ["济", "南"], ["ad", "er"], ["是一", "個"], ["▁M", "aterials"], ["足球", "運動員"], ["om", "o"], ["cont", "ribut"], ["▁J", "unior"], ["Expl", "ore"], ["▁gl", "ue"], ["▁M", "es"], ["公共", "管理"], ["法律", "规范"], ["适用", "法律"], ["世界", "一流"], ["受", "众"], ["宋", "朝"], ["等", "原因"], ["决策", "部署"], ["地", "缘"], ["不", "完善"], ["精神", "文明"], ["质量", "控制"], ["Sh", "ould"], ["▁f", "ears"], ["▁satell", "ites"], ["▁p", "iv"], ["▁six", "th"], ["人", "或"], ["开发", "出"], ["大学", "教授"], ["如果", "在"], ["液", "态"], ["C", "ell"], ["曾", "經"], ["擊", "敗"], ["st", "ill"], ["学", "报"], ["太", "郎"], ["om", "at"], ["▁any", "more"], ["▁sub", "mit"], ["ell", "i"], ["▁chair", "man"], ["▁prog", "n"], ["▁p", "ests"], ["▁tact", "ics"], ["拉", "伸"], ["不", "法"], ["医", "科"], ["共產", "黨"], ["ien", "na"], ["in", "ology"], ["之一", "是"], ["蛋白", "的"], ["电", "平"], ["▁ren", "al"], ["▁T", "y"], ["T", "ypes"], ["▁quant", "itative"], ["in", "os"], ["中国", "制造"], ["党和国家", "事业"], ["矢", "量"], ["以", "适应"], ["持续", "时间"], ["驰", "名"], ["走", "廊"], ["郑", "州"], ["电", "离"], ["总体", "布局"], ["波", "段"], ["成果", "的"], ["理", "論"], ["各个", "领域"], ["锂", "离子"], ["化学", "品"], ["无", "缝"], ["山", "的"], ["在", "第"], ["而", "出"], ["ren", "al"], ["奥", "地利"], ["c", "hemical"], ["▁T", "itle"], ["▁constitu", "ency"], ["▁copy", "right"], ["专", "辑"], ["水", "解"], ["H", "g"], ["C", "ross"], ["%", "▁("], ["▁all", "ergy"], ["▁coron", "ary"], ["▁graph", "ics"], ["▁sus", "pected"], ["▁j", "ournals"], ["▁medal", "ists"], ["獎", "項"], ["ph", "y"], ["本科", "生"], ["填", "写"], ["通", "报"], ["主要", "表现为"], ["h", "ang"], ["!", ")▁"], ["▁ex", "clusive"], ["l", "ad"], ["W", "ould"], ["W", "ord"], ["cell", "s"], ["▁abund", "ance"], ["▁c", "ited"], ["▁commission", "ed"], ["▁disapp", "ear"], ["▁gra", "pp"], ["▁sc", "attered"], ["▁autom", "atic"], ["浏览", "器"], ["国际", "组织"], ["保护", "主义"], ["和", "农村"], ["心血管", "疾病"], ["粗", "放"], ["困", "惑"], ["模", "范"], ["新生", "儿"], ["凝", "血"], ["引发", "了"], ["一国", "两制"], ["呕", "吐"], ["刑事", "诉讼法"], ["大", "势"], ["明", "知"], ["Pl", "an"], ["▁P", "as"], ["持续", "的"], ["必", "定"], ["▁C", "irc"], ["ri", "k"], ["▁var", "iants"], ["▁K", "it"], ["分", "為"]]}} \ No newline at end of file diff --git a/chronos/assets/tokenizers/general_32k/tokenizer_config.json b/chronos/assets/tokenizers/general_32k/tokenizer_config.json new file mode 100644 index 0000000..7b1f3ac --- /dev/null +++ b/chronos/assets/tokenizers/general_32k/tokenizer_config.json @@ -0,0 +1,12 @@ +{ + "tokenizer_class": "PreTrainedTokenizerFast", + "bos_token": "<|im_start|>", + "eos_token": "<|im_end|>", + "unk_token": null, + "pad_token": "<|endoftext|>", + "model_max_length": 32768, + "clean_up_tokenization_spaces": false, + "chat_template": "{% if tools %}{{ '<|im_start|>system\n' }}{% if messages and messages[0]['role'] == 'system' %}{{ messages[0]['content'] + '\n\n' }}{% endif %}{{ '\n' }}{% for tool in tools %}{{ tool | tojson + '\n' }}{% endfor %}{{ '<|im_end|>\n' }}{% endif %}{% for message in messages %}{% if not (tools and loop.first and message['role'] == 'system') %}{{ '<|im_start|>' + message['role'] + '\n' + (message['content'] or '') }}{% if message['role'] == 'assistant' and message.get('tool_calls') %}{% set text = message['content'] or '' %}{% for call in message['tool_calls'] %}{% set fn = call['function'] if call.get('function') else call %}{% if text or not loop.first %}{{ '\n' }}{% endif %}{{ '' + {'name': fn['name'], 'arguments': fn['arguments']} | tojson + '' }}{% endfor %}{% endif %}{{ '<|im_end|>' + '\n' }}{% endif %}{% endfor %}{% if add_generation_prompt %}{{ '<|im_start|>assistant\n' }}{% endif %}", + "add_bos_token": false, + "add_eos_token": false +} \ No newline at end of file diff --git a/chronos/assets/tokenizers/general_32k/tokenizer_report.json b/chronos/assets/tokenizers/general_32k/tokenizer_report.json new file mode 100644 index 0000000..2ebfd3f --- /dev/null +++ b/chronos/assets/tokenizers/general_32k/tokenizer_report.json @@ -0,0 +1,174 @@ +{ + "trainer": { + "vocab_size": 32768, + "char_coverage": 0.9999, + "max_alphabet_fraction": 0.4, + "min_pair_frequency": 2, + "language_temperature": 0.5, + "max_token_chars": 16, + "min_bucket_share": 0.01, + "max_bucket_weight": 4.0 + }, + "train_stats": { + "bucket_weights": { + "latin": 0.823191228144042, + "zh": 1.7399979096984903, + "other": 4.0 + }, + "unique_pretokens": 4924919, + "alphabet_size": 8458, + "merges": 23990, + "final_vocab": 32768 + }, + "heldout_eval": { + "latin": { + "texts": 3731, + "bytes_per_token": 3.981, + "chars_per_token": 3.956, + "tokens_per_word": 1.606, + "tokens_per_han": 263.008, + "byte_fallback_rate": 0.00017, + "roundtrip_failures": 0 + }, + "zh": { + "texts": 939, + "bytes_per_token": 4.347, + "chars_per_token": 1.589, + "tokens_per_word": 35.946, + "tokens_per_han": 0.772, + "byte_fallback_rate": 0.00373, + "roundtrip_failures": 0 + }, + "ko": { + "texts": 1, + "bytes_per_token": 1.665, + "chars_per_token": 0.829, + "tokens_per_word": 5.663, + "tokens_per_han": 8.731, + "byte_fallback_rate": 0.37386, + "roundtrip_failures": 0 + }, + "cyrillic": { + "texts": 1, + "bytes_per_token": 2.512, + "chars_per_token": 1.268, + "tokens_per_word": 9.897, + "tokens_per_han": 3.12, + "byte_fallback_rate": 0.0, + "roundtrip_failures": 0 + }, + "ja": { + "texts": 1, + "bytes_per_token": 2.671, + "chars_per_token": 1.333, + "tokens_per_word": 10.074, + "tokens_per_han": 2.666, + "byte_fallback_rate": 0.01567, + "roundtrip_failures": 0 + }, + "other": { + "texts": 1, + "bytes_per_token": 1.514, + "chars_per_token": 1.478, + "tokens_per_word": 2.391, + "tokens_per_han": null, + "byte_fallback_rate": 0.0, + "roundtrip_failures": 0 + }, + "vocab_utilization": 0.9042 + }, + "sources": { + "tokenizer sample: 233,619 chunks (<= 2000 chars) from FineWeb-Edu, Fineweb-Edu-Chinese V2.1, Cosmopedia v2, Wikipedia en, Wikipedia zh": { + "files": 1, + "records": 233619, + "texts_seen": 233619, + "sampled": 233619, + "buckets": { + "latin": 186575, + "zh": 46977, + "ko": 1, + "cyrillic": 40, + "ja": 20, + "other": 6 + } + } + }, + "elapsed_s": 443.9, + "vocab_size": 32768, + "fingerprint": "6d4b3b524922f6cd34d674cf10605488d99c4dc97a58699d59466eb4ba396171", + "special_tokens": [ + "<|endoftext|>", + "<|im_start|>", + "<|im_end|>", + "<|pad|>", + "<|reserved_0|>", + "<|reserved_1|>", + "<|reserved_2|>", + "<|reserved_3|>", + "<|reserved_4|>", + "<|reserved_5|>", + "<|reserved_6|>", + "<|reserved_7|>", + "<|reserved_8|>", + "<|reserved_9|>", + "<|reserved_10|>", + "<|reserved_11|>", + "<|reserved_12|>", + "<|reserved_13|>", + "<|reserved_14|>", + "<|reserved_15|>", + "<|reserved_16|>", + "<|reserved_17|>", + "<|reserved_18|>", + "<|reserved_19|>", + "<|reserved_20|>", + "<|reserved_21|>", + "<|reserved_22|>", + "<|reserved_23|>", + "<|reserved_24|>", + "<|reserved_25|>", + "<|reserved_26|>", + "<|reserved_27|>", + "<|reserved_28|>", + "<|reserved_29|>", + "<|reserved_30|>", + "<|reserved_31|>", + "<|reserved_32|>", + "<|reserved_33|>", + "<|reserved_34|>", + "<|reserved_35|>", + "<|reserved_36|>", + "<|reserved_37|>", + "<|reserved_38|>", + "<|reserved_39|>", + "<|reserved_40|>", + "<|reserved_41|>", + "<|reserved_42|>", + "<|reserved_43|>", + "<|reserved_44|>", + "<|reserved_45|>", + "<|reserved_46|>", + "<|reserved_47|>", + "<|reserved_48|>", + "<|reserved_49|>", + "<|reserved_50|>", + "<|reserved_51|>", + "<|reserved_52|>", + "<|reserved_53|>", + "<|reserved_54|>", + "<|reserved_55|>", + "<|reserved_56|>", + "<|reserved_57|>", + "<|reserved_58|>", + "<|reserved_59|>" + ], + "algorithm": "chronos-bpe-v1", + "derived_from": { + "fingerprint": "169668b1be29a517fb20f44060cb4a2955cf16dc56f484ceb5376ff2f9a9f37a", + "relabelled_ids": [ + 3, + 63 + ], + "rule": "control ids 3-63 relabelled to the task-neutral layout special_tokens_with(slots=64); ordinary tokens, merges and ids unchanged" + } +} \ No newline at end of file diff --git a/chronos/assets/tokenizers/legacy_6400/LICENSE b/chronos/assets/tokenizers/legacy_6400/LICENSE new file mode 100644 index 0000000..261eeb9 --- /dev/null +++ b/chronos/assets/tokenizers/legacy_6400/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/chronos/assets/tokenizers/legacy_6400/NOTICE b/chronos/assets/tokenizers/legacy_6400/NOTICE new file mode 100644 index 0000000..bd46831 --- /dev/null +++ b/chronos/assets/tokenizers/legacy_6400/NOTICE @@ -0,0 +1,15 @@ +Legacy 6400-token tokenizer (data files only) + +tokenizer.json and tokenizer_config.json are copied unchanged from +minimind (https://github.com/jingyaogong/minimind), commit +24896cd2c4e9328a0911cf69ff61ace17a459b71. Copyright jingyaogong. +Licensed under the Apache License, Version 2.0 (see LICENSE in this folder). + +sha256 + tokenizer.json 71f32c68cf63a15355a8fc171b7594b3d41870fe0ddb54fc6aefa55f73a4a668 + tokenizer_config.json d7cd6a60c9f191c4f9ffec69b2eb289ad2f960366724f328b681ae1e46e4c110 + +Chronos does not use any minimind code. These files are kept so that +checkpoints that never recorded a tokenizer (vocab_size 6400, trained +before 0.3.2) still decode. New models should train their own +tokenizer with `chronos tokenizer` (Chronos Tokenizer Builder). diff --git a/chronos/assets/tokenizers/legacy_6400/tokenizer.json b/chronos/assets/tokenizers/legacy_6400/tokenizer.json new file mode 100644 index 0000000..e6ca86c --- /dev/null +++ b/chronos/assets/tokenizers/legacy_6400/tokenizer.json @@ -0,0 +1,31191 @@ +{ + "version": "1.0", + "truncation": null, + "padding": null, + "added_tokens": [ + { + "id": 0, + "content": "<|endoftext|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 1, + "content": "<|im_start|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 2, + "content": "<|im_end|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 3, + "content": "<|object_ref_start|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 4, + "content": "<|object_ref_end|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 5, + "content": "<|box_start|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 6, + "content": "<|box_end|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 7, + "content": "<|quad_start|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 8, + "content": "<|quad_end|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 9, + "content": "<|vision_start|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 10, + "content": "<|vision_end|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 11, + "content": "<|vision_pad|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 12, + "content": "<|image_pad|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 13, + "content": "<|video_pad|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 14, + "content": "<|audio_start|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 15, + "content": "<|audio_end|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 16, + "content": "<|audio_pad|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 17, + "content": "", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 18, + "content": "", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 19, + "content": "", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 20, + "content": "", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": true + }, + { + "id": 21, + "content": "", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": false + }, + { + "id": 22, + "content": "", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": false + }, + { + "id": 23, + "content": "", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": false + }, + { + "id": 24, + "content": "", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": false + }, + { + "id": 25, + "content": "", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": false + }, + { + "id": 26, + "content": "", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": false + }, + { + "id": 27, + "content": "<|buffer1|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": false + }, + { + "id": 28, + "content": "<|buffer2|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": false + }, + { + "id": 29, + "content": "<|buffer3|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": false + }, + { + "id": 30, + "content": "<|buffer4|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": false + }, + { + "id": 31, + "content": "<|buffer5|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": false + }, + { + "id": 32, + "content": "<|buffer6|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": false + }, + { + "id": 33, + "content": "<|buffer7|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": false + }, + { + "id": 34, + "content": "<|buffer8|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": false + }, + { + "id": 35, + "content": "<|buffer9|>", + "single_word": false, + "lstrip": false, + "rstrip": false, + "normalized": false, + "special": false + } + ], + "normalizer": null, + "pre_tokenizer": { + "type": "ByteLevel", + "add_prefix_space": false, + "trim_offsets": true, + "use_regex": true + }, + "post_processor": null, + "decoder": { + "type": "ByteLevel", + "add_prefix_space": true, + "trim_offsets": true, + "use_regex": true + }, + "model": { + "type": "BPE", + "dropout": null, + "unk_token": null, + "continuing_subword_prefix": null, + "end_of_word_suffix": null, + "fuse_unk": false, + "byte_fallback": false, + "ignore_merges": false, + "vocab": { + "<|endoftext|>": 0, + "<|im_start|>": 1, + "<|im_end|>": 2, + "<|object_ref_start|>": 3, + "<|object_ref_end|>": 4, + "<|box_start|>": 5, + "<|box_end|>": 6, + "<|quad_start|>": 7, + "<|quad_end|>": 8, + "<|vision_start|>": 9, + "<|vision_end|>": 10, + "<|vision_pad|>": 11, + "<|image_pad|>": 12, + "<|video_pad|>": 13, + "<|audio_start|>": 14, + "<|audio_end|>": 15, + "<|audio_pad|>": 16, + "": 17, + "": 18, + "": 19, + "": 20, + "": 21, + "": 22, + "": 23, + "": 24, + "": 25, + "": 26, + "<|buffer1|>": 27, + "<|buffer2|>": 28, + "<|buffer3|>": 29, + "<|buffer4|>": 30, + "<|buffer5|>": 31, + "<|buffer6|>": 32, + "<|buffer7|>": 33, + "<|buffer8|>": 34, + "<|buffer9|>": 35, + "!": 36, + "\"": 37, + "#": 38, + "$": 39, + "%": 40, + "&": 41, + "'": 42, + "(": 43, + ")": 44, + "*": 45, + "+": 46, + ",": 47, + "-": 48, + ".": 49, + "/": 50, + "0": 51, + "1": 52, + "2": 53, + "3": 54, + "4": 55, + "5": 56, + "6": 57, + "7": 58, + "8": 59, + "9": 60, + ":": 61, + ";": 62, + "<": 63, + "=": 64, + ">": 65, + "?": 66, + "@": 67, + "A": 68, + "B": 69, + "C": 70, + "D": 71, + "E": 72, + "F": 73, + "G": 74, + "H": 75, + "I": 76, + "J": 77, + "K": 78, + "L": 79, + "M": 80, + "N": 81, + "O": 82, + "P": 83, + "Q": 84, + "R": 85, + "S": 86, + "T": 87, + "U": 88, + "V": 89, + "W": 90, + "X": 91, + "Y": 92, + "Z": 93, + "[": 94, + "\\": 95, + "]": 96, + "^": 97, + "_": 98, + "`": 99, + "a": 100, + "b": 101, + "c": 102, + "d": 103, + "e": 104, + "f": 105, + "g": 106, + "h": 107, + "i": 108, + "j": 109, + "k": 110, + "l": 111, + "m": 112, + "n": 113, + "o": 114, + "p": 115, + "q": 116, + "r": 117, + "s": 118, + "t": 119, + "u": 120, + "v": 121, + "w": 122, + "x": 123, + "y": 124, + "z": 125, + "{": 126, + "|": 127, + "}": 128, + "~": 129, + "¡": 130, + "¢": 131, + "£": 132, + "¤": 133, + "¥": 134, + "¦": 135, + "§": 136, + "¨": 137, + "©": 138, + "ª": 139, + "«": 140, + "¬": 141, + "®": 142, + "¯": 143, + "°": 144, + "±": 145, + "²": 146, + "³": 147, + "´": 148, + "µ": 149, + "¶": 150, + "·": 151, + "¸": 152, + "¹": 153, + "º": 154, + "»": 155, + "¼": 156, + "½": 157, + "¾": 158, + "¿": 159, + "À": 160, + "Á": 161, + "Â": 162, + "Ã": 163, + "Ä": 164, + "Å": 165, + "Æ": 166, + "Ç": 167, + "È": 168, + "É": 169, + "Ê": 170, + "Ë": 171, + "Ì": 172, + "Í": 173, + "Î": 174, + "Ï": 175, + "Ð": 176, + "Ñ": 177, + "Ò": 178, + "Ó": 179, + "Ô": 180, + "Õ": 181, + "Ö": 182, + "×": 183, + "Ø": 184, + "Ù": 185, + "Ú": 186, + "Û": 187, + "Ü": 188, + "Ý": 189, + "Þ": 190, + "ß": 191, + "à": 192, + "á": 193, + "â": 194, + "ã": 195, + "ä": 196, + "å": 197, + "æ": 198, + "ç": 199, + "è": 200, + "é": 201, + "ê": 202, + "ë": 203, + "ì": 204, + "í": 205, + "î": 206, + "ï": 207, + "ð": 208, + "ñ": 209, + "ò": 210, + "ó": 211, + "ô": 212, + "õ": 213, + "ö": 214, + "÷": 215, + "ø": 216, + "ù": 217, + "ú": 218, + "û": 219, + "ü": 220, + "ý": 221, + "þ": 222, + "ÿ": 223, + "Ā": 224, + "ā": 225, + "Ă": 226, + "ă": 227, + "Ą": 228, + "ą": 229, + "Ć": 230, + "ć": 231, + "Ĉ": 232, + "ĉ": 233, + "Ċ": 234, + "ċ": 235, + "Č": 236, + "č": 237, + "Ď": 238, + "ď": 239, + "Đ": 240, + "đ": 241, + "Ē": 242, + "ē": 243, + "Ĕ": 244, + "ĕ": 245, + "Ė": 246, + "ė": 247, + "Ę": 248, + "ę": 249, + "Ě": 250, + "ě": 251, + "Ĝ": 252, + "ĝ": 253, + "Ğ": 254, + "ğ": 255, + "Ġ": 256, + "ġ": 257, + "Ģ": 258, + "ģ": 259, + "Ĥ": 260, + "ĥ": 261, + "Ħ": 262, + "ħ": 263, + "Ĩ": 264, + "ĩ": 265, + "Ī": 266, + "ī": 267, + "Ĭ": 268, + "ĭ": 269, + "Į": 270, + "į": 271, + "İ": 272, + "ı": 273, + "IJ": 274, + "ij": 275, + "Ĵ": 276, + "ĵ": 277, + "Ķ": 278, + "ķ": 279, + "ĸ": 280, + "Ĺ": 281, + "ĺ": 282, + "Ļ": 283, + "ļ": 284, + "Ľ": 285, + "ľ": 286, + "Ŀ": 287, + "ŀ": 288, + "Ł": 289, + "ł": 290, + "Ń": 291, + "ï¼": 292, + "ä¸": 293, + "ï¼Į": 294, + "çļ": 295, + "çļĦ": 296, + "Ġt": 297, + "ãĢ": 298, + "Ġa": 299, + "he": 300, + "in": 301, + "ãĢĤ": 302, + "äº": 303, + "ä»": 304, + "åı": 305, + "re": 306, + "ä½": 307, + "æľ": 308, + "Ġthe": 309, + "on": 310, + "er": 311, + "**": 312, + "è¿": 313, + "at": 314, + "åħ": 315, + "Ġs": 316, + "Ġc": 317, + "åĪ": 318, + "Ġo": 319, + "å®": 320, + "çĶ": 321, + "æĪ": 322, + "åĬ": 323, + "is": 324, + "an": 325, + "ou": 326, + "en": 327, + "åľ": 328, + "es": 329, + "å¤": 330, + "åĴ": 331, + "ĠĠ": 332, + "æĺ": 333, + "åĴĮ": 334, + "åIJ": 335, + "or": 336, + "ï¼ļ": 337, + "it": 338, + "Ġw": 339, + "æķ": 340, + "Ġf": 341, + "ç»": 342, + "è¯": 343, + "Ġp": 344, + "ãĢģ": 345, + "Ġan": 346, + "æĸ": 347, + "è®": 348, + "ä¸Ģ": 349, + "ing": 350, + "Ġm": 351, + "al": 352, + "Ġin": 353, + "Ġof": 354, + "ĥ½": 355, + "éĢ": 356, + "æĺ¯": 357, + "以": 358, + "Ġ**": 359, + "åı¯": 360, + "le": 361, + "åŃ": 362, + "Ġb": 363, + "Ġto": 364, + "ä¹": 365, + "个": 366, + "åº": 367, + "ç͍": 368, + "åľ¨": 369, + "ar": 370, + "ion": 371, + "èĥ½": 372, + "Ġd": 373, + "**ï¼ļ": 374, + "ic": 375, + "Ġand": 376, + "å°": 377, + "æĹ": 378, + "ä¼": 379, + "éĩ": 380, + "å¸": 381, + "ed": 382, + "åĮ": 383, + "è§": 384, + "Ġy": 385, + "åĽ": 386, + "è¡": 387, + "ä¸Ń": 388, + "å¯": 389, + "as": 390, + "æķ°": 391, + "åĩ": 392, + "ro": 393, + "è¿Ļ": 394, + "Ġis": 395, + "¦Ĥ": 396, + "æĿ": 397, + "æľī": 398, + "Ġn": 399, + "å¼": 400, + "Ġyou": 401, + "æĢ": 402, + "ä¿": 403, + "å¦Ĥ": 404, + "æŀ": 405, + "Ġl": 406, + "åĨ": 407, + "çŃ": 408, + "çİ": 409, + "åı¯ä»¥": 410, + "éĹ": 411, + "ç§": 412, + "Ġe": 413, + "è¦": 414, + "çĽ": 415, + "çī": 416, + "ä¸į": 417, + "为": 418, + "çļĦæ": 419, + "è¦ģ": 420, + "çIJ": 421, + "Ġre": 422, + "äºĨ": 423, + "å¹": 424, + "ent": 425, + "ct": 426, + "å·": 427, + "æı": 428, + "Ġh": 429, + "èĢ": 430, + "é¢": 431, + "st": 432, + "æ³": 433, + "æī": 434, + "ĊĠĠ": 435, + "æĬ": 436, + "ä¾": 437, + "æł": 438, + "et": 439, + "æį": 440, + "ä½ł": 441, + "ĠI": 442, + "æĹ¶": 443, + "om": 444, + "Ġth": 445, + "el": 446, + "人": 447, + "åį": 448, + "``": 449, + "Ġ=": 450, + "ow": 451, + "Ġ\\": 452, + "å½": 453, + "æıIJ": 454, + "çIJĨ": 455, + "äºİ": 456, + "um": 457, + "å¾": 458, + "æĪĸ": 459, + "id": 460, + "对": 461, + "âĢ": 462, + "æĪij": 463, + "çŃī": 464, + "æİ": 465, + "ä¸Ģ个": 466, + "im": 467, + "éĢļ": 468, + "éĿ": 469, + "æĢ§": 470, + "è´": 471, + "è¿ĩ": 472, + "ce": 473, + "è¡Į": 474, + "ç®": 475, + "使": 476, + "æĮ": 477, + "ve": 478, + "æĶ": 479, + "èĩ": 480, + "æĭ": 481, + "Ġ1": 482, + "Ġu": 483, + "æĸ¹": 484, + "il": 485, + "çĶŁ": 486, + "æį®": 487, + "æĪIJ": 488, + "ation": 489, + "åѦ": 490, + "æĽ": 491, + "Ġg": 492, + "æŃ": 493, + "åĵ": 494, + "th": 495, + "ers": 496, + "am": 497, + "ä½ľ": 498, + "ig": 499, + "ol": 500, + "ut": 501, + "å¿": 502, + "Ġfor": 503, + "ä¸ĭ": 504, + "æĦ": 505, + "éľ": 506, + "if": 507, + "ä¼ļ": 508, + "æĿ¥": 509, + "å¥": 510, + "åĮĸ": 511, + "åΰ": 512, + "åĪĨ": 513, + "è¾": 514, + "å®ļ": 515, + "ä¿Ŀ": 516, + "æĽ´": 517, + "äºĽ": 518, + "ç¡": 519, + "æµ": 520, + "éĻ": 521, + "Ġor": 522, + "Ġas": 523, + "éľĢ": 524, + "å±": 525, + "们": 526, + "ĠT": 527, + "ç¨": 528, + "ĠA": 529, + "ä½ĵ": 530, + "åĬ¨": 531, + "åıij": 532, + "使ç͍": 533, + "è§£": 534, + "ĠC": 535, + "Ġ\"": 536, + "qu": 537, + "è¿Ľ": 538, + "æŀľ": 539, + "Ġpro": 540, + "Ġcan": 541, + "ly": 542, + "ur": 543, + "éĺ": 544, + "åºĶ": 545, + "Ġ2": 546, + "åij": 547, + "Ġ-": 548, + "ul": 549, + "ch": 550, + "åŁ": 551, + "ä¸İ": 552, + "åľ°": 553, + "ï¼ī": 554, + "ï¼Ī": 555, + "æ³ķ": 556, + "ate": 557, + "èµ": 558, + "ra": 559, + "åIJĮ": 560, + "é«": 561, + "ä¸Ĭ": 562, + "Ġit": 563, + "é«ĺ": 564, + "大": 565, + "ç½": 566, + "ç¡®": 567, + "ith": 568, + "æķ°æį®": 569, + "ist": 570, + "åIJĪ": 571, + "ab": 572, + "se": 573, + "æĸĩ": 574, + "è½": 575, + "æ¯": 576, + "度": 577, + "åı¯èĥ½": 578, + "èĩª": 579, + "Ġst": 580, + "å®ŀ": 581, + "Ġhe": 582, + "ge": 583, + "éĩı": 584, + "计": 585, + "ç¨ĭ": 586, + "çº": 587, + "åİ": 588, + "æ°": 589, + "å¤ļ": 590, + "Ġthat": 591, + "æĥ": 592, + "ot": 593, + "åĬĽ": 594, + "åĬł": 595, + "çݰ": 596, + "åĩº": 597, + "ç¤": 598, + "Ġwith": 599, + "Ġbe": 600, + "ç³": 601, + "ä¸ļ": 602, + "Ġv": 603, + "ç§į": 604, + "éĿ¢": 605, + "常": 606, + "éĹ´": 607, + "åĬ¡": 608, + "设": 609, + "æĬĢ": 610, + "est": 611, + "å»": 612, + "ä¾Ľ": 613, + "Ġcon": 614, + "éĹ®": 615, + "åĬ©": 616, + "æľ¯": 617, + "æ´": 618, + "Ġon": 619, + "æ±": 620, + "Ġmo": 621, + "æĻ": 622, + "å°Ĩ": 623, + "```": 624, + "å¢": 625, + "表": 626, + "éģ": 627, + "'s": 628, + "åħ³": 629, + "éľĢè¦ģ": 630, + "ĠS": 631, + "é¢ĺ": 632, + "å·¥": 633, + "##": 634, + "建": 635, + "åħ¶": 636, + "éĩį": 637, + "æľº": 638, + "ir": 639, + "æĸ°": 640, + "çī©": 641, + "éĢļè¿ĩ": 642, + "åħ¨": 643, + "æıIJä¾Ľ": 644, + "ä¿¡": 645, + "çĦ": 646, + "ç³»": 647, + "æĮģ": 648, + "çł": 649, + "å¼ı": 650, + "un": 651, + "ver": 652, + "pe": 653, + "Ġwh": 654, + "ay": 655, + "ç´": 656, + "æģ": 657, + "好": 658, + "åĢ": 659, + "ç«": 660, + "å¦Ĥæŀľ": 661, + "èī": 662, + "åŃIJ": 663, + "æ¸": 664, + "Ġ(": 665, + "ĠH": 666, + "çĦ¶": 667, + "iv": 668, + "åģ": 669, + "00": 670, + "åħ·": 671, + "ç±": 672, + "Ł¥": 673, + "ld": 674, + "çĤ": 675, + "ib": 676, + "è°": 677, + "ä»ĸ": 678, + "é¡": 679, + "ç®Ĺ": 680, + "ãģ": 681, + "åζ": 682, + "âĢľ": 683, + "âĢĿ": 684, + "ä¹ł": 685, + "åŀ": 686, + "em": 687, + "ide": 688, + "æľ¬": 689, + "æĪ·": 690, + "ĠP": 691, + "è¶": 692, + "ke": 693, + "nt": 694, + "æľĢ": 695, + "åĮħ": 696, + "å®ĥ": 697, + "çī¹": 698, + "Ġcom": 699, + "å°ı": 700, + "åIJİ": 701, + "åŃĹ": 702, + "帮": 703, + "èĢĮ": 704, + "æķĪ": 705, + "èĢħ": 706, + "Ġ3": 707, + "igh": 708, + "é£": 709, + "åĵģ": 710, + "代": 711, + "ä»¶": 712, + "de": 713, + "umb": 714, + "yth": 715, + "éļ": 716, + "åħ¥": 717, + "Ĥ¨": 718, + "Ġex": 719, + "ä¹Ł": 720, + "æ²": 721, + "lo": 722, + "缮": 723, + "åŀĭ": 724, + "ĊĠĠĠ": 725, + "å®¶": 726, + "å¼Ģ": 727, + "and": 728, + "¨¡": 729, + "Ġne": 730, + "åĽł": 731, + "Ġare": 732, + "æĦı": 733, + "æ¬": 734, + "çļĦç": 735, + "Ġha": 736, + "pp": 737, + "åī": 738, + "帮åĬ©": 739, + "ain": 740, + "te": 741, + "æĬĢæľ¯": 742, + "å®ī": 743, + "ython": 744, + "ure": 745, + "éĹ®é¢ĺ": 746, + "å±ķ": 747, + "ĠĠĠĠ": 748, + "çĤ¹": 749, + "The": 750, + "éĶ": 751, + "ä¾ĭ": 752, + "çĿ": 753, + "Ġ+": 754, + "æģ¯": 755, + "æľį": 756, + "Ġr": 757, + "éĢī": 758, + "模": 759, + "ä½Ĩ": 760, + "è¯Ń": 761, + "Ġse": 762, + "åĽ½": 763, + "åĨħ": 764, + "Ġme": 765, + "åĪĽ": 766, + "绣": 767, + "åŃ¦ä¹ł": 768, + "Ġby": 769, + "éķ": 770, + "her": 771, + "èĤ": 772, + "æĪij们": 773, + "ight": 774, + "ä¹ĭ": 775, + "ï¼Ł": 776, + "æĦŁ": 777, + "ç±»": 778, + "æ±Ĥ": 779, + "æ´»": 780, + "ess": 781, + "è¿ĻäºĽ": 782, + "éª": 783, + "éĽ": 784, + "ad": 785, + "åħ¬": 786, + "Ġde": 787, + "for": 788, + "Ġal": 789, + "产": 790, + "ment": 791, + "ç¼": 792, + "ç½ij": 793, + "ĠThe": 794, + "å¿ĥ": 795, + "Ġwe": 796, + "å¹¶": 797, + "ç¬": 798, + "æīĢ": 799, + "缸": 800, + "Ġ\\(": 801, + "çķ": 802, + "åĻ": 803, + "åĿ": 804, + "æľŁ": 805, + "int": 806, + "æ·": 807, + "Ġ`": 808, + "ri": 809, + "nd": 810, + "ant": 811, + "ase": 812, + "ç»ı": 813, + "çݯ": 814, + "è¿Ľè¡Į": 815, + "ç»ĵ": 816, + "èĬ": 817, + "å¹³": 818, + "ç͵": 819, + "ç©": 820, + "Ġnumb": 821, + "éĢĤ": 822, + "lp": 823, + "oo": 824, + "ction": 825, + "交": 826, + "åύ": 827, + "åıĺ": 828, + "æłĩ": 829, + "主": 830, + "æº": 831, + "us": 832, + "ple": 833, + "age": 834, + "å¤Ħ": 835, + "çĿĢ": 836, + "æľįåĬ¡": 837, + "éĥ": 838, + "ä¿¡æģ¯": 839, + "xt": 840, + "Ġprov": 841, + "æİ¥": 842, + "Ġhelp": 843, + "èµĦ": 844, + "åĨ³": 845, + "Ġus": 846, + "å½±": 847, + "Ġle": 848, + "æĤ¨": 849, + "以ä¸ĭ": 850, + "æĺİ": 851, + "éĩĮ": 852, + "çľ": 853, + "è·": 854, + "Ġsu": 855, + "æĥħ": 856, + "éĥ½": 857, + "åľº": 858, + "ç¡®ä¿Ŀ": 859, + "ä»İ": 860, + "éķ¿": 861, + "Wh": 862, + "ç͍æĪ·": 863, + "éĥ¨": 864, + "rom": 865, + "ort": 866, + "åıĬ": 867, + "èģ": 868, + "ĠM": 869, + "ity": 870, + "å¤Ł": 871, + "åĪĹ": 872, + "å¾Ĺ": 873, + "Ġhave": 874, + "pt": 875, + "form": 876, + "åŁº": 877, + "å®īåħ¨": 878, + "å̼": 879, + "è°ĥ": 880, + "æĭ¬": 881, + "èĻ": 882, + "ific": 883, + "ive": 884, + "社": 885, + "çłģ": 886, + "ter": 887, + "ä½ķ": 888, + "res": 889, + "Ġch": 890, + "éĢīæĭ": 891, + "ck": 892, + "Ġqu": 893, + "éĢīæĭ©": 894, + "计ç®Ĺ": 895, + "é¦": 896, + "æºIJ": 897, + "åĮħæĭ¬": 898, + "å½ĵ": 899, + "Ġ5": 900, + "end": 901, + "管": 902, + "çİĩ": 903, + "è¿Ļ个": 904, + "æıIJé«ĺ": 905, + "ame": 906, + "ç³»ç»Ł": 907, + "åºĶç͍": 908, + "è¿ĺ": 909, + "æķ´": 910, + "æĹ¶éĹ´": 911, + "è®®": 912, + "art": 913, + "Ġk": 914, + "ould": 915, + "ind": 916, + "ä½į": 917, + "ä»»": 918, + "æ¯ı": 919, + "è´¨": 920, + "åĵį": 921, + "ue": 922, + "ä¸ĢäºĽ": 923, + "å¤į": 924, + "ies": 925, + "ial": 926, + "Ġpo": 927, + "äºĭ": 928, + "å¸Ĥ": 929, + "èī²": 930, + "åŃĺ": 931, + "Ġ4": 932, + "åĮº": 933, + "èĥ½å¤Ł": 934, + "示": 935, + "å¹´": 936, + "è¢": 937, + "åīį": 938, + "åIJį": 939, + "ç´ł": 940, + "ç»Ħ": 941, + "ang": 942, + "æ¡": 943, + "ence": 944, + "ĠF": 945, + "Ġspe": 946, + "Ġwor": 947, + "ich": 948, + "æ¶": 949, + "éħ": 950, + "å¢ŀ": 951, + "æ°´": 952, + "æŃ¥": 953, + "å¢ĥ": 954, + "out": 955, + "æŀĦ": 956, + "ĠE": 957, + "å¤ĦçIJĨ": 958, + "ill": 959, + "请": 960, + "Ġfrom": 961, + "å°ij": 962, + "éĩįè¦ģ": 963, + "ere": 964, + "项": 965, + "Ġco": 966, + "æ¯Ķ": 967, + "æŃ£": 968, + "ä¸įåIJĮ": 969, + "åĩ½": 970, + "åĪ©": 971, + "éĤ": 972, + "被": 973, + "åĩĨ": 974, + "Ġab": 975, + "æĶ¯": 976, + "ä»ħ": 977, + "ĠB": 978, + "æł¹": 979, + "è¯Ĩ": 980, + "ä¹Ī": 981, + "导": 982, + "åħĥ": 983, + "åĩ½æķ°": 984, + "ä¼ĺ": 985, + "\\)": 986, + "ions": 987, + "Ġ$": 988, + "æĹł": 989, + "注": 990, + "éĿŀ": 991, + "pl": 992, + "天": 993, + "æŁ¥": 994, + "æĬ¤": 995, + "æµģ": 996, + "æµĭ": 997, + "è§Ħ": 998, + "his": 999, + "çĸ": 1000, + "æĺ¯ä¸Ģ个": 1001, + "ĠAl": 1002, + "Ġthis": 1003, + "ĠW": 1004, + "ult": 1005, + "åºı": 1006, + "线": 1007, + "è¯ķ": 1008, + "åıijå±ķ": 1009, + "å½±åĵį": 1010, + "###": 1011, + "ç¾": 1012, + "ç½®": 1013, + "åŁŁ": 1014, + "åıĸ": 1015, + "ine": 1016, + "Ġprovide": 1017, + "é£İ": 1018, + "å½¢": 1019, + "Ġspec": 1020, + "ä¼ł": 1021, + "å¤ĩ": 1022, + "强": 1023, + "ike": 1024, + "act": 1025, + "åħ·ä½ĵ": 1026, + "Ġnot": 1027, + "iz": 1028, + "容": 1029, + "low": 1030, + "Ġass": 1031, + "é¢Ĩ": 1032, + "éªĮ": 1033, + "Ġma": 1034, + "åĩı": 1035, + "Ġmore": 1036, + "åķ": 1037, + "管çIJĨ": 1038, + "Ġyour": 1039, + "æĢģ": 1040, + "Ġdo": 1041, + "ä¸ŃçļĦ": 1042, + "æ»": 1043, + "ĠG": 1044, + "Ġwhich": 1045, + "æŀIJ": 1046, + "Ġte": 1047, + "Ġnumber": 1048, + "able": 1049, + "è¿°": 1050, + "aba": 1051, + "è¾ĵ": 1052, + "æĹ¥": 1053, + "æł¹æį®": 1054, + "åĽŀ": 1055, + "çŃĸ": 1056, + "Ġen": 1057, + "ĠD": 1058, + "éĵ": 1059, + "Ġpr": 1060, + "è¨": 1061, + "çݯå¢ĥ": 1062, + "ibaba": 1063, + "æĸ¹æ³ķ": 1064, + "åĪ«": 1065, + "åįķ": 1066, + "per": 1067, + "rou": 1068, + "ٳ": 1069, + "Ġneed": 1070, + "è¿IJ": 1071, + "ring": 1072, + "æł¼": 1073, + "put": 1074, + "ä¸įä»ħ": 1075, + "ust": 1076, + "æ£": 1077, + "ite": 1078, + "ance": 1079, + "æĻº": 1080, + "éĽĨ": 1081, + "åıĹ": 1082, + "æŃ¤": 1083, + "our": 1084, + "å¤ĸ": 1085, + "代çłģ": 1086, + "ç§ij": 1087, + "åIJij": 1088, + "èĬĤ": 1089, + "éĢļ常": 1090, + "设计": 1091, + "å§": 1092, + "are": 1093, + "æ·±": 1094, + "ated": 1095, + "ical": 1096, + "æŁ": 1097, + "Ġlike": 1098, + "oud": 1099, + "é¢Ħ": 1100, + "éĢŁ": 1101, + "èĢĥ": 1102, + "now": 1103, + "è¨Ģ": 1104, + "åĪĨæŀIJ": 1105, + "ans": 1106, + "åĽ¾": 1107, + "ĊĠĠĠĠĠĠ": 1108, + "个人": 1109, + "cl": 1110, + "Ġwas": 1111, + "åĬŁ": 1112, + "av": 1113, + "ĠHow": 1114, + "çŁ¥": 1115, + "ç»Ļ": 1116, + "æĮĩ": 1117, + "åijĺ": 1118, + "æ®": 1119, + "åıĤ": 1120, + "ç»Ń": 1121, + "Ġso": 1122, + "loud": 1123, + "ä¾ĭå¦Ĥ": 1124, + "æĥ³": 1125, + "ice": 1126, + "åIJĮæĹ¶": 1127, + "Ġsh": 1128, + "æł·": 1129, + "cc": 1130, + "ud": 1131, + "论": 1132, + "åıį": 1133, + "çģ": 1134, + "模åŀĭ": 1135, + "ä¹ī": 1136, + "è¾¾": 1137, + "äºij": 1138, + "缴": 1139, + "çĥ": 1140, + "ĠAlibaba": 1141, + "èĥ": 1142, + "çIJĥ": 1143, + "Ġtr": 1144, + "å·±": 1145, + "What": 1146, + "æķĻ": 1147, + "unction": 1148, + "Ġany": 1149, + "åĨµ": 1150, + "æīĭ": 1151, + "Ġassist": 1152, + "èĩªå·±": 1153, + "ast": 1154, + "\\[": 1155, + "ary": 1156, + "åĽ¢": 1157, + "å·´": 1158, + "å·¥ä½ľ": 1159, + "符": 1160, + "建议": 1161, + "è±": 1162, + "ag": 1163, + "éĻħ": 1164, + "Ġint": 1165, + "èį": 1166, + "次": 1167, + "æĶ¹": 1168, + "ãĤ": 1169, + "æī¾": 1170, + "ç¥": 1171, + "og": 1172, + "åħ±": 1173, + "ime": 1174, + "ap": 1175, + "formation": 1176, + "Ġ0": 1177, + "Ġres": 1178, + "åģ¥": 1179, + "ä»·": 1180, + "两": 1181, + "æĻ¯": 1182, + "è¿ĩç¨ĭ": 1183, + "åİŁ": 1184, + "å¦Ĥä½ķ": 1185, + "è§Ĥ": 1186, + "ther": 1187, + "æĸ¹å¼ı": 1188, + "èIJ": 1189, + "Ġ20": 1190, + "ç«ĭ": 1191, + "转": 1192, + "Ġ'": 1193, + "å¼ķ": 1194, + "æ°Ķ": 1195, + "Ġabout": 1196, + "Ġspecific": 1197, + "ĠL": 1198, + "å®ŀçݰ": 1199, + "Ġad": 1200, + "çIJĨè§£": 1201, + "让": 1202, + "æĺ¯ä¸Ģ": 1203, + "æľª": 1204, + "ç͍äºİ": 1205, + "ç¼ĸ": 1206, + "lease": 1207, + "Ġim": 1208, + "é¢ĨåŁŁ": 1209, + "æİ¨": 1210, + "éĺ¿": 1211, + "Ġknow": 1212, + "è§Ĩ": 1213, + "ä½łçļĦ": 1214, + "è§£åĨ³": 1215, + "绾": 1216, + "Ġinformation": 1217, + "10": 1218, + "Ġpl": 1219, + "åĩıå°ij": 1220, + "åħī": 1221, + "å®Į": 1222, + "text": 1223, + "åħĪ": 1224, + "Ġar": 1225, + "åĨĻ": 1226, + "éļı": 1227, + "æĶ¶": 1228, + "ç½ij绾": 1229, + "æĻºèĥ½": 1230, + "ĠN": 1231, + "éĺŁ": 1232, + "客": 1233, + "èµ·": 1234, + "Ġfunction": 1235, + "ĠJ": 1236, + "king": 1237, + "éĤ£": 1238, + "ore": 1239, + "çͱ": 1240, + "Ġif": 1241, + "ations": 1242, + "ĠR": 1243, + "康": 1244, + "åĪĻ": 1245, + "ĠCh": 1246, + "éľĢæ±Ĥ": 1247, + "Ġat": 1248, + "åħį": 1249, + "ener": 1250, + "æĶ¾": 1251, + "æĶ¯æĮģ": 1252, + "Ġup": 1253, + "ç²": 1254, + "æľĽ": 1255, + "ä¸ĵ": 1256, + "说": 1257, + "ä¿ĿæĮģ": 1258, + "ount": 1259, + "çĬ": 1260, + "åİĨ": 1261, + "urn": 1262, + "Ġwhe": 1263, + "ĠThis": 1264, + "éĩij": 1265, + "all": 1266, + "éģĵ": 1267, + "ach": 1268, + "so": 1269, + "Ġfe": 1270, + "éŁ³": 1271, + "ell": 1272, + "空": 1273, + "çłĶ": 1274, + "ks": 1275, + "åķĨ": 1276, + "åį³": 1277, + "è§Ĵ": 1278, + "ç¾İ": 1279, + "åģ¥åº·": 1280, + "社ä¼ļ": 1281, + "è¯Ńè¨Ģ": 1282, + "tain": 1283, + "å£": 1284, + "ange": 1285, + "èº": 1286, + "ata": 1287, + "èĦ": 1288, + "ign": 1289, + "Ġhas": 1290, + "è®°": 1291, + "ect": 1292, + "ä¹IJ": 1293, + "èİ": 1294, + "çĹ": 1295, + "身": 1296, + "Ġret": 1297, + "çĶŁæ´»": 1298, + "ile": 1299, + "æİ§": 1300, + "ous": 1301, + "ç»´": 1302, + "éĴ": 1303, + "å§ĭ": 1304, + "éĺ¿éĩĮ": 1305, + "产åĵģ": 1306, + "éĿŀ常": 1307, + "è£": 1308, + "erm": 1309, + "åĸ": 1310, + "ç®Ģ": 1311, + "os": 1312, + "ĠIf": 1313, + "å¸Ĥåľº": 1314, + "Ġj": 1315, + "å¿«": 1316, + "段": 1317, + "od": 1318, + "Ġser": 1319, + "pr": 1320, + "äºĨè§£": 1321, + "Ġ6": 1322, + "åįĩ": 1323, + "å°±": 1324, + "èµĦæºIJ": 1325, + "èĩ´": 1326, + "缮æłĩ": 1327, + "åı°": 1328, + "rac": 1329, + "象": 1330, + "主è¦ģ": 1331, + "åIJ¦": 1332, + "æĸĻ": 1333, + "èĥ½åĬĽ": 1334, + "æĸŃ": 1335, + "çľĭ": 1336, + "à¸": 1337, + "Ġcre": 1338, + "AI": 1339, + "du": 1340, + "æ£Ģ": 1341, + "Ġits": 1342, + "ĠIt": 1343, + "以åıĬ": 1344, + "è¯ģ": 1345, + "ä»ĸ们": 1346, + "ĠCloud": 1347, + "ail": 1348, + "python": 1349, + "对äºİ": 1350, + "éĻIJ": 1351, + "ub": 1352, + "ä¼ģ": 1353, + "20": 1354, + "åı¸": 1355, + "游": 1356, + "æĵ": 1357, + "é£Ł": 1358, + "满": 1359, + "æĸĩåĮĸ": 1360, + "()": 1361, + "Ġbut": 1362, + "ç»Ĩ": 1363, + "ï¼ģ": 1364, + "å¸Į": 1365, + "Ġmy": 1366, + "ip": 1367, + "ä¼ģä¸ļ": 1368, + "èģĶ": 1369, + "ĠO": 1370, + "é¡¹çĽ®": 1371, + "æķ°åŃĹ": 1372, + "çķĮ": 1373, + "éģ¿": 1374, + "åĩł": 1375, + "}{": 1376, + "ong": 1377, + "ä¿ĿæĬ¤": 1378, + "æĪĺ": 1379, + "è¯Ħ": 1380, + "ä»Ģ": 1381, + "ree": 1382, + "æĢ»": 1383, + "积": 1384, + "该": 1385, + "éħį": 1386, + "ĊĠĠĠĠĠĠĠ": 1387, + "ass": 1388, + "ever": 1389, + "Ġx": 1390, + "ces": 1391, + "æĽ´åĬł": 1392, + "Ġquest": 1393, + "éĢł": 1394, + "Ġgener": 1395, + "æĿ¡": 1396, + "frac": 1397, + "Ġreturn": 1398, + "èĮ": 1399, + "ie": 1400, + "Ġ\\)": 1401, + "çĬ¶": 1402, + "ä»Ģä¹Ī": 1403, + "æ¡Ī": 1404, + "ä¸ŃåĽ½": 1405, + "Ġun": 1406, + "åIJ«": 1407, + "é¦ĸ": 1408, + "广": 1409, + "æĺĵ": 1410, + "ä¹ĭéĹ´": 1411, + "åĽ¢éĺŁ": 1412, + "èĪ": 1413, + "Ġhow": 1414, + "vel": 1415, + "Ġsc": 1416, + "Ġfind": 1417, + "Ġuse": 1418, + "é©": 1419, + "没": 1420, + "Ġ10": 1421, + "'m": 1422, + "å¯Ĩ": 1423, + "çĶŁæĪIJ": 1424, + "èĻij": 1425, + "port": 1426, + "oc": 1427, + "'re": 1428, + "åħ¬åı¸": 1429, + "åĬŁèĥ½": 1430, + "æķħ": 1431, + "Ġincl": 1432, + "ard": 1433, + "ates": 1434, + "èĤ²": 1435, + "åħĥç´ł": 1436, + "éĻ©": 1437, + "Ġval": 1438, + "åĮ»": 1439, + "æķĪçİĩ": 1440, + "ä¸ī": 1441, + "èĩªçĦ¶": 1442, + "com": 1443, + "æĢ§åĴĮ": 1444, + "'t": 1445, + "æį¢": 1446, + "æ¸ħ": 1447, + "Ġapp": 1448, + "ç´¢": 1449, + "éģ¿åħį": 1450, + "æĿĤ": 1451, + "Ġ[": 1452, + "Ġdes": 1453, + "æĿĥ": 1454, + "å®ĥ们": 1455, + "è¶³": 1456, + "åĨħ容": 1457, + "èĭ": 1458, + "Ġlist": 1459, + "åIJĦ": 1460, + "æĺ¯åIJ¦": 1461, + "æĸ¹éĿ¢": 1462, + "Ġequ": 1463, + "没æľī": 1464, + "ĠChin": 1465, + "çĭ": 1466, + "æİĴ": 1467, + "åĪĴ": 1468, + "çĻ": 1469, + "æīĢæľī": 1470, + "认": 1471, + "éĶ®": 1472, + "äºĴ": 1473, + "è¯į": 1474, + "ire": 1475, + "åij³": 1476, + "æĸ½": 1477, + "è®Ń": 1478, + "æľīæķĪ": 1479, + "é¥": 1480, + "Ġfol": 1481, + "ari": 1482, + "带": 1483, + "æ´»åĬ¨": 1484, + "è´¹": 1485, + "In": 1486, + "æŀģ": 1487, + "ä½İ": 1488, + "ace": 1489, + "ely": 1490, + "Ġcode": 1491, + "åħ¶ä»ĸ": 1492, + "irst": 1493, + "Ġwill": 1494, + "ä¼ĺåĮĸ": 1495, + "ç»ĥ": 1496, + "å¼Ģåıij": 1497, + "车": 1498, + "享": 1499, + "Ġmost": 1500, + "Ġsom": 1501, + "Ġfollow": 1502, + "Ġdet": 1503, + "çĪ": 1504, + "å¤įæĿĤ": 1505, + "op": 1506, + "åºĵ": 1507, + "Ġform": 1508, + "书": 1509, + "æĢĿ": 1510, + "ç©¶": 1511, + "iven": 1512, + "å¸ĮæľĽ": 1513, + "åĪĹ表": 1514, + "Ġcomm": 1515, + "è¿Ļç§į": 1516, + "åĿĹ": 1517, + "gh": 1518, + "è½»": 1519, + "åŃĹ符": 1520, + "çķ¥": 1521, + "ep": 1522, + "Ġacc": 1523, + "ĠHowever": 1524, + "ally": 1525, + "è¾ĥ": 1526, + "åij½": 1527, + "åĽłä¸º": 1528, + "è¶£": 1529, + "ç¦": 1530, + "èĢĥèĻij": 1531, + "è¯Ŀ": 1532, + "ord": 1533, + "Ġmod": 1534, + "ĠU": 1535, + "Ġcomp": 1536, + "ãĥ": 1537, + "Ġ7": 1538, + "èİ·": 1539, + "åĥ": 1540, + "å¢ŀåĬł": 1541, + "įä½ľ": 1542, + "ĠPython": 1543, + "è·¯": 1544, + "ac": 1545, + "åijĬ": 1546, + "åıª": 1547, + "以ä¸ĭæĺ¯": 1548, + "ä½łåı¯ä»¥": 1549, + "çłĶç©¶": 1550, + "è°ĥæķ´": 1551, + "Ġro": 1552, + "Ġdata": 1553, + "çĸĹ": 1554, + "读": 1555, + "å¾ĭ": 1556, + "ry": 1557, + "è§ģ": 1558, + "print": 1559, + "è£ħ": 1560, + "ample": 1561, + "\\]": 1562, + "Ġsent": 1563, + "Ġmight": 1564, + "ä¿ĥ": 1565, + "çīĩ": 1566, + "ħ§": 1567, + "Ġ\\]": 1568, + "æĮģç»Ń": 1569, + ".\"": 1570, + "åı¯èĥ½ä¼ļ": 1571, + "åı£": 1572, + "å¸ĥ": 1573, + "å¾Ī": 1574, + "åı·": 1575, + "éĵ¾": 1576, + "ello": 1577, + "çī¹å®ļ": 1578, + "æĸĩä»¶": 1579, + "--": 1580, + "èĩ³": 1581, + "ãĢĬ": 1582, + "æĪı": 1583, + "ãĢĭ": 1584, + "urre": 1585, + "åĥı": 1586, + "ems": 1587, + "åħ´": 1588, + "ä¸ĸ": 1589, + "è´¨éĩı": 1590, + "æ¼": 1591, + "ress": 1592, + "éϤ": 1593, + "æĥħåĨµ": 1594, + "Ġ{": 1595, + "Ġ8": 1596, + "çĦ¶åIJİ": 1597, + "å¦Ĥæŀľä½ł": 1598, + "åı¥": 1599, + "Python": 1600, + "ph": 1601, + "Hello": 1602, + "æŁIJ": 1603, + "å¹³åı°": 1604, + "æĶ¿": 1605, + "ertain": 1606, + "å½ķ": 1607, + "imes": 1608, + "Ġpart": 1609, + "ound": 1610, + "wen": 1611, + "Ġnumbers": 1612, + "Ġper": 1613, + "åĪĽå»º": 1614, + "sw": 1615, + "åıĺåĮĸ": 1616, + "fere": 1617, + "å·¥åħ·": 1618, + "Ġnew": 1619, + "éĺ²": 1620, + "Ġwhat": 1621, + "angu": 1622, + "Ġone": 1623, + "æķĻèĤ²": 1624, + "Ġserv": 1625, + "Ġname": 1626, + "ff": 1627, + "Ġ#": 1628, + "ç®Ĺæ³ķ": 1629, + "误": 1630, + "åħħ": 1631, + "ition": 1632, + "con": 1633, + "one": 1634, + "Ġtheir": 1635, + "å®ŀéĻħ": 1636, + "ack": 1637, + "ft": 1638, + "é»": 1639, + "ram": 1640, + "åĪ©ç͍": 1641, + "æīĵ": 1642, + "æĵįä½ľ": 1643, + "Ġsol": 1644, + "æ¶Ī": 1645, + "ç§°": 1646, + "):": 1647, + "æĪĸèĢħ": 1648, + "Ġother": 1649, + "Ġall": 1650, + "Ġusing": 1651, + "ript": 1652, + "Qwen": 1653, + "çļĦæĺ¯": 1654, + "ear": 1655, + "ç»ĵæŀľ": 1656, + "ä¿ĥè¿Ľ": 1657, + "Ġcl": 1658, + "æľªæĿ¥": 1659, + "ak": 1660, + "æİ§åζ": 1661, + "ory": 1662, + "çŁ": 1663, + "Ġlangu": 1664, + "Ġsy": 1665, + "åĽłæŃ¤": 1666, + "éĢĤåIJĪ": 1667, + "vers": 1668, + "Ġinto": 1669, + "Ġinte": 1670, + "To": 1671, + "Ġman": 1672, + "温": 1673, + "好çļĦ": 1674, + "æľīåĬ©": 1675, + "23": 1676, + "ç»ĵæŀĦ": 1677, + "æĿIJ": 1678, + "èIJ¥": 1679, + "Ġvari": 1680, + "æľīåĬ©äºİ": 1681, + "Ġem": 1682, + "Ġcol": 1683, + "Ġcont": 1684, + "ng": 1685, + "ç«Ļ": 1686, + "æĸ°çļĦ": 1687, + "æıı": 1688, + "ish": 1689, + "Ġoff": 1690, + "询": 1691, + "åİ»": 1692, + "缸åħ³": 1693, + "æĺ¾": 1694, + "Ġout": 1695, + "ased": 1696, + "èŀ": 1697, + "rite": 1698, + "æµİ": 1699, + "æĺŁ": 1700, + "Ġbet": 1701, + "æķħäºĭ": 1702, + "åı²": 1703, + "Ġansw": 1704, + "为äºĨ": 1705, + "èĩªå·±çļĦ": 1706, + "Ġworld": 1707, + "设å¤ĩ": 1708, + "Ġwould": 1709, + "Ġfirst": 1710, + "æĬķ": 1711, + "第": 1712, + "Ġev": 1713, + "åģļ": 1714, + "æ£ĢæŁ¥": 1715, + "ç»ıæµİ": 1716, + "Ġty": 1717, + "ä¸ĵä¸ļ": 1718, + "åĶ": 1719, + "帮åĬ©ä½ł": 1720, + "ĠÐ": 1721, + "软": 1722, + "缴æİ¥": 1723, + "èij": 1724, + "å¼Ģå§ĭ": 1725, + "ia": 1726, + "Ġinclud": 1727, + "æľĪ": 1728, + "ç²¾": 1729, + "åĽ´": 1730, + "ments": 1731, + "ature": 1732, + "éĩĬ": 1733, + "Ġterm": 1734, + "åĤ¨": 1735, + "urrent": 1736, + "ru": 1737, + "__": 1738, + "ç±»åŀĭ": 1739, + "ä»»åĬ¡": 1740, + "Ġ*": 1741, + "åĵª": 1742, + "Ġcal": 1743, + "Ġalso": 1744, + "éĶĻ": 1745, + "Ġam": 1746, + "we": 1747, + "ä½ľä¸º": 1748, + "Ġanswer": 1749, + "念": 1750, + "游æĪı": 1751, + "æľºåύ": 1752, + "day": 1753, + "Ġlet": 1754, + "Ġused": 1755, + "çĹħ": 1756, + "åIJ¸": 1757, + "两个": 1758, + "æī¾åΰ": 1759, + "级": 1760, + "Ġsum": 1761, + "åħ³ç³»": 1762, + "ne": 1763, + "注æĦı": 1764, + "Ġplease": 1765, + "Ġeach": 1766, + "çļĦæĥ": 1767, + "导èĩ´": 1768, + "é¢ij": 1769, + "ç¥ŀ": 1770, + "å¤ļ个": 1771, + "Ġsp": 1772, + "便": 1773, + "èŀį": 1774, + "Ġexp": 1775, + "è¾ĵåħ¥": 1776, + "åŁİ": 1777, + "è¿ŀ": 1778, + "æıIJåįĩ": 1779, + "ten": 1780, + "åİĭ": 1781, + "eth": 1782, + "åħ³éĶ®": 1783, + "éĥ¨åĪĨ": 1784, + "çŃĸçķ¥": 1785, + "Ġref": 1786, + "cul": 1787, + "å±Ĥ": 1788, + "æ¢": 1789, + "Ġsentence": 1790, + "çĮ": 1791, + "许": 1792, + "éĩĩ": 1793, + "骤": 1794, + "ning": 1795, + "ä½ĵéªĮ": 1796, + "è¿ľ": 1797, + "ify": 1798, + "ertainly": 1799, + "表达": 1800, + "æĽ´å¤ļ": 1801, + "lic": 1802, + "ä¼°": 1803, + "å·²": 1804, + "åĪĽæĸ°": 1805, + "Ġche": 1806, + "ating": 1807, + "éĶĢ": 1808, + "èĩªåĬ¨": 1809, + "èīº": 1810, + "èı": 1811, + "\",": 1812, + "串": 1813, + "ç¢": 1814, + "ä¿®": 1815, + "æĤ": 1816, + "Ġ|": 1817, + "Ġwant": 1818, + "Ġcurrent": 1819, + "Ġexample": 1820, + "ç¨ĭåºı": 1821, + "欢": 1822, + "Ġlar": 1823, + "nder": 1824, + "æĺ¯ä¸Ģç§į": 1825, + "çĽij": 1826, + "份": 1827, + "Ġwhere": 1828, + "é£İéĻ©": 1829, + "Ġprovid": 1830, + "ath": 1831, + "å¼Ĥ": 1832, + "å¯Į": 1833, + "çļĦæĬ": 1834, + "çĥŃ": 1835, + "æĢ§èĥ½": 1836, + "red": 1837, + "çĭ¬": 1838, + "åĩĨç¡®": 1839, + "æ¯ı个": 1840, + "äºĮ": 1841, + "æ°ij": 1842, + "ss": 1843, + "Ġquestions": 1844, + "æij": 1845, + "Ġdif": 1846, + "Ġbo": 1847, + "Ġsuch": 1848, + "æµ·": 1849, + "éĻį": 1850, + "Ġtext": 1851, + "åIJĪä½ľ": 1852, + "Ġloo": 1853, + "Ġtw": 1854, + "失": 1855, + "客æĪ·": 1856, + "è®Ńç»ĥ": 1857, + "éŨ": 1858, + "ijæĪĺ": 1859, + "ices": 1860, + "Ġ9": 1861, + "ä¸įåIJĮçļĦ": 1862, + "åĮħåIJ«": 1863, + "ject": 1864, + "æĴ": 1865, + "åĬ¿": 1866, + "å°Ŀ": 1867, + "ä»»ä½ķ": 1868, + "Ġmodel": 1869, + "ents": 1870, + "æİ¢": 1871, + "Ġchar": 1872, + "é¦ĸåħĪ": 1873, + "åİĨåı²": 1874, + "ä¸Ķ": 1875, + "人类": 1876, + "ĠHere": 1877, + "æĪIJæľ¬": 1878, + "å¾Ģ": 1879, + "date": 1880, + "ds": 1881, + "æIJ": 1882, + "Ġprint": 1883, + "èĬ±": 1884, + "ual": 1885, + "è´Ń": 1886, + "å¾®": 1887, + "ĠY": 1888, + "Ġtas": 1889, + "Ġtrans": 1890, + "ĠAI": 1891, + "è¿Ļæł·": 1892, + "å®ļæľŁ": 1893, + "æ¯Ķå¦Ĥ": 1894, + "olog": 1895, + "æĸĩæľ¬": 1896, + "设置": 1897, + "å·´å·´": 1898, + "éĺ¿éĩĮå·´å·´": 1899, + "au": 1900, + "Ġfollowing": 1901, + "è¾¹": 1902, + "Ġlanguage": 1903, + "Ġhere": 1904, + "Ġele": 1905, + "æııè¿°": 1906, + "les": 1907, + "éļ¾": 1908, + "èģĮ": 1909, + "ava": 1910, + "软件": 1911, + "о": 1912, + "约": 1913, + "Certainly": 1914, + "Ġcap": 1915, + "è¡Į为": 1916, + "Ġrange": 1917, + "¿Ģ": 1918, + "ative": 1919, + "ues": 1920, + ").": 1921, + "Ġtech": 1922, + "æ³Ľ": 1923, + "Ġfeel": 1924, + "ĊĠ": 1925, + "ĠSt": 1926, + "Can": 1927, + "000": 1928, + "bs": 1929, + "ful": 1930, + "It": 1931, + "å°½": 1932, + "åŃĺåĤ¨": 1933, + "æ²»": 1934, + "åIJĹ": 1935, + "æĬ¥": 1936, + "建ç«ĭ": 1937, + "åıĤä¸İ": 1938, + "å¿«éĢŁ": 1939, + "åĩ»": 1940, + "çª": 1941, + "è¯Ħä¼°": 1942, + "Ġunder": 1943, + "å°Ŀè¯ķ": 1944, + "ors": 1945, + "Ġtra": 1946, + "Ġ/": 1947, + "çļĦæĥħ": 1948, + "éļıçĿĢ": 1949, + "ä¸ĸçķĮ": 1950, + "Ġrec": 1951, + "æĮī": 1952, + "Ġtime": 1953, + "头": 1954, + "Ġstring": 1955, + "åħ³äºİ": 1956, + "åħ·ä½ĵçļĦ": 1957, + "è¾ĵåĩº": 1958, + "åŁºæľ¬": 1959, + "åħ·æľī": 1960, + "åĪĿ": 1961, + "çħ§": 1962, + "åĬ±": 1963, + "ä¸Ģç§į": 1964, + "åŃĹ符串": 1965, + "cript": 1966, + "èĮĥ": 1967, + "ä½łå¥½": 1968, + "Ġsim": 1969, + "以ä¸ĭæĺ¯ä¸ĢäºĽ": 1970, + "æŃ¥éª¤": 1971, + "æ¤": 1972, + "Ġ<": 1973, + "Ġvalue": 1974, + "Ġthere": 1975, + "ery": 1976, + "款": 1977, + "æ¿Ģ": 1978, + "eng": 1979, + "æĭŁ": 1980, + "Ġdis": 1981, + "ray": 1982, + "Ġcontext": 1983, + "åıĭ": 1984, + "å¾ģ": 1985, + "æĹħ": 1986, + "æµĭè¯ķ": 1987, + "Ġdiffere": 1988, + "ll": 1989, + "åħ´è¶£": 1990, + "ç§ijåѦ": 1991, + "åħ¨çIJĥ": 1992, + "Ġinter": 1993, + "èĥĮ": 1994, + "æĬĢæľ¯çļĦ": 1995, + "å®ĮæĪIJ": 1996, + "æĸ¹æ¡Ī": 1997, + "ital": 1998, + "ä¸įæĸŃ": 1999, + "ark": 2000, + "Ġph": 2001, + "çĽĬ": 2002, + "led": 2003, + "Ġi": 2004, + "æļ": 2005, + "ç¿": 2006, + "å·®": 2007, + "éļIJ": 2008, + "ber": 2009, + "ä¹ĭéĹ´çļĦ": 2010, + "ĠQwen": 2011, + "ays": 2012, + "ĠK": 2013, + "å¿ħ": 2014, + "éĤ£ä¹Ī": 2015, + "åij¨": 2016, + "å¹¿æ³Ľ": 2017, + "roup": 2018, + "erson": 2019, + "ics": 2020, + "çŁ¥è¯Ĩ": 2021, + "ç§ijæĬĢ": 2022, + "ese": 2023, + "æıIJä¾ĽäºĨ": 2024, + "å¸Ī": 2025, + "times": 2026, + "è´Ł": 2027, + "åħ»": 2028, + "Ġnum": 2029, + "ict": 2030, + "è¡Įä¸ļ": 2031, + "Ġtechn": 2032, + "éĶĻ误": 2033, + "çļĦæķ°æį®": 2034, + "è¿Ķ": 2035, + "èī¯": 2036, + "',": 2037, + "Ġcheck": 2038, + "),": 2039, + "ails": 2040, + "æĿ¡ä»¶": 2041, + "ä»·å̼": 2042, + "çα": 2043, + "è¿ij": 2044, + "Ġfree": 2045, + "gram": 2046, + "åħĭ": 2047, + "ç±³": 2048, + "Ġhis": 2049, + "åŃĺåľ¨": 2050, + "hen": 2051, + "ç®Ģåįķ": 2052, + "访": 2053, + "声": 2054, + "ular": 2055, + "gest": 2056, + "ĠFor": 2057, + "åı¤": 2058, + "ç§ģ": 2059, + "åįı": 2060, + "åŁºäºİ": 2061, + "æĽ´å¥½": 2062, + "Ġadd": 2063, + "As": 2064, + "è´£": 2065, + "æķ°ç»Ħ": 2066, + "Ġrel": 2067, + "å®ļä¹ī": 2068, + "çīĮ": 2069, + "她": 2070, + "è¯ĨåĪ«": 2071, + "人工": 2072, + "åŁºç¡": 2073, + "åŁºç¡Ģ": 2074, + "表示": 2075, + "çĶ»": 2076, + "离": 2077, + "Ġcomput": 2078, + "row": 2079, + "åºĶ该": 2080, + "ä»İèĢĮ": 2081, + "è¶Ĭ": 2082, + "è¿ĶåĽŀ": 2083, + "èijĹ": 2084, + "æĿIJæĸĻ": 2085, + "æŀĹ": 2086, + "Ġresult": 2087, + "æĺ¯åľ¨": 2088, + "ç¼ĸç¨ĭ": 2089, + "(\"": 2090, + "andom": 2091, + "def": 2092, + "è§£éĩĬ": 2093, + "åģĩ": 2094, + "Ġì": 2095, + "é¼": 2096, + "ï¼īï¼Į": 2097, + "éģĩ": 2098, + "ient": 2099, + "cial": 2100, + "ens": 2101, + "Ġtwo": 2102, + "寻": 2103, + "Ġsome": 2104, + "Ġthem": 2105, + "QL": 2106, + "ern": 2107, + "ä¸ĬçļĦ": 2108, + "Ġwho": 2109, + "Ġthey": 2110, + "ä½Ĩæĺ¯": 2111, + "å¢ŀ强": 2112, + "åı¯èĥ½éľĢè¦ģ": 2113, + "ä¼Ĺ": 2114, + "velop": 2115, + "åŁİå¸Ĥ": 2116, + "æĤ¨çļĦ": 2117, + "е": 2118, + "der": 2119, + "åĭ": 2120, + "åħ±åIJĮ": 2121, + "Ġtoday": 2122, + "å¡": 2123, + "Ġcharact": 2124, + "fore": 2125, + "åľºæĻ¯": 2126, + "åĽłç´ł": 2127, + "Ġseems": 2128, + "ble": 2129, + "ç§»": 2130, + "羣": 2131, + "ather": 2132, + "rough": 2133, + "丰": 2134, + "numb": 2135, + "))": 2136, + "ater": 2137, + "cess": 2138, + "Ġset": 2139, + "çģµ": 2140, + "Ġover": 2141, + "ize": 2142, + "åŁ¹": 2143, + "è¦ģæ±Ĥ": 2144, + "åĿĩ": 2145, + "Ġdetails": 2146, + "æĬķèµĦ": 2147, + "èħ": 2148, + "ç»ĩ": 2149, + "ĠIn": 2150, + "ility": 2151, + "èĢģ": 2152, + "ween": 2153, + "å¤ļç§į": 2154, + "Ġequation": 2155, + "ible": 2156, + "rit": 2157, + "åı¯ä»¥éĢļè¿ĩ": 2158, + "Ġpop": 2159, + "Ġincluding": 2160, + "æĽ´å¥½åľ°": 2161, + "èīºæľ¯": 2162, + "its": 2163, + "Ġknown": 2164, + "Ġpre": 2165, + "ood": 2166, + "ç½ijç«Ļ": 2167, + "Ġprogram": 2168, + "çŃĶ": 2169, + "ities": 2170, + "转æį¢": 2171, + "Ġbetween": 2172, + "Ġtasks": 2173, + "éĺ¿éĩĮäºij": 2174, + "è¶ħ": 2175, + "ĠChina": 2176, + "示ä¾ĭ": 2177, + "çϽ": 2178, + "太": 2179, + "ï¼īãĢĤ": 2180, + "ç¡®å®ļ": 2181, + "Ġ19": 2182, + "产çĶŁ": 2183, + "æŃ¢": 2184, + "Ġsign": 2185, + "ŁéĢļ": 2186, + "Ġyear": 2187, + "Ġpe": 2188, + "访éĹ®": 2189, + "ook": 2190, + "æī§": 2191, + "Ġdevelop": 2192, + "ï¼ī**ï¼ļ": 2193, + "Ġthan": 2194, + "duct": 2195, + "èĭ±": 2196, + "Ġthese": 2197, + "Ġperson": 2198, + "循": 2199, + "äºī": 2200, + "Ġcalcul": 2201, + "é¢Ħæµĭ": 2202, + "rib": 2203, + "æĮijæĪĺ": 2204, + "åIJ¬": 2205, + "Ġboth": 2206, + "Ġdon": 2207, + "12": 2208, + "tal": 2209, + "åıijçݰ": 2210, + "ys": 2211, + "**:": 2212, + "åĮºåĿĹ": 2213, + "çļĦå½±åĵį": 2214, + "å¨": 2215, + "Ġ12": 2216, + "çīĪ": 2217, + "stand": 2218, + "ç»Ī": 2219, + "åĸľ": 2220, + "list": 2221, + "ä¹°": 2222, + "åĨį": 2223, + "This": 2224, + "人工æĻºèĥ½": 2225, + "åĮ»çĸĹ": 2226, + "ä»ĺ": 2227, + "å±ŀ": 2228, + "æ¼Ķ": 2229, + "çļĦ人": 2230, + "çļĦæł": 2231, + "计åĪĴ": 2232, + "pon": 2233, + "è¿ĩç¨ĭä¸Ń": 2234, + "丰å¯Į": 2235, + "模å¼ı": 2236, + "åIJĦç§į": 2237, + "Ġwhen": 2238, + "积æŀģ": 2239, + "åĩĨå¤ĩ": 2240, + "ä¸Ĭè¿°": 2241, + "è¿IJè¡Į": 2242, + "æĪIJ为": 2243, + "è¯ī": 2244, + "è§ī": 2245, + "Ġtotal": 2246, + "èįIJ": 2247, + "æ¦Ĥ": 2248, + "é¸": 2249, + "Ġcons": 2250, + "éĺ³": 2251, + "ä½ľç͍": 2252, + "åŃ©": 2253, + "ä¸įæĺ¯": 2254, + "é«ĺæķĪ": 2255, + "Ġtyp": 2256, + "ower": 2257, + "æ·»": 2258, + "讨": 2259, + "а": 2260, + "稳": 2261, + "åĨ³çŃĸ": 2262, + "to": 2263, + "éĿĻ": 2264, + "Ġra": 2265, + "åı¯ä»¥ä½¿ç͍": 2266, + "Ġdiv": 2267, + "带æĿ¥": 2268, + "è¾ij": 2269, + "åºŃ": 2270, + "è®°å½ķ": 2271, + "stem": 2272, + "Ġgre": 2273, + "çļĦæī": 2274, + "è¯Ĺ": 2275, + "Ġlast": 2276, + "Ġ100": 2277, + "åѦçĶŁ": 2278, + "端": 2279, + "Ġinteg": 2280, + "Ġgiven": 2281, + "Ġsub": 2282, + "ĠChinese": 2283, + "è¥": 2284, + "Ġadv": 2285, + "社交": 2286, + "令": 2287, + "Ġcould": 2288, + "Who": 2289, + "è¿IJåĬ¨": 2290, + "èıľ": 2291, + "atest": 2292, + "åıĤæķ°": 2293, + "pro": 2294, + "Ġvers": 2295, + "å®Ŀ": 2296, + "çļĦéĩįè¦ģ": 2297, + "èϽ": 2298, + "ĠV": 2299, + "çĶŁçī©": 2300, + "Ġdifferent": 2301, + "å±±": 2302, + "ä½įç½®": 2303, + "西": 2304, + "ise": 2305, + "大çļĦ": 2306, + "é¦Ī": 2307, + "Ġgenerate": 2308, + "Ġthrough": 2309, + "Ġdoes": 2310, + "è´¢": 2311, + "ªæĸ½": 2312, + "è½½": 2313, + "19": 2314, + "umn": 2315, + "15": 2316, + "éĺħ": 2317, + "Ġind": 2318, + "详": 2319, + "Ġcount": 2320, + "ÑĤ": 2321, + "Sure": 2322, + "åĩłä¸ª": 2323, + "åĵģçīĮ": 2324, + "æ³ķå¾ĭ": 2325, + "æī§è¡Į": 2326, + "åħ¸": 2327, + "èϽçĦ¶": 2328, + "çģ«": 2329, + "èĥĮæĻ¯": 2330, + "éŁ³ä¹IJ": 2331, + "ä¸ļåĬ¡": 2332, + "æĸ¯": 2333, + "So": 2334, + "åħ¶ä¸Ń": 2335, + "éĢŁåº¦": 2336, + "ä¼¼": 2337, + "æİ¨èįIJ": 2338, + "Ġmult": 2339, + "åĽ½éĻħ": 2340, + "çĬ¶æĢģ": 2341, + "åĪ¶ä½ľ": 2342, + "Ġsqu": 2343, + "Ġtechnolog": 2344, + "æŀ¶": 2345, + "åıįé¦Ī": 2346, + "Ġstart": 2347, + "绿": 2348, + "è¡¡": 2349, + "Ġget": 2350, + "è§Ĵèī²": 2351, + "åĽ½å®¶": 2352, + "get": 2353, + "xim": 2354, + "Ġdesign": 2355, + "co": 2356, + "åį°": 2357, + "If": 2358, + "满足": 2359, + "ä¸Ģä¸ĭ": 2360, + "å®¶åºŃ": 2361, + "ç»Ħç»ĩ": 2362, + "交æµģ": 2363, + "riend": 2364, + "çļĦæĦ": 2365, + "Ġmat": 2366, + "èİ·åıĸ": 2367, + "ĠCould": 2368, + "追": 2369, + "å¼ł": 2370, + "ob": 2371, + "ä¼łç»Ł": 2372, + "æłij": 2373, + "é¼ĵ": 2374, + "Ġunderstand": 2375, + "Ġcor": 2376, + "å¿ĥçIJĨ": 2377, + "æİªæĸ½": 2378, + "Ġgo": 2379, + "Ġhum": 2380, + "èį¯": 2381, + "交æĺĵ": 2382, + "round": 2383, + "Ġimport": 2384, + "çļĦä¸Ģ": 2385, + "èĻļ": 2386, + "稳å®ļ": 2387, + "ä»ĭ": 2388, + "è¿Ļä¸Ģ": 2389, + "åĩºçݰ": 2390, + "и": 2391, + "ational": 2392, + "nce": 2393, + "é¢Ŀ": 2394, + "cre": 2395, + "Ġno": 2396, + "Ġart": 2397, + "åĪĩ": 2398, + "åª": 2399, + "Ġel": 2400, + "常è§ģ": 2401, + "çļĦæĮ": 2402, + "éĩıåŃIJ": 2403, + "Ġke": 2404, + "åĽĽ": 2405, + "å²": 2406, + "å½Ĵ": 2407, + "社åĮº": 2408, + "Ġmain": 2409, + "è¿ŀæİ¥": 2410, + "åľ¨çº¿": 2411, + "饮": 2412, + "å½ĵçĦ¶": 2413, + "åĶ®": 2414, + "ç»´æĬ¤": 2415, + "çļĦå®īåħ¨": 2416, + "çŁŃ": 2417, + "è¯ij": 2418, + "Ġlatest": 2419, + "æĥħæĦŁ": 2420, + "ç«ŀ": 2421, + "ian": 2422, + "Ġthen": 2423, + "æ¶ī": 2424, + "æ¤į": 2425, + "éĩıçļĦ": 2426, + "Ġ2023": 2427, + "Ġrem": 2428, + "wor": 2429, + "å±Ģ": 2430, + "num": 2431, + "红": 2432, + "Ġbeen": 2433, + "ake": 2434, + "åħ³æ³¨": 2435, + "æĪIJåijĺ": 2436, + "ick": 2437, + "()`": 2438, + "详ç»Ĩ": 2439, + "ident": 2440, + "æłĩåĩĨ": 2441, + "Ġsignific": 2442, + "è¿ĻéĩĮ": 2443, + "sq": 2444, + "èĮĥåĽ´": 2445, + "ength": 2446, + "iness": 2447, + "æķĪæŀľ": 2448, + "å¹²": 2449, + "çİ©": 2450, + "Ġcomple": 2451, + "æ´ģ": 2452, + "æĬĢèĥ½": 2453, + "Ġoften": 2454, + "ages": 2455, + "çļĦæĶ": 2456, + "éļIJç§ģ": 2457, + "rest": 2458, + "Ġrefer": 2459, + "èĽ": 2460, + "æ³¢": 2461, + "éĥ½æĺ¯": 2462, + ");": 2463, + "åŃ©åŃIJ": 2464, + "ç´§": 2465, + "æħ": 2466, + "éĢı": 2467, + "å°Ķ": 2468, + "åĸĦ": 2469, + "hes": 2470, + "æĿ¾": 2471, + "ä¾Ŀ": 2472, + "åĢĻ": 2473, + "Ġservices": 2474, + "ç͵åŃIJ": 2475, + "æŃ£ç¡®": 2476, + "å·²ç»ı": 2477, + "æīį": 2478, + "çļĦæİ": 2479, + "æľºåζ": 2480, + "çī¹åĪ«": 2481, + "åĪĽéĢł": 2482, + "使å¾Ĺ": 2483, + "åªĴ": 2484, + "11": 2485, + "Ġdep": 2486, + "Is": 2487, + "ä¸ĢæŃ¥": 2488, + "åĵªäºĽ": 2489, + "èģĶç³»": 2490, + "é¼ĵåĬ±": 2491, + "å¥ĩ": 2492, + "éĢĤåºĶ": 2493, + "ï¼Ľ": 2494, + "çļĦæĬĢ": 2495, + "个æĢ§": 2496, + "ç¿»": 2497, + "Ġjust": 2498, + "Ġbus": 2499, + "Ġreg": 2500, + "å½¢æĪIJ": 2501, + "ĠĠĠĠĠ": 2502, + "here": 2503, + "çªģ": 2504, + "éģĩåΰ": 2505, + "âĢĿãĢĤ": 2506, + "Write": 2507, + "çļĦéĹ®é¢ĺ": 2508, + "åĪ»": 2509, + "lect": 2510, + "ä¹ĭä¸Ģ": 2511, + "å¾Ħ": 2512, + "人们": 2513, + "Ġfact": 2514, + "æ·»åĬł": 2515, + "åijĺå·¥": 2516, + "交éĢļ": 2517, + "ose": 2518, + "é¾": 2519, + "ove": 2520, + "ax": 2521, + "Ġvarious": 2522, + "Ġbased": 2523, + "åĬłåħ¥": 2524, + "cept": 2525, + "æĪIJåĬŁ": 2526, + "ĠGroup": 2527, + "åĮºåĿĹéĵ¾": 2528, + "50": 2529, + "åģı": 2530, + "çļĦä¿¡æģ¯": 2531, + "Ġoper": 2532, + "name": 2533, + "åIJ¸å¼ķ": 2534, + "æ¹": 2535, + "åį¡": 2536, + "ract": 2537, + "æİ¢ç´¢": 2538, + "æĽ´æĸ°": 2539, + "Ġlear": 2540, + "空éĹ´": 2541, + "inal": 2542, + "æ¶īåıĬ": 2543, + "æ½": 2544, + "ural": 2545, + "ars": 2546, + "Ġmany": 2547, + "blem": 2548, + "Ġsk": 2549, + "è¿ĺèĥ½": 2550, + "ä¸ĭéĿ¢": 2551, + "æľīæīĢ": 2552, + "Ġcreate": 2553, + "æĺİç¡®": 2554, + "ince": 2555, + "æŀĦ建": 2556, + "ings": 2557, + "æĹłæ³ķ": 2558, + "éĢIJ": 2559, + "æĦıåij³": 2560, + "æĪ¿": 2561, + "å¾Ĺåΰ": 2562, + "人çļĦ": 2563, + "åªĴä½ĵ": 2564, + "âĢĿï¼Į": 2565, + "Ġsupp": 2566, + "è¿Ļæĺ¯": 2567, + "æĴŃ": 2568, + "old": 2569, + "åıĹåΰ": 2570, + "çı": 2571, + "çĦ¶èĢĮ": 2572, + "pect": 2573, + "Ġsquare": 2574, + "计ç®Ĺæľº": 2575, + "ude": 2576, + "æŃ¤å¤ĸ": 2577, + "è¿İ": 2578, + "ically": 2579, + "æİĴåºı": 2580, + "æľĢåIJİ": 2581, + "Ġprocess": 2582, + "ause": 2583, + "éĩijèŀį": 2584, + "害": 2585, + "Ġloc": 2586, + "åĪĨ享": 2587, + "æ²¹": 2588, + "Ġsm": 2589, + "çļĦæ°": 2590, + "课": 2591, + "ä»·æł¼": 2592, + "页": 2593, + "dition": 2594, + "åΤ": 2595, + "æŁIJäºĽ": 2596, + "Ġbl": 2597, + "æķ°æį®åºĵ": 2598, + ",\"": 2599, + "·": 2600, + "çī¹å¾ģ": 2601, + "éļľ": 2602, + "åģĩ设": 2603, + "åįĹ": 2604, + "Given": 2605, + "Ġexpress": 2606, + "åijĬè¯ī": 2607, + "Ġfil": 2608, + "åĽ¾åĥı": 2609, + "ci": 2610, + "Ġquestion": 2611, + "个æĢ§åĮĸ": 2612, + "ç¯": 2613, + "ced": 2614, + "ĠĊ": 2615, + "é¤": 2616, + "Ġpos": 2617, + "elf": 2618, + "å°¤": 2619, + "å¦ĤæŀľæĤ¨": 2620, + "æĪijåı¯ä»¥": 2621, + "å®ļçļĦ": 2622, + "èĦij": 2623, + "Ġlead": 2624, + "æĦıåij³çĿĢ": 2625, + "Ġproblem": 2626, + "å±ħ": 2627, + "ix": 2628, + "æŃĮ": 2629, + "Ġtable": 2630, + "è´¦": 2631, + "群": 2632, + "ited": 2633, + "åľ°åĮº": 2634, + "çĶŁäº§": 2635, + "çļĦåıijå±ķ": 2636, + "æĶ¶éĽĨ": 2637, + "èµĽ": 2638, + "åıĪ": 2639, + "审": 2640, + "ä¸Ģ次": 2641, + "Ġcommon": 2642, + "ople": 2643, + "å·§": 2644, + "ution": 2645, + "Ġappro": 2646, + "æĶ¿çŃĸ": 2647, + "é¤IJ": 2648, + "çݰ代": 2649, + "è§ĦåĪĴ": 2650, + "åŃ£": 2651, + "ä½ı": 2652, + "Ġtransl": 2653, + "Ġdef": 2654, + "Ġpar": 2655, + "å¾·": 2656, + "çݯä¿Ŀ": 2657, + "主é¢ĺ": 2658, + "Ġbusiness": 2659, + "表çݰ": 2660, + "ãģ®": 2661, + "èĤ¡": 2662, + "深度": 2663, + "Ġmake": 2664, + "æŁĵ": 2665, + "éĺħ读": 2666, + "ĠUn": 2667, + "éģµ": 2668, + "èIJ½": 2669, + "ĠEng": 2670, + "讲": 2671, + "å¾ħ": 2672, + "Ġever": 2673, + "Ġact": 2674, + "çļĦæ¸": 2675, + "è§£åĨ³æĸ¹æ¡Ī": 2676, + "Ġrandom": 2677, + "çļĦåºĶç͍": 2678, + "èģĶç½ij": 2679, + "iqu": 2680, + "æ¶Īè´¹": 2681, + "irect": 2682, + "æľºåύåŃ¦ä¹ł": 2683, + "100": 2684, + "lish": 2685, + "Ġinv": 2686, + "åIJĪéĢĤ": 2687, + "rt": 2688, + "mer": 2689, + "åĪĽå»ºä¸Ģ个": 2690, + "éĻįä½İ": 2691, + "é²": 2692, + "å®ĺ": 2693, + "ĠPlease": 2694, + "string": 2695, + "èİ·å¾Ĺ": 2696, + "æľºä¼ļ": 2697, + "èĤī": 2698, + "室": 2699, + "æĭ¥": 2700, + "许å¤ļ": 2701, + "..": 2702, + "æľĭ": 2703, + "æĿ¥è¯´": 2704, + "ec": 2705, + "Ġonly": 2706, + "ç»ĵåIJĪ": 2707, + "é¦Ļ": 2708, + "ä¸Ńå¿ĥ": 2709, + "åıijçĶŁ": 2710, + "$.": 2711, + "åIJĪçIJĨ": 2712, + "åİĭåĬĽ": 2713, + "åħħ满": 2714, + "çĨ": 2715, + "verage": 2716, + "ï¼īãĢģ": 2717, + "Ġproduct": 2718, + "val": 2719, + "ost": 2720, + "icial": 2721, + "å¦": 2722, + "çļĦæŃ": 2723, + "Ġcompan": 2724, + "è§Ĩé¢ij": 2725, + "ts": 2726, + "ula": 2727, + "mat": 2728, + "iel": 2729, + "Ġweather": 2730, + "æ¯į": 2731, + "å¤ľ": 2732, + "Ġfriend": 2733, + "Ġrequ": 2734, + "ä½ľåĵģ": 2735, + "度åĴĮ": 2736, + "æł¸": 2737, + "ily": 2738, + "numbers": 2739, + "imal": 2740, + "åıĺéĩı": 2741, + "Ġask": 2742, + "Ġwide": 2743, + "æİ¨åĬ¨": 2744, + "Ġinst": 2745, + "ĠWor": 2746, + "è´Ńä¹°": 2747, + "н": 2748, + "åIJ¯": 2749, + "åįİ": 2750, + "Ġcloud": 2751, + "æĹ¢": 2752, + "èĥ½æºIJ": 2753, + "ized": 2754, + "refore": 2755, + "Ġpopul": 2756, + "è¿ĽæŃ¥": 2757, + "uring": 2758, + "è¿ĺæĺ¯": 2759, + "Al": 2760, + "á»": 2761, + "eters": 2762, + "å°Ħ": 2763, + "up": 2764, + "åζå®ļ": 2765, + "åĦ": 2766, + "ething": 2767, + "ute": 2768, + "åľ¨è¿Ļ个": 2769, + "å¸ģ": 2770, + "èĽĭ": 2771, + "Ġrespon": 2772, + "Ġway": 2773, + "ç³ĸ": 2774, + "app": 2775, + "ç͵影": 2776, + "æľĭåıĭ": 2777, + "Ġeven": 2778, + "æĢ§çļĦ": 2779, + "æ²ŁéĢļ": 2780, + "çļĦæĥħåĨµ": 2781, + "Ġfound": 2782, + "éĢĴ": 2783, + "Ġdec": 2784, + "çļĦæ¯": 2785, + "hip": 2786, + "åĽŃ": 2787, + "Ġeff": 2788, + "è¡Ģ": 2789, + "ç«ŀäºī": 2790, + "own": 2791, + "'d": 2792, + "Ñģ": 2793, + "Ġsignificant": 2794, + "Ġlight": 2795, + "èĻļæĭŁ": 2796, + "Ġmean": 2797, + "Ġsomething": 2798, + "ash": 2799, + "åĪĨç±»": 2800, + "严": 2801, + "ç»§": 2802, + "Ġnam": 2803, + "欢è¿İ": 2804, + "æĹłè®º": 2805, + "æĿ¿": 2806, + "Ġreal": 2807, + "Ġarea": 2808, + "åķ¡": 2809, + "çͱäºİ": 2810, + "å¿Ĺ": 2811, + "ç¼ĵ": 2812, + "ife": 2813, + "Ġdig": 2814, + "å°Ĭ": 2815, + "é£ŀ": 2816, + "士": 2817, + "Ġ\\[": 2818, + "身ä½ĵ": 2819, + "éªĮè¯ģ": 2820, + "æĺł": 2821, + "éĥ½æľī": 2822, + "Ġstand": 2823, + "ER": 2824, + "éķ¿æľŁ": 2825, + "quence": 2826, + "举": 2827, + "ving": 2828, + "arr": 2829, + "Ġhapp": 2830, + "æĶ¯ä»ĺ": 2831, + "Ġaccur": 2832, + "Ġher": 2833, + "对象": 2834, + "æī©": 2835, + "æŁ¥è¯¢": 2836, + "æĥ³è¦ģ": 2837, + "loy": 2838, + "奶": 2839, + "Ġaccess": 2840, + "Ġsystem": 2841, + "Ġofficial": 2842, + "顺": 2843, + "Ġhigh": 2844, + "Ġcapital": 2845, + "票": 2846, + "åĴĸ": 2847, + "å½ĵåīį": 2848, + "éĢģ": 2849, + "è·µ": 2850, + "import": 2851, + "rect": 2852, + "Ġpartic": 2853, + "Ġdesigned": 2854, + "æķ´æķ°": 2855, + "综": 2856, + "ĠCan": 2857, + "竳": 2858, + "EC": 2859, + "'ll": 2860, + "å±ķ示": 2861, + "循çݯ": 2862, + "cy": 2863, + "log": 2864, + "Ġplay": 2865, + "Ġsolve": 2866, + "æ¡£": 2867, + "åĴĸåķ¡": 2868, + "æĸ¹åIJij": 2869, + "çļĦåľ°": 2870, + "å®ŀè·µ": 2871, + "转æį¢ä¸º": 2872, + "ild": 2873, + "çķĻ": 2874, + "å®Ī": 2875, + "Ġ15": 2876, + "èģĮä¸ļ": 2877, + "å°¤åħ¶": 2878, + "æĭī": 2879, + "åıĮ": 2880, + "äºĨä¸Ģ个": 2881, + "Ġclass": 2882, + "Ġformula": 2883, + "äºĶ": 2884, + "çļĦæĹ¶éĹ´": 2885, + "æĶ¹åıĺ": 2886, + "Ġstate": 2887, + "ç»į": 2888, + "çIJĨ论": 2889, + "Ġpoint": 2890, + "Ġent": 2891, + "St": 2892, + "Ġday": 2893, + "æįŁ": 2894, + "缺": 2895, + "ately": 2896, + "æī¿": 2897, + "èµ·æĿ¥": 2898, + "Ġtry": 2899, + "Ġsupport": 2900, + "Ġrele": 2901, + "ä¼ļè®®": 2902, + "è¶ĭ": 2903, + "ä¹Łæĺ¯": 2904, + "ources": 2905, + "ending": 2906, + "çļĦæµ": 2907, + "Ġversion": 2908, + "Ġline": 2909, + "py": 2910, + "é£İæł¼": 2911, + "ting": 2912, + "¨è¯¢": 2913, + "åĴ¨è¯¢": 2914, + "ĠHe": 2915, + "临": 2916, + "åł": 2917, + "çļĦæ³": 2918, + "ä»ĭç»į": 2919, + "éĩįè¦ģçļĦ": 2920, + "30": 2921, + "оÐ": 2922, + "大å°ı": 2923, + "Ġtop": 2924, + "è´§": 2925, + "马": 2926, + "Ġbest": 2927, + "ç»Ļåĩº": 2928, + "åĨ·": 2929, + "è¿Ľä¸ĢæŃ¥": 2930, + "è§ĦåĪĻ": 2931, + "ov": 2932, + "æ¦Ĥ念": 2933, + "æĪIJéķ¿": 2934, + "èĹ": 2935, + "Ġperform": 2936, + "Ġcreated": 2937, + "ç¼ĸåĨĻ": 2938, + "Ġide": 2939, + "çŁ³": 2940, + "ľç´¢": 2941, + "èĩªæĪij": 2942, + "Ġwork": 2943, + "light": 2944, + "cle": 2945, + "âĢĻ": 2946, + "Ġinterest": 2947, + "彩": 2948, + "arch": 2949, + "å®īè£ħ": 2950, + "tern": 2951, + "åĪĽä½ľ": 2952, + "25": 2953, + "Ġlong": 2954, + "çī¹çĤ¹": 2955, + "Ġrep": 2956, + "ience": 2957, + "Ġinput": 2958, + "éĺ¶": 2959, + "责任": 2960, + "Ġbook": 2961, + "Ġdirect": 2962, + "ĊĠĠĠĠĠĠĠĠĠĠĠ": 2963, + "å½¢å¼ı": 2964, + "åºĹ": 2965, + "ublic": 2966, + "ìĿ": 2967, + "ĠWorld": 2968, + "åĨ²": 2969, + "çĭ¬çī¹": 2970, + "æķ°æį®çļĦ": 2971, + "æīĢ以": 2972, + "Ġshould": 2973, + "寻æī¾": 2974, + "Ġpeople": 2975, + "ĠEnglish": 2976, + "æķ°åѦ": 2977, + "ruct": 2978, + "ox": 2979, + "åĨħéĥ¨": 2980, + "è¶ĭåĬ¿": 2981, + "Ġcomputing": 2982, + "çī¹å®ļçļĦ": 2983, + "çļ®": 2984, + "éĨ": 2985, + "åĨ³å®ļ": 2986, + "æľįåĬ¡åύ": 2987, + "åĽ°": 2988, + "ä¹ĺ": 2989, + "åIJįç§°": 2990, + "ator": 2991, + "硬": 2992, + "å¿ħè¦ģ": 2993, + "Ġlarge": 2994, + "Ġmin": 2995, + "Ġassistance": 2996, + "äºĭä»¶": 2997, + "çļĦæ²": 2998, + "åľ°çIJĥ": 2999, + "çĽĸ": 3000, + "åıĬæĹ¶": 3001, + "Ġwebs": 3002, + "gy": 3003, + "èī¯å¥½çļĦ": 3004, + "ming": 3005, + "é": 3006, + "ç¿»è¯ij": 3007, + "16": 3008, + "éĻ¢": 3009, + "ink": 3010, + "æķ°éĩı": 3011, + "Ġupdate": 3012, + "æĺ¯ä»Ģä¹Ī": 3013, + "åĦ¿": 3014, + "èĬĤçĤ¹": 3015, + "åĨľ": 3016, + "Ġquery": 3017, + "çī©çIJĨ": 3018, + "女": 3019, + "æķ£": 3020, + "æĿİ": 3021, + "Ġtechnology": 3022, + "Ġarray": 3023, + "åľŁ": 3024, + "Ġstr": 3025, + "Ġvalues": 3026, + "Script": 3027, + "ÑĢ": 3028, + "hed": 3029, + "å¯Ł": 3030, + "ä¸įä¼ļ": 3031, + "ows": 3032, + "çĽĺ": 3033, + "éĵ¶": 3034, + "åķĨåĵģ": 3035, + "Ġlargest": 3036, + "eb": 3037, + "é¢ľ": 3038, + "åı¶": 3039, + "str": 3040, + "ctions": 3041, + "æ²»çĸĹ": 3042, + "raph": 3043, + "Ġbu": 3044, + "åĸľæ¬¢": 3045, + "æ°´å¹³": 3046, + "æ½ľ": 3047, + "Ġword": 3048, + "触": 3049, + "çĸ¾": 3050, + "éĴŁ": 3051, + "Ġwhile": 3052, + "Ġexper": 3053, + "æľºæŀĦ": 3054, + "çļĦæĻ": 3055, + "åĽº": 3056, + "Ġcharacter": 3057, + "ides": 3058, + "Ġac": 3059, + "èģļ": 3060, + "Java": 3061, + "Ġstep": 3062, + "illion": 3063, + "认为": 3064, + "éĿ¢å¯¹": 3065, + "ert": 3066, + "Ġdist": 3067, + "ew": 3068, + "ric": 3069, + "ons": 3070, + "梦": 3071, + "æĤ£": 3072, + "å®Įåħ¨": 3073, + "èĮ¶": 3074, + "cd": 3075, + "åij½ä»¤": 3076, + "éħįç½®": 3077, + "fter": 3078, + "è·Ŀ": 3079, + "Ġpol": 3080, + "Ġlearning": 3081, + "æĺ¯æĮĩ": 3082, + "Ġcalculate": 3083, + "âĢĶ": 3084, + "课ç¨ĭ": 3085, + "Ġ}": 3086, + "顾": 3087, + "Ġcorrect": 3088, + "ä¸Ģèµ·": 3089, + "Ġla": 3090, + "ĠçļĦ": 3091, + "ä¿®æĶ¹": 3092, + "word": 3093, + "Ġread": 3094, + "14": 3095, + "äºĴåĬ¨": 3096, + "Ġcent": 3097, + "^{": 3098, + "ustom": 3099, + "arth": 3100, + "Ġwell": 3101, + "æĺ¥": 3102, + "ä¾ĭåŃIJ": 3103, + "åĮĹ": 3104, + "Ġelse": 3105, + "åijĬè¯īæĪij": 3106, + "éĩĩç͍": 3107, + "ا": 3108, + "对è¯Ŀ": 3109, + "åı¯ä»¥åľ¨": 3110, + "çļĦæĸ¹æ³ķ": 3111, + "åı¯ä»¥å¸®åĬ©": 3112, + "ough": 3113, + "çѾ": 3114, + "itive": 3115, + "æ¸IJ": 3116, + "é»ij": 3117, + "èĢħçļĦ": 3118, + "çĮ®": 3119, + "SS": 3120, + "åıįåºĶ": 3121, + "æĺ¾ç¤º": 3122, + "讨论": 3123, + "Ġsec": 3124, + "Ġlooking": 3125, + "çļĦå·¥ä½ľ": 3126, + "ĠAd": 3127, + "\\(": 3128, + "ah": 3129, + "åĬłå¯Ĩ": 3130, + "Ġhuman": 3131, + "æ¡Ĩ": 3132, + "éĤ®": 3133, + "æĪijå°Ĩ": 3134, + "ä½ĵçݰ": 3135, + "Ġeng": 3136, + "éĶĢåĶ®": 3137, + "line": 3138, + "\\).": 3139, + "çĶŁæĢģ": 3140, + "åIJĮæĹ¶ä¹Ł": 3141, + "éĴĪ": 3142, + "åºľ": 3143, + "äºĨä¸Ģ": 3144, + "åŁ¹è®Ń": 3145, + "æĸĩæ¡£": 3146, + "伤": 3147, + "éģį": 3148, + "\":": 3149, + "Ġsun": 3150, + "iss": 3151, + "æĭ¥æľī": 3152, + "åºĶ对": 3153, + "åı¯æĮģç»Ń": 3154, + "çļĦæľĢ": 3155, + "Ġposs": 3156, + "çļĦæĬĢæľ¯": 3157, + "çĶŁåij½": 3158, + "ik": 3159, + "åĬŀ": 3160, + "Ġrun": 3161, + "æµģç¨ĭ": 3162, + "Ġpopulation": 3163, + "ases": 3164, + "æĹ¥å¸¸": 3165, + "å¹¶ä¸į": 3166, + "Ġpersonal": 3167, + "Ġaccurate": 3168, + "ploy": 3169, + "Ġbre": 3170, + "Ġgu": 3171, + "éħĴ": 3172, + "丽": 3173, + "èĪª": 3174, + "Ġsimple": 3175, + "éļıæľº": 3176, + "æIJľç´¢": 3177, + "åı¦": 3178, + "åį³ä½¿": 3179, + "æĹ©": 3180, + "SQL": 3181, + "gle": 3182, + "åı¥åŃIJ": 3183, + "comm": 3184, + "éĩĩåıĸ": 3185, + "ethod": 3186, + "éķ¿åº¦": 3187, + "è¿ĻæľīåĬ©äºİ": 3188, + "PI": 3189, + "Ġchange": 3190, + "Ġshe": 3191, + "ãģĻ": 3192, + "ren": 3193, + "ç»§ç»Ń": 3194, + "æĦŁåΰ": 3195, + "æł¡": 3196, + "Ġ16": 3197, + "çł´": 3198, + "设å®ļ": 3199, + "wn": 3200, + "hether": 3201, + "Ġmess": 3202, + "Ġ30": 3203, + "è´¢åĬ¡": 3204, + "Ġ==": 3205, + "é¢ľèī²": 3206, + "æĹ¨": 3207, + "è¾¾åΰ": 3208, + "alth": 3209, + "çĸ¾çĹħ": 3210, + "ï¼Į`": 3211, + "vert": 3212, + "Ġë": 3213, + "åĬª": 3214, + "代表": 3215, + "itions": 3216, + "Ġtype": 3217, + "éĢıæĺİ": 3218, + "ome": 3219, + "ĠWhether": 3220, + "æĦ¿": 3221, + "æĢ¥": 3222, + "\")": 3223, + "æĥħåĨµä¸ĭ": 3224, + "ef": 3225, + "æ¸ħæĻ": 3226, + "ĠWhat": 3227, + "平衡": 3228, + "Ġmulti": 3229, + "lob": 3230, + "åĪĨå¸ĥ": 3231, + "é²ľ": 3232, + "Ġaverage": 3233, + "iron": 3234, + "Ġcolumn": 3235, + "æİ¥åıĹ": 3236, + "SE": 3237, + "Ġest": 3238, + "æĹħè¡Į": 3239, + "Ġdesc": 3240, + "Ġpass": 3241, + "éĻIJåζ": 3242, + "Ġz": 3243, + "æĺ¾èijĹ": 3244, + "æ·±åħ¥": 3245, + "å°Ĭéĩį": 3246, + "èĴ": 3247, + "åģļåĩº": 3248, + "gan": 3249, + "Ġhappy": 3250, + "åĬªåĬĽ": 3251, + "ç§»åĬ¨": 3252, + "Ġlength": 3253, + "ability": 3254, + "以ä¸ĭåĩłä¸ª": 3255, + "å¸ĮæľĽè¿ĻäºĽ": 3256, + "ument": 3257, + "ĊĠĠĠĠ": 3258, + "ç¨İ": 3259, + "ä½Ĩä¸į": 3260, + "éĢ»": 3261, + "ä½łåı¯ä»¥ä½¿ç͍": 3262, + "Ġ>": 3263, + "ined": 3264, + "绪": 3265, + "è°ĥç͍": 3266, + "ied": 3267, + "缩": 3268, + "大éĩı": 3269, + "Ġpoem": 3270, + "ures": 3271, + "ique": 3272, + "ven": 3273, + "追æ±Ĥ": 3274, + "akes": 3275, + "æĹ¨åľ¨": 3276, + "Ġpower": 3277, + "éĢ»è¾ij": 3278, + "resent": 3279, + "åı¯èĥ½çļĦ": 3280, + "è¿Ļåı¯èĥ½": 3281, + "Ġsequence": 3282, + "çļĦçĶŁæ´»": 3283, + "ĠZ": 3284, + "¢å¤į": 3285, + "Ġgood": 3286, + "ex": 3287, + "åºıåĪĹ": 3288, + "rans": 3289, + "ç³»åĪĹ": 3290, + "ä½³": 3291, + "äºļ": 3292, + "als": 3293, + "You": 3294, + "ä¾ĽåºĶ": 3295, + "åĬ¨çī©": 3296, + "Ġob": 3297, + "Ġhist": 3298, + "é»Ħ": 3299, + "Ġconvers": 3300, + "æĪij们åı¯ä»¥": 3301, + "é©¶": 3302, + "åī§": 3303, + "ug": 3304, + "符åIJĪ": 3305, + "Ġshort": 3306, + "Ġag": 3307, + "举": 3308, + "my": 3309, + "ware": 3310, + "Ġkey": 3311, + "å¤ļæł·": 3312, + "ç쵿´»": 3313, + "Ġwrite": 3314, + "Ġpur": 3315, + "22": 3316, + "æīĵåį°": 3317, + "ç¡®å®ŀ": 3318, + "Ġhand": 3319, + "çݩ家": 3320, + "éģĹ": 3321, + "à¹": 3322, + "çļĦæ·": 3323, + "ç§ĺ": 3324, + "els": 3325, + "Ġprim": 3326, + "Ġlife": 3327, + "çļĦç¼": 3328, + "çĽijæİ§": 3329, + "社交åªĴä½ĵ": 3330, + "Ġ25": 3331, + "åħ¨éĿ¢": 3332, + "èĵ": 3333, + "Ġgrow": 3334, + "å®ŀéªĮ": 3335, + "aut": 3336, + "æķı": 3337, + "Ġexpl": 3338, + "çĵ": 3339, + "åºķ": 3340, + "çĤ¹åĩ»": 3341, + "çݰå®ŀ": 3342, + "ç®ĢåįķçļĦ": 3343, + "ç»ıéªĮ": 3344, + "è·¨": 3345, + "èĹı": 3346, + "éĩįå¤į": 3347, + "æĶ¿åºľ": 3348, + "Ġsoft": 3349, + "æijĦ": 3350, + "éŃ": 3351, + "çľ¼": 3352, + "é£Łçī©": 3353, + "Ġwords": 3354, + "伦": 3355, + "ĠSQL": 3356, + "åIJİçļĦ": 3357, + "Ġyears": 3358, + "亮": 3359, + "æĥ¯": 3360, + "æ¤įçī©": 3361, + "ä¼ij": 3362, + "æ¸ħæĻ°": 3363, + "Ġaround": 3364, + "称为": 3365, + "ä¸ĩ": 3366, + "éļıæĹ¶": 3367, + "å¿Ĩ": 3368, + "åĬ¨æĢģ": 3369, + "'ve": 3370, + "ĊĊĠĠĠ": 3371, + "Ġapplic": 3372, + "以ä¸Ĭ": 3373, + "Ġwebsite": 3374, + "æīĭæľº": 3375, + "Yes": 3376, + "viron": 3377, + "Ġmethod": 3378, + "Ġcompany": 3379, + "RO": 3380, + "åİŁåĽł": 3381, + "ä¹Łåı¯ä»¥": 3382, + "sqrt": 3383, + "è§Ħ模": 3384, + "ps": 3385, + "Ġwrit": 3386, + "äºij计ç®Ĺ": 3387, + "Ġoutput": 3388, + "Ġdat": 3389, + "Ġgive": 3390, + "ets": 3391, + "Ġimpro": 3392, + "\\),": 3393, + "å¼ĢæĶ¾": 3394, + "æ³ķè§Ħ": 3395, + "æĻ®": 3396, + "æĮīçħ§": 3397, + "18": 3398, + "éĹ»": 3399, + "æģ¢å¤į": 3400, + "Ġtem": 3401, + "è°¢": 3402, + "æľĢç»Ī": 3403, + "Ġ//": 3404, + "Here": 3405, + "æĶ¹è¿Ľ": 3406, + "Ġinf": 3407, + "cdot": 3408, + "æĹ¥æľŁ": 3409, + "ĠJava": 3410, + "å®ĩ": 3411, + "For": 3412, + "Ġjo": 3413, + "æĦıè¯Ĩ": 3414, + "以确ä¿Ŀ": 3415, + "ien": 3416, + "æĽ´å¤ļçļĦ": 3417, + "æļĸ": 3418, + "ream": 3419, + "++": 3420, + "AR": 3421, + "21": 3422, + "éĻIJäºİ": 3423, + "æĬĢå·§": 3424, + "åĨ°": 3425, + "å¹³åĿĩ": 3426, + "çļĦè¿ĩç¨ĭ": 3427, + "ä¸įè¦ģ": 3428, + "Ġreferring": 3429, + "ç¦ı": 3430, + "æĻļ": 3431, + "å°ıæĺİ": 3432, + "太éĺ³": 3433, + "ä¸įåı¯": 3434, + "åĮ»çĶŁ": 3435, + "Ġsmall": 3436, + "æ¯Ĵ": 3437, + "ç©¿": 3438, + "Ġmeans": 3439, + "ML": 3440, + "ze": 3441, + "享åıĹ": 3442, + "çīĽ": 3443, + "çļĦæ¦Ĥ": 3444, + "ines": 3445, + "Ġ使ç͍": 3446, + "How": 3447, + "人åijĺ": 3448, + "åĿļ": 3449, + "ĠTo": 3450, + "èĦļ": 3451, + "Ġglob": 3452, + "æ£Ģæµĭ": 3453, + "èµĸ": 3454, + "ode": 3455, + "强è°ĥ": 3456, + "模åŀĭçļĦ": 3457, + "('": 3458, + "vie": 3459, + "ç£": 3460, + "Ġbr": 3461, + "Ġsumm": 3462, + "Ġchat": 3463, + "é±": 3464, + "ä¹łæĥ¯": 3465, + "ellig": 3466, + "亲": 3467, + "Ġparticular": 3468, + "çĹĩ": 3469, + "Ġins": 3470, + "æķ´ä¸ª": 3471, + "çļĦåŃ¦ä¹ł": 3472, + "çļĦæĦı": 3473, + "Ġmark": 3474, + "è¿Ļä¸įä»ħ": 3475, + "æĬ¥åijĬ": 3476, + "ploye": 3477, + "éħ¸": 3478, + "çļĦéľĢæ±Ĥ": 3479, + "etwor": 3480, + "驾": 3481, + "Ch": 3482, + "çļĦæı": 3483, + "Ġåľ¨": 3484, + "è¸": 3485, + "ety": 3486, + "绿èī²": 3487, + "Ġexpression": 3488, + "read": 3489, + "Ġcharacters": 3490, + "èµ°": 3491, + "Ġstory": 3492, + "åĵįåºĶ": 3493, + "è¡ĮåĬ¨": 3494, + ")^": 3495, + "ĠPro": 3496, + "Ġ18": 3497, + "Ġbetter": 3498, + "åįģ": 3499, + "Ġdevelopment": 3500, + "以ä¸ĭæĺ¯ä¸Ģ个": 3501, + "æĿŁ": 3502, + "èIJ¥éĶĢ": 3503, + "æľīæķĪåľ°": 3504, + "é±¼": 3505, + "äºĴèģĶç½ij": 3506, + "æĭħ": 3507, + "深度åŃ¦ä¹ł": 3508, + "Ġprovided": 3509, + "éĺ²æŃ¢": 3510, + "Ġ11": 3511, + "æĸĩ竳": 3512, + "çĬ¶åĨµ": 3513, + "å¢ŀéķ¿": 3514, + "Ġorder": 3515, + "ç»ĦæĪIJ": 3516, + "éĺµ": 3517, + "Ġmed": 3518, + "鼨": 3519, + "éĢī项": 3520, + "Ġenviron": 3521, + "oh": 3522, + "建设": 3523, + "Ġadvice": 3524, + "Ġend": 3525, + "íķ": 3526, + "Ġfam": 3527, + "Ġfin": 3528, + "Ġusers": 3529, + "ç»ĻæĪij": 3530, + "verse": 3531, + "Ġelements": 3532, + "ĠEx": 3533, + "----": 3534, + "éĿł": 3535, + "请æ±Ĥ": 3536, + "rase": 3537, + "æ±½": 3538, + "æĢ»ä¹ĭ": 3539, + "å®ŀæĹ¶": 3540, + "ives": 3541, + "åħģ": 3542, + "æıIJåĩº": 3543, + "çŃij": 3544, + "Ġconst": 3545, + "ius": 3546, + "å¯Ĩçłģ": 3547, + "æ´Ĺ": 3548, + "Ġconf": 3549, + "Ġshare": 3550, + "Therefore": 3551, + "24": 3552, + "森": 3553, + "commend": 3554, + "pi": 3555, + "ä¾Ŀèµĸ": 3556, + "çĩ": 3557, + "缸åIJĮ": 3558, + "pen": 3559, + "å®Ļ": 3560, + "çīĪæľ¬": 3561, + "Ġarr": 3562, + "åħ¬åħ±": 3563, + "è§Ī": 3564, + "åĬĽéĩı": 3565, + "Ġident": 3566, + "çĨŁ": 3567, + "æ¶²": 3568, + "åij¼": 3569, + "æł¼å¼ı": 3570, + "inu": 3571, + "çļĦåħ·ä½ĵ": 3572, + "åIJĪéĢĤçļĦ": 3573, + "çİĭ": 3574, + "大æķ°æį®": 3575, + "Ġvis": 3576, + "åľĨ": 3577, + "æĢĿèĢĥ": 3578, + "æĽ²": 3579, + "ç§ĭ": 3580, + "Ġtypically": 3581, + "åħģ许": 3582, + "çĮ«": 3583, + "Ġcomplex": 3584, + "æħ§": 3585, + "Ġmaking": 3586, + "ional": 3587, + "ward": 3588, + "Ġsecon": 3589, + "Ġrecommend": 3590, + "å®ĩå®Ļ": 3591, + "//": 3592, + "æŃ£åľ¨": 3593, + "gin": 3594, + "åĪĨéħį": 3595, + "è·Ŀ离": 3596, + "ä¸įèĥ½": 3597, + "Ġcommun": 3598, + "åĿĢ": 3599, + "å¾Ģå¾Ģ": 3600, + ":**": 3601, + "ä¼´": 3602, + "ries": 3603, + "io": 3604, + "éĽĨåĽ¢": 3605, + "ä¸Ńæĸĩ": 3606, + "ember": 3607, + "Ġorig": 3608, + "å¼Ĥ常": 3609, + "ways": 3610, + "åŁ¹åħ»": 3611, + "Ġinclude": 3612, + "èľ": 3613, + "Ġsug": 3614, + "åĭĩ": 3615, + "Ġtrying": 3616, + "Ġmessage": 3617, + "ror": 3618, + "ä½Ļ": 3619, + "Ġsym": 3620, + "æ··": 3621, + "åģľ": 3622, + "çī©è´¨": 3623, + "Ġmach": 3624, + "ergy": 3625, + "ç²ī": 3626, + "Ġdid": 3627, + "çļĦæķħäºĭ": 3628, + "Ġevery": 3629, + "åĽ¢éĺŁæĪIJåijĺ": 3630, + "ãģĹ": 3631, + "å±ķçݰ": 3632, + "éĢIJæ¸IJ": 3633, + "Ġsing": 3634, + "ious": 3635, + "çļĦç¬": 3636, + "Ġallow": 3637, + "Ġtell": 3638, + "ĠUnited": 3639, + "礼": 3640, + "Ġsame": 3641, + "ç®±": 3642, + "ipp": 3643, + "建çŃij": 3644, + "èĢIJ": 3645, + "çļĦåħ³éĶ®": 3646, + "æĦıä¹ī": 3647, + "çľĭåΰ": 3648, + "èĩªçĦ¶è¯Ńè¨Ģ": 3649, + "Ġcustom": 3650, + "Ġprime": 3651, + "atform": 3652, + "ential": 3653, + "å¦Ĥæŀľä½łæľī": 3654, + "Ġservice": 3655, + "urity": 3656, + "ilities": 3657, + "Ġsee": 3658, + "èŃ": 3659, + "天æ°Ķ": 3660, + "éĥ½èĥ½": 3661, + "Ġbec": 3662, + "é¥®é£Ł": 3663, + "æ¶Īè´¹èĢħ": 3664, + "erv": 3665, + "Ġfeature": 3666, + "ä½łèĥ½": 3667, + "Ġupd": 3668, + "çļĦ主è¦ģ": 3669, + "å®ŀæĸ½": 3670, + "ä»į": 3671, + "Ġmay": 3672, + "çŁ¥éģĵ": 3673, + "è§£åĨ³éĹ®é¢ĺ": 3674, + "ale": 3675, + "Ġterms": 3676, + "å®ĺæĸ¹": 3677, + "éĢĶ": 3678, + "çľł": 3679, + "æĹı": 3680, + "éľ²": 3681, + "å¥ĸ": 3682, + "Ġcontain": 3683, + "ç͍çļĦ": 3684, + "åĪĨéĴŁ": 3685, + "ä¸Ģå®ļ": 3686, + "Ġfl": 3687, + "温度": 3688, + "ai": 3689, + "Ġright": 3690, + "¹ģ": 3691, + "æĶ»": 3692, + "ãĤĴ": 3693, + "åĪĽæĦı": 3694, + "è¿Ļå°Ĩ": 3695, + "åı¯ä»¥æıIJä¾Ľ": 3696, + "æľºåĻ¨äºº": 3697, + "Ġwid": 3698, + "å¦Ĥä¸ĭ": 3699, + "Ġstud": 3700, + "ĠSh": 3701, + "åΤæĸŃ": 3702, + "æīįèĥ½": 3703, + "鼶": 3704, + "驾驶": 3705, + "Ġcat": 3706, + "ç¥ŀç»ı": 3707, + "ä»Ĭ": 3708, + "air": 3709, + "çļĦæ·±": 3710, + "åķĨä¸ļ": 3711, + "\".": 3712, + "$,": 3713, + "æĪijä¼ļ": 3714, + "ç±į": 3715, + "Ġsky": 3716, + "以便": 3717, + "è¡¥": 3718, + "èª": 3719, + "çIJĨè§£åĴĮ": 3720, + "çĻ»": 3721, + "å¤įæĿĤçļĦ": 3722, + "æī©å±ķ": 3723, + "Ġav": 3724, + "æĪijçļĦ": 3725, + "å½ĵçĦ¶åı¯ä»¥": 3726, + "å·®å¼Ĥ": 3727, + "Ġstor": 3728, + "æ±ĩ": 3729, + "áº": 3730, + "è¾ħ": 3731, + "åĽ°éļ¾": 3732, + "Ġfile": 3733, + "è¶³å¤Ł": 3734, + "Ġcle": 3735, + "ivid": 3736, + "å°±æĺ¯": 3737, + "yn": 3738, + "ç»ĥä¹ł": 3739, + "åĨ³äºİ": 3740, + "åıĸåĨ³äºİ": 3741, + "æĦŁåħ´è¶£": 3742, + "åįĬ": 3743, + "æĽ¿": 3744, + "ä¿¡åı·": 3745, + "ç»ıåİĨ": 3746, + "isp": 3747, + "èī¾": 3748, + "13": 3749, + "åĮĸçļĦ": 3750, + "Ġcar": 3751, + "Of": 3752, + "æ°§": 3753, + "å·¥ç¨ĭ": 3754, + "ä¸įè¿ĩ": 3755, + "Ġcost": 3756, + "count": 3757, + "æħ¢": 3758, + "Ġcour": 3759, + "åĮºåŁŁ": 3760, + "çĽ¸å¯¹": 3761, + "Ġbusinesses": 3762, + "éĤ®ä»¶": 3763, + "AT": 3764, + "°": 3765, + "Ġroot": 3766, + "rix": 3767, + "Ġuser": 3768, + "é¾Ħ": 3769, + "atic": 3770, + "Ġ50": 3771, + "ç³»ç»ŁçļĦ": 3772, + "æŁ¥çľĭ": 3773, + "ä¸ī个": 3774, + "Ġanal": 3775, + "说æĺİ": 3776, + "åĵĪ": 3777, + "èĢĹ": 3778, + "çļĦ模": 3779, + "ithm": 3780, + "99": 3781, + "Ġens": 3782, + "Ġatt": 3783, + "Ġelement": 3784, + "Ġthree": 3785, + "çļĦç¾": 3786, + "Ġcult": 3787, + "æŁIJ个": 3788, + "Ġproviding": 3789, + "æ¯Ķè¾ĥ": 3790, + "Ġintern": 3791, + "ä¼łè¾ĵ": 3792, + "常è§ģçļĦ": 3793, + "ively": 3794, + "Ġ\\(\\": 3795, + "è§Ĩè§ī": 3796, + "utions": 3797, + "æĢģ度": 3798, + "Ġproject": 3799, + "ull": 3800, + "èĩªçͱ": 3801, + "纸": 3802, + "éĺ¶æ®µ": 3803, + "åıįæĺł": 3804, + "èįī": 3805, + "Ġmu": 3806, + "sh": 3807, + "纪": 3808, + "Th": 3809, + "Ġsuggest": 3810, + "itle": 3811, + "ç½²": 3812, + "éĢļè¿ĩä¸Ĭè¿°": 3813, + "åħ±äº«": 3814, + "æĿ¥æºIJ": 3815, + "ä¼ĺåĬ¿": 3816, + "åİŁçIJĨ": 3817, + "åŃ¦ä¹łåĴĮ": 3818, + "å¤ı": 3819, + "ãģ¾": 3820, + "elligence": 3821, + "çĭ¬çī¹çļĦ": 3822, + "ëĭ": 3823, + "å̾": 3824, + "ivers": 3825, + "åĨħåŃĺ": 3826, + "容æĺĵ": 3827, + "Ġ14": 3828, + "Ġenergy": 3829, + "å¨ģ": 3830, + "Ġprom": 3831, + "Ġidea": 3832, + "å®īåħ¨æĢ§": 3833, + "ructure": 3834, + "Ġsides": 3835, + "çģ¯": 3836, + "],": 3837, + "result": 3838, + "Ġmil": 3839, + "æĮĩçļĦæĺ¯": 3840, + "åĮħæĭ¬ä½Ĩä¸į": 3841, + "åĮħæĭ¬ä½Ĩä¸įéĻIJäºİ": 3842, + "ves": 3843, + "å®ŀä¾ĭ": 3844, + "Ġtrue": 3845, + "ä»ĸçļĦ": 3846, + "ä½ĵçļĦ": 3847, + "Ġfiel": 3848, + "ense": 3849, + "ote": 3850, + "`ï¼Į": 3851, + "èĨ": 3852, + "Ġwere": 3853, + "åĽŀçŃĶ": 3854, + "ç¬Ķ": 3855, + "ont": 3856, + "ĠTh": 3857, + "ç»ĦåIJĪ": 3858, + "ht": 3859, + "饰": 3860, + "other": 3861, + "ÙĦ": 3862, + "æĸĩåѦ": 3863, + "ximately": 3864, + "è´¡": 3865, + "æ¯ı个人": 3866, + "Ġimportant": 3867, + "Ġmillion": 3868, + "ç»ĺ": 3869, + "è·¯å¾Ħ": 3870, + "oogle": 3871, + "Ġprogramming": 3872, + "60": 3873, + "sum": 3874, + "ä¸Ģ段": 3875, + "æľīä¸Ģ个": 3876, + "åħ¬å¼ı": 3877, + "æĹłè®ºæĺ¯": 3878, + "订": 3879, + "æĬĹ": 3880, + "è§Ĵ度": 3881, + "Ġenvironment": 3882, + "ID": 3883, + "Ģæľī": 3884, + "åĨĮ": 3885, + "Ġremain": 3886, + "Ġplatform": 3887, + "son": 3888, + "æľĢ大": 3889, + "Ġopt": 3890, + "çļĦåŁºæľ¬": 3891, + "èĩ³åħ³": 3892, + "èį¯çī©": 3893, + "arm": 3894, + "æıĴ": 3895, + "ibr": 3896, + "è´¡çĮ®": 3897, + "Ġafter": 3898, + "ohn": 3899, + "æ±ł": 3900, + "Ġback": 3901, + "åįļ": 3902, + "Ġseries": 3903, + "time": 3904, + "ĠSp": 3905, + "ering": 3906, + "Ġnetwor": 3907, + "uss": 3908, + "Ġdescrib": 3909, + "é«ĺçļĦ": 3910, + "ĠYou": 3911, + "alse": 3912, + "ä»ĸ们çļĦ": 3913, + "åĮ¹": 3914, + "ty": 3915, + "æ¥": 3916, + "è¯ļ": 3917, + "æĿij": 3918, + "æľ¨": 3919, + "çļĦæ°´": 3920, + "æķĪçİĩåĴĮ": 3921, + "å»¶": 3922, + "aves": 3923, + "perature": 3924, + "æĪijæĥ³": 3925, + "ything": 3926, + "ä¹İ": 3927, + "æĶ¹åĸĦ": 3928, + "éĵ¶è¡Į": 3929, + "ï¼ļâĢľ": 3930, + "磩": 3931, + "åıĺå¾Ĺ": 3932, + "宽": 3933, + "åı¯ä»¥å¸®åĬ©ä½ł": 3934, + "éģįåİĨ": 3935, + "èĢĮä¸įæĺ¯": 3936, + "Ġsn": 3937, + "ank": 3938, + "æ´ŀ": 3939, + "è¿Ļæĺ¯ä¸Ģ个": 3940, + "¡çľł": 3941, + "Ġè¾ĵåĩº": 3942, + "____": 3943, + "京": 3944, + "Do": 3945, + "Ġsur": 3946, + "Ġalways": 3947, + "è±Ĩ": 3948, + "Ġwater": 3949, + "stit": 3950, + "éĿĴ": 3951, + "Ġlim": 3952, + "Ġhig": 3953, + "`,": 3954, + "ma": 3955, + "Ġpossible": 3956, + "Ġcir": 3957, + "Ġstatement": 3958, + "Ġmachine": 3959, + "Ġinteger": 3960, + "èĵĿ": 3961, + "ĠAs": 3962, + "Ġhour": 3963, + "丰å¯ĮçļĦ": 3964, + "Ġinterested": 3965, + "±ä¹IJ": 3966, + "泡": 3967, + "åįĥ": 3968, + "综åIJĪ": 3969, + "ãĢĤâĢĿ": 3970, + "åįķè¯į": 3971, + "Ġcity": 3972, + "let": 3973, + "åĨĽ": 3974, + "Ġinde": 3975, + "Ġdeterm": 3976, + "寻æ±Ĥ": 3977, + "è¿Ľåħ¥": 3978, + "Ġbeaut": 3979, + "Ġair": 3980, + "л": 3981, + "Ġdi": 3982, + "Ġhealth": 3983, + "é¡»": 3984, + "ness": 3985, + "碳": 3986, + "å°ģ": 3987, + "çļĦæ´": 3988, + "`.": 3989, + "æĢİ": 3990, + "ä½įäºİ": 3991, + "汽车": 3992, + "çݯå¢ĥä¸Ń": 3993, + "åĬĽåĴĮ": 3994, + "å½ĵåľ°": 3995, + "Ġobject": 3996, + "atural": 3997, + "å®Įæķ´": 3998, + "ĠFr": 3999, + "çͳ": 4000, + "Ġvary": 4001, + "Ġcontent": 4002, + "Ġbit": 4003, + "Ġour": 4004, + "çļĦçĥ": 4005, + "Ġunique": 4006, + "Ġwithout": 4007, + "åĴĮè°": 4008, + "è¯ŃéŁ³": 4009, + "åĪł": 4010, + "伦çIJĨ": 4011, + "ource": 4012, + "åĿı": 4013, + "ave": 4014, + "çļĦæĸ¹å¼ı": 4015, + "Ġbeing": 4016, + "Ġcase": 4017, + "æ¯ıä¸Ģ": 4018, + "Ġsal": 4019, + "èĤ¤": 4020, + "Ġbel": 4021, + "èĪĴ": 4022, + "Ġsecurity": 4023, + "ç¹ģ": 4024, + "ually": 4025, + "éĩįæĸ°": 4026, + "çŃīé¢ĨåŁŁ": 4027, + "é¢ĺ缮": 4028, + "çļĦæ¯ı": 4029, + "çļĦ使ç͍": 4030, + "éĿ©": 4031, + "ĠSe": 4032, + "ãģ«": 4033, + "Ġscript": 4034, + "éĤ£äºĽ": 4035, + "Ġmon": 4036, + "æ®Ĭ": 4037, + "身份": 4038, + "Ġap": 4039, + "ĠRe": 4040, + "':": 4041, + "ç͵èĦij": 4042, + "è§Ĥå¯Ł": 4043, + "è¿ĻæĦıåij³çĿĢ": 4044, + "æ¡Ĩæŀ¶": 4045, + "çļĦç¼ĸ": 4046, + "Ġincludes": 4047, + "åı³": 4048, + "Ġlog": 4049, + "à¤": 4050, + "çļĦç¾İ": 4051, + "Ġer": 4052, + "Ġimp": 4053, + "Ġ13": 4054, + "çľģ": 4055, + "ner": 4056, + "书ç±į": 4057, + "ç®Ĭ": 4058, + "åıĤåĬł": 4059, + "Ġdate": 4060, + "åıijå¸ĥ": 4061, + "çļĦæīĢæľī": 4062, + "è¯Ĭ": 4063, + "Ġpublic": 4064, + "éĥ¨ç½²": 4065, + "ross": 4066, + "ãģĦ": 4067, + "åĪłéϤ": 4068, + "Ġ%": 4069, + "ization": 4070, + "ä¼łæĴŃ": 4071, + "Ġmaxim": 4072, + "reate": 4073, + "box": 4074, + "çij": 4075, + "Ġdown": 4076, + "èѦ": 4077, + "Ġcourse": 4078, + "sole": 4079, + "ĠåĴĮ": 4080, + "座": 4081, + "以ä¸ĭåĩł": 4082, + "ĠMy": 4083, + "ĠQ": 4084, + "ï¼īï¼ļ": 4085, + "éĢļä¿¡": 4086, + "Re": 4087, + "è½®": 4088, + "ä¸Ĭä¸ĭ": 4089, + "ç¥Ŀ": 4090, + "::": 4091, + "gor": 4092, + "èĸ": 4093, + "å¹´é¾Ħ": 4094, + "Ġinvol": 4095, + "Ġtemperature": 4096, + "ä¿¡ä»»": 4097, + "æıIJéĹ®": 4098, + "Ġprof": 4099, + "ier": 4100, + "è®°å¿Ĩ": 4101, + "森æŀĹ": 4102, + "ä¸įä»ħèĥ½å¤Ł": 4103, + "æĤ£èĢħ": 4104, + "ger": 4105, + "ç»Ļå®ļ": 4106, + "çļĦå°ı": 4107, + "è¯Ńåı¥": 4108, + "ä½łéľĢè¦ģ": 4109, + "éģµå®Ī": 4110, + "Ġrole": 4111, + "åŃĹåħ¸": 4112, + "Ġreleased": 4113, + "Ex": 4114, + "bin": 4115, + "ECT": 4116, + "oy": 4117, + "æ¿Ģåıij": 4118, + "çĶļ": 4119, + "Ġconvert": 4120, + "Ġcommand": 4121, + "åĮ¹éħį": 4122, + "ployees": 4123, + "çļĦçŁ¥": 4124, + "éº": 4125, + "é¦Ĩ": 4126, + "å¡ij": 4127, + "Ġpositive": 4128, + "ON": 4129, + "Ġconcept": 4130, + "ĠEarth": 4131, + "Ġfriendly": 4132, + "åı¯éĿł": 4133, + "å°ıæĹ¶": 4134, + "åºĶç͍ç¨ĭåºı": 4135, + "è¿Ļ段": 4136, + "Ġindivid": 4137, + "ws": 4138, + "Ġnamed": 4139, + "Ġplan": 4140, + "Ġsort": 4141, + "Ġdoc": 4142, + "è§ĤçĤ¹": 4143, + "ãģ§": 4144, + "Ġiss": 4145, + "ä¸ĭçļĦ": 4146, + "设æĸ½": 4147, + "åĴĮè°IJ": 4148, + "空æ°Ķ": 4149, + "æij©": 4150, + "åĬ³": 4151, + "请æıIJä¾Ľ": 4152, + "Ġsources": 4153, + "ĠCom": 4154, + "å¤įæĿĤ度": 4155, + "apt": 4156, + "Ġsecond": 4157, + "æĶ»åĩ»": 4158, + "')": 4159, + "Ġown": 4160, + "Ġmeaning": 4161, + "éĢĢ": 4162, + "ä½Ľ": 4163, + "è¡£": 4164, + "cho": 4165, + "æľīä»Ģä¹Ī": 4166, + "æ²³": 4167, + "缸åºĶ": 4168, + "èĶ": 4169, + "çļĦå̼": 4170, + "Ġeffect": 4171, + "LECT": 4172, + "set": 4173, + "ogn": 4174, + "HT": 4175, + "Ġ```": 4176, + "åIJĥ": 4177, + "æĥħ绪": 4178, + "éķĩ": 4179, + "ocus": 4180, + "éĢĤå½ĵ": 4181, + "å¿ħé¡»": 4182, + "çĶļèĩ³": 4183, + "åĽ¾çīĩ": 4184, + "çļĦæĮĩ": 4185, + "çļĦåŁºç¡Ģ": 4186, + "Ġphys": 4187, + "ç»Ŀ": 4188, + "ality": 4189, + "æīĵå¼Ģ": 4190, + "Ġtre": 4191, + "Ġbecause": 4192, + "irt": 4193, + "çļĦæĥħåĨµä¸ĭ": 4194, + "Ġpat": 4195, + "Ġ200": 4196, + "åĮĸåѦ": 4197, + "åģı好": 4198, + "éĹŃ": 4199, + "åľ°åĿĢ": 4200, + "iter": 4201, + "aging": 4202, + "å¦Ĥä½ķåľ¨": 4203, + "Ġtake": 4204, + "åIJį为": 4205, + "åį´": 4206, + "åĪĨåĪ«": 4207, + "çļĦçľ": 4208, + "Ġplace": 4209, + "æľĢè¿ij": 4210, + "Ġ$\\": 4211, + "á": 4212, + "number": 4213, + "Ġmaximum": 4214, + "ç¯ĩ": 4215, + "rue": 4216, + "ĠInt": 4217, + "Ġ24": 4218, + "èĥŀ": 4219, + "case": 4220, + "Ġdeep": 4221, + "ROM": 4222, + "sc": 4223, + "Ġincre": 4224, + "ĠWe": 4225, + "éĥ½ä¼ļ": 4226, + "ç²¾ç¥ŀ": 4227, + "å©": 4228, + "åįıä½ľ": 4229, + "åı¯ä»¥æĺ¯": 4230, + "çŃīå¤ļ个": 4231, + "çĽijæµĭ": 4232, + "åĴĮæľįåĬ¡": 4233, + "Ġdue": 4234, + "Ġear": 4235, + "è¿IJèIJ¥": 4236, + "of": 4237, + "污": 4238, + "é«ĺ度": 4239, + "æī¹": 4240, + "çĸ«": 4241, + "Ġindividual": 4242, + "èĩªçĦ¶è¯Ńè¨Ģå¤ĦçIJĨ": 4243, + "ele": 4244, + "sive": 4245, + "ä¹Łèĥ½": 4246, + "æĻºæħ§": 4247, + "sort": 4248, + "af": 4249, + "åħ¬åı¸çļĦ": 4250, + "ç͍æĿ¥": 4251, + "ç̧": 4252, + "èļ": 4253, + "Ġexact": 4254, + "åŃĹæ¯į": 4255, + "place": 4256, + "å¾Īå¤ļ": 4257, + "æĽ´åĩĨç¡®": 4258, + "æľīæīĢ帮åĬ©": 4259, + "ä¹ĭåīį": 4260, + "Ġtakes": 4261, + "ral": 4262, + "å®ĥ们çļĦ": 4263, + "çİ°åľ¨": 4264, + "å¹ķ": 4265, + "Ġduring": 4266, + "ç¼ĸè¾ij": 4267, + "gre": 4268, + "仿": 4269, + "æľīä¸Ģ": 4270, + "ters": 4271, + "Ġsince": 4272, + "ention": 4273, + "æĬ½": 4274, + "页éĿ¢": 4275, + "æ½ľåľ¨": 4276, + "è¯Ńæ³ķ": 4277, + "Ġfocus": 4278, + "æĢĿç»´": 4279, + "Ġlocated": 4280, + "!\"": 4281, + "纳": 4282, + "缸åħ³çļĦ": 4283, + "é¡¶": 4284, + "Ġhelpful": 4285, + "Ġfactor": 4286, + "angle": 4287, + "缴åΰ": 4288, + "ĠStates": 4289, + "湿": 4290, + "æį·": 4291, + "éĵģ": 4292, + "è´Łè´£": 4293, + "iction": 4294, + "Ġnatural": 4295, + "Ġorgan": 4296, + "娱ä¹IJ": 4297, + "ches": 4298, + "Ġleft": 4299, + "Ġblue": 4300, + "ok": 4301, + "é»ĺ": 4302, + "Ġmade": 4303, + "Ġprovides": 4304, + "pose": 4305, + "çļĦçģ": 4306, + "éķľ": 4307, + "åĿIJ": 4308, + "æĿ¥å®ŀçݰ": 4309, + "indows": 4310, + "abilities": 4311, + "请注æĦı": 4312, + "Ġteam": 4313, + "éĢłæĪIJ": 4314, + "çļĦèĥ½åĬĽ": 4315, + "éĨĴ": 4316, + "ç͍æĪ·çļĦ": 4317, + "æĹĭ": 4318, + "race": 4319, + "Ġphrase": 4320, + "17": 4321, + "对æĸ¹": 4322, + "Ġage": 4323, + "ĠAnd": 4324, + "çļĦé£İéĻ©": 4325, + "Ġaut": 4326, + "åį«": 4327, + "ä¸Ģèĩ´": 4328, + "ç»Ĩèĥŀ": 4329, + "æĬĢæľ¯çļĦåıijå±ķ": 4330, + "çĶŁæĪIJä¸Ģ个": 4331, + "Ġdivis": 4332, + "å°¤åħ¶æĺ¯": 4333, + "çŃīæĸ¹éĿ¢": 4334, + "Ġasking": 4335, + "缮çļĦ": 4336, + "第äºĮ": 4337, + "èĪĴéĢĤ": 4338, + "æĬĺ": 4339, + "Ġrecent": 4340, + "åįıè®®": 4341, + "è¾Ĩ": 4342, + "å·¨": 4343, + "åīĤ": 4344, + "the": 4345, + "æķ°çļĦ": 4346, + "Ġheart": 4347, + "value": 4348, + "éĿ¢ä¸´": 4349, + "å®ŀéĻħä¸Ĭ": 4350, + "æĿ¯": 4351, + "dd": 4352, + "ĠX": 4353, + "è´µ": 4354, + "è¯ģæĺİ": 4355, + "å±ı": 4356, + "new": 4357, + "ody": 4358, + "éģµå¾ª": 4359, + "Ġglobal": 4360, + "Ġdepending": 4361, + "åĩĢ": 4362, + "å·¦": 4363, + "ĠØ": 4364, + "æĽ´åħ·ä½ĵçļĦ": 4365, + "帮åĬ©æĤ¨": 4366, + "缸äºĴ": 4367, + "Ġreturns": 4368, + "å¸ĮæľĽè¿ĻäºĽå»ºè®®": 4369, + "Ġimprove": 4370, + "Ġmuch": 4371, + "ä»ĸ人": 4372, + "å¼¹": 4373, + "45": 4374, + "åįķä½į": 4375, + "çĦ¦": 4376, + "åĪĹ表ä¸Ń": 4377, + "`ãĢĤ": 4378, + "conom": 4379, + "èĥ½éĩı": 4380, + "Ġcalled": 4381, + "Ġrate": 4382, + "é¢Ħç®Ĺ": 4383, + "èĩ³åħ³éĩįè¦ģ": 4384, + "acc": 4385, + "ç»ĵæĿŁ": 4386, + "åı¯ä»¥èĢĥèĻij": 4387, + "ç»ĨèĬĤ": 4388, + "Ġve": 4389, + "å¯¹ä½ł": 4390, + "ĠThese": 4391, + "è¿ĩ度": 4392, + "ified": 4393, + "è¯Ħä»·": 4394, + "æķ°æį®éĽĨ": 4395, + "é«ĺè´¨éĩı": 4396, + "èŀįåIJĪ": 4397, + "åİŁåĪĻ": 4398, + "Ġapproximately": 4399, + "Ġrepresent": 4400, + "ificial": 4401, + "ason": 4402, + "æĸ¹ç¨ĭ": 4403, + "Ġsocial": 4404, + "Ġfig": 4405, + "SELECT": 4406, + "####": 4407, + "人æ°ij": 4408, + "ãĢij": 4409, + "hest": 4410, + "ãĢIJ": 4411, + "Ġdigital": 4412, + "以ä¸ĭåĩłä¸ªæĸ¹éĿ¢": 4413, + "Ġclo": 4414, + "å°Ĩåħ¶": 4415, + "çļĦåĨħ容": 4416, + "æı¡": 4417, + "random": 4418, + "å·ŀ": 4419, + "è´Ńçī©": 4420, + "hou": 4421, + "éĥ¨éŨ": 4422, + "Ġsnipp": 4423, + "tract": 4424, + "çݰ象": 4425, + "Ġneeds": 4426, + "æķ°åĪĹ": 4427, + "Ġgame": 4428, + "Ġtri": 4429, + "è´´": 4430, + "çĭ¬ç«ĭ": 4431, + "å¿ħè¦ģçļĦ": 4432, + "èĪŀ": 4433, + "æ¸ħæ´ģ": 4434, + "象å¾ģ": 4435, + "è½»æĿ¾": 4436, + "鸡": 4437, + "åĨ²çªģ": 4438, + "Ġgeneral": 4439, + "Ġblo": 4440, + "çļĦæĦŁ": 4441, + "åĨħçļĦ": 4442, + "Ñĥ": 4443, + "ins": 4444, + "çļĦçŁ¥è¯Ĩ": 4445, + "模åĿĹ": 4446, + "éϤäºĨ": 4447, + "è¦Ĩ": 4448, + "yle": 4449, + "Ġintelligence": 4450, + "åĨĻä½ľ": 4451, + "Ġed": 4452, + "Ġrad": 4453, + "cing": 4454, + "Please": 4455, + "ved": 4456, + "èĥ½å¸®åĬ©ä½ł": 4457, + "é¢Ŀå¤ĸ": 4458, + "Ġmarket": 4459, + "Ġnight": 4460, + "input": 4461, + "æķ°æį®åĪĨæŀIJ": 4462, + "æ´²": 4463, + "me": 4464, + "wh": 4465, + "Ġeas": 4466, + "å¤ļå°ij": 4467, + "ãģ¯": 4468, + "ock": 4469, + "Create": 4470, + "Ġloop": 4471, + "When": 4472, + "çħ": 4473, + "gs": 4474, + "åı¯ä»¥æł¹æį®": 4475, + "Ġrecogn": 4476, + "æĸ°éĹ»": 4477, + "Ġ\\),": 4478, + "ä¼ijæģ¯": 4479, + "ĠMa": 4480, + "ä¸Ĭä¸ĭæĸĩ": 4481, + "Ġmem": 4482, + "åĬłå¼º": 4483, + "æ±Ł": 4484, + "éĺ¿éĩĮå·´å·´éĽĨåĽ¢": 4485, + "Ġsingle": 4486, + "æ´ĭ": 4487, + "PU": 4488, + "imate": 4489, + "çļĦæ²ŁéĢļ": 4490, + "åľ¨æŁIJäºĽ": 4491, + "浪": 4492, + "ä¸Ŀ": 4493, + "表éĿ¢": 4494, + "èī¯å¥½": 4495, + "æŀ¶æŀĦ": 4496, + "éĺ»": 4497, + "ãģª": 4498, + "åı¯æĮģç»Ńåıijå±ķ": 4499, + "Ġenh": 4500, + "sql": 4501, + "çŃīäºİ": 4502, + "Ġmultiple": 4503, + "plic": 4504, + "æĸĩåŃĹ": 4505, + "ä¹Łä¼ļ": 4506, + "éĩİ": 4507, + "ountain": 4508, + "200": 4509, + "ling": 4510, + "åζéĢł": 4511, + "âĢĿï¼Ī": 4512, + "Ġdisc": 4513, + "API": 4514, + "Ġ17": 4515, + "èĻ«": 4516, + "éļĶ": 4517, + "plify": 4518, + "Ġclar": 4519, + "åΰäºĨ": 4520, + "æ¹ĸ": 4521, + "Ġder": 4522, + "Ġrequest": 4523, + "æĹ¶åĢĻ": 4524, + "æľªæĿ¥çļĦ": 4525, + "ç½Ĺ": 4526, + "åħ¬å¹³": 4527, + "Ġchang": 4528, + "æĮĩ导": 4529, + "åı«": 4530, + "Ġless": 4531, + "æľīçĿĢ": 4532, + "çļĦæł¸": 4533, + "pper": 4534, + "ony": 4535, + "éĢĤç͍äºİ": 4536, + "ĠÃ": 4537, + "å®ļä½į": 4538, + "æľīè¶£": 4539, + "çļĦæŃ£": 4540, + "JavaScript": 4541, + "åĬ¨åĬĽ": 4542, + "und": 4543, + "ðŁ": 4544, + "å¼ĢåıijèĢħ": 4545, + "ç¾İåĽ½": 4546, + "èά": 4547, + "...": 4548, + "åĪĨ为": 4549, + "çļĦæĮijæĪĺ": 4550, + "Ġamount": 4551, + "Ġfilm": 4552, + "å°½éĩı": 4553, + "çļĦæ³ķ": 4554, + "Ġprimary": 4555, + "Ġpopular": 4556, + "ume": 4557, + "self": 4558, + "80": 4559, + "æ¯ĶèµĽ": 4560, + "åIJįåŃĹ": 4561, + "å¡«": 4562, + "èĩªåĬ¨åĮĸ": 4563, + "Ġes": 4564, + "磩éĺµ": 4565, + "rehen": 4566, + "łéģĵ": 4567, + "为ä»Ģä¹Ī": 4568, + "çıŃ": 4569, + "Ġcapabilities": 4570, + "Ġsnippet": 4571, + "è·Ł": 4572, + "" + ], + [ + "in", + "ed" + ], + [ + "ç»", + "ª" + ], + [ + "è°ĥ", + "ç͍" + ], + [ + "i", + "ed" + ], + [ + "ç¼", + "©" + ], + [ + "大", + "éĩı" + ], + [ + "Ġpo", + "em" + ], + [ + "ure", + "s" + ], + [ + "iqu", + "e" + ], + [ + "v", + "en" + ], + [ + "追", + "æ±Ĥ" + ], + [ + "ak", + "es" + ], + [ + "æĹ¨", + "åľ¨" + ], + [ + "Ġp", + "ower" + ], + [ + "éĢ»", + "è¾ij" + ], + [ + "res", + "ent" + ], + [ + "åı¯èĥ½", + "çļĦ" + ], + [ + "è¿Ļ", + "åı¯èĥ½" + ], + [ + "Ġse", + "quence" + ], + [ + "çļĦ", + "çĶŁæ´»" + ], + [ + "Ġ", + "Z" + ], + [ + "¢", + "å¤į" + ], + [ + "Ġg", + "ood" + ], + [ + "e", + "x" + ], + [ + "åºı", + "åĪĹ" + ], + [ + "r", + "ans" + ], + [ + "ç³»", + "åĪĹ" + ], + [ + "ä½", + "³" + ], + [ + "äº", + "ļ" + ], + [ + "al", + "s" + ], + [ + "Y", + "ou" + ], + [ + "ä¾Ľ", + "åºĶ" + ], + [ + "åĬ¨", + "çī©" + ], + [ + "Ġo", + "b" + ], + [ + "Ġh", + "ist" + ], + [ + "é»", + "Ħ" + ], + [ + "Ġcon", + "vers" + ], + [ + "æĪij们", + "åı¯ä»¥" + ], + [ + "é©", + "¶" + ], + [ + "åī", + "§" + ], + [ + "u", + "g" + ], + [ + "符", + "åIJĪ" + ], + [ + "Ġsh", + "ort" + ], + [ + "Ġa", + "g" + ], + [ + "ä¸", + "¾" + ], + [ + "m", + "y" + ], + [ + "w", + "are" + ], + [ + "Ġke", + "y" + ], + [ + "å¤ļ", + "æł·" + ], + [ + "çģµ", + "æ´»" + ], + [ + "Ġw", + "rite" + ], + [ + "Ġp", + "ur" + ], + [ + "2", + "2" + ], + [ + "æīĵ", + "åį°" + ], + [ + "ç¡®", + "å®ŀ" + ], + [ + "Ġh", + "and" + ], + [ + "çİ©", + "å®¶" + ], + [ + "éģ", + "Ĺ" + ], + [ + "à", + "¹" + ], + [ + "çļĦæ", + "·" + ], + [ + "ç§", + "ĺ" + ], + [ + "el", + "s" + ], + [ + "Ġpr", + "im" + ], + [ + "Ġl", + "ife" + ], + [ + "çļĦç", + "¼" + ], + [ + "çĽij", + "æİ§" + ], + [ + "社交", + "åªĴä½ĵ" + ], + [ + "Ġ2", + "5" + ], + [ + "åħ¨", + "éĿ¢" + ], + [ + "è", + "ĵ" + ], + [ + "Ġg", + "row" + ], + [ + "å®ŀ", + "éªĮ" + ], + [ + "a", + "ut" + ], + [ + "æķ", + "ı" + ], + [ + "Ġex", + "pl" + ], + [ + "ç", + "ĵ" + ], + [ + "åº", + "ķ" + ], + [ + "çĤ¹", + "åĩ»" + ], + [ + "çݰ", + "å®ŀ" + ], + [ + "ç®Ģåįķ", + "çļĦ" + ], + [ + "ç»ı", + "éªĮ" + ], + [ + "è·", + "¨" + ], + [ + "èĹ", + "ı" + ], + [ + "éĩį", + "å¤į" + ], + [ + "æĶ¿", + "åºľ" + ], + [ + "Ġso", + "ft" + ], + [ + "æij", + "Ħ" + ], + [ + "é", + "Ń" + ], + [ + "çľ", + "¼" + ], + [ + "é£Ł", + "çī©" + ], + [ + "Ġwor", + "ds" + ], + [ + "ä¼", + "¦" + ], + [ + "ĠS", + "QL" + ], + [ + "åIJİ", + "çļĦ" + ], + [ + "Ġyear", + "s" + ], + [ + "äº", + "®" + ], + [ + "æĥ", + "¯" + ], + [ + "æ¤į", + "çī©" + ], + [ + "ä¼", + "ij" + ], + [ + "æ¸ħæĻ", + "°" + ], + [ + "Ġa", + "round" + ], + [ + "ç§°", + "为" + ], + [ + "ä¸", + "ĩ" + ], + [ + "éļı", + "æĹ¶" + ], + [ + "å¿", + "Ĩ" + ], + [ + "åĬ¨", + "æĢģ" + ], + [ + "'", + "ve" + ], + [ + "Ċ", + "ĊĠĠĠ" + ], + [ + "Ġapp", + "lic" + ], + [ + "以", + "ä¸Ĭ" + ], + [ + "Ġwebs", + "ite" + ], + [ + "æīĭ", + "æľº" + ], + [ + "Y", + "es" + ], + [ + "v", + "iron" + ], + [ + "Ġm", + "ethod" + ], + [ + "Ġcompan", + "y" + ], + [ + "R", + "O" + ], + [ + "åİŁ", + "åĽł" + ], + [ + "ä¹Ł", + "åı¯ä»¥" + ], + [ + "sq", + "rt" + ], + [ + "è§Ħ", + "模" + ], + [ + "p", + "s" + ], + [ + "Ġw", + "rit" + ], + [ + "äºij", + "计ç®Ĺ" + ], + [ + "Ġout", + "put" + ], + [ + "Ġd", + "at" + ], + [ + "Ġg", + "ive" + ], + [ + "et", + "s" + ], + [ + "Ġim", + "pro" + ], + [ + "\\)", + "," + ], + [ + "å¼Ģ", + "æĶ¾" + ], + [ + "æ³ķ", + "è§Ħ" + ], + [ + "æĻ", + "®" + ], + [ + "æĮī", + "çħ§" + ], + [ + "1", + "8" + ], + [ + "éĹ", + "»" + ], + [ + "æģ", + "¢å¤į" + ], + [ + "Ġt", + "em" + ], + [ + "è°", + "¢" + ], + [ + "æľĢ", + "ç»Ī" + ], + [ + "Ġ/", + "/" + ], + [ + "H", + "ere" + ], + [ + "æĶ¹", + "è¿Ľ" + ], + [ + "Ġin", + "f" + ], + [ + "cd", + "ot" + ], + [ + "æĹ¥", + "æľŁ" + ], + [ + "ĠJ", + "ava" + ], + [ + "å®", + "ĩ" + ], + [ + "F", + "or" + ], + [ + "Ġj", + "o" + ], + [ + "æĦı", + "è¯Ĩ" + ], + [ + "以", + "ç¡®ä¿Ŀ" + ], + [ + "i", + "en" + ], + [ + "æĽ´å¤ļ", + "çļĦ" + ], + [ + "æļ", + "ĸ" + ], + [ + "re", + "am" + ], + [ + "+", + "+" + ], + [ + "A", + "R" + ], + [ + "2", + "1" + ], + [ + "éĻIJ", + "äºİ" + ], + [ + "æĬĢ", + "å·§" + ], + [ + "åĨ", + "°" + ], + [ + "å¹³", + "åĿĩ" + ], + [ + "çļĦ", + "è¿ĩç¨ĭ" + ], + [ + "ä¸į", + "è¦ģ" + ], + [ + "Ġrefer", + "ring" + ], + [ + "ç¦", + "ı" + ], + [ + "æĻ", + "ļ" + ], + [ + "å°ı", + "æĺİ" + ], + [ + "太", + "éĺ³" + ], + [ + "ä¸į", + "åı¯" + ], + [ + "åĮ»", + "çĶŁ" + ], + [ + "Ġsm", + "all" + ], + [ + "æ¯", + "Ĵ" + ], + [ + "ç©", + "¿" + ], + [ + "Ġme", + "ans" + ], + [ + "M", + "L" + ], + [ + "z", + "e" + ], + [ + "享", + "åıĹ" + ], + [ + "çī", + "Ľ" + ], + [ + "çļĦæ", + "¦Ĥ" + ], + [ + "in", + "es" + ], + [ + "Ġ", + "使ç͍" + ], + [ + "H", + "ow" + ], + [ + "人", + "åijĺ" + ], + [ + "åĿ", + "ļ" + ], + [ + "ĠT", + "o" + ], + [ + "èĦ", + "ļ" + ], + [ + "Ġg", + "lob" + ], + [ + "æ£Ģ", + "æµĭ" + ], + [ + "èµ", + "ĸ" + ], + [ + "o", + "de" + ], + [ + "强", + "è°ĥ" + ], + [ + "模åŀĭ", + "çļĦ" + ], + [ + "(", + "'" + ], + [ + "v", + "ie" + ], + [ + "ç", + "£" + ], + [ + "Ġb", + "r" + ], + [ + "Ġsum", + "m" + ], + [ + "Ġch", + "at" + ], + [ + "é", + "±" + ], + [ + "ä¹ł", + "æĥ¯" + ], + [ + "ell", + "ig" + ], + [ + "äº", + "²" + ], + [ + "Ġpartic", + "ular" + ], + [ + "çĹ", + "ĩ" + ], + [ + "Ġin", + "s" + ], + [ + "æķ´", + "个" + ], + [ + "çļĦ", + "åŃ¦ä¹ł" + ], + [ + "çļĦæĦ", + "ı" + ], + [ + "Ġm", + "ark" + ], + [ + "è¿Ļ", + "ä¸įä»ħ" + ], + [ + "æĬ¥", + "åijĬ" + ], + [ + "ploy", + "e" + ], + [ + "éħ", + "¸" + ], + [ + "çļĦ", + "éľĢæ±Ĥ" + ], + [ + "et", + "wor" + ], + [ + "é©", + "¾" + ], + [ + "C", + "h" + ], + [ + "çļĦæ", + "ı" + ], + [ + "Ġ", + "åľ¨" + ], + [ + "è", + "¸" + ], + [ + "et", + "y" + ], + [ + "绿", + "èī²" + ], + [ + "Ġexpress", + "ion" + ], + [ + "re", + "ad" + ], + [ + "Ġcharact", + "ers" + ], + [ + "èµ", + "°" + ], + [ + "Ġst", + "ory" + ], + [ + "åĵį", + "åºĶ" + ], + [ + "è¡Į", + "åĬ¨" + ], + [ + ")", + "^" + ], + [ + "ĠP", + "ro" + ], + [ + "Ġ1", + "8" + ], + [ + "Ġbet", + "ter" + ], + [ + "åį", + "ģ" + ], + [ + "Ġdevelop", + "ment" + ], + [ + "以ä¸ĭ", + "æĺ¯ä¸Ģ个" + ], + [ + "æĿ", + "Ł" + ], + [ + "èIJ¥", + "éĶĢ" + ], + [ + "æľīæķĪ", + "åľ°" + ], + [ + "é±", + "¼" + ], + [ + "äºĴ", + "èģĶç½ij" + ], + [ + "æĭ", + "ħ" + ], + [ + "深度", + "åŃ¦ä¹ł" + ], + [ + "Ġprovid", + "ed" + ], + [ + "éĺ²", + "æŃ¢" + ], + [ + "Ġ1", + "1" + ], + [ + "æĸĩ", + "竳" + ], + [ + "çĬ¶", + "åĨµ" + ], + [ + "å¢ŀ", + "éķ¿" + ], + [ + "Ġor", + "der" + ], + [ + "ç»Ħ", + "æĪIJ" + ], + [ + "éĺ", + "µ" + ], + [ + "Ġm", + "ed" + ], + [ + "éĽ", + "¨" + ], + [ + "éĢī", + "项" + ], + [ + "Ġen", + "viron" + ], + [ + "o", + "h" + ], + [ + "建", + "设" + ], + [ + "Ġadv", + "ice" + ], + [ + "Ġ", + "end" + ], + [ + "í", + "ķ" + ], + [ + "Ġf", + "am" + ], + [ + "Ġf", + "in" + ], + [ + "Ġus", + "ers" + ], + [ + "ç»Ļ", + "æĪij" + ], + [ + "vers", + "e" + ], + [ + "Ġele", + "ments" + ], + [ + "ĠE", + "x" + ], + [ + "--", + "--" + ], + [ + "éĿ", + "ł" + ], + [ + "请", + "æ±Ĥ" + ], + [ + "r", + "ase" + ], + [ + "æ±", + "½" + ], + [ + "æĢ»", + "ä¹ĭ" + ], + [ + "å®ŀ", + "æĹ¶" + ], + [ + "iv", + "es" + ], + [ + "åħ", + "ģ" + ], + [ + "æıIJ", + "åĩº" + ], + [ + "çŃ", + "ij" + ], + [ + "Ġcon", + "st" + ], + [ + "i", + "us" + ], + [ + "å¯Ĩ", + "çłģ" + ], + [ + "æ´", + "Ĺ" + ], + [ + "Ġcon", + "f" + ], + [ + "Ġsh", + "are" + ], + [ + "The", + "refore" + ], + [ + "2", + "4" + ], + [ + "æ£", + "®" + ], + [ + "comm", + "end" + ], + [ + "p", + "i" + ], + [ + "ä¾Ŀ", + "èµĸ" + ], + [ + "ç", + "ĩ" + ], + [ + "缸", + "åIJĮ" + ], + [ + "p", + "en" + ], + [ + "å®", + "Ļ" + ], + [ + "çīĪ", + "æľ¬" + ], + [ + "Ġar", + "r" + ], + [ + "åħ¬", + "åħ±" + ], + [ + "è§", + "Ī" + ], + [ + "åĬĽ", + "éĩı" + ], + [ + "Ġ", + "ident" + ], + [ + "çĨ", + "Ł" + ], + [ + "æ¶", + "²" + ], + [ + "åij", + "¼" + ], + [ + "æł¼", + "å¼ı" + ], + [ + "in", + "u" + ], + [ + "çļĦ", + "åħ·ä½ĵ" + ], + [ + "åIJĪéĢĤ", + "çļĦ" + ], + [ + "çİ", + "ĭ" + ], + [ + "大", + "æķ°æį®" + ], + [ + "Ġv", + "is" + ], + [ + "åľ", + "Ĩ" + ], + [ + "æĢĿ", + "èĢĥ" + ], + [ + "æĽ", + "²" + ], + [ + "ç§", + "ĭ" + ], + [ + "Ġtyp", + "ically" + ], + [ + "åħģ", + "许" + ], + [ + "çĮ", + "«" + ], + [ + "Ġcomple", + "x" + ], + [ + "æ", + "ħ§" + ], + [ + "Ġma", + "king" + ], + [ + "ion", + "al" + ], + [ + "w", + "ard" + ], + [ + "Ġse", + "con" + ], + [ + "Ġre", + "commend" + ], + [ + "å®ĩ", + "å®Ļ" + ], + [ + "/", + "/" + ], + [ + "æŃ£", + "åľ¨" + ], + [ + "g", + "in" + ], + [ + "åĪĨ", + "éħį" + ], + [ + "è·Ŀ", + "离" + ], + [ + "ä¸į", + "èĥ½" + ], + [ + "Ġcomm", + "un" + ], + [ + "åĿ", + "Ģ" + ], + [ + "å¾Ģ", + "å¾Ģ" + ], + [ + ":", + "**" + ], + [ + "ä¼", + "´" + ], + [ + "ri", + "es" + ], + [ + "i", + "o" + ], + [ + "éĽĨ", + "åĽ¢" + ], + [ + "ä¸Ń", + "æĸĩ" + ], + [ + "em", + "ber" + ], + [ + "Ġor", + "ig" + ], + [ + "å¼Ĥ", + "常" + ], + [ + "w", + "ays" + ], + [ + "åŁ¹", + "åħ»" + ], + [ + "Ġincl", + "ude" + ], + [ + "è", + "ľ" + ], + [ + "Ġsu", + "g" + ], + [ + "åĭ", + "ĩ" + ], + [ + "Ġtry", + "ing" + ], + [ + "Ġmess", + "age" + ], + [ + "r", + "or" + ], + [ + "ä½", + "Ļ" + ], + [ + "Ġsy", + "m" + ], + [ + "æ·", + "·" + ], + [ + "åģ", + "ľ" + ], + [ + "çī©", + "è´¨" + ], + [ + "Ġma", + "ch" + ], + [ + "er", + "gy" + ], + [ + "ç²", + "ī" + ], + [ + "Ġd", + "id" + ], + [ + "çļĦ", + "æķħäºĭ" + ], + [ + "Ġever", + "y" + ], + [ + "åĽ¢éĺŁ", + "æĪIJåijĺ" + ], + [ + "ãģ", + "Ĺ" + ], + [ + "å±ķ", + "çݰ" + ], + [ + "éĢIJ", + "æ¸IJ" + ], + [ + "Ġs", + "ing" + ], + [ + "i", + "ous" + ], + [ + "çļĦç", + "¬" + ], + [ + "Ġal", + "low" + ], + [ + "Ġt", + "ell" + ], + [ + "ĠUn", + "ited" + ], + [ + "ç¤", + "¼" + ], + [ + "Ġs", + "ame" + ], + [ + "ç®", + "±" + ], + [ + "i", + "pp" + ], + [ + "建", + "çŃij" + ], + [ + "èĢ", + "IJ" + ], + [ + "çļĦ", + "åħ³éĶ®" + ], + [ + "æĦı", + "ä¹ī" + ], + [ + "çľĭ", + "åΰ" + ], + [ + "èĩªçĦ¶", + "è¯Ńè¨Ģ" + ], + [ + "Ġc", + "ustom" + ], + [ + "Ġpr", + "ime" + ], + [ + "at", + "form" + ], + [ + "ent", + "ial" + ], + [ + "å¦Ĥæŀľä½ł", + "æľī" + ], + [ + "Ġserv", + "ice" + ], + [ + "ur", + "ity" + ], + [ + "il", + "ities" + ], + [ + "Ġse", + "e" + ], + [ + "è", + "Ń" + ], + [ + "天", + "æ°Ķ" + ], + [ + "éĥ½", + "èĥ½" + ], + [ + "Ġbe", + "c" + ], + [ + "饮", + "é£Ł" + ], + [ + "æ¶Īè´¹", + "èĢħ" + ], + [ + "er", + "v" + ], + [ + "Ġfe", + "ature" + ], + [ + "ä½ł", + "èĥ½" + ], + [ + "Ġup", + "d" + ], + [ + "çļĦ", + "主è¦ģ" + ], + [ + "å®ŀ", + "æĸ½" + ], + [ + "ä»", + "į" + ], + [ + "Ġm", + "ay" + ], + [ + "çŁ¥", + "éģĵ" + ], + [ + "è§£åĨ³", + "éĹ®é¢ĺ" + ], + [ + "al", + "e" + ], + [ + "Ġterm", + "s" + ], + [ + "å®ĺ", + "æĸ¹" + ], + [ + "éĢ", + "Ķ" + ], + [ + "çľ", + "ł" + ], + [ + "æĹ", + "ı" + ], + [ + "éľ", + "²" + ], + [ + "å¥", + "ĸ" + ], + [ + "Ġcon", + "tain" + ], + [ + "ç͍", + "çļĦ" + ], + [ + "åĪĨ", + "éĴŁ" + ], + [ + "ä¸Ģ", + "å®ļ" + ], + [ + "Ġf", + "l" + ], + [ + "温", + "度" + ], + [ + "a", + "i" + ], + [ + "Ġr", + "ight" + ], + [ + "¹", + "ģ" + ], + [ + "æĶ", + "»" + ], + [ + "ãĤ", + "Ĵ" + ], + [ + "åĪĽ", + "æĦı" + ], + [ + "è¿Ļ", + "å°Ĩ" + ], + [ + "åı¯ä»¥", + "æıIJä¾Ľ" + ], + [ + "æľºåύ", + "人" + ], + [ + "Ġw", + "id" + ], + [ + "å¦Ĥ", + "ä¸ĭ" + ], + [ + "Ġst", + "ud" + ], + [ + "ĠS", + "h" + ], + [ + "åΤ", + "æĸŃ" + ], + [ + "æīį", + "èĥ½" + ], + [ + "éĽ", + "¶" + ], + [ + "驾", + "é©¶" + ], + [ + "Ġc", + "at" + ], + [ + "ç¥ŀ", + "ç»ı" + ], + [ + "ä»", + "Ĭ" + ], + [ + "a", + "ir" + ], + [ + "çļĦæ·", + "±" + ], + [ + "åķĨ", + "ä¸ļ" + ], + [ + "\"", + "." + ], + [ + "$", + "," + ], + [ + "æĪij", + "ä¼ļ" + ], + [ + "ç±", + "į" + ], + [ + "Ġsk", + "y" + ], + [ + "以", + "便" + ], + [ + "è¡", + "¥" + ], + [ + "è", + "ª" + ], + [ + "çIJĨè§£", + "åĴĮ" + ], + [ + "çĻ", + "»" + ], + [ + "å¤įæĿĤ", + "çļĦ" + ], + [ + "æī©", + "å±ķ" + ], + [ + "Ġa", + "v" + ], + [ + "æĪij", + "çļĦ" + ], + [ + "å½ĵçĦ¶", + "åı¯ä»¥" + ], + [ + "å·®", + "å¼Ĥ" + ], + [ + "Ġst", + "or" + ], + [ + "æ±", + "ĩ" + ], + [ + "á", + "º" + ], + [ + "è¾", + "ħ" + ], + [ + "åĽ°", + "éļ¾" + ], + [ + "Ġf", + "ile" + ], + [ + "è¶³", + "å¤Ł" + ], + [ + "Ġc", + "le" + ], + [ + "iv", + "id" + ], + [ + "å°±", + "æĺ¯" + ], + [ + "y", + "n" + ], + [ + "ç»ĥ", + "ä¹ł" + ], + [ + "åĨ³", + "äºİ" + ], + [ + "åıĸ", + "åĨ³äºİ" + ], + [ + "æĦŁ", + "åħ´è¶£" + ], + [ + "åį", + "Ĭ" + ], + [ + "æĽ", + "¿" + ], + [ + "ä¿¡", + "åı·" + ], + [ + "ç»ı", + "åİĨ" + ], + [ + "is", + "p" + ], + [ + "èī", + "¾" + ], + [ + "1", + "3" + ], + [ + "åĮĸ", + "çļĦ" + ], + [ + "Ġc", + "ar" + ], + [ + "O", + "f" + ], + [ + "æ°", + "§" + ], + [ + "å·¥", + "ç¨ĭ" + ], + [ + "ä¸į", + "è¿ĩ" + ], + [ + "Ġco", + "st" + ], + [ + "c", + "ount" + ], + [ + "æħ", + "¢" + ], + [ + "Ġc", + "our" + ], + [ + "åĮº", + "åŁŁ" + ], + [ + "缸", + "对" + ], + [ + "Ġbusiness", + "es" + ], + [ + "éĤ®", + "ä»¶" + ], + [ + "A", + "T" + ], + [ + "Â", + "°" + ], + [ + "Ġro", + "ot" + ], + [ + "ri", + "x" + ], + [ + "Ġus", + "er" + ], + [ + "é¾", + "Ħ" + ], + [ + "at", + "ic" + ], + [ + "Ġ5", + "0" + ], + [ + "ç³»ç»Ł", + "çļĦ" + ], + [ + "æŁ¥", + "çľĭ" + ], + [ + "ä¸ī", + "个" + ], + [ + "Ġan", + "al" + ], + [ + "说", + "æĺİ" + ], + [ + "åĵ", + "Ī" + ], + [ + "èĢ", + "Ĺ" + ], + [ + "çļĦæ", + "¨¡" + ], + [ + "ith", + "m" + ], + [ + "9", + "9" + ], + [ + "Ġen", + "s" + ], + [ + "Ġat", + "t" + ], + [ + "Ġele", + "ment" + ], + [ + "Ġth", + "ree" + ], + [ + "çļĦç", + "¾" + ], + [ + "Ġc", + "ult" + ], + [ + "æŁIJ", + "个" + ], + [ + "Ġprovid", + "ing" + ], + [ + "æ¯Ķ", + "è¾ĥ" + ], + [ + "Ġinter", + "n" + ], + [ + "ä¼ł", + "è¾ĵ" + ], + [ + "常è§ģ", + "çļĦ" + ], + [ + "iv", + "ely" + ], + [ + "Ġ\\(", + "\\" + ], + [ + "è§Ĩ", + "è§ī" + ], + [ + "ut", + "ions" + ], + [ + "æĢģ", + "度" + ], + [ + "Ġpro", + "ject" + ], + [ + "ul", + "l" + ], + [ + "èĩª", + "çͱ" + ], + [ + "çº", + "¸" + ], + [ + "éĺ¶", + "段" + ], + [ + "åıį", + "æĺł" + ], + [ + "èį", + "ī" + ], + [ + "Ġm", + "u" + ], + [ + "s", + "h" + ], + [ + "çº", + "ª" + ], + [ + "T", + "h" + ], + [ + "Ġsug", + "gest" + ], + [ + "it", + "le" + ], + [ + "ç½", + "²" + ], + [ + "éĢļè¿ĩ", + "ä¸Ĭè¿°" + ], + [ + "åħ±", + "享" + ], + [ + "æĿ¥", + "æºIJ" + ], + [ + "ä¼ĺ", + "åĬ¿" + ], + [ + "åİŁ", + "çIJĨ" + ], + [ + "åŃ¦ä¹ł", + "åĴĮ" + ], + [ + "å¤", + "ı" + ], + [ + "ãģ", + "¾" + ], + [ + "ellig", + "ence" + ], + [ + "çĭ¬çī¹", + "çļĦ" + ], + [ + "ë", + "ĭ" + ], + [ + "åĢ", + "¾" + ], + [ + "iv", + "ers" + ], + [ + "åĨħ", + "åŃĺ" + ], + [ + "容", + "æĺĵ" + ], + [ + "Ġ1", + "4" + ], + [ + "Ġen", + "ergy" + ], + [ + "å¨", + "ģ" + ], + [ + "Ġpro", + "m" + ], + [ + "Ġide", + "a" + ], + [ + "å®īåħ¨", + "æĢ§" + ], + [ + "ruct", + "ure" + ], + [ + "Ġs", + "ides" + ], + [ + "çģ", + "¯" + ], + [ + "]", + "," + ], + [ + "res", + "ult" + ], + [ + "Ġm", + "il" + ], + [ + "æĮĩ", + "çļĦæĺ¯" + ], + [ + "åĮħæĭ¬", + "ä½Ĩä¸į" + ], + [ + "åĮħæĭ¬ä½Ĩä¸į", + "éĻIJäºİ" + ], + [ + "v", + "es" + ], + [ + "å®ŀ", + "ä¾ĭ" + ], + [ + "Ġtr", + "ue" + ], + [ + "ä»ĸ", + "çļĦ" + ], + [ + "ä½ĵ", + "çļĦ" + ], + [ + "Ġf", + "iel" + ], + [ + "en", + "se" + ], + [ + "ot", + "e" + ], + [ + "`", + "ï¼Į" + ], + [ + "è", + "Ĩ" + ], + [ + "Ġwe", + "re" + ], + [ + "åĽŀ", + "çŃĶ" + ], + [ + "ç¬", + "Ķ" + ], + [ + "on", + "t" + ], + [ + "ĠT", + "h" + ], + [ + "ç»Ħ", + "åIJĪ" + ], + [ + "h", + "t" + ], + [ + "é¥", + "°" + ], + [ + "ot", + "her" + ], + [ + "Ù", + "Ħ" + ], + [ + "æĸĩ", + "åѦ" + ], + [ + "xim", + "ately" + ], + [ + "è´", + "¡" + ], + [ + "æ¯ı", + "个人" + ], + [ + "Ġimport", + "ant" + ], + [ + "Ġm", + "illion" + ], + [ + "ç»", + "ĺ" + ], + [ + "è·¯", + "å¾Ħ" + ], + [ + "oo", + "gle" + ], + [ + "Ġprogram", + "ming" + ], + [ + "6", + "0" + ], + [ + "s", + "um" + ], + [ + "ä¸Ģ", + "段" + ], + [ + "æľī", + "ä¸Ģ个" + ], + [ + "åħ¬", + "å¼ı" + ], + [ + "æĹłè®º", + "æĺ¯" + ], + [ + "è®", + "¢" + ], + [ + "æĬ", + "Ĺ" + ], + [ + "è§Ĵ", + "度" + ], + [ + "Ġenviron", + "ment" + ], + [ + "I", + "D" + ], + [ + "Ģ", + "æľī" + ], + [ + "åĨ", + "Į" + ], + [ + "Ġrem", + "ain" + ], + [ + "Ġpl", + "atform" + ], + [ + "s", + "on" + ], + [ + "æľĢ", + "大" + ], + [ + "Ġo", + "pt" + ], + [ + "çļĦ", + "åŁºæľ¬" + ], + [ + "èĩ³", + "åħ³" + ], + [ + "èį¯", + "çī©" + ], + [ + "ar", + "m" + ], + [ + "æı", + "Ĵ" + ], + [ + "ib", + "r" + ], + [ + "è´¡", + "çĮ®" + ], + [ + "Ġa", + "fter" + ], + [ + "oh", + "n" + ], + [ + "æ±", + "ł" + ], + [ + "Ġb", + "ack" + ], + [ + "åį", + "ļ" + ], + [ + "Ġser", + "ies" + ], + [ + "t", + "ime" + ], + [ + "ĠS", + "p" + ], + [ + "er", + "ing" + ], + [ + "Ġn", + "etwor" + ], + [ + "us", + "s" + ], + [ + "Ġdesc", + "rib" + ], + [ + "é«ĺ", + "çļĦ" + ], + [ + "ĠY", + "ou" + ], + [ + "al", + "se" + ], + [ + "ä»ĸ们", + "çļĦ" + ], + [ + "åĮ", + "¹" + ], + [ + "t", + "y" + ], + [ + "æ", + "¥" + ], + [ + "è¯", + "ļ" + ], + [ + "æĿ", + "ij" + ], + [ + "æľ", + "¨" + ], + [ + "çļĦæ°", + "´" + ], + [ + "æķĪçİĩ", + "åĴĮ" + ], + [ + "å»", + "¶" + ], + [ + "av", + "es" + ], + [ + "per", + "ature" + ], + [ + "æĪij", + "æĥ³" + ], + [ + "yth", + "ing" + ], + [ + "ä¹", + "İ" + ], + [ + "æĶ¹", + "åĸĦ" + ], + [ + "éĵ¶", + "è¡Į" + ], + [ + "ï¼ļ", + "âĢľ" + ], + [ + "çŁ", + "©" + ], + [ + "åıĺ", + "å¾Ĺ" + ], + [ + "å®", + "½" + ], + [ + "åı¯ä»¥", + "帮åĬ©ä½ł" + ], + [ + "éģį", + "åİĨ" + ], + [ + "èĢĮ", + "ä¸įæĺ¯" + ], + [ + "Ġs", + "n" + ], + [ + "an", + "k" + ], + [ + "æ´", + "ŀ" + ], + [ + "è¿Ļ", + "æĺ¯ä¸Ģ个" + ], + [ + "¡", + "çľł" + ], + [ + "Ġ", + "è¾ĵåĩº" + ], + [ + "__", + "__" + ], + [ + "äº", + "¬" + ], + [ + "D", + "o" + ], + [ + "Ġs", + "ur" + ], + [ + "Ġal", + "ways" + ], + [ + "è±", + "Ĩ" + ], + [ + "Ġw", + "ater" + ], + [ + "st", + "it" + ], + [ + "éĿ", + "Ĵ" + ], + [ + "Ġl", + "im" + ], + [ + "Ġh", + "ig" + ], + [ + "`", + "," + ], + [ + "m", + "a" + ], + [ + "Ġposs", + "ible" + ], + [ + "Ġc", + "ir" + ], + [ + "Ġstate", + "ment" + ], + [ + "Ġmach", + "ine" + ], + [ + "Ġinteg", + "er" + ], + [ + "èĵ", + "Ŀ" + ], + [ + "ĠA", + "s" + ], + [ + "Ġh", + "our" + ], + [ + "丰å¯Į", + "çļĦ" + ], + [ + "Ġinterest", + "ed" + ], + [ + "±", + "ä¹IJ" + ], + [ + "æ³", + "¡" + ], + [ + "åį", + "ĥ" + ], + [ + "综", + "åIJĪ" + ], + [ + "ãĢĤ", + "âĢĿ" + ], + [ + "åįķ", + "è¯į" + ], + [ + "Ġc", + "ity" + ], + [ + "le", + "t" + ], + [ + "åĨ", + "Ľ" + ], + [ + "Ġin", + "de" + ], + [ + "Ġdet", + "erm" + ], + [ + "寻", + "æ±Ĥ" + ], + [ + "è¿Ľ", + "åħ¥" + ], + [ + "Ġbe", + "aut" + ], + [ + "Ġa", + "ir" + ], + [ + "Ð", + "»" + ], + [ + "Ġd", + "i" + ], + [ + "Ġhe", + "alth" + ], + [ + "é¡", + "»" + ], + [ + "n", + "ess" + ], + [ + "ç¢", + "³" + ], + [ + "å°", + "ģ" + ], + [ + "çļĦæ", + "´" + ], + [ + "`", + "." + ], + [ + "æĢ", + "İ" + ], + [ + "ä½į", + "äºİ" + ], + [ + "æ±½", + "车" + ], + [ + "çݯå¢ĥ", + "ä¸Ń" + ], + [ + "åĬĽ", + "åĴĮ" + ], + [ + "å½ĵ", + "åľ°" + ], + [ + "Ġob", + "ject" + ], + [ + "at", + "ural" + ], + [ + "å®Į", + "æķ´" + ], + [ + "ĠF", + "r" + ], + [ + "çĶ", + "³" + ], + [ + "Ġv", + "ary" + ], + [ + "Ġcont", + "ent" + ], + [ + "Ġb", + "it" + ], + [ + "Ġo", + "ur" + ], + [ + "çļĦç", + "ĥ" + ], + [ + "Ġun", + "ique" + ], + [ + "Ġwith", + "out" + ], + [ + "åĴĮ", + "è°" + ], + [ + "è¯Ń", + "éŁ³" + ], + [ + "åĪ", + "ł" + ], + [ + "伦", + "çIJĨ" + ], + [ + "our", + "ce" + ], + [ + "åĿ", + "ı" + ], + [ + "a", + "ve" + ], + [ + "çļĦ", + "æĸ¹å¼ı" + ], + [ + "Ġbe", + "ing" + ], + [ + "Ġc", + "ase" + ], + [ + "æ¯ı", + "ä¸Ģ" + ], + [ + "Ġs", + "al" + ], + [ + "èĤ", + "¤" + ], + [ + "Ġb", + "el" + ], + [ + "èĪ", + "Ĵ" + ], + [ + "Ġsec", + "urity" + ], + [ + "ç", + "¹ģ" + ], + [ + "u", + "ally" + ], + [ + "éĩį", + "æĸ°" + ], + [ + "çŃī", + "é¢ĨåŁŁ" + ], + [ + "é¢ĺ", + "缮" + ], + [ + "çļĦæ¯", + "ı" + ], + [ + "çļĦ", + "使ç͍" + ], + [ + "éĿ", + "©" + ], + [ + "ĠS", + "e" + ], + [ + "ãģ", + "«" + ], + [ + "Ġsc", + "ript" + ], + [ + "éĤ£", + "äºĽ" + ], + [ + "Ġm", + "on" + ], + [ + "æ®", + "Ĭ" + ], + [ + "身", + "份" + ], + [ + "Ġa", + "p" + ], + [ + "ĠR", + "e" + ], + [ + "'", + ":" + ], + [ + "ç͵", + "èĦij" + ], + [ + "è§Ĥ", + "å¯Ł" + ], + [ + "è¿Ļ", + "æĦıåij³çĿĢ" + ], + [ + "æ¡Ĩ", + "æŀ¶" + ], + [ + "çļĦç¼", + "ĸ" + ], + [ + "Ġinclud", + "es" + ], + [ + "åı", + "³" + ], + [ + "Ġl", + "og" + ], + [ + "à", + "¤" + ], + [ + "çļĦç¾", + "İ" + ], + [ + "Ġ", + "er" + ], + [ + "Ġim", + "p" + ], + [ + "Ġ1", + "3" + ], + [ + "çľ", + "ģ" + ], + [ + "n", + "er" + ], + [ + "书", + "ç±į" + ], + [ + "çī¹", + "æ®Ĭ" + ], + [ + "åıĤ", + "åĬł" + ], + [ + "Ġd", + "ate" + ], + [ + "åıij", + "å¸ĥ" + ], + [ + "çļĦæī", + "Ģæľī" + ], + [ + "è¯", + "Ĭ" + ], + [ + "Ġp", + "ublic" + ], + [ + "éĥ¨", + "ç½²" + ], + [ + "ro", + "ss" + ], + [ + "ãģ", + "Ħ" + ], + [ + "åĪł", + "éϤ" + ], + [ + "Ġ", + "%" + ], + [ + "iz", + "ation" + ], + [ + "ä¼ł", + "æĴŃ" + ], + [ + "Ġma", + "xim" + ], + [ + "re", + "ate" + ], + [ + "b", + "ox" + ], + [ + "ç", + "ij" + ], + [ + "Ġd", + "own" + ], + [ + "èŃ", + "¦" + ], + [ + "Ġcour", + "se" + ], + [ + "so", + "le" + ], + [ + "Ġ", + "åĴĮ" + ], + [ + "åº", + "§" + ], + [ + "以ä¸ĭ", + "åĩł" + ], + [ + "ĠM", + "y" + ], + [ + "Ġ", + "Q" + ], + [ + "ï¼ī", + "ï¼ļ" + ], + [ + "éĢļ", + "ä¿¡" + ], + [ + "R", + "e" + ], + [ + "è½", + "®" + ], + [ + "ä¸Ĭ", + "ä¸ĭ" + ], + [ + "ç¥", + "Ŀ" + ], + [ + ":", + ":" + ], + [ + "g", + "or" + ], + [ + "è", + "ĸ" + ], + [ + "å¹´", + "é¾Ħ" + ], + [ + "Ġinv", + "ol" + ], + [ + "Ġtem", + "perature" + ], + [ + "ä¿¡", + "ä»»" + ], + [ + "æıIJ", + "éĹ®" + ], + [ + "Ġpro", + "f" + ], + [ + "i", + "er" + ], + [ + "è®°", + "å¿Ĩ" + ], + [ + "森", + "æŀĹ" + ], + [ + "ä¸įä»ħ", + "èĥ½å¤Ł" + ], + [ + "æĤ£", + "èĢħ" + ], + [ + "g", + "er" + ], + [ + "ç»Ļ", + "å®ļ" + ], + [ + "çļĦ", + "å°ı" + ], + [ + "è¯Ń", + "åı¥" + ], + [ + "ä½ł", + "éľĢè¦ģ" + ], + [ + "éģµ", + "å®Ī" + ], + [ + "Ġro", + "le" + ], + [ + "åŃĹ", + "åħ¸" + ], + [ + "Ġrele", + "ased" + ], + [ + "E", + "x" + ], + [ + "b", + "in" + ], + [ + "EC", + "T" + ], + [ + "o", + "y" + ], + [ + "æ¿Ģ", + "åıij" + ], + [ + "çĶ", + "ļ" + ], + [ + "Ġcon", + "vert" + ], + [ + "Ġcomm", + "and" + ], + [ + "åĮ¹", + "éħį" + ], + [ + "ploye", + "es" + ], + [ + "çļĦç", + "Ł¥" + ], + [ + "é", + "º" + ], + [ + "é¦", + "Ĩ" + ], + [ + "å¡", + "ij" + ], + [ + "Ġpos", + "itive" + ], + [ + "O", + "N" + ], + [ + "Ġcon", + "cept" + ], + [ + "ĠE", + "arth" + ], + [ + "Ġfriend", + "ly" + ], + [ + "åı¯", + "éĿł" + ], + [ + "å°ı", + "æĹ¶" + ], + [ + "åºĶç͍", + "ç¨ĭåºı" + ], + [ + "è¿Ļ", + "段" + ], + [ + "Ġind", + "ivid" + ], + [ + "w", + "s" + ], + [ + "Ġnam", + "ed" + ], + [ + "Ġpl", + "an" + ], + [ + "Ġs", + "ort" + ], + [ + "Ġdo", + "c" + ], + [ + "è§Ĥ", + "çĤ¹" + ], + [ + "ãģ", + "§" + ], + [ + "Ġis", + "s" + ], + [ + "ä¸ĭ", + "çļĦ" + ], + [ + "设", + "æĸ½" + ], + [ + "åĴĮè°", + "IJ" + ], + [ + "空", + "æ°Ķ" + ], + [ + "æij", + "©" + ], + [ + "åĬ", + "³" + ], + [ + "请", + "æıIJä¾Ľ" + ], + [ + "Ġs", + "ources" + ], + [ + "ĠC", + "om" + ], + [ + "å¤įæĿĤ", + "度" + ], + [ + "a", + "pt" + ], + [ + "Ġsecon", + "d" + ], + [ + "æĶ»", + "åĩ»" + ], + [ + "'", + ")" + ], + [ + "Ġo", + "wn" + ], + [ + "Ġmean", + "ing" + ], + [ + "éĢ", + "Ģ" + ], + [ + "ä½", + "Ľ" + ], + [ + "è¡", + "£" + ], + [ + "ch", + "o" + ], + [ + "æľī", + "ä»Ģä¹Ī" + ], + [ + "æ²", + "³" + ], + [ + "缸", + "åºĶ" + ], + [ + "è", + "Ķ" + ], + [ + "çļĦ", + "å̼" + ], + [ + "Ġeff", + "ect" + ], + [ + "L", + "ECT" + ], + [ + "s", + "et" + ], + [ + "og", + "n" + ], + [ + "H", + "T" + ], + [ + "Ġ", + "```" + ], + [ + "åIJ", + "ĥ" + ], + [ + "æĥħ", + "绪" + ], + [ + "éķ", + "ĩ" + ], + [ + "oc", + "us" + ], + [ + "éĢĤ", + "å½ĵ" + ], + [ + "å¿ħ", + "é¡»" + ], + [ + "çĶļ", + "èĩ³" + ], + [ + "åĽ¾", + "çīĩ" + ], + [ + "çļĦæĮ", + "ĩ" + ], + [ + "çļĦ", + "åŁºç¡Ģ" + ], + [ + "Ġph", + "ys" + ], + [ + "ç»", + "Ŀ" + ], + [ + "al", + "ity" + ], + [ + "æīĵ", + "å¼Ģ" + ], + [ + "Ġt", + "re" + ], + [ + "Ġbec", + "ause" + ], + [ + "ir", + "t" + ], + [ + "çļĦæĥħåĨµ", + "ä¸ĭ" + ], + [ + "Ġp", + "at" + ], + [ + "Ġ2", + "00" + ], + [ + "åĮĸ", + "åѦ" + ], + [ + "åģı", + "好" + ], + [ + "éĹ", + "Ń" + ], + [ + "åľ°", + "åĿĢ" + ], + [ + "it", + "er" + ], + [ + "ag", + "ing" + ], + [ + "å¦Ĥä½ķ", + "åľ¨" + ], + [ + "Ġt", + "ake" + ], + [ + "åIJį", + "为" + ], + [ + "åį", + "´" + ], + [ + "åĪĨ", + "åĪ«" + ], + [ + "çļĦç", + "ľ" + ], + [ + "Ġpl", + "ace" + ], + [ + "æľĢ", + "è¿ij" + ], + [ + "Ġ$", + "\\" + ], + [ + "Ã", + "¡" + ], + [ + "numb", + "er" + ], + [ + "Ġmaxim", + "um" + ], + [ + "ç¯", + "ĩ" + ], + [ + "r", + "ue" + ], + [ + "ĠI", + "nt" + ], + [ + "Ġ2", + "4" + ], + [ + "èĥ", + "ŀ" + ], + [ + "c", + "ase" + ], + [ + "Ġde", + "ep" + ], + [ + "RO", + "M" + ], + [ + "s", + "c" + ], + [ + "Ġin", + "cre" + ], + [ + "ĠW", + "e" + ], + [ + "éĥ½", + "ä¼ļ" + ], + [ + "ç²¾", + "ç¥ŀ" + ], + [ + "å", + "©" + ], + [ + "åįı", + "ä½ľ" + ], + [ + "åı¯ä»¥", + "æĺ¯" + ], + [ + "çŃī", + "å¤ļ个" + ], + [ + "çĽij", + "æµĭ" + ], + [ + "åĴĮ", + "æľįåĬ¡" + ], + [ + "Ġd", + "ue" + ], + [ + "Ġe", + "ar" + ], + [ + "è¿IJ", + "èIJ¥" + ], + [ + "o", + "f" + ], + [ + "æ±", + "¡" + ], + [ + "é«ĺ", + "度" + ], + [ + "æī", + "¹" + ], + [ + "çĸ", + "«" + ], + [ + "Ġindivid", + "ual" + ], + [ + "èĩªçĦ¶è¯Ńè¨Ģ", + "å¤ĦçIJĨ" + ], + [ + "e", + "le" + ], + [ + "s", + "ive" + ], + [ + "ä¹Ł", + "èĥ½" + ], + [ + "æĻº", + "æħ§" + ], + [ + "s", + "ort" + ], + [ + "a", + "f" + ], + [ + "åħ¬åı¸", + "çļĦ" + ], + [ + "ç͍", + "æĿ¥" + ], + [ + "çī¹", + "æĢ§" + ], + [ + "è", + "ļ" + ], + [ + "Ġex", + "act" + ], + [ + "åŃĹ", + "æ¯į" + ], + [ + "pl", + "ace" + ], + [ + "å¾Ī", + "å¤ļ" + ], + [ + "æĽ´", + "åĩĨç¡®" + ], + [ + "æľīæīĢ", + "帮åĬ©" + ], + [ + "ä¹ĭ", + "åīį" + ], + [ + "Ġt", + "akes" + ], + [ + "r", + "al" + ], + [ + "å®ĥ们", + "çļĦ" + ], + [ + "çݰ", + "åľ¨" + ], + [ + "å¹", + "ķ" + ], + [ + "Ġd", + "uring" + ], + [ + "ç¼ĸ", + "è¾ij" + ], + [ + "g", + "re" + ], + [ + "ä»", + "¿" + ], + [ + "æľī", + "ä¸Ģ" + ], + [ + "t", + "ers" + ], + [ + "Ġs", + "ince" + ], + [ + "ent", + "ion" + ], + [ + "æĬ", + "½" + ], + [ + "页", + "éĿ¢" + ], + [ + "æ½ľ", + "åľ¨" + ], + [ + "è¯Ń", + "æ³ķ" + ], + [ + "Ġf", + "ocus" + ], + [ + "æĢĿ", + "ç»´" + ], + [ + "Ġloc", + "ated" + ], + [ + "!", + "\"" + ], + [ + "çº", + "³" + ], + [ + "缸åħ³", + "çļĦ" + ], + [ + "é¡", + "¶" + ], + [ + "Ġhelp", + "ful" + ], + [ + "Ġfact", + "or" + ], + [ + "ang", + "le" + ], + [ + "缴", + "åΰ" + ], + [ + "ĠSt", + "ates" + ], + [ + "æ¹", + "¿" + ], + [ + "æį", + "·" + ], + [ + "éĵ", + "ģ" + ], + [ + "è´Ł", + "è´£" + ], + [ + "ict", + "ion" + ], + [ + "Ġn", + "atural" + ], + [ + "Ġor", + "gan" + ], + [ + "å¨", + "±ä¹IJ" + ], + [ + "c", + "hes" + ], + [ + "Ġle", + "ft" + ], + [ + "Ġbl", + "ue" + ], + [ + "o", + "k" + ], + [ + "é»", + "ĺ" + ], + [ + "Ġma", + "de" + ], + [ + "Ġprovid", + "es" + ], + [ + "p", + "ose" + ], + [ + "çļĦç", + "ģ" + ], + [ + "éķ", + "ľ" + ], + [ + "åĿ", + "IJ" + ], + [ + "æĿ¥", + "å®ŀçݰ" + ], + [ + "ind", + "ows" + ], + [ + "ab", + "ilities" + ], + [ + "请", + "注æĦı" + ], + [ + "Ġte", + "am" + ], + [ + "éĢł", + "æĪIJ" + ], + [ + "çļĦ", + "èĥ½åĬĽ" + ], + [ + "éĨ", + "Ĵ" + ], + [ + "ç͍æĪ·", + "çļĦ" + ], + [ + "æĹ", + "ĭ" + ], + [ + "ra", + "ce" + ], + [ + "Ġph", + "rase" + ], + [ + "1", + "7" + ], + [ + "对", + "æĸ¹" + ], + [ + "Ġa", + "ge" + ], + [ + "ĠA", + "nd" + ], + [ + "çļĦ", + "é£İéĻ©" + ], + [ + "Ġa", + "ut" + ], + [ + "åį", + "«" + ], + [ + "ä¸Ģ", + "èĩ´" + ], + [ + "ç»Ĩ", + "èĥŀ" + ], + [ + "æĬĢæľ¯çļĦ", + "åıijå±ķ" + ], + [ + "çĶŁæĪIJ", + "ä¸Ģ个" + ], + [ + "Ġdiv", + "is" + ], + [ + "å°¤åħ¶", + "æĺ¯" + ], + [ + "çŃī", + "æĸ¹éĿ¢" + ], + [ + "Ġas", + "king" + ], + [ + "缮", + "çļĦ" + ], + [ + "第", + "äºĮ" + ], + [ + "èĪĴ", + "éĢĤ" + ], + [ + "æĬ", + "ĺ" + ], + [ + "Ġrec", + "ent" + ], + [ + "åįı", + "è®®" + ], + [ + "è¾", + "Ĩ" + ], + [ + "å·", + "¨" + ], + [ + "åī", + "Ĥ" + ], + [ + "t", + "he" + ], + [ + "æķ°", + "çļĦ" + ], + [ + "Ġhe", + "art" + ], + [ + "val", + "ue" + ], + [ + "éĿ¢", + "临" + ], + [ + "å®ŀéĻħ", + "ä¸Ĭ" + ], + [ + "æĿ", + "¯" + ], + [ + "d", + "d" + ], + [ + "Ġ", + "X" + ], + [ + "è´", + "µ" + ], + [ + "è¯ģ", + "æĺİ" + ], + [ + "å±", + "ı" + ], + [ + "ne", + "w" + ], + [ + "od", + "y" + ], + [ + "éģµ", + "循" + ], + [ + "Ġglob", + "al" + ], + [ + "Ġdep", + "ending" + ], + [ + "åĩ", + "Ģ" + ], + [ + "å·", + "¦" + ], + [ + "Ġ", + "Ø" + ], + [ + "æĽ´", + "åħ·ä½ĵçļĦ" + ], + [ + "帮åĬ©", + "æĤ¨" + ], + [ + "缸", + "äºĴ" + ], + [ + "Ġreturn", + "s" + ], + [ + "å¸ĮæľĽè¿ĻäºĽ", + "建议" + ], + [ + "Ġimpro", + "ve" + ], + [ + "Ġmu", + "ch" + ], + [ + "ä»ĸ", + "人" + ], + [ + "å¼", + "¹" + ], + [ + "4", + "5" + ], + [ + "åįķ", + "ä½į" + ], + [ + "çĦ", + "¦" + ], + [ + "åĪĹ表", + "ä¸Ń" + ], + [ + "`", + "ãĢĤ" + ], + [ + "con", + "om" + ], + [ + "èĥ½", + "éĩı" + ], + [ + "Ġcal", + "led" + ], + [ + "Ġr", + "ate" + ], + [ + "é¢Ħ", + "ç®Ĺ" + ], + [ + "èĩ³åħ³", + "éĩįè¦ģ" + ], + [ + "a", + "cc" + ], + [ + "ç»ĵ", + "æĿŁ" + ], + [ + "åı¯ä»¥", + "èĢĥèĻij" + ], + [ + "ç»Ĩ", + "èĬĤ" + ], + [ + "Ġ", + "ve" + ], + [ + "对", + "ä½ł" + ], + [ + "ĠThe", + "se" + ], + [ + "è¿ĩ", + "度" + ], + [ + "if", + "ied" + ], + [ + "è¯Ħ", + "ä»·" + ], + [ + "æķ°æį®", + "éĽĨ" + ], + [ + "é«ĺ", + "è´¨éĩı" + ], + [ + "èŀį", + "åIJĪ" + ], + [ + "åİŁ", + "åĪĻ" + ], + [ + "Ġappro", + "ximately" + ], + [ + "Ġrep", + "resent" + ], + [ + "ific", + "ial" + ], + [ + "as", + "on" + ], + [ + "æĸ¹", + "ç¨ĭ" + ], + [ + "Ġso", + "cial" + ], + [ + "Ġf", + "ig" + ], + [ + "SE", + "LECT" + ], + [ + "##", + "##" + ], + [ + "人", + "æ°ij" + ], + [ + "ãĢ", + "ij" + ], + [ + "he", + "st" + ], + [ + "ãĢ", + "IJ" + ], + [ + "Ġdig", + "ital" + ], + [ + "以ä¸ĭåĩłä¸ª", + "æĸ¹éĿ¢" + ], + [ + "Ġc", + "lo" + ], + [ + "å°Ĩ", + "åħ¶" + ], + [ + "çļĦ", + "åĨħ容" + ], + [ + "æı", + "¡" + ], + [ + "r", + "andom" + ], + [ + "å·", + "ŀ" + ], + [ + "è´Ń", + "çī©" + ], + [ + "h", + "ou" + ], + [ + "éĥ¨", + "éŨ" + ], + [ + "Ġsn", + "ipp" + ], + [ + "t", + "ract" + ], + [ + "çݰ", + "象" + ], + [ + "Ġneed", + "s" + ], + [ + "æķ°", + "åĪĹ" + ], + [ + "Ġg", + "ame" + ], + [ + "Ġt", + "ri" + ], + [ + "è´", + "´" + ], + [ + "çĭ¬", + "ç«ĭ" + ], + [ + "å¿ħè¦ģ", + "çļĦ" + ], + [ + "èĪ", + "ŀ" + ], + [ + "æ¸ħ", + "æ´ģ" + ], + [ + "象", + "å¾ģ" + ], + [ + "è½»", + "æĿ¾" + ], + [ + "é¸", + "¡" + ], + [ + "åĨ²", + "çªģ" + ], + [ + "Ġgener", + "al" + ], + [ + "Ġb", + "lo" + ], + [ + "çļĦæĦ", + "Ł" + ], + [ + "åĨħ", + "çļĦ" + ], + [ + "Ñ", + "ĥ" + ], + [ + "in", + "s" + ], + [ + "çļĦçŁ¥", + "è¯Ĩ" + ], + [ + "模", + "åĿĹ" + ], + [ + "éϤ", + "äºĨ" + ], + [ + "è¦", + "Ĩ" + ], + [ + "y", + "le" + ], + [ + "Ġint", + "elligence" + ], + [ + "åĨĻ", + "ä½ľ" + ], + [ + "Ġ", + "ed" + ], + [ + "Ġra", + "d" + ], + [ + "c", + "ing" + ], + [ + "P", + "lease" + ], + [ + "v", + "ed" + ], + [ + "èĥ½", + "帮åĬ©ä½ł" + ], + [ + "é¢Ŀ", + "å¤ĸ" + ], + [ + "Ġmark", + "et" + ], + [ + "Ġn", + "ight" + ], + [ + "in", + "put" + ], + [ + "æķ°æį®", + "åĪĨæŀIJ" + ], + [ + "æ´", + "²" + ], + [ + "m", + "e" + ], + [ + "w", + "h" + ], + [ + "Ġe", + "as" + ], + [ + "å¤ļ", + "å°ij" + ], + [ + "ãģ", + "¯" + ], + [ + "o", + "ck" + ], + [ + "C", + "reate" + ], + [ + "Ġloo", + "p" + ], + [ + "W", + "hen" + ], + [ + "ç", + "ħ" + ], + [ + "g", + "s" + ], + [ + "åı¯ä»¥", + "æł¹æį®" + ], + [ + "Ġrec", + "ogn" + ], + [ + "æĸ°", + "éĹ»" + ], + [ + "Ġ\\)", + "," + ], + [ + "ä¼ij", + "æģ¯" + ], + [ + "ĠM", + "a" + ], + [ + "ä¸Ĭä¸ĭ", + "æĸĩ" + ], + [ + "Ġm", + "em" + ], + [ + "åĬł", + "强" + ], + [ + "æ±", + "Ł" + ], + [ + "éĺ¿éĩĮå·´å·´", + "éĽĨåĽ¢" + ], + [ + "Ġsing", + "le" + ], + [ + "æ´", + "ĭ" + ], + [ + "P", + "U" + ], + [ + "im", + "ate" + ], + [ + "çļĦæ²", + "ŁéĢļ" + ], + [ + "åľ¨", + "æŁIJäºĽ" + ], + [ + "æµ", + "ª" + ], + [ + "ä¸", + "Ŀ" + ], + [ + "表", + "éĿ¢" + ], + [ + "èī¯", + "好" + ], + [ + "æŀ¶", + "æŀĦ" + ], + [ + "éĺ", + "»" + ], + [ + "ãģ", + "ª" + ], + [ + "åı¯æĮģç»Ń", + "åıijå±ķ" + ], + [ + "Ġen", + "h" + ], + [ + "sq", + "l" + ], + [ + "çŃī", + "äºİ" + ], + [ + "Ġmulti", + "ple" + ], + [ + "pl", + "ic" + ], + [ + "æĸĩ", + "åŃĹ" + ], + [ + "ä¹Ł", + "ä¼ļ" + ], + [ + "éĩ", + "İ" + ], + [ + "ount", + "ain" + ], + [ + "2", + "00" + ], + [ + "l", + "ing" + ], + [ + "åζ", + "éĢł" + ], + [ + "âĢĿ", + "ï¼Ī" + ], + [ + "Ġdis", + "c" + ], + [ + "A", + "PI" + ], + [ + "Ġ1", + "7" + ], + [ + "èĻ", + "«" + ], + [ + "éļ", + "Ķ" + ], + [ + "pl", + "ify" + ], + [ + "Ġcl", + "ar" + ], + [ + "åΰ", + "äºĨ" + ], + [ + "æ¹", + "ĸ" + ], + [ + "Ġd", + "er" + ], + [ + "Ġrequ", + "est" + ], + [ + "æĹ¶", + "åĢĻ" + ], + [ + "æľªæĿ¥", + "çļĦ" + ], + [ + "ç½", + "Ĺ" + ], + [ + "åħ¬", + "å¹³" + ], + [ + "Ġch", + "ang" + ], + [ + "æĮĩ", + "导" + ], + [ + "åı", + "«" + ], + [ + "Ġl", + "ess" + ], + [ + "æľī", + "çĿĢ" + ], + [ + "çļĦæł", + "¸" + ], + [ + "pp", + "er" + ], + [ + "on", + "y" + ], + [ + "éĢĤ", + "ç͍äºİ" + ], + [ + "Ġ", + "Ã" + ], + [ + "å®ļ", + "ä½į" + ], + [ + "æľī", + "è¶£" + ], + [ + "çļĦæŃ", + "£" + ], + [ + "Java", + "Script" + ], + [ + "åĬ¨", + "åĬĽ" + ], + [ + "un", + "d" + ], + [ + "ð", + "Ł" + ], + [ + "å¼Ģåıij", + "èĢħ" + ], + [ + "ç¾İ", + "åĽ½" + ], + [ + "èĪ", + "¬" + ], + [ + "..", + "." + ], + [ + "åĪĨ", + "为" + ], + [ + "çļĦæĮ", + "ijæĪĺ" + ], + [ + "Ġam", + "ount" + ], + [ + "Ġfil", + "m" + ], + [ + "å°½", + "éĩı" + ], + [ + "çļĦæ³", + "ķ" + ], + [ + "Ġprim", + "ary" + ], + [ + "Ġpop", + "ular" + ], + [ + "um", + "e" + ], + [ + "s", + "elf" + ], + [ + "8", + "0" + ], + [ + "æ¯Ķ", + "èµĽ" + ], + [ + "åIJį", + "åŃĹ" + ], + [ + "å¡", + "«" + ], + [ + "èĩªåĬ¨", + "åĮĸ" + ], + [ + "Ġ", + "es" + ], + [ + "磩", + "éĺµ" + ], + [ + "re", + "hen" + ], + [ + "ł", + "éģĵ" + ], + [ + "为", + "ä»Ģä¹Ī" + ], + [ + "çı", + "Ń" + ], + [ + "Ġcap", + "abilities" + ], + [ + "Ġsnipp", + "et" + ], + [ + "è·", + "Ł" + ], + [ + "<", + "/" + ], + [ + "Ð", + "º" + ], + [ + "è¸", + "ª" + ], + [ + "en", + "ces" + ], + [ + "Ġwid", + "ely" + ], + [ + "Ġd", + "el" + ], + [ + "Ġcon", + "c" + ], + [ + "n", + "ov" + ], + [ + "åİ", + "ļ" + ], + [ + "è¿Ļ个", + "éĹ®é¢ĺ" + ], + [ + "éĢļ常", + "ä¼ļ" + ], + [ + "ä¿Ŀ", + "åŃĺ" + ], + [ + "at", + "s" + ], + [ + "è¿ľ", + "ç¨ĭ" + ], + [ + "t", + "ed" + ], + [ + "è´¦", + "æĪ·" + ], + [ + "åħ¬", + "ä¼Ĺ" + ], + [ + "O", + "S" + ], + [ + "id", + "er" + ], + [ + "Ġg", + "roup" + ], + [ + "e", + "xt" + ], + [ + "Ġn", + "ature" + ], + [ + "e", + "k" + ], + [ + "表达", + "å¼ı" + ], + [ + "Ġunderstand", + "ing" + ], + [ + "ile", + "d" + ], + [ + "Ġeff", + "ic" + ], + [ + "çͳ", + "请" + ], + [ + "è¯Ĭ", + "æĸŃ" + ], + [ + "模", + "æĭŁ" + ], + [ + "ip", + "ly" + ], + [ + "ç͍æĪ·", + "ä½ĵéªĮ" + ], + [ + "ol", + "s" + ], + [ + "éĽĨ", + "æĪIJ" + ], + [ + "éģĵ", + "å¾·" + ], + [ + "é¾", + "Ļ" + ], + [ + "com", + "e" + ], + [ + "4", + "0" + ], + [ + "Ġhist", + "ory" + ], + [ + "æİ", + "Ī" + ], + [ + "污", + "æŁĵ" + ], + [ + "é", + "Ł" + ], + [ + "æıIJé«ĺ", + "äºĨ" + ], + [ + "Ġrel", + "ated" + ], + [ + "å¥", + "Ĺ" + ], + [ + "åı¯èĥ½", + "æĺ¯" + ], + [ + "æ¯ı", + "天" + ], + [ + "an", + "cial" + ], + [ + "åģ", + "¶" + ], + [ + "Ġsc", + "ient" + ], + [ + "éĿŀ常", + "éĩįè¦ģ" + ], + [ + "ch", + "ie" + ], + [ + "åı¯ä»¥", + "ç͍äºİ" + ], + [ + "Ġorig", + "inal" + ], + [ + "æľĢ", + "å°ı" + ], + [ + "èĤ", + "Į" + ], + [ + "åij¼", + "åIJ¸" + ], + [ + "Ġno", + "vel" + ], + [ + "Ġupd", + "ates" + ], + [ + "çļĦæĥħ", + "æĦŁ" + ], + [ + "ä½ĵ", + "ç³»" + ], + [ + "èĭ±", + "è¯Ń" + ], + [ + "Al", + "ibaba" + ], + [ + "éĢĴ", + "å½Ĵ" + ], + [ + "çļĦ", + "ä¸Ģ个" + ], + [ + "ist", + "s" + ], + [ + "Ġs", + "ize" + ], + [ + "åľ¨", + "å®ŀéĻħ" + ], + [ + "d", + "ata" + ], + [ + "æĪIJ", + "为äºĨ" + ], + [ + "Ġf", + "ur" + ], + [ + "æ»", + "¤" + ], + [ + "Ġrequ", + "ire" + ], + [ + "æķı", + "æĦŁ" + ], + [ + "æİ", + "Į" + ], + [ + "ãĤ", + "ĭ" + ], + [ + "Ġt", + "est" + ], + [ + "åıij", + "éĢģ" + ], + [ + "Ġap", + "pe" + ], + [ + "Ġk", + "il" + ], + [ + "ç¨ĭ", + "度" + ], + [ + "Ġfe", + "w" + ], + [ + "æ°Ķ", + "åĢĻ" + ], + [ + "ç¡®", + "认" + ], + [ + "æĪIJ", + "æŀľ" + ], + [ + "Ġne", + "xt" + ], + [ + "ä¸ĵ", + "注" + ], + [ + "Ġvari", + "able" + ], + [ + "Ġbe", + "gin" + ], + [ + "box", + "ed" + ], + [ + "Ġs", + "il" + ], + [ + "åѦ", + "æł¡" + ], + [ + "Ġfeature", + "s" + ], + [ + "æĿ¥", + "èĩª" + ], + [ + "çļĦæĻ", + "º" + ], + [ + "å®ī", + "æİĴ" + ], + [ + "å®", + "ģ" + ], + [ + "èµĦ", + "éĩij" + ], + [ + "p", + "ar" + ], + [ + "èī²", + "彩" + ], + [ + "让", + "æĪij们" + ], + [ + "am", + "es" + ], + [ + "èIJ¥", + "åħ»" + ], + [ + "Ġf", + "ore" + ], + [ + "Ġe", + "conom" + ], + [ + "Ġg", + "ent" + ], + [ + "é©", + "±" + ], + [ + "å±ŀ", + "æĢ§" + ], + [ + "ç®Ģ", + "æ´ģ" + ], + [ + "Ġcomp", + "rehen" + ], + [ + "ç«ĭ", + "åį³" + ], + [ + "Ġ\\)", + "." + ], + [ + "Ġequ", + "al" + ], + [ + "çļĦ", + "代çłģ" + ], + [ + "Ġbeaut", + "y" + ], + [ + "大", + "è§Ħ模" + ], + [ + "åIJij", + "éĩı" + ], + [ + "ı", + "è§Ī" + ], + [ + "æľ", + "«" + ], + [ + "re", + "qu" + ], + [ + "åΰ", + "çļĦ" + ], + [ + "åĬł", + "éĢŁ" + ], + [ + "_", + "{" + ], + [ + "Ù", + "Ĭ" + ], + [ + "Ġd", + "ays" + ], + [ + "è´", + "¥" + ], + [ + "Ġstand", + "ard" + ], + [ + "ĠA", + "n" + ], + [ + "è´¹", + "ç͍" + ], + [ + "èijĹ", + "åIJį" + ], + [ + "æ±", + "ī" + ], + [ + "m", + "in" + ], + [ + "çļĦç", + "²" + ], + [ + "Ġlangu", + "ages" + ], + [ + "irt", + "ual" + ], + [ + "Ġp", + "res" + ], + [ + "Ġv", + "ast" + ], + [ + "ĥ", + "åľ" + ], + [ + "pl", + "es" + ], + [ + "çļĦæ´", + "»" + ], + [ + "åĵ", + "²" + ], + [ + "çļĦæĶ", + "¯" + ], + [ + "硬", + "ä»¶" + ], + [ + "é¢Ĩ", + "导" + ], + [ + "èĤ¡", + "票" + ], + [ + "åŀ", + "ĥåľ" + ], + [ + "åŀĥåľ", + "¾" + ], + [ + "åı¯ä»¥", + "æıIJé«ĺ" + ], + [ + "éĹ®é¢ĺ", + "æĪĸ" + ], + [ + "Ġre", + "se" + ], + [ + "æ²", + "ī" + ], + [ + "è·", + "³" + ], + [ + "Ġ", + "ê" + ], + [ + "æİ¥", + "æĶ¶" + ], + [ + "ut", + "ure" + ], + [ + "on", + "d" + ], + [ + "Ġha", + "d" + ], + [ + "满", + "æĦı" + ], + [ + "Ġav", + "ail" + ], + [ + "A", + "B" + ], + [ + "Ġpro", + "per" + ], + [ + "I", + "P" + ], + [ + "æľī", + "çļĦ" + ], + [ + "u", + "th" + ], + [ + "æĶ¶", + "åħ¥" + ], + [ + "Ġt", + "imes" + ], + [ + "è§Ħ", + "å®ļ" + ], + [ + "ç´§", + "æĢ¥" + ], + [ + "Ġloo", + "k" + ], + [ + "绣", + "计" + ], + [ + "Ġm", + "et" + ], + [ + "å²", + "ģ" + ], + [ + "Ġcon", + "d" + ], + [ + "ãĥ", + "¼" + ], + [ + "Ġassist", + "ant" + ], + [ + "dition", + "ally" + ], + [ + "Ġfiel", + "d" + ], + [ + "交", + "äºĴ" + ], + [ + "åĪĿ", + "å§ĭ" + ], + [ + "èĽĭ", + "çϽ" + ], + [ + "å", + "³" + ], + [ + "Ġs", + "ay" + ], + [ + "çĸ", + "ij" + ], + [ + "æĶ¾", + "æĿ¾" + ], + [ + "æ¶", + "¦" + ], + [ + "Ġsoft", + "ware" + ], + [ + "æľīæķĪ", + "çļĦ" + ], + [ + "æ", + "©" + ], + [ + "çĶŁ", + "éķ¿" + ], + [ + "é¢ij", + "çİĩ" + ], + [ + "T", + "rans" + ], + [ + "注", + "åĨĮ" + ], + [ + "èĭ±", + "æĸĩ" + ], + [ + "æİ¢", + "讨" + ], + [ + "顺", + "åºı" + ], + [ + "Ġl", + "and" + ], + [ + "Ġnot", + "e" + ], + [ + "p", + "os" + ], + [ + "\"", + "?" + ], + [ + "æŁ¥", + "æī¾" + ], + [ + "人", + "çī©" + ], + [ + "æĹ¶", + "æľŁ" + ], + [ + "in", + "ing" + ], + [ + "iz", + "es" + ], + [ + "åĢ", + "Ĵ" + ], + [ + "Ġgener", + "ating" + ], + [ + "Ġsome", + "one" + ], + [ + "Ġfur", + "ther" + ], + [ + "ãģ", + "Į" + ], + [ + "主", + "ä¹ī" + ], + [ + "åIJ«", + "ä¹ī" + ], + [ + "个人", + "çļĦ" + ], + [ + "åľ¨", + "ä¸Ģ个" + ], + [ + "ro", + "id" + ], + [ + "Ġn", + "ow" + ], + [ + "åį", + "·" + ], + [ + "车", + "è¾Ĩ" + ], + [ + "t", + "a" + ], + [ + "åĴĮ", + "管çIJĨ" + ], + [ + "åĢ", + "ĭ" + ], + [ + "çĹ", + "Ľ" + ], + [ + "ä»į", + "çĦ¶" + ], + [ + "è¦Ĩ", + "çĽĸ" + ], + [ + "Ġn", + "p" + ], + [ + "Ġo", + "ld" + ], + [ + "ãģ", + "¦" + ], + [ + "å½¢", + "象" + ], + [ + "èĢĮ", + "æĺ¯" + ], + [ + "Ġform", + "at" + ], + [ + "Ġfin", + "ancial" + ], + [ + "åı¥", + "è¯Ŀ" + ], + [ + "çĻ", + "¾" + ], + [ + "H", + "e" + ], + [ + "l", + "u" + ], + [ + "åĨ", + "Ĵ" + ], + [ + "æ·±", + "åĪ»" + ], + [ + "å¹¶", + "ä¸Ķ" + ], + [ + "av", + "as" + ], + [ + "åIJ¯", + "åĬ¨" + ], + [ + "å¹", + "»" + ], + [ + "Ġdat", + "ab" + ], + [ + "æľĢ", + "ä½³" + ], + [ + "Ġnam", + "es" + ], + [ + "ç¬", + "ij" + ], + [ + "âĢĿ", + "ãĢģ" + ], + [ + "Ġcomput", + "er" + ], + [ + "Ġab", + "ility" + ], + [ + "Ġparticular", + "ly" + ], + [ + "åıĸ", + "å¾Ĺ" + ], + [ + "çļĦç¬", + "¬" + ], + [ + "avas", + "cript" + ], + [ + "o", + "ice" + ], + [ + "Ġdoc", + "ument" + ], + [ + "ĠL", + "et" + ], + [ + "Ġapplic", + "ations" + ], + [ + "缮", + "åīį" + ], + [ + "Ġcle", + "ar" + ], + [ + "isp", + "ers" + ], + [ + "Ã", + "³" + ], + [ + "ç«", + "¥" + ], + [ + "è¿Ļæł·", + "çļĦ" + ], + [ + "帮", + "æĪij" + ], + [ + "çľĭ", + "èµ·æĿ¥" + ], + [ + "å¹", + "¸" + ], + [ + "å°ı", + "说" + ], + [ + "pl", + "ay" + ], + [ + "d", + "ict" + ], + [ + "is", + "hed" + ], + [ + "Ġp", + "ract" + ], + [ + "çķĮ", + "éĿ¢" + ], + [ + "Ġa", + "chie" + ], + [ + "Ġ", + "å°Ĩ" + ], + [ + "çłĶ", + "åıij" + ], + [ + "æ¼", + "«" + ], + [ + "åı¤", + "代" + ], + [ + "çļĦç¼ĸ", + "ç¨ĭ" + ], + [ + "y", + "stem" + ], + [ + "Ġwith", + "in" + ], + [ + "ç£", + "ģ" + ], + [ + "Ġm", + "ar" + ], + [ + "r", + "ight" + ], + [ + "ä¿®", + "å¤į" + ], + [ + "led", + "ge" + ], + [ + "åį", + "ł" + ], + [ + "E", + "O" + ], + [ + "æĪij们", + "çļĦ" + ], + [ + "çī©", + "æµģ" + ], + [ + "ãģ¾", + "ãģĻ" + ], + [ + "Ġcount", + "ry" + ], + [ + "Ġse", + "ver" + ], + [ + "å±ŀ", + "äºİ" + ], + [ + "N", + "A" + ], + [ + "ĠN", + "ew" + ], + [ + "åıĬ", + "åħ¶" + ], + [ + "Ġpoint", + "s" + ], + [ + "ç´", + "¯" + ], + [ + "å°½", + "åĬĽ" + ], + [ + "æĢİ", + "ä¹Ī" + ], + [ + "d", + "ing" + ], + [ + "çļĦæł¸", + "å¿ĥ" + ], + [ + "大", + "éĩıçļĦ" + ], + [ + "Ġev", + "ent" + ], + [ + "an", + "e" + ], + [ + "Ġth", + "ose" + ], + [ + "éĢīæĭ©", + "åIJĪéĢĤçļĦ" + ], + [ + "Ġinteg", + "ers" + ], + [ + "Ġ", + "æĺ¯" + ], + [ + "ab", + "les" + ], + [ + "çŃĶ", + "æ¡Ī" + ], + [ + "l", + "and" + ], + [ + "m", + "l" + ], + [ + "ãģ", + "¨" + ], + [ + "Ġder", + "iv" + ], + [ + "âĢĿãĢģ", + "âĢľ" + ], + [ + "he", + "l" + ], + [ + "Ġ", + "â" + ], + [ + "åħ", + "°" + ], + [ + "æ··", + "åIJĪ" + ], + [ + "æĢĿ", + "æĥ³" + ], + [ + "å¸ĥ", + "å±Ģ" + ], + [ + "çī", + "Ļ" + ], + [ + "æģ", + "¶" + ], + [ + "å¼ķ", + "èµ·" + ], + [ + "Ġ", + "å¦Ĥæŀľ" + ], + [ + "å°", + "¾" + ], + [ + "è¿Ļ个", + "åĩ½æķ°" + ], + [ + "è§Ĥ", + "ä¼Ĺ" + ], + [ + "åŁº", + "åĽł" + ], + [ + "ER", + "E" + ], + [ + "L", + "et" + ], + [ + "çļĦ", + "æķ°åŃĹ" + ], + [ + "è¿", + "Ń" + ], + [ + "çª", + "Ĺ" + ], + [ + "lo", + "ad" + ], + [ + "Ġdeterm", + "ine" + ], + [ + "om", + "s" + ], + [ + "åѦ", + "ä¼ļ" + ], + [ + "èĦ", + "Ĥ" + ], + [ + "if", + "t" + ], + [ + "éĿ¢", + "积" + ], + [ + "å®¶", + "人" + ], + [ + "äº", + "Ī" + ], + [ + "Ġp", + "ot" + ], + [ + "ä½ł", + "对" + ], + [ + "iv", + "ing" + ], + [ + "ç±»åŀĭ", + "çļĦ" + ], + [ + "严", + "éĩį" + ], + [ + "Ġsever", + "al" + ], + [ + "çĬ", + "¯" + ], + [ + "ç±»", + "ä¼¼" + ], + [ + "us", + "h" + ], + [ + "第", + "ä¸Ģ" + ], + [ + "è¾ħ", + "åĬ©" + ], + [ + "ä¾ĽåºĶ", + "éĵ¾" + ], + [ + "åĴĮ", + "对" + ], + [ + "æ»", + "ij" + ], + [ + "Ġequ", + "ations" + ], + [ + "ä¸ĵä¸ļ", + "çļĦ" + ], + [ + "çļĦ", + "åıĺåĮĸ" + ], + [ + "Ġsol", + "utions" + ], + [ + "Ġb", + "ase" + ], + [ + "Ġcommun", + "ic" + ], + [ + "æį", + "ķ" + ], + [ + "åѦ", + "èĢħ" + ], + [ + "Ġl", + "ove" + ], + [ + "çļĦæł", + "ĩ" + ], + [ + "Ġhig", + "hest" + ], + [ + "j", + "avascript" + ], + [ + "Ġrec", + "ord" + ], + [ + "Ġm", + "ath" + ], + [ + "an", + "ced" + ], + [ + "Ġpur", + "pose" + ], + [ + "çļĦ", + "æĢ»" + ], + [ + "é£Ł", + "åĵģ" + ], + [ + "AI", + "æĬĢæľ¯" + ], + [ + "H", + "ERE" + ], + [ + "he", + "mat" + ], + [ + "åĢ", + "º" + ], + [ + "Ã", + "Ń" + ], + [ + "Ġac", + "ross" + ], + [ + "ä¸ī", + "è§Ĵ" + ], + [ + "æ¶īåıĬ", + "åΰ" + ], + [ + "Ġwor", + "king" + ], + [ + "is", + "m" + ], + [ + "stit", + "ute" + ], + [ + "éĴĪ", + "对" + ], + [ + "Ġin", + "it" + ], + [ + "a", + "iled" + ], + [ + "n", + "ot" + ], + [ + "çĽ", + "IJ" + ], + [ + "æĺĵ", + "äºİ" + ], + [ + "Ġlead", + "ing" + ], + [ + "Ġv", + "ery" + ], + [ + "Ġon", + "line" + ], + [ + "o", + "ot" + ], + [ + "ç´¢", + "å¼ķ" + ], + [ + "è´§", + "å¸ģ" + ], + [ + "çĥ", + "¤" + ], + [ + "é¸", + "Ł" + ], + [ + "ĠP", + "r" + ], + [ + "ut", + "es" + ], + [ + "çļĦ", + "åħĥç´ł" + ], + [ + "en", + "e" + ], + [ + "è¶ħ", + "è¿ĩ" + ], + [ + "严", + "æł¼" + ], + [ + "æĿĥ", + "éĻIJ" + ], + [ + "fere", + "nce" + ], + [ + "Ġsym", + "b" + ], + [ + "st", + "ems" + ], + [ + "åľ¨", + "äºİ" + ], + [ + "'", + "]" + ], + [ + "Ġem", + "b" + ], + [ + "a", + "ces" + ], + [ + "r", + "and" + ], + [ + "Ġcol", + "or" + ], + [ + "çļĦçĥ", + "Ń" + ], + [ + "N", + "ow" + ], + [ + "d", + "iv" + ], + [ + "é¢", + "Ĺ" + ], + [ + "çļĦåľ°", + "æĸ¹" + ], + [ + "ä¿Ŀ", + "éĻ©" + ], + [ + "çī©", + "åĵģ" + ], + [ + "æłĩ", + "çѾ" + ], + [ + "Ġrespon", + "se" + ], + [ + "Ġm", + "eters" + ], + [ + "Python", + "ä¸Ń" + ], + [ + "è¯", + "º" + ], + [ + "å¤ĸ", + "éĥ¨" + ], + [ + "Ġin", + "nov" + ], + [ + "è¿Ľ", + "åζ" + ], + [ + "èĭ", + "ı" + ], + [ + "oo", + "ks" + ], + [ + "ç¼", + "ĺ" + ], + [ + "çļ®", + "èĤ¤" + ], + [ + "让", + "人" + ], + [ + "Ġsol", + "ution" + ], + [ + "et", + "er" + ], + [ + "çĻ»", + "å½ķ" + ], + [ + "Ġ", + "Wh" + ], + [ + "客", + "æľį" + ], + [ + "åİŁ", + "å§ĭ" + ], + [ + "åĴĮ", + "åºĶç͍" + ], + [ + "èĢIJ", + "å¿ĥ" + ], + [ + "b", + "y" + ], + [ + "çļĦ", + "缮æłĩ" + ], + [ + "ä¿Ŀ", + "è¯ģ" + ], + [ + "ä½ł", + "æĥ³è¦ģ" + ], + [ + "容", + "åύ" + ], + [ + "p", + "re" + ], + [ + "çĹħ", + "æ¯Ĵ" + ], + [ + "Ġimp", + "act" + ], + [ + "æıIJ", + "åıĸ" + ], + [ + "æĥ", + "ł" + ], + [ + "--", + "-" + ], + [ + "ers", + "hip" + ], + [ + "åĴĮ", + "社ä¼ļ" + ], + [ + "åħħ", + "åĪĨ" + ], + [ + "æķ°", + "å̼" + ], + [ + "Ġcond", + "itions" + ], + [ + "id", + "d" + ], + [ + "åºĶç͍", + "äºİ" + ], + [ + "è£ħ", + "饰" + ], + [ + "é¢ĨåŁŁ", + "çļĦ" + ], + [ + "Ġrespon", + "s" + ], + [ + "çļĦæ³ķ", + "å¾ĭ" + ], + [ + "æĬ", + "Ĭ" + ], + [ + "åĵ²", + "åѦ" + ], + [ + "强", + "大çļĦ" + ], + [ + "Ġse", + "lect" + ], + [ + "c", + "os" + ], + [ + "çī¹", + "èī²" + ], + [ + "ĠThe", + "y" + ], + [ + "线", + "æĢ§" + ], + [ + "Ġs", + "ide" + ], + [ + "æµ", + "ĵ" + ], + [ + "æķ´", + "ä½ĵ" + ], + [ + "W", + "eb" + ], + [ + "Ġsp", + "ace" + ], + [ + "Ġart", + "ic" + ], + [ + "éĵ¾", + "æİ¥" + ], + [ + "Ġjo", + "ke" + ], + [ + "w", + "ay" + ], + [ + "çļĦ", + "æľįåĬ¡" + ], + [ + "Ġmodel", + "s" + ], + [ + "å±ħ", + "æ°ij" + ], + [ + "ï¼Į", + "âĢľ" + ], + [ + "æĹħ", + "游" + ], + [ + "åĴĮ", + "åĪĨæŀIJ" + ], + [ + "æµ", + "ıè§Ī" + ], + [ + "l", + "ess" + ], + [ + "Ġp", + "ain" + ], + [ + "çļĦæ¦Ĥ", + "念" + ], + [ + "çī¹åĪ«", + "æĺ¯" + ], + [ + "Ġperform", + "ance" + ], + [ + "id", + "i" + ], + [ + "=", + "\"" + ], + [ + "r", + "on" + ], + [ + "Ġm", + "ind" + ], + [ + "Ġvari", + "ety" + ], + [ + "Ù", + "ħ" + ], + [ + "ĠB", + "e" + ], + [ + "Ġst", + "ore" + ], + [ + "æŃ£", + "常" + ], + [ + "Ġpro", + "du" + ], + [ + "广", + "åijĬ" + ], + [ + "çĶ", + "²" + ], + [ + "æľĢ", + "æĸ°çļĦ" + ], + [ + "顾", + "客" + ], + [ + "æĺ¯", + "ä¸ŃåĽ½" + ], + [ + "Ġrel", + "ations" + ], + [ + "Ġm", + "ountain" + ], + [ + "Ġfact", + "ors" + ], + [ + "è´", + "·" + ], + [ + "æ·±", + "è¿ľ" + ], + [ + "å°", + "¼" + ], + [ + "Ġgent", + "le" + ], + [ + "Ġmil", + "es" + ], + [ + "Ġbe", + "fore" + ], + [ + "çĥ", + "Ī" + ], + [ + "ar", + "ray" + ], + [ + "æķ", + "ij" + ], + [ + "Ġv", + "ol" + ], + [ + "Ġens", + "ure" + ], + [ + "æ¬", + "§" + ], + [ + "æľīæīĢ", + "ä¸įåIJĮ" + ], + [ + "Ġknow", + "ledge" + ], + [ + "ç¢", + "į" + ], + [ + "åıįæĺł", + "äºĨ" + ], + [ + "è°", + "Ī" + ], + [ + "Ġo", + "pen" + ], + [ + "åĨľ", + "ä¸ļ" + ], + [ + "è¿ŀ", + "ç»Ń" + ], + [ + "éĶ", + "ģ" + ], + [ + "ĠAd", + "ditionally" + ], + [ + "ç»ı", + "åħ¸" + ], + [ + "Ġb", + "ro" + ], + [ + "æĮ", + "¥" + ], + [ + "ä¸ĭ", + "æĿ¥" + ], + [ + "ä¹Ł", + "åı¯èĥ½" + ], + [ + "ä¸ĭ", + "éĻį" + ], + [ + "éĽĨ", + "åIJĪ" + ], + [ + "ag", + "raph" + ], + [ + "Ġexp", + "lo" + ], + [ + "mer", + "ic" + ], + [ + "Ġl", + "en" + ], + [ + "éĽ", + "ª" + ], + [ + "Ñ", + "ĭ" + ], + [ + "Ġst", + "ructure" + ], + [ + "Ġman", + "age" + ], + [ + "æŀĦ", + "æĪIJ" + ], + [ + "ä»·å̼", + "è§Ĥ" + ], + [ + "T", + "P" + ], + [ + "ä¾", + "§" + ], + [ + "设计", + "ä¸Ģ个" + ], + [ + "åĬ©", + "æīĭ" + ], + [ + "Ġre", + "st" + ], + [ + "ä½ł", + "åı¯èĥ½éľĢè¦ģ" + ], + [ + "Ġde", + "v" + ], + [ + "åĮ", + "Ģ" + ], + [ + "P", + "ro" + ], + [ + "çŃī", + "æĸ¹å¼ı" + ], + [ + "çĩ", + "ĥ" + ], + [ + "Ġg", + "old" + ], + [ + "åıĤ", + "èĢĥ" + ], + [ + "o", + "ber" + ], + [ + "Ġ\\", + "," + ], + [ + "Ġdevelop", + "ed" + ], + [ + "è¯Ĺ", + "æŃĮ" + ], + [ + "c", + "ent" + ], + [ + "è¿", + "¹" + ], + [ + "大", + "åѦ" + ], + [ + "ĠD", + "e" + ], + [ + "cc", + "ess" + ], + [ + "Ġ", + "&" + ], + [ + "Ġm", + "us" + ], + [ + "æ°", + "¸" + ], + [ + "ct", + "or" + ], + [ + "æ¸", + "łéģĵ" + ], + [ + "éļIJç§ģ", + "ä¿ĿæĬ¤" + ], + [ + "acc", + "i" + ], + [ + "æĢ§", + "è´¨" + ], + [ + "æŃ£ç¡®", + "çļĦ" + ], + [ + "åį", + "±" + ], + [ + "åIJĪ", + "åIJĮ" + ], + [ + "æłĩ", + "é¢ĺ" + ], + [ + "b", + "e" + ], + [ + "è¿", + "ħ" + ], + [ + "åį", + "Ī" + ], + [ + "iv", + "ity" + ], + [ + "ib", + "on" + ], + [ + "æ³", + "Ħ" + ], + [ + "转", + "åĮĸ" + ], + [ + "éĺ¿éĩĮå·´å·´", + "äºij" + ], + [ + "ç͵", + "æ±ł" + ], + [ + "get", + "her" + ], + [ + "çļĦ", + "建议" + ], + [ + "Ġto", + "gether" + ], + [ + "a", + "de" + ], + [ + "Ġl", + "ibr" + ], + [ + "çļĦæı", + "IJ" + ], + [ + "Ġhour", + "s" + ], + [ + "ç»", + "©" + ], + [ + "大", + "åľ°" + ], + [ + "Ġle", + "vel" + ], + [ + "ibon", + "acci" + ], + [ + "éĺ³", + "åħī" + ], + [ + "Ġavail", + "able" + ], + [ + "Ġus", + "es" + ], + [ + "Ġanal", + "y" + ], + [ + "çļĦæĬ", + "ķ" + ], + [ + "åij¨", + "æľŁ" + ], + [ + "èĦļ", + "æľ¬" + ], + [ + "Ġident", + "ify" + ], + [ + "ä¹", + "ħ" + ], + [ + "Ñ", + "ı" + ], + [ + "æľ", + "Ŀ" + ], + [ + "ĠC", + "on" + ], + [ + "is", + "ion" + ], + [ + "å®ļ", + "åζ" + ], + [ + "éľĢè¦ģ", + "注æĦı" + ], + [ + "åħĥç´ł", + "çļĦ" + ], + [ + "Ġart", + "ificial" + ], + [ + "Ġma", + "x" + ], + [ + "ern", + "et" + ], + [ + "ãģ", + "Ł" + ], + [ + "çļĦç", + "©" + ], + [ + "å¹³", + "æĸ¹" + ], + [ + "æŁ", + "Ķ" + ], + [ + "I", + "N" + ], + [ + "羣", + "å®ŀ" + ], + [ + "æ²", + "¿" + ], + [ + "æĪIJ", + "å°±" + ], + [ + "ä¼ĺ", + "åħĪ" + ], + [ + "Ġres", + "ources" + ], + [ + "Ġb", + "as" + ], + [ + "å°", + "º" + ], + [ + "æIJ", + "Ń" + ], + [ + "åĮºåĿĹéĵ¾", + "æĬĢæľ¯" + ], + [ + "æī", + "®" + ], + [ + "Ġmon", + "th" + ], + [ + "å¥", + "ı" + ], + [ + "第", + "ä¸ī" + ], + [ + "Ġref", + "lect" + ], + [ + "çļĦä¸Ģ", + "éĥ¨åĪĨ" + ], + [ + "çļĦ", + "åģ¥åº·" + ], + [ + "è®°", + "ä½ı" + ], + [ + "梦", + "æĥ³" + ], + [ + "é¢Ħ", + "éĺ²" + ], + [ + "æķ", + "¸" + ], + [ + "Ġch", + "all" + ], + [ + "Ġcont", + "rib" + ], + [ + "S", + "ON" + ], + [ + "大", + "åŀĭ" + ], + [ + "缸", + "ä¼¼" + ], + [ + "Ġs", + "ense" + ], + [ + "an", + "ces" + ], + [ + "æ¼", + "ı" + ], + [ + "ç¥ŀç»ı", + "ç½ij绾" + ], + [ + "Ġb", + "ir" + ], + [ + "æľ¬", + "身" + ], + [ + "æ¶", + "µ" + ], + [ + "Ġgre", + "at" + ], + [ + "}", + "\\)" + ], + [ + "Ġgrow", + "th" + ], + [ + "Ġbe", + "h" + ], + [ + "Ġpar", + "agraph" + ], + [ + "è¿Ń", + "代" + ], + [ + "åĬĽ", + "çļĦ" + ], + [ + "å¹´", + "è½»" + ], + [ + "Ġc", + "all" + ], + [ + "Ġstep", + "s" + ], + [ + "3", + "3" + ], + [ + "ar", + "get" + ], + [ + "éĵ", + "º" + ], + [ + "åı¦", + "ä¸Ģ个" + ], + [ + "Ġexpl", + "ain" + ], + [ + ")", + "`" + ], + [ + "Ġan", + "n" + ], + [ + "ot", + "al" + ], + [ + "æīĢ", + "éľĢ" + ], + [ + "åį", + "ĸ" + ], + [ + "æ²", + "Ļ" + ], + [ + "Ġcir", + "cle" + ], + [ + "Ġclar", + "ify" + ], + [ + "m", + "an" + ], + [ + "i", + "ver" + ], + [ + "r", + "ame" + ], + [ + "èĢĮ", + "ä¸Ķ" + ], + [ + "èµĦ", + "产" + ], + [ + "ä¹", + "¡" + ], + [ + "Ġv", + "er" + ], + [ + "Ġ6", + "0" + ], + [ + "A", + "nd" + ], + [ + "ĠS", + "o" + ], + [ + "Ġ4", + "0" + ], + [ + "声", + "éŁ³" + ], + [ + "åĴĮ", + "æĬĢæľ¯" + ], + [ + "al", + "cul" + ], + [ + "æĭ", + "į" + ], + [ + "æ¯ı", + "次" + ], + [ + "æľī", + "åħ³" + ], + [ + "iv", + "al" + ], + [ + "çļĦç", + "Ł" + ], + [ + "èĩ³", + "å°ij" + ], + [ + "Ġre", + "du" + ], + [ + "æĹ¶", + "çļĦ" + ], + [ + "å¹´", + "çļĦ" + ], + [ + "Ġind", + "ust" + ], + [ + "Ġexper", + "ience" + ], + [ + "åĪ", + "¸" + ], + [ + "两", + "ç§į" + ], + [ + "æł¸", + "å¿ĥ" + ], + [ + "gor", + "ithm" + ], + [ + "æİĮ", + "æı¡" + ], + [ + "çģ", + "¾" + ], + [ + "大", + "å¤ļ" + ], + [ + "å·¥", + "ä¸ļ" + ], + [ + "ac", + "y" + ], + [ + "ãĢĭ", + "ï¼Ī" + ], + [ + "inu", + "x" + ], + [ + "9", + "0" + ], + [ + "è¿Ľ", + "å±ķ" + ], + [ + "çļĦæ¸", + "©" + ], + [ + "åħħ满", + "äºĨ" + ], + [ + "éŃ", + "Ķ" + ], + [ + "Ð", + "¼" + ], + [ + "Ġsu", + "bs" + ], + [ + "Python", + "çļĦ" + ], + [ + "åĪĨ", + "åŃIJ" + ], + [ + "S", + "T" + ], + [ + "æľī", + "äºĽ" + ], + [ + "温", + "æļĸ" + ], + [ + "Ġs", + "it" + ], + [ + "Ġdet", + "ailed" + ], + [ + "å¿", + "ĺ" + ], + [ + "Ġhe", + "ad" + ], + [ + "éĻ", + "Ħ" + ], + [ + "å®ĥ", + "çļĦ" + ], + [ + "æĸ¹", + "便" + ], + [ + "ĠJava", + "Script" + ], + [ + "Ġw", + "on" + ], + [ + "让", + "ä½ł" + ], + [ + "Ġtransl", + "ate" + ], + [ + "æĺ¯åIJ¦", + "æľī" + ], + [ + "Ġv", + "irtual" + ], + [ + "C", + "om" + ], + [ + "以", + "åħ¶" + ], + [ + "as", + "ure" + ], + [ + "ut", + "put" + ], + [ + "Ã", + "ł" + ], + [ + "Ġfollow", + "s" + ], + [ + "Ľ", + "åĽ´" + ], + [ + "ä¿ĥè¿Ľ", + "äºĨ" + ], + [ + "ä½ĵçݰ", + "äºĨ" + ], + [ + "æĹ¶", + "代" + ], + [ + "Ġmat", + "hemat" + ], + [ + "Ġf", + "uture" + ], + [ + "æĿİ", + "æĺİ" + ], + [ + "L", + "P" + ], + [ + "è¿", + "Ŀ" + ], + [ + "æĸ°", + "é²ľ" + ], + [ + "注", + "éĩį" + ], + [ + "Ġpat", + "tern" + ], + [ + "éļ¾", + "以" + ], + [ + "éĢīæĭ©", + "ä¸Ģ个" + ], + [ + "ç¼ĸ", + "çłģ" + ], + [ + "f", + "ace" + ], + [ + "o", + "id" + ], + [ + "ur", + "y" + ], + [ + "éĩį", + "è§Ĩ" + ], + [ + "çļĦ模", + "åŀĭ" + ], + [ + "è¿IJ", + "ç®Ĺ" + ], + [ + "c", + "er" + ], + [ + "i", + "od" + ], + [ + "Ġc", + "r" + ], + [ + "(", + "-" + ], + [ + "Ġnew", + "s" + ], + [ + "ĠFr", + "ance" + ], + [ + "åº", + "Ĭ" + ], + [ + "ä¸ĵ", + "å®¶" + ], + [ + "Ġrese", + "arch" + ], + [ + "Ġgre", + "ater" + ], + [ + "a", + "pe" + ], + [ + "åıª", + "æľī" + ], + [ + "åĵĪ", + "å¸Į" + ], + [ + "èģ", + "Ĭ" + ], + [ + "é«ĺ", + "级" + ], + [ + "èĶ", + "¬" + ], + [ + "å¢", + "Ļ" + ], + [ + "Ġspec", + "ial" + ], + [ + "Ġdirect", + "ly" + ], + [ + "å®īåħ¨", + "çļĦ" + ], + [ + "ç²", + "Ĵ" + ], + [ + "å¤ĩ", + "份" + ], + [ + "åĪ", + "º" + ], + [ + "Ġpr", + "ice" + ], + [ + "çĭ", + "Ĺ" + ], + [ + "Ġt", + "itle" + ], + [ + "æľī", + "åĵªäºĽ" + ], + [ + "Ġrelations", + "hip" + ], + [ + "Ñ", + "Į" + ], + [ + "ä¾", + "µ" + ], + [ + "çŃī", + "å¾ħ" + ], + [ + "ord", + "ing" + ], + [ + "åľ°", + "çĤ¹" + ], + [ + "Ġme", + "et" + ], + [ + "ä¼ł", + "éĢĴ" + ], + [ + "çļĦ", + "æĢģ度" + ], + [ + "æķħ", + "éļľ" + ], + [ + "Ġre", + "verse" + ], + [ + "et", + "ic" + ], + [ + "交", + "æį¢" + ], + [ + "Ġm", + "ust" + ], + [ + "é«ĺ", + "åħ´" + ], + [ + "ound", + "s" + ], + [ + "é¢Ħ", + "æľŁ" + ], + [ + "Ġfe", + "et" + ], + [ + "åĪĿ", + "åѦèĢħ" + ], + [ + "ä¼", + "Ļ" + ], + [ + "æıIJä¾Ľ", + "ä¸Ģ个" + ], + [ + "åİ", + "ħ" + ], + [ + "çļĦæµ", + "ģ" + ], + [ + "t", + "le" + ], + [ + "ç¼ĸç¨ĭ", + "è¯Ńè¨Ģ" + ], + [ + "åŃ£", + "èĬĤ" + ], + [ + "éĩıåŃIJ", + "计ç®Ĺ" + ], + [ + "u", + "ro" + ], + [ + "Ġse", + "a" + ], + [ + "æ¯Ķ", + "çī¹" + ], + [ + "æľī", + "éĻIJ" + ], + [ + "Ġar", + "g" + ], + [ + "F", + "ROM" + ], + [ + "Ġh", + "ome" + ], + [ + "Ġdisc", + "uss" + ], + [ + "åħ·", + "å¤ĩ" + ], + [ + "æļ", + "Ĺ" + ], + [ + "Ġpre", + "v" + ], + [ + "æī®", + "æ¼Ķ" + ], + [ + "åľ°", + "æĸ¹" + ], + [ + "åĮĹ", + "京" + ], + [ + "å®ģ", + "éĿĻ" + ], + [ + "è§Ħ", + "èĮĥ" + ], + [ + "社ä¼ļ", + "çļĦ" + ], + [ + "缮", + "å½ķ" + ], + [ + "åѦ", + "æľ¯" + ], + [ + "Ġm", + "ix" + ], + [ + "åľ¨", + "å¤ĦçIJĨ" + ], + [ + "ic", + "ro" + ], + [ + "ke", + "y" + ], + [ + "Ġwe", + "b" + ], + [ + "æĵįä½ľ", + "ç³»ç»Ł" + ], + [ + "¹", + "æŀľ" + ], + [ + "çī©", + "èģĶç½ij" + ], + [ + "æľįåĬ¡", + "çļĦ" + ], + [ + "æıIJ", + "åīį" + ], + [ + "çĤ", + "İ" + ], + [ + "åIJĮ", + "æł·" + ], + [ + "Ġem", + "ployees" + ], + [ + "Ġc", + "ut" + ], + [ + "åIJĪ", + "è§Ħ" + ], + [ + "çļĦ", + "éĢīæĭ©" + ], + [ + "å¥", + "¥" + ], + [ + "c", + "ol" + ], + [ + "ç§", + "Ģ" + ], + [ + "è¿Ľ", + "ç¨ĭ" + ], + [ + "}", + "}" + ], + [ + "æķĻ", + "åѦ" + ], + [ + "éĶ", + "ħ" + ], + [ + "u", + "c" + ], + [ + "ä¿¡", + "ç͍" + ], + [ + "ä¿¡æģ¯", + "çļĦ" + ], + [ + "çļĦæİ", + "¨" + ], + [ + "åĢ", + "į" + ], + [ + "éļľ", + "ç¢į" + ], + [ + "or", + "n" + ], + [ + "ĠI", + "nd" + ], + [ + "æľª", + "çŁ¥" + ], + [ + "çķ", + "ħ" + ], + [ + "è½»", + "è½»" + ], + [ + "ä¿Ŀ", + "éļľ" + ], + [ + "ĠA", + "pp" + ], + [ + "ä¸Ģ", + "ç³»åĪĹ" + ], + [ + "åĨ", + "¬" + ], + [ + "æĪij们", + "é¦ĸåħĪ" + ], + [ + "大å¤ļ", + "æķ°" + ], + [ + "çļĦ", + "产åĵģ" + ], + [ + "å½¢", + "çĬ¶" + ], + [ + "Ġallow", + "s" + ], + [ + "ol", + "ution" + ], + [ + "Ġs", + "ource" + ], + [ + "Ġo", + "cc" + ], + [ + "åIJĪ", + "æ³ķ" + ], + [ + "åľ¨", + "Pythonä¸Ń" + ], + [ + "大", + "约" + ], + [ + "Ġan", + "other" + ], + [ + "éĢIJ", + "æŃ¥" + ], + [ + "使ç͍", + "äºĨ" + ], + [ + "åĿĩ", + "åĮĢ" + ], + [ + "çļĦ", + "å¿ĥ" + ], + [ + "Ġw", + "ind" + ], + [ + "æĸ", + "Ĺ" + ], + [ + "Ġl", + "ower" + ], + [ + "è§£", + "æŀIJ" + ], + [ + "çĿ", + "£" + ], + [ + "å°", + "ļ" + ], + [ + "æģ", + "Ĵ" + ], + [ + "çĿ", + "¡çľł" + ], + [ + "ĠA", + "meric" + ], + [ + "è·", + "ij" + ], + [ + "âĢĶ", + "âĢĶ" + ], + [ + "ant", + "s" + ], + [ + "çīĽ", + "奶" + ], + [ + "æ°§", + "åĮĸ" + ], + [ + "m", + "od" + ], + [ + "å½¢", + "çļĦ" + ], + [ + "çļĦç©", + "º" + ], + [ + "Ð", + "²" + ], + [ + "al", + "es" + ], + [ + "an", + "a" + ], + [ + "æıIJä¾Ľ", + "æĽ´" + ], + [ + "Ġs", + "or" + ], + [ + "èĥ", + "ģ" + ], + [ + "i", + "et" + ], + [ + "ç§", + "Ĵ" + ], + [ + "ch", + "ange" + ], + [ + "Ġcount", + "ries" + ], + [ + "è¿ħ", + "éĢŁ" + ], + [ + "èͬ", + "èıľ" + ], + [ + "Ġth", + "ough" + ], + [ + "ĠC", + "EO" + ], + [ + "ide", + "red" + ], + [ + "èĭ", + "¹æŀľ" + ], + [ + "Ġmult", + "iply" + ], + [ + "Ġwrit", + "ing" + ], + [ + "j", + "or" + ], + [ + "çĥ", + "§" + ], + [ + "Ġtas", + "k" + ], + [ + "s", + "er" + ], + [ + "Ġdec", + "imal" + ], + [ + "int", + "er" + ], + [ + "æ³ķå¾ĭ", + "æ³ķè§Ħ" + ], + [ + "Ġphys", + "ical" + ], + [ + "Ġrad", + "ius" + ], + [ + "è·", + "ĥ" + ], + [ + "å°½", + "管" + ], + [ + "羣", + "æŃ£" + ], + [ + "æĢ»", + "ç»ĵ" + ], + [ + "å¯¹ä½ł", + "æľīæīĢ帮åĬ©" + ], + [ + "çļĦç²", + "¾" + ], + [ + "è§Ĩ", + "为" + ], + [ + "éĹ®é¢ĺ", + "çļĦ" + ], + [ + "Ġcons", + "idered" + ], + [ + "å¦ĤæŀľæĤ¨", + "æľī" + ], + [ + "Ġtop", + "ics" + ], + [ + "æĸĩ", + "æĺİ" + ], + [ + "Ġg", + "ra" + ], + [ + "è°", + "±" + ], + [ + "èĥ", + "ľ" + ], + [ + "åŁºæľ¬", + "çļĦ" + ], + [ + "dition", + "al" + ], + [ + "åı¯ä»¥", + "å°Ĩ" + ], + [ + "Ġre", + "d" + ], + [ + "ä¸ĭéĿ¢", + "æĺ¯ä¸Ģ个" + ], + [ + "æĹ¥å¸¸", + "çĶŁæ´»" + ], + [ + "å¦Ĥæŀľ", + "æľī" + ], + [ + "è¿ĺ", + "æľī" + ], + [ + "Ġpr", + "iv" + ], + [ + "å¨ģ", + "èĥģ" + ], + [ + "æĦŁ", + "åıĹ" + ], + [ + "åľ¨", + "ä¸ŃåĽ½" + ], + [ + "Ġadd", + "ition" + ], + [ + ")", + "\\)" + ], + [ + "ä¸ĸ", + "纪" + ], + [ + "ĠO", + "ct" + ], + [ + "讲", + "è¿°" + ], + [ + "Ġh", + "y" + ], + [ + "t", + "on" + ], + [ + "u", + "le" + ], + [ + "L", + "e" + ], + [ + "ĠA", + "re" + ], + [ + "Ġres", + "pect" + ], + [ + "ç«ŀäºī", + "åĬĽ" + ], + [ + "æī", + "ĺ" + ], + [ + "äºĨè§£", + "ä¸Ģä¸ĭ" + ], + [ + "读", + "åıĸ" + ], + [ + "以", + "æıIJé«ĺ" + ], + [ + "å°¤åħ¶", + "æĺ¯åľ¨" + ], + [ + "éĿ¢", + "çļĦ" + ], + [ + "读", + "èĢħ" + ], + [ + "ä¸ĵ注", + "äºİ" + ], + [ + "Ġtyp", + "es" + ], + [ + "2", + "9" + ], + [ + "A", + "re" + ], + [ + "使", + "åħ¶" + ], + [ + "am", + "b" + ], + [ + "Ġst", + "ill" + ], + [ + "å±ı", + "å¹ķ" + ], + [ + "çĤ", + "¼" + ], + [ + "æĽ´åĩĨç¡®", + "åľ°" + ], + [ + "Ġpot", + "ential" + ], + [ + "ç¡®ä¿Ŀ", + "æīĢæľī" + ], + [ + "W", + "e" + ], + [ + "åĮº", + "åĪ«" + ], + [ + "顺", + "åĪ©" + ], + [ + "åħ", + "Ń" + ], + [ + "线", + "ç¨ĭ" + ], + [ + "g", + "en" + ], + [ + "0", + "1" + ], + [ + "Ġhe", + "ight" + ], + [ + "Ġmo", + "on" + ], + [ + "vers", + "ed" + ], + [ + "èı", + "Į" + ], + [ + "ا", + "ÙĦ" + ], + [ + "]", + ")" + ], + [ + "vie", + "w" + ], + [ + "Ġit", + "er" + ], + [ + "Ġanswer", + "ing" + ], + [ + "l", + "ished" + ], + [ + "z", + "hou" + ], + [ + "æľŁ", + "æľĽ" + ], + [ + "l", + "ate" + ], + [ + "éĩįè¦ģ", + "çļĦæĺ¯" + ], + [ + "ç®Ģ", + "åĮĸ" + ], + [ + "k", + "es" + ], + [ + "åı¯ä»¥", + "æľīæķĪ" + ], + [ + "ä¸Ĭ", + "æīĢ" + ], + [ + "ĠThe", + "refore" + ], + [ + "L", + "E" + ], + [ + "çļĦæ¯", + "Ķ" + ], + [ + "èĩªåĬ¨", + "驾驶" + ], + [ + "Ġdatab", + "ase" + ], + [ + "ar", + "a" + ], + [ + "Ġoff", + "er" + ], + [ + "ist", + "ics" + ], + [ + "åı¯èĥ½ä¼ļ", + "导èĩ´" + ], + [ + "好", + "å¥ĩ" + ], + [ + "èĦ", + "±" + ], + [ + "çļĦç", + "Ī" + ], + [ + "èĤ", + "¥" + ], + [ + "Ġcontain", + "s" + ], + [ + "åºĶç͍", + "ä¸Ń" + ], + [ + "Ġun", + "its" + ], + [ + "åĴĮ", + "建议" + ], + [ + "çļĦ", + "ç»ĵæŀľ" + ], + [ + "ĠJ", + "ack" + ], + [ + "æī", + "°" + ], + [ + "使ç͍", + "çļĦ" + ], + [ + "æĮĩ", + "æłĩ" + ], + [ + "åĨį", + "次" + ], + [ + "Ġs", + "ong" + ], + [ + "ro", + "p" + ], + [ + "Ġrel", + "i" + ], + [ + "ren", + "ch" + ], + [ + "Ġ", + "ess" + ], + [ + "æİ¨", + "广" + ], + [ + "åĴĮ", + "æĸĩåĮĸ" + ], + [ + "çĤ", + "Ĵ" + ], + [ + "å¡ij", + "æĸĻ" + ], + [ + "A", + "N" + ], + [ + "m", + "ax" + ], + [ + "çļĦæ", + "¶" + ], + [ + "度", + "çļĦ" + ], + [ + "å®ĥ", + "ä¸įä»ħ" + ], + [ + "Ġnum", + "er" + ], + [ + "E", + "ach" + ], + [ + "Ġs", + "elf" + ], + [ + "éķ¿", + "æĹ¶éĹ´" + ], + [ + "ä»Ĭ", + "天" + ], + [ + "çĪ", + "¶" + ], + [ + "çļĦ", + "帮åĬ©" + ], + [ + "Ġst", + "at" + ], + [ + "and", + "as" + ], + [ + "Ġsy", + "stems" + ], + [ + "Ġadd", + "ress" + ], + [ + "Ġan", + "ything" + ], + [ + "n", + "ces" + ], + [ + "å¹", + "ħ" + ], + [ + "æī¾", + "åĩº" + ], + [ + "Ġnum", + "py" + ], + [ + "Ġf", + "low" + ], + [ + "ç§", + "Ł" + ], + [ + "åĶ", + "¯" + ], + [ + "éĹ®é¢ĺæĪĸ", + "éľĢè¦ģ" + ], + [ + "W", + "HERE" + ], + [ + "åĦ¿", + "ç«¥" + ], + [ + "Ġqu", + "ick" + ], + [ + "è¯į", + "æ±ĩ" + ], + [ + "6", + "4" + ], + [ + "am", + "ent" + ], + [ + "ĠA", + "r" + ], + [ + "ç»Ļ", + "å®ļçļĦ" + ], + [ + "ne", + "y" + ], + [ + "ä¸ĬæīĢ", + "è¿°" + ], + [ + "å¼", + "±" + ], + [ + "å¤ļæł·", + "æĢ§" + ], + [ + "为", + "ç͍æĪ·" + ], + [ + "Ġu", + "nt" + ], + [ + "Ġdescrib", + "e" + ], + [ + "çļĦ", + "åħī" + ], + [ + "åĬł", + "è½½" + ], + [ + "a", + "res" + ], + [ + "çļĦ", + "éķ¿åº¦" + ], + [ + "åĪĨ", + "è§£" + ], + [ + "èİ", + "ī" + ], + [ + "æĽ´å¥½åľ°", + "çIJĨè§£" + ], + [ + "a", + "w" + ], + [ + "id", + "ed" + ], + [ + "è¿ĩ", + "滤" + ], + [ + "20", + "23" + ], + [ + "éĿ¢", + "è¯ķ" + ], + [ + "仿", + "ä½Ľ" + ], + [ + "综", + "ä¸ĬæīĢè¿°" + ], + [ + "认", + "è¯Ĩ" + ], + [ + "产çĶŁ", + "äºĨ" + ], + [ + "åĽº", + "å®ļ" + ], + [ + "çļĦæ´»", + "åĬ¨" + ], + [ + "C", + "D" + ], + [ + "Ġp", + "ie" + ], + [ + "æķ°æį®", + "å®īåħ¨" + ], + [ + "æĦŁ", + "åıĹåΰ" + ], + [ + "èµĦ", + "æĸĻ" + ], + [ + "an", + "ation" + ], + [ + "Ġ+", + "=" + ], + [ + "iz", + "ing" + ], + [ + "Ġlet", + "ter" + ], + [ + "e", + "ad" + ], + [ + "èª", + "ī" + ], + [ + "b", + "ash" + ], + [ + "Ġf", + "our" + ], + [ + "Ġal", + "gorithm" + ], + [ + "U", + "n" + ], + [ + "ä¸Ģ", + "份" + ], + [ + "æĢ", + "Ģ" + ], + [ + "St", + "ring" + ], + [ + "or", + "k" + ], + [ + "ar", + "ily" + ], + [ + "é", + "¹" + ], + [ + "æĪij们", + "éľĢè¦ģ" + ], + [ + "æ¢", + "¯" + ], + [ + "åĬŀ", + "åħ¬" + ], + [ + "or", + "m" + ], + [ + "ä½ł", + "们" + ], + [ + "æ¯", + "Ľ" + ], + [ + "b", + "an" + ], + [ + "w", + "w" + ], + [ + "Ġsor", + "ry" + ], + [ + "æĿ¥", + "è¶Ĭ" + ], + [ + "ad", + "r" + ], + [ + "Ġa", + "im" + ], + [ + "h", + "ang" + ], + [ + "h", + "ai" + ], + [ + "帮åĬ©", + "ç͍æĪ·" + ], + [ + "åij¨", + "åĽ´" + ], + [ + "è¶Ĭ", + "æĿ¥è¶Ĭ" + ], + [ + "ç»", + "ķ" + ], + [ + "éĢļ常", + "éľĢè¦ģ" + ], + [ + "Ċ", + "ĊĠĠ" + ], + [ + "åħĪ", + "è¿Ľ" + ], + [ + "ĠOct", + "ober" + ], + [ + "g", + "o" + ], + [ + "ro", + "du" + ], + [ + "éĴ", + "±" + ], + [ + "Ù", + "Ĩ" + ], + [ + "请", + "éĹ®" + ], + [ + "Ġex", + "t" + ], + [ + "Ġim", + "age" + ], + [ + "æ¶Ī", + "èĢĹ" + ], + [ + "çļĦæŃ", + "¥" + ], + [ + "Ġeng", + "aging" + ], + [ + "J", + "ohn" + ], + [ + "ç»ı", + "è¿ĩ" + ], + [ + "æIJ", + "º" + ], + [ + "å¾Ī", + "é«ĺåħ´" + ], + [ + "A", + "r" + ], + [ + "åı¯ä»¥", + "å°Ŀè¯ķ" + ], + [ + "çļĦç", + "Ĭ" + ], + [ + "Ġcolumn", + "s" + ], + [ + "çݯå¢ĥ", + "ä¿ĿæĬ¤" + ], + [ + "éĴ", + "¥" + ], + [ + "ä¸Ģ", + "ä½į" + ], + [ + "éĢļè¿ĩ", + "è¿ĻäºĽ" + ], + [ + "Ġsent", + "ences" + ], + [ + "å±Ĥ", + "次" + ], + [ + "an", + "ish" + ], + [ + "失", + "è´¥" + ], + [ + "ou", + "n" + ], + [ + "ï¼ļ", + "**" + ], + [ + "Ġwe", + "ek" + ], + [ + "in", + "ary" + ], + [ + "Ġcre", + "ative" + ], + [ + "åĩº", + "äºĨ" + ], + [ + "ver", + "n" + ], + [ + "转", + "åŀĭ" + ], + [ + "7", + "5" + ], + [ + "æįŁ", + "失" + ], + [ + "åĴĮ", + "使ç͍" + ], + [ + "Ġwrit", + "ten" + ], + [ + "Ġd", + "em" + ], + [ + "认", + "è¯ģ" + ], + [ + "ĠÐ", + "²" + ], + [ + "A", + "P" + ], + [ + "åĨħ", + "ç½®" + ], + [ + "Ġwor", + "ks" + ], + [ + "ç¾İ", + "好" + ], + [ + "çļĦ", + "ç͍æĪ·" + ], + [ + "å¾®", + "ä¿¡" + ], + [ + "å®", + "£" + ], + [ + "Ġiss", + "ues" + ], + [ + ":", + "\"," + ], + [ + "Ġal", + "ong" + ], + [ + "av", + "or" + ], + [ + "a", + "king" + ], + [ + "Ġprint", + "s" + ], + [ + "Ġstart", + "ed" + ], + [ + "Ġkil", + "om" + ], + [ + "æĪIJ", + "åĪĨ" + ], + [ + "被", + "称为" + ], + [ + "驱", + "åĬ¨" + ], + [ + "R", + "L" + ], + [ + "ä¸į", + "è¶³" + ], + [ + "Ð", + "´" + ], + [ + "è", + "²" + ], + [ + "çļĦ", + "åı¯" + ], + [ + "Ġf", + "lo" + ], + [ + "æİĴ", + "æĶ¾" + ], + [ + "Ġbre", + "ak" + ], + [ + "A", + "n" + ], + [ + "Ġc", + "ru" + ], + [ + "ä¸ĭ", + "è½½" + ], + [ + "äºĭ", + "项" + ], + [ + "è¿", + "·" + ], + [ + "æŃ£", + "å¼ı" + ], + [ + "éĴ", + "®" + ], + [ + "Ġd", + "en" + ], + [ + "åĩı", + "è½»" + ], + [ + "å®", + "«" + ], + [ + "M", + "y" + ], + [ + "S", + "C" + ], + [ + "alcul", + "ate" + ], + [ + "ro", + "l" + ], + [ + "æıIJä¾Ľ", + "æĽ´åĬł" + ], + [ + "Ġmed", + "ia" + ], + [ + "ang", + "zhou" + ], + [ + "æĽ¿", + "æį¢" + ], + [ + "f", + "unction" + ], + [ + "er", + "o" + ], + [ + "è½", + "´" + ], + [ + "éª", + "¨" + ], + [ + "am", + "p" + ], + [ + "è°", + "·" + ], + [ + "ë", + "Ĭ" + ], + [ + "Ġem", + "ot" + ], + [ + "Ġnetwor", + "k" + ], + [ + "Ġb", + "ooks" + ], + [ + "åı¯ä»¥", + "åĩıå°ij" + ], + [ + "éĩĬ", + "æĶ¾" + ], + [ + "f", + "rom" + ], + [ + "ĠP", + "ar" + ], + [ + "èĴ", + "¸" + ], + [ + "Ġsumm", + "ary" + ], + [ + "now", + "n" + ], + [ + "åĴĮ", + "ç»´æĬ¤" + ], + [ + "æĹł", + "éĻIJ" + ], + [ + "åıĮ", + "æĸ¹" + ], + [ + "ä¸Ģ", + "èά" + ], + [ + "æĹ", + "¦" + ], + [ + "ç³»ç»Ł", + "ä¸Ń" + ], + [ + "Ġf", + "ull" + ], + [ + "Ġm", + "iss" + ], + [ + "Ġlet", + "ters" + ], + [ + "çα", + "好" + ], + [ + "u", + "ation" + ], + [ + "çļĦæ", + "ĭ" + ], + [ + "åī", + "ª" + ], + [ + "åĽ¾", + "å½¢" + ], + [ + "æĪĺ", + "çķ¥" + ], + [ + "Ġachie", + "ve" + ], + [ + "C", + "l" + ], + [ + "åĴĮ", + "ä¼ĺåĮĸ" + ], + [ + "è¿ĩ", + "åİ»" + ], + [ + "éĢĤ", + "éĩı" + ], + [ + "ä¸įä»ħ", + "ä»ħ" + ], + [ + "du", + "le" + ], + [ + "以ä¸ĭæĺ¯ä¸ĢäºĽ", + "建议" + ], + [ + "åı", + "ī" + ], + [ + "é", + "½" + ], + [ + "Ġ**", + "ãĢĬ" + ], + [ + "çļĦæī", + "ĭ" + ], + [ + "幸", + "ç¦ı" + ], + [ + "çĶ", + "ľ" + ], + [ + "æĹ¥", + "å¿Ĺ" + ], + [ + "al", + "k" + ], + [ + "Ġle", + "g" + ], + [ + "ä¾ĭåŃIJ", + "ä¸Ń" + ], + [ + "Ġen", + "c" + ], + [ + "ç§ijåѦ", + "å®¶" + ], + [ + "欢è¿İ", + "éļıæĹ¶" + ], + [ + "çīĪ", + "æĿĥ" + ], + [ + "ĊĠĠĠĠ", + "ĊĠĠĠ" + ], + [ + "S", + "p" + ], + [ + "Ġinit", + "ial" + ], + [ + "Ġs", + "ure" + ], + [ + "Ġf", + "ac" + ], + [ + "åĩ", + "Ŀ" + ], + [ + "å¿", + "½" + ], + [ + "Ġtransl", + "ation" + ], + [ + "Ġfam", + "ily" + ], + [ + "便", + "æį·" + ], + [ + "Ġconvers", + "ations" + ], + [ + "æļ", + "´" + ], + [ + "ĠG", + "re" + ], + [ + "r", + "ation" + ], + [ + "¹", + "é¥" + ], + [ + "è¿Ļ", + "两个" + ], + [ + "ä¼¼", + "ä¹İ" + ], + [ + "æµ", + "®" + ], + [ + "¹é¥", + "ª" + ], + [ + "åĽŀ", + "æĶ¶" + ], + [ + "N", + "LP" + ], + [ + "æĭ", + "¼" + ], + [ + "Ġd", + "r" + ], + [ + "Ġexper", + "ien" + ], + [ + "æĵ", + "İ" + ], + [ + "m", + "ed" + ], + [ + "Ġprof", + "ess" + ], + [ + "F", + "irst" + ], + [ + "Ġinf", + "lu" + ], + [ + "å¯", + "¸" + ], + [ + "ä¸į", + "ç¡®å®ļ" + ], + [ + "I", + "nt" + ], + [ + "ä¼ł", + "æĦŁ" + ], + [ + "Ġfunction", + "s" + ], + [ + "å£", + "¤" + ], + [ + "åĽ¢éĺŁ", + "åIJĪä½ľ" + ], + [ + "以ä¸ĭåĩł", + "ç§į" + ], + [ + "l", + "ike" + ], + [ + "åĬ¨", + "ä½ľ" + ], + [ + "é£ŀ", + "è¡Į" + ], + [ + "Ġd", + "ream" + ], + [ + "èĢ", + "³" + ], + [ + "å¼ķ", + "æĵİ" + ], + [ + "Ġp", + "a" + ], + [ + "å¤ļ", + "æĸ¹éĿ¢" + ], + [ + "产", + "ä¸ļ" + ], + [ + "W", + "here" + ], + [ + "Ġa", + "uth" + ], + [ + "åįĩ", + "级" + ], + [ + "æ´", + "¾" + ], + [ + "Ġgre", + "en" + ], + [ + "ç¾İ", + "åij³" + ], + [ + "os", + "p" + ], + [ + "æĹ¶", + "åħī" + ], + [ + "end", + "s" + ], + [ + "Ġcult", + "ural" + ], + [ + "Ġkilom", + "eters" + ], + [ + "ãĤ", + "Į" + ], + [ + "æ¥", + "¼" + ], + [ + "e", + "ch" + ], + [ + "æ", + "¾" + ], + [ + "èĩª", + "身" + ], + [ + "åŃIJ", + "çļĦ" + ], + [ + "åī", + "©" + ], + [ + "ff", + "ic" + ], + [ + "7", + "0" + ], + [ + "Ġf", + "ra" + ], + [ + "Ġqu", + "e" + ], + [ + "产åĵģ", + "çļĦ" + ], + [ + "ëĭ", + "¤" + ], + [ + "Ġst", + "re" + ], + [ + ")", + "ï¼Į" + ], + [ + "S", + "ub" + ], + [ + "çĽij", + "çĿ£" + ], + [ + "it", + "ing" + ], + [ + "ä½ĵ", + "èĤ²" + ], + [ + "è¿Ļ段", + "代çłģ" + ], + [ + "è´·", + "款" + ], + [ + "å®¶", + "å±ħ" + ], + [ + "Ġsh", + "ow" + ], + [ + "AT", + "E" + ], + [ + "iction", + "ary" + ], + [ + "çĶ", + "·" + ], + [ + "im", + "plify" + ], + [ + "æµģ", + "éĩı" + ], + [ + "ç¾İ", + "丽" + ], + [ + "Ġsc", + "ience" + ], + [ + "Ġoper", + "ations" + ], + [ + "群", + "ä½ĵ" + ], + [ + "Ġmin", + "utes" + ], + [ + "i", + "um" + ], + [ + "æĹ¶éĹ´", + "åĴĮ" + ], + [ + "Ġmain", + "tain" + ], + [ + "erv", + "ice" + ], + [ + "ä¼Ļ", + "ä¼´" + ], + [ + "2", + "8" + ], + [ + "ä½ľ", + "èĢħ" + ], + [ + "Ġmo", + "vie" + ], + [ + "{", + "\\" + ], + [ + "Ġdiffere", + "nce" + ], + [ + "è´Ł", + "éĿ¢" + ], + [ + "Ġ", + "éĢīæĭ©" + ], + [ + "le", + "ft" + ], + [ + "éĽ", + "ħ" + ], + [ + "ç͵", + "è¯Ŀ" + ], + [ + "Ġcons", + "ider" + ], + [ + "æİ¥", + "触" + ], + [ + "c", + "el" + ], + [ + "Wh", + "y" + ], + [ + "ĠF", + "rench" + ], + [ + "Ġpre", + "c" + ], + [ + "Ġlead", + "ership" + ], + [ + "为", + "æĤ¨" + ], + [ + "åĪĹ", + "åĩº" + ], + [ + "R", + "E" + ], + [ + "ç½ij", + "页" + ], + [ + "W", + "indows" + ], + [ + "ä¿Ŀ", + "çķĻ" + ], + [ + "æĮī", + "éĴ®" + ], + [ + "çļĦæ¦Ĥ", + "çİĩ" + ], + [ + "åı£", + "åij³" + ], + [ + "Ġmat", + "rix" + ], + [ + "How", + "ever" + ], + [ + "ĠÐ", + "¿" + ], + [ + "èĮĥåĽ´", + "åĨħ" + ], + [ + "Ġhist", + "or" + ], + [ + "çĹĩ", + "çĬ¶" + ], + [ + "æŃ", + "»" + ], + [ + "çī©", + "ä½ĵ" + ], + [ + "æīĭ", + "段" + ], + [ + "ä¹IJ", + "æĦı" + ], + [ + "ä¼łæĦŁ", + "åύ" + ], + [ + "æķ", + "¢" + ], + [ + "Ġma", + "jor" + ], + [ + "Ġloc", + "al" + ], + [ + "å¥", + "ij" + ], + [ + "Ġpro", + "te" + ], + [ + "æľ¬", + "书" + ], + [ + "ç»ı", + "常" + ], + [ + "åľŁ", + "壤" + ], + [ + "Ġsymb", + "ol" + ], + [ + "æľŁ", + "å¾ħ" + ], + [ + "ä¹IJ", + "è¶£" + ], + [ + "Ġcont", + "in" + ], + [ + "Ġit", + "ems" + ], + [ + "çı", + "į" + ], + [ + "å³", + "°" + ], + [ + "D", + "P" + ], + [ + "Ġp", + "red" + ], + [ + "Ġ20", + "22" + ], + [ + "æıĴ", + "åħ¥" + ], + [ + "l", + "st" + ], + [ + "Ġ2", + "1" + ], + [ + "åī", + "²" + ], + [ + "èµĦæºIJ", + "çļĦ" + ], + [ + "éĤ", + "Ģ" + ], + [ + "è¿Ļ", + "åı¥è¯Ŀ" + ], + [ + "è¾ĥ", + "é«ĺ" + ], + [ + "çļĦæ¸", + "¸" + ], + [ + "æ±", + "ģ" + ], + [ + "ill", + "s" + ], + [ + "æĬķèµĦ", + "èĢħ" + ], + [ + "åı¯èĥ½", + "导èĩ´" + ], + [ + "ç±»", + "åĪ«" + ], + [ + "éĿŀ常", + "éĩįè¦ģçļĦ" + ], + [ + "Ġpass", + "word" + ], + [ + "Ġear", + "ly" + ], + [ + "Ġha", + "ven" + ], + [ + "åĻ", + "ª" + ], + [ + "éģĵ", + "è·¯" + ], + [ + "Ġlear", + "n" + ], + [ + "æ¿Ģ", + "åĬ±" + ], + [ + "åĩº", + "è¡Į" + ], + [ + "e", + "e" + ], + [ + "ra", + "ft" + ], + [ + "pl", + "ot" + ], + [ + "åĴĮ", + "çIJĨè§£" + ], + [ + "Ġele", + "ct" + ], + [ + "n", + "ect" + ], + [ + "Ġfig", + "ure" + ], + [ + "çļĦæĶ¯", + "æĮģ" + ], + [ + "Ġspec", + "ify" + ], + [ + "ate", + "g" + ], + [ + "大", + "èĦij" + ], + [ + "ĠH", + "angzhou" + ], + [ + "æĢ»", + "æĺ¯" + ], + [ + "Ġmod", + "ern" + ], + [ + "ëĬ", + "Ķ" + ], + [ + "Ġ\\)", + ":" + ], + [ + "Ġcru", + "cial" + ], + [ + "æľĢ", + "æĸ°" + ], + [ + "m", + "p" + ], + [ + "è§£", + "çŃĶ" + ], + [ + "ir", + "d" + ], + [ + "ĠĠĠĠ", + "ĠĠĠĠ" + ], + [ + "åı¯ä»¥", + "被" + ], + [ + "æŁIJ", + "ç§į" + ], + [ + "ç³", + "ķ" + ], + [ + "Ġconst", + "ant" + ], + [ + "4", + "8" + ], + [ + "A", + "C" + ], + [ + "éľĢè¦ģ", + "èĢĥèĻij" + ], + [ + "Ġex", + "ec" + ], + [ + "æľŁ", + "éĹ´" + ], + [ + "ä¼ĺ", + "æĥł" + ], + [ + "Ġe", + "t" + ], + [ + "缸", + "ä¿¡" + ], + [ + "ĠE", + "l" + ], + [ + "Ġper", + "iod" + ], + [ + "Ġse", + "cre" + ], + [ + "æĪijæĥ³", + "äºĨè§£ä¸Ģä¸ĭ" + ], + [ + "带æĿ¥", + "äºĨ" + ], + [ + "Ġapplic", + "ation" + ], + [ + "çļĦ", + "åĩĨç¡®" + ], + [ + "åįķ", + "åħĥ" + ], + [ + "èĢĥ", + "è¯ķ" + ], + [ + "ĠU", + "S" + ], + [ + "åĪĽ", + "ä¸ļ" + ], + [ + "æĦŁ", + "åĴĮ" + ], + [ + "询", + "éĹ®" + ], + [ + "éĽĨ", + "ä¸Ń" + ], + [ + "ap", + "an" + ], + [ + "P", + "r" + ], + [ + "æĹ", + "§" + ], + [ + "è´", + "Ŀ" + ], + [ + "à¸", + "²" + ], + [ + "æıIJ", + "éĨĴ" + ], + [ + "è°ĥ", + "èĬĤ" + ], + [ + "åı¤", + "èĢģ" + ], + [ + "Ġrecogn", + "ized" + ], + [ + "稳å®ļ", + "æĢ§" + ], + [ + "åıij", + "æĮ¥" + ], + [ + "I", + "T" + ], + [ + "å", + "ĺ" + ], + [ + "åľ¨", + "使ç͍" + ], + [ + "åıijå±ķ", + "çļĦ" + ], + [ + "æĭ", + "Į" + ], + [ + "çĿ", + "Ľ" + ], + [ + "Ġch", + "ild" + ], + [ + "ï¼Į", + "\"" + ], + [ + "çļĦæ", + "Ľ" + ], + [ + "å¿«", + "ä¹IJ" + ], + [ + "Ġag", + "ain" + ], + [ + "Ġf", + "requ" + ], + [ + "çļĦæ", + "ĵ" + ], + [ + "为", + "ä½ł" + ], + [ + "审", + "æŁ¥" + ], + [ + "ĠI", + "s" + ], + [ + "åIJİ", + "ç»Ń" + ], + [ + "Ġtra", + "ditional" + ], + [ + "Ġc", + "rit" + ], + [ + "ä¸Ģ", + "æĹ¦" + ], + [ + "èĥ½åĬĽ", + "åĴĮ" + ], + [ + "he", + "ad" + ], + [ + "å¿ĥçIJĨ", + "åģ¥åº·" + ], + [ + "Ġex", + "ist" + ], + [ + "Ġsu", + "ccess" + ], + [ + "强", + "大" + ], + [ + "æĿĥ", + "çĽĬ" + ], + [ + "è¾¹", + "ç¼ĺ" + ], + [ + "at", + "ch" + ], + [ + "ol", + "l" + ], + [ + "å͝", + "ä¸Ģ" + ], + [ + "çļĦçĬ", + "¶" + ], + [ + "Ġn", + "on" + ], + [ + "éĢļè¿ĩ", + "åĪĨæŀIJ" + ], + [ + "æ°´", + "æŀľ" + ], + [ + "çļĦæĮĩ", + "导" + ], + [ + "G", + "oogle" + ], + [ + "çļĦéĩįè¦ģ", + "æĢ§" + ], + [ + "Ġb", + "en" + ], + [ + "s", + "in" + ], + [ + "å¤", + "«" + ], + [ + "çĥ", + "Ł" + ], + [ + "æıIJ", + "交" + ], + [ + "æĽ´", + "æľīæķĪåľ°" + ], + [ + "æĹł", + "éľĢ" + ], + [ + "Ġse", + "arch" + ], + [ + "çIJĨ", + "念" + ], + [ + "Ġqu", + "adr" + ], + [ + "èģĮ", + "ä½į" + ], + [ + "Ġsumm", + "ar" + ], + [ + "Ġchall", + "eng" + ], + [ + "å°±", + "ä¸ļ" + ], + [ + "c", + "m" + ], + [ + "æĦŁ", + "æŁĵ" + ], + [ + "åij", + "¢" + ], + [ + "Ġderiv", + "ative" + ], + [ + "èµ", + "ı" + ], + [ + "Ġcon", + "sole" + ], + [ + "ç͵", + "åķĨ" + ], + [ + "ç¥ŀ", + "ç§ĺ" + ], + [ + "Ġdist", + "ance" + ], + [ + "ĠSp", + "anish" + ], + [ + "Ġeffic", + "ient" + ], + [ + "ç½", + "ª" + ], + [ + "å̼", + "å¾Ĺ" + ], + [ + "åĽ¢éĺŁ", + "çļĦ" + ], + [ + "æĶ¿", + "æ²»" + ], + [ + "hel", + "lo" + ], + [ + "a", + "ction" + ], + [ + "le", + "x" + ], + [ + "oo", + "se" + ], + [ + "Ġfound", + "er" + ], + [ + "大", + "äºİ" + ], + [ + "Ġstud", + "ents" + ], + [ + "çĦ¦", + "èĻij" + ], + [ + "ä½Ĩ", + "åľ¨" + ], + [ + "Ġcustom", + "er" + ], + [ + ":", + "//" + ], + [ + "A", + "M" + ], + [ + "å§", + "ĵ" + ], + [ + "æ°ĶåĢĻ", + "åıĺåĮĸ" + ], + [ + "Ġeconom", + "ic" + ], + [ + "s", + "ion" + ], + [ + "ä¸Ģ", + "å®ļçļĦ" + ], + [ + "éħ", + "±" + ], + [ + "Ġg", + "en" + ], + [ + "Ġd", + "ance" + ], + [ + "èĦ", + "ī" + ], + [ + "表", + "æĺİ" + ], + [ + "èĩªçĦ¶", + "çļĦ" + ], + [ + "Ġcont", + "inu" + ], + [ + "à", + "¦" + ], + [ + "ener", + "ate" + ], + [ + "éĤĢ", + "请" + ], + [ + "Ġqu", + "ant" + ], + [ + "åķĨ", + "åĬ¡" + ], + [ + "认", + "çŁ¥" + ], + [ + "Ġke", + "ep" + ], + [ + "en", + "n" + ], + [ + "éĺ¿éĩĮäºij", + "çļĦ" + ], + [ + "Ġindividual", + "s" + ], + [ + "Ġc", + "ertain" + ], + [ + "ad", + "d" + ], + [ + "Ġsu", + "st" + ], + [ + "end", + "er" + ], + [ + "Ġ", + "æµĭè¯ķ" + ], + [ + "è¿", + "Ł" + ], + [ + "åī", + "¯" + ], + [ + "us", + "ion" + ], + [ + "so", + "ft" + ], + [ + "Ġlim", + "it" + ], + [ + "Ñ", + "ĩ" + ], + [ + "è¿", + "ģ" + ], + [ + "æĿ¥", + "计ç®Ĺ" + ], + [ + "ight", + "s" + ], + [ + "æ³", + "³" + ], + [ + "çļĦæĻº", + "èĥ½" + ], + [ + "çļĦæĬķ", + "èµĦ" + ], + [ + "N", + "o" + ], + [ + "帮åĬ©", + "ä¼ģä¸ļ" + ], + [ + "Ġresult", + "s" + ], + [ + "æ", + "ĩ" + ], + [ + "æķ°æį®", + "å¤ĦçIJĨ" + ], + [ + "ĠP", + "er" + ], + [ + "Ġfam", + "ous" + ], + [ + "åħ¬", + "åĽŃ" + ], + [ + "çļĦæ", + "Ł" + ], + [ + "åħ³", + "éĹŃ" + ], + [ + "请", + "åijĬè¯īæĪij" + ], + [ + "os", + "s" + ], + [ + "Ġ<", + "=" + ], + [ + "çł´", + "åĿı" + ], + [ + "çĶŁ", + "ç´ł" + ], + [ + "æĪij们", + "使ç͍" + ], + [ + "w", + "here" + ], + [ + "ä¸Ģ", + "天" + ], + [ + "æİ¥", + "è¿ij" + ], + [ + "EC", + "S" + ], + [ + "c", + "ient" + ], + [ + "ĠS", + "he" + ], + [ + "f", + "ile" + ], + [ + "olog", + "y" + ], + [ + "ç¼ĸåĨĻ", + "ä¸Ģ个" + ], + [ + "}", + "}{" + ], + [ + "åı¯èĥ½", + "åľ¨" + ], + [ + "Ñģ", + "ÑĤ" + ], + [ + "Ġconvers", + "ation" + ], + [ + "Ġmus", + "ic" + ], + [ + "çļĦ", + "åİĨåı²" + ], + [ + "缸åºĶ", + "çļĦ" + ], + [ + "è¿Ļ", + "åĮħæĭ¬" + ], + [ + "æŃ", + "¦" + ], + [ + "åħ³éĶ®", + "è¯į" + ], + [ + "Ġtra", + "vel" + ], + [ + "Ġsust", + "ain" + ], + [ + "æµıè§Ī", + "åύ" + ], + [ + "\"", + "\"" + ], + [ + "çļĦç", + "¥" + ], + [ + "Ġdes", + "cript" + ], + [ + "Ġproduct", + "s" + ], + [ + "f", + "ect" + ], + [ + "Ġab", + "ove" + ], + [ + "Ġsub", + "ject" + ], + [ + "Ġre", + "ce" + ], + [ + "æĪIJ", + "çĨŁ" + ], + [ + "è¾¾", + "æij©" + ], + [ + "è´¦", + "åı·" + ], + [ + "L", + "L" + ], + [ + "Ġh", + "o" + ], + [ + "èį", + "·" + ], + [ + "åĽłä¸º", + "å®ĥ" + ], + [ + "in", + "a" + ], + [ + "ç´§", + "å¼ł" + ], + [ + "è°", + "ľ" + ], + [ + "æĶ¾", + "åľ¨" + ], + [ + "Ġs", + "at" + ], + [ + "Ġcan", + "not" + ], + [ + "èĤĮ", + "èĤī" + ], + [ + "a", + "us" + ], + [ + "æıIJ", + "示" + ], + [ + "åľ¨è¿Ļ个", + "ä¾ĭåŃIJä¸Ń" + ], + [ + "Ġc", + "y" + ], + [ + "Ġ3", + "6" + ], + [ + "ad", + "em" + ], + [ + "èıľ", + "åįķ" + ], + [ + "çļĦæĵ", + "įä½ľ" + ], + [ + "cl", + "ass" + ], + [ + "è¾ĥ", + "ä½İ" + ], + [ + "g", + "ative" + ], + [ + "p", + "o" + ], + [ + "å¼", + "ĥ" + ], + [ + "Ù", + "Ī" + ], + [ + "ç", + "Ĵ" + ], + [ + "re", + "l" + ], + [ + "ent", + "ly" + ], + [ + "æ¤", + "Ĵ" + ], + [ + "æ¶µ", + "çĽĸ" + ], + [ + "an", + "n" + ], + [ + "便", + "åĪ©" + ], + [ + "çļĦæŃ¥", + "骤" + ], + [ + "6", + "7" + ], + [ + "Ġ", + "." + ], + [ + "åĢ", + "Ł" + ], + [ + "çļĦ", + "çݯå¢ĥ" + ], + [ + "åĽŀ", + "å½Ĵ" + ], + [ + "Ġcol", + "ors" + ], + [ + "Ġfriend", + "s" + ], + [ + "ht", + "ml" + ], + [ + "æĭ", + "ĵ" + ], + [ + "éĿŀ常", + "æľī" + ], + [ + "æĪĸ", + "æľįåĬ¡" + ], + [ + "è", + "©" + ], + [ + "ä¹", + "ı" + ], + [ + "åľ¨", + "ä¸įåIJĮ" + ], + [ + "审", + "计" + ], + [ + "1", + "23" + ], + [ + "åĵª", + "个" + ], + [ + "å²", + "Ľ" + ], + [ + "Ġcomple", + "te" + ], + [ + "Ġprocess", + "ing" + ], + [ + "ĠSh", + "ang" + ], + [ + "Ġcomprehen", + "sive" + ], + [ + "ou", + "se" + ], + [ + "å½", + "¼" + ], + [ + "åIJĪ", + "约" + ], + [ + "æ¡", + "Į" + ], + [ + "æĮģç»Ń", + "åŃ¦ä¹ł" + ], + [ + "Ġind", + "ic" + ], + [ + "Ġbu", + "ild" + ], + [ + "HT", + "ML" + ], + [ + "æ³Ħ", + "éľ²" + ], + [ + "Ġcom", + "b" + ], + [ + "ç", + "ĺ" + ], + [ + "ç͍", + "æĢ§" + ], + [ + "å·²", + "çŁ¥" + ], + [ + "ĠY", + "ork" + ], + [ + "æĽ´", + "容æĺĵ" + ], + [ + "符", + "åı·" + ], + [ + "æ¶Ī", + "æģ¯" + ], + [ + "Ġw", + "arm" + ], + [ + "çº", + "¯" + ], + [ + "åĮ»", + "åѦ" + ], + [ + "å¤Ħ", + "äºİ" + ], + [ + "d", + "a" + ], + [ + "Ġf", + "all" + ], + [ + "Ġl", + "iter" + ], + [ + "ĠP", + "l" + ], + [ + "Ġc", + "ur" + ], + [ + "çļĦ", + "设计" + ], + [ + "ĠO", + "r" + ], + [ + "ç»ĦæĪIJ", + "éĥ¨åĪĨ" + ], + [ + "ç¼ĵ", + "è§£" + ], + [ + "Ġprim", + "arily" + ], + [ + "åĨħ", + "å¿ĥ" + ], + [ + "çIJĨ", + "æĥ³" + ], + [ + "åĩº", + "çļĦ" + ], + [ + "æ±", + "¤" + ], + [ + "表", + "æł¼" + ], + [ + "erm", + "an" + ], + [ + "ht", + "t" + ], + [ + "è¿Ļ", + "使å¾Ĺ" + ], + [ + "æ¡Ī", + "ä¾ĭ" + ], + [ + "å©", + "ļ" + ], + [ + "éľĢè¦ģ注æĦı", + "çļĦæĺ¯" + ], + [ + "Ġint", + "rodu" + ], + [ + "åİ»", + "éϤ" + ], + [ + "Ġcompan", + "ies" + ], + [ + "d", + "own" + ], + [ + "Ġex", + "change" + ], + [ + "åĴĮ", + "åıijå±ķ" + ], + [ + "å¾Ī", + "ä¹IJæĦı" + ], + [ + "é¸", + "£" + ], + [ + "Ġsubs", + "idi" + ], + [ + "æĽ´", + "é«ĺæķĪ" + ], + [ + "个人", + "ä¿¡æģ¯" + ], + [ + "Python", + "代çłģ" + ], + [ + "ä¸ĭéĿ¢", + "æĺ¯" + ], + [ + "g", + "ing" + ], + [ + "æĮĩ", + "å®ļ" + ], + [ + "åį«", + "çĶŁ" + ], + [ + "æĻ", + "¨" + ], + [ + "çļĦç", + "Ŀ" + ], + [ + "åºĶç͍", + "åľºæĻ¯" + ], + [ + "i", + "or" + ], + [ + "æī", + "«" + ], + [ + "ç͍æĪ·", + "åı¯ä»¥" + ], + [ + "ĠG", + "oogle" + ], + [ + "o", + "in" + ], + [ + "ä¸į", + "éľĢè¦ģ" + ], + [ + "æıIJä¾Ľ", + "帮åĬ©" + ], + [ + "es", + "p" + ], + [ + "æıIJä¾Ľ", + "çļĦ" + ], + [ + "ç»Ļ", + "äºĪ" + ], + [ + "ĠZ", + "hang" + ], + [ + "ëĭ", + "Ī" + ], + [ + "åı¯èĥ½", + "æľī" + ], + [ + "Ġst", + "yle" + ] + ] + } +} \ No newline at end of file diff --git a/chronos/assets/tokenizers/legacy_6400/tokenizer_config.json b/chronos/assets/tokenizers/legacy_6400/tokenizer_config.json new file mode 100644 index 0000000..e46c14a --- /dev/null +++ b/chronos/assets/tokenizers/legacy_6400/tokenizer_config.json @@ -0,0 +1,335 @@ +{ + "add_bos_token": false, + "add_eos_token": false, + "add_prefix_space": false, + "added_tokens_decoder": { + "0": { + "content": "<|endoftext|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "1": { + "content": "<|im_start|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "2": { + "content": "<|im_end|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "3": { + "content": "<|object_ref_start|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "4": { + "content": "<|object_ref_end|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "5": { + "content": "<|box_start|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "6": { + "content": "<|box_end|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "7": { + "content": "<|quad_start|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "8": { + "content": "<|quad_end|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "9": { + "content": "<|vision_start|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "10": { + "content": "<|vision_end|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "11": { + "content": "<|vision_pad|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "12": { + "content": "<|image_pad|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "13": { + "content": "<|video_pad|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "14": { + "content": "<|audio_start|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "15": { + "content": "<|audio_end|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "16": { + "content": "<|audio_pad|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "17": { + "content": "", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "18": { + "content": "", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "19": { + "content": "", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "20": { + "content": "", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": true + }, + "21": { + "content": "", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": false + }, + "22": { + "content": "", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": false + }, + "23": { + "content": "", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": false + }, + "24": { + "content": "", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": false + }, + "25": { + "content": "", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": false + }, + "26": { + "content": "", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": false + }, + "27": { + "content": "<|buffer1|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": false + }, + "28": { + "content": "<|buffer2|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": false + }, + "29": { + "content": "<|buffer3|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": false + }, + "30": { + "content": "<|buffer4|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": false + }, + "31": { + "content": "<|buffer5|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": false + }, + "32": { + "content": "<|buffer6|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": false + }, + "33": { + "content": "<|buffer7|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": false + }, + "34": { + "content": "<|buffer8|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": false + }, + "35": { + "content": "<|buffer9|>", + "lstrip": false, + "normalized": false, + "rstrip": false, + "single_word": false, + "special": false + } + }, + "additional_special_tokens": [ + "<|im_start|>", + "<|im_end|>", + "<|object_ref_start|>", + "<|object_ref_end|>", + "<|box_start|>", + "<|box_end|>", + "<|quad_start|>", + "<|quad_end|>", + "<|vision_start|>", + "<|vision_end|>", + "<|vision_pad|>", + "<|image_pad|>", + "<|video_pad|>", + "<|audio_start|>", + "<|audio_end|>", + "<|audio_pad|>", + "", + "", + "", + "" + ], + "bos_token": "<|im_start|>", + "clean_up_tokenization_spaces": false, + "eos_token": "<|im_end|>", + "legacy": true, + "model_max_length": 131072, + "pad_token": "<|endoftext|>", + "sp_model_kwargs": {}, + "spaces_between_special_tokens": false, + "unk_token": "<|endoftext|>", + "image_token": "<|image_pad|>", + "audio_token": "<|audio_pad|>", + "video_token": "<|video_pad|>", + "vision_bos_token": "<|vision_start|>", + "vision_eos_token": "<|vision_end|>", + "audio_bos_token": "<|audio_start|>", + "audio_eos_token": "<|audio_end|>", + "chat_template": "{%- if tools %}\n {{- '<|im_start|>system\\n' }}\n {%- if messages[0].role == 'system' %}\n {{- messages[0].content + '\\n\\n' }}\n {%- endif %}\n {{- \"# Tools\\n\\nYou may call one or more functions to assist with the user query.\\n\\nYou are provided with function signatures within XML tags:\\n\" }}\n {%- for tool in tools %}\n {{- \"\\n\" }}\n {{- tool | tojson }}\n {%- endfor %}\n {{- \"\\n\\n\\nFor each function call, return a json object with function name and arguments within XML tags:\\n\\n{\\\"name\\\": , \\\"arguments\\\": }\\n<|im_end|>\\n\" }}\n{%- else %}\n {%- if messages[0].role == 'system' %}\n {{- '<|im_start|>system\\n' + messages[0].content + '<|im_end|>\\n' }}\n {%- endif %}\n{%- endif %}\n{%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}\n{%- for message in messages[::-1] %}\n {%- set index = (messages|length - 1) - loop.index0 %}\n {%- if ns.multi_step_tool and message.role == \"user\" and message.content is string and not(message.content.startswith('') and message.content.endswith('')) %}\n {%- set ns.multi_step_tool = false %}\n {%- set ns.last_query_index = index %}\n {%- endif %}\n{%- endfor %}\n{%- for message in messages %}\n {%- if message.content is string %}\n {%- set content = message.content %}\n {%- else %}\n {%- set content = '' %}\n {%- endif %}\n {%- if (message.role == \"user\") or (message.role == \"system\" and not loop.first) %}\n {{- '<|im_start|>' + message.role + '\\n' + content + '<|im_end|>' + '\\n' }}\n {%- elif message.role == \"assistant\" %}\n {%- set reasoning_content = '' %}\n {%- if message.reasoning_content is string %}\n {%- set reasoning_content = message.reasoning_content %}\n {%- else %}\n {%- if '' in content %}\n {%- set reasoning_content = content.split('')[0].rstrip('\\n').split('')[-1].lstrip('\\n') %}\n {%- set content = content.split('')[-1].lstrip('\\n') %}\n {%- endif %}\n {%- endif %}\n {%- if true %}\n {{- '<|im_start|>' + message.role + '\\n\\n' + reasoning_content.strip('\\n') + '\\n\\n\\n' + content.lstrip('\\n') }}\n {%- endif %}\n {%- if message.tool_calls %}\n {%- for tool_call in message.tool_calls %}\n {%- if (loop.first and content) or (not loop.first) %}\n {{- '\\n' }}\n {%- endif %}\n {%- if tool_call.function %}\n {%- set tool_call = tool_call.function %}\n {%- endif %}\n {{- '\\n{\"name\": \"' }}\n {{- tool_call.name }}\n {{- '\", \"arguments\": ' }}\n {%- if tool_call.arguments is string %}\n {{- tool_call.arguments }}\n {%- else %}\n {{- tool_call.arguments | tojson }}\n {%- endif %}\n {{- '}\\n' }}\n {%- endfor %}\n {%- endif %}\n {{- '<|im_end|>\\n' }}\n {%- elif message.role == \"tool\" %}\n {%- if loop.first or (messages[loop.index0 - 1].role != \"tool\") %}\n {{- '<|im_start|>user' }}\n {%- endif %}\n {{- '\\n\\n' }}\n {{- content }}\n {{- '\\n' }}\n {%- if loop.last or (messages[loop.index0 + 1].role != \"tool\") %}\n {{- '<|im_end|>\\n' }}\n {%- endif %}\n {%- endif %}\n{%- endfor %}\n{%- if add_generation_prompt %}\n {{- '<|im_start|>assistant\\n' }}\n {%- if open_thinking is defined and open_thinking is true %}\n {{- '\\n' }}\n {%- else %}\n {{- '\\n\\n\\n\\n' }}\n {%- endif %}\n{%- endif %}", + "tokenizer_class": "PreTrainedTokenizerFast" +} \ No newline at end of file diff --git a/chronos/cli.py b/chronos/cli.py index 35514d9..9a26ccd 100644 --- a/chronos/cli.py +++ b/chronos/cli.py @@ -11,9 +11,13 @@ chronos migrate — explicitly migrate a v1 checkpoint to v2 chronos serve — Ollama/OpenAI-compatible server (native runtime; optional /monitor page) chronos tokenizer — train a Chronos tokenizer from selected datasets - chronos corpus — download / clean / dedup / shard training corpora chronos longrun — time-budgeted resumable MLX training run (alias: run) chronos monitor — read-only training monitor page + JSON API + chronos lazy-probe — lazy-expert efficiency / hit rate / fidelity of a checkpoint or a run + chronos webui — Web UI (alias: ui) + +Task-specific tooling (corpora, evaluation, model bundles) lives in extensions +that import the kernel; the kernel itself carries no task. """ import sys import os @@ -85,15 +89,6 @@ def _module_main(module: str, rest): raise SystemExit(importlib.import_module(module).main(rest)) -def _cmd_corpus(rest): - """chronos corpus {download|build|shards} ...""" - if not rest or rest[0] not in {"download", "build", "shards"}: - raise SystemExit("usage: chronos corpus {download|build|shards} [options]") - module = {"download": "chronos.data.corpus.sources", "build": "chronos.data.corpus.presets", - "shards": "chronos.data.corpus.shards"}[rest[0]] - _module_main(module, rest[1:]) - - def main(): parser = argparse.ArgumentParser( prog='chronos', @@ -110,10 +105,12 @@ def main(): sub.add_parser('migrate', help='Explicitly migrate a v1 checkpoint to v2', add_help=False) sub.add_parser('serve', help='Ollama/OpenAI-compatible server (native Chronos runtime)', add_help=False) sub.add_parser('tokenizer', help='Train a Chronos tokenizer from selected datasets', add_help=False) - sub.add_parser('corpus', help='Download/clean/dedup/shard training corpora', add_help=False) sub.add_parser('longrun', help='Time-budgeted resumable MLX training run', aliases=['run'], add_help=False) sub.add_parser('monitor', help='Read-only training monitor page + JSON API', add_help=False) - sub.add_parser('bundle', help='Out-of-the-box model bundle: build/check/translate/finetune/serve', add_help=False) + sub.add_parser('lazy-probe', help='Lazy-expert efficiency/hit-rate/fidelity probe (checkpoint or --watch run)', + add_help=False) + sub.add_parser('webui', help='Web UI (FastAPI; --legacy for the Gradio console)', aliases=['ui'], + add_help=False) known, rest = parser.parse_known_args() longrun = lambda rest: _module_main('chronos.mlx.training.longrun', rest) # noqa: E731 @@ -127,11 +124,12 @@ def main(): 'migrate': cmd_migrate, 'serve': lambda rest: _module_main('chronos.serving.ollama_server', rest), 'tokenizer': lambda rest: _module_main('chronos.tokenizer', rest), - 'corpus': _cmd_corpus, 'longrun': longrun, 'run': longrun, 'monitor': lambda rest: _module_main('chronos.monitor.server', rest), - 'bundle': lambda rest: _module_main('chronos.bundle.cli', rest), + 'lazy-probe': lambda rest: _module_main('chronos.workbench.lazy_probe', rest), + 'webui': lambda rest: _module_main('chronos.webui.server', rest), + 'ui': lambda rest: _module_main('chronos.webui.server', rest), } dispatch[known.command](rest) diff --git a/chronos/config_schema.py b/chronos/config_schema.py index e399c0e..b97aa1b 100644 --- a/chronos/config_schema.py +++ b/chronos/config_schema.py @@ -28,6 +28,7 @@ "recurrent_contraction_coef", "recurrent_contraction_budget", "recurrent_stability_threshold", "recurrent_dt_init", "recurrent_dt_min", "recurrent_dt_max", "recurrent_latent_refinement", "recurrent_attention_mode", + "recurrent_order", "recurrent_later_topk", "recurrent_later_groups", "recurrent_dt_param", "recurrent_strategy", "recurrent_depth_jitter", "recurrent_parallel_refine", "recurrent_gradient_checkpoint_groups", "depth_schedule", @@ -37,6 +38,7 @@ "lookahead_steps", "layer_aware_lookahead", "layer_aware_cache", "lambda_balance", "lambda_temporal", "lambda_lookahead", "lambda_lookahead_topk", "lambda_lookahead_union", "lambda_router_locality", + "lambda_cluster_locality", "lambda_iteration_cluster", "lookahead_teacher_scope", "cluster_locality_clusters", "cluster_locality_window", "cluster_locality_mode", "lambda_router_anchor", "fallback_mask_prob", "offload_miss_policy_default", "use_hybrid_attention", "kv_latent_dim", "rope_dim", "rope_layout", "sliding_window_size", "kv_cache_dtype", "kv_quant_group_size", "mla_decode", "mla_cache_rope", "router_scope", @@ -44,7 +46,9 @@ "vram_budget_gb", "pinned_memory_max_fraction", "prefetch_depth", "recommended_resident_experts", "offload_working_set_experts", "storage_format", "cluster_manifest_path", "training_paging", "optimizer_paging", - "optimizer_page_dir", "page_size_mb", "activation_checkpointing", + "optimizer_page_dir", "page_size_mb", "activation_checkpointing", "ce_chunk_size", "attention_block_size", + "reset_router_at_documents", "document_masking", "recompute_policy", "recompute_scope", "lookahead_input_detach", "temporal_grad_span", "moe_chunk_tokens", "mla_upproj_recompute", + "reset_lookahead_at_documents", "rope_train_scaling", "modalities", "auto_detect_modalities", "image_size", "image_patch_size", "max_image_tokens", "audio_sample_rate", "max_audio_seconds", "max_audio_tokens", "modality_dropout", "freeze_modality_encoders", "image_encoder_type", diff --git a/chronos/data/chat_records.py b/chronos/data/chat_records.py new file mode 100644 index 0000000..deb8af6 --- /dev/null +++ b/chronos/data/chat_records.py @@ -0,0 +1,141 @@ +"""Multi-turn chat records (tool calls, tool results) for SFT shards. + +``render_chat`` reproduces ``chronos.tokenizer.model.CHAT_TEMPLATE`` in +Python and returns the text as ``(segment, supervised)`` pieces, so each +token's loss flag is known without guessing from offsets: + +* learned: an assistant turn's content, its ``{json}`` + lines and the closing ``<|im_end|>\\n``; +* context: system/tool definitions, user turns, ``tool`` results and every + ``<|im_start|>role\\n`` header (the generation prompt the model is given). + +``encode_chat`` tokenizes the pieces one by one and concatenates the ids, so +every piece boundary is a token boundary. ``write_sft_records`` writes the +``.bin/.idx/.plen/.lmask`` layout read by ``chronos.data.shards.SFTRecords``. + +A record whose last turn is not an assistant turn ends with context tokens; +the trailing context is dropped (it carries no loss and would read as +padding to the router's real-token mask, which ends at the last supervised +token). +""" +from __future__ import annotations + +import json +import os + +import numpy as np + +ROLES = ("system", "user", "assistant", "tool") + + +def _tool_json(value) -> str: + # ``tojson`` as transformers overrides it for chat templates: key order + # kept, no ASCII/HTML escaping, default ", " / ": " separators. + return json.dumps(value, ensure_ascii=False) + + +def _call_parts(call: dict) -> dict: + fn = call.get("function") if isinstance(call, dict) and call.get("function") else call + if not isinstance(fn, dict) or "name" not in fn: + raise ValueError(f"tool call needs a name: {call!r}") + args = fn.get("arguments", {}) + return {"name": fn["name"], "arguments": args} + + +def render_chat(messages, tools=None, *, add_generation_prompt: bool = False) -> list[tuple[str, bool]]: + """``[(text, supervised)]`` pieces whose concatenation is the template text.""" + pieces: list[tuple[str, bool]] = [] + messages = list(messages or []) + for m in messages: + if m.get("role") not in ROLES: + raise ValueError(f"unknown chat role {m.get('role')!r}; expected one of {ROLES}") + skip_first = bool(tools) and bool(messages) and messages[0]["role"] == "system" + if tools: + head = "<|im_start|>system\n" + if skip_first: + head += (messages[0].get("content") or "") + "\n\n" + head += "\n" + "".join(_tool_json(t) + "\n" for t in tools) + "<|im_end|>\n" + pieces.append((head, False)) + for i, m in enumerate(messages): + if skip_first and i == 0: + continue + role, text = m["role"], m.get("content") or "" + pieces.append((f"<|im_start|>{role}\n", False)) + if role != "assistant": + pieces.append((text + "<|im_end|>\n", False)) + continue + body = text + for j, call in enumerate(m.get("tool_calls") or []): + if text or j: + body += "\n" + body += "" + _tool_json(_call_parts(call)) + "" + pieces.append((body + "<|im_end|>\n", True)) + if add_generation_prompt: + pieces.append(("<|im_start|>assistant\n", False)) + return [(t, s) for t, s in pieces if t] + + +def _ids(tokenizer, text: str) -> list[int]: + """Token ids from a ``ChronosTokenizer``, HF ``tokenizers.Tokenizer`` or + ``transformers`` tokenizer (no BOS/EOS added).""" + try: + out = tokenizer.encode(text, add_special_tokens=False) + except TypeError: + out = tokenizer.encode(text) + return list(getattr(out, "ids", out)) + + +def encode_chat(tokenizer, messages, tools=None) -> tuple[np.ndarray, np.ndarray]: + """``(ids int64, supervised uint8)`` for one conversation; trailing context + after the last assistant turn is dropped. Raises if nothing is learned.""" + ids: list[int] = [] + mask: list[int] = [] + for text, supervised in render_chat(messages, tools): + piece = _ids(tokenizer, text) + ids.extend(piece) + mask.extend([int(supervised)] * len(piece)) + if 1 not in mask: + raise ValueError("conversation has no assistant turn to learn") + end = len(mask) - mask[::-1].index(1) + return np.asarray(ids[:end], np.int64), np.asarray(mask[:end], np.uint8) + + +def write_sft_records(prefix: str, records, *, dtype=np.uint16, max_len: int | None = None) -> dict: + """Write ``(ids, supervised)`` records to ``.{bin,idx,plen,lmask}``. + + ``.plen`` is each record's first supervised offset (older readers apply + the prompt rule); ``.lmask`` carries the exact per-token flags. Records + longer than ``max_len`` are skipped and counted. Files are written to + ``.tmp`` names and renamed, so a reader never sees a partial set. + """ + limit = np.iinfo(dtype).max + tokens, masks, offsets, plens, skipped = [], [], [0], [], 0 + for ids, mask in records: + ids, mask = np.asarray(ids), np.asarray(mask, np.uint8) + if ids.shape != mask.shape or ids.ndim != 1: + raise ValueError("each record needs 1-D ids and a mask of the same length") + if max_len is not None and ids.size > max_len: + skipped += 1 + continue + if ids.size and (int(ids.max()) > limit or int(ids.min()) < 0): + raise ValueError(f"token id outside {np.dtype(dtype).name}") + hits = np.flatnonzero(mask) + if not hits.size: + raise ValueError("record has no supervised token") + tokens.append(ids.astype(dtype)); masks.append(mask) + offsets.append(offsets[-1] + ids.size); plens.append(int(hits[0])) + arrays = { + ".bin": np.concatenate(tokens) if tokens else np.zeros(0, dtype), + ".idx": np.asarray(offsets, np.int64), + ".plen": np.asarray(plens, np.int32), + ".lmask": np.concatenate(masks) if masks else np.zeros(0, np.uint8), + } + os.makedirs(os.path.dirname(os.path.abspath(prefix)), exist_ok=True) + for suffix, arr in arrays.items(): + tmp = prefix + suffix + ".tmp" + with open(tmp, "wb") as fh: + arr.tofile(fh) + for suffix in (".bin", ".idx", ".lmask", ".plen"): # .plen last: readers key on it + os.replace(prefix + suffix + ".tmp", prefix + suffix) + return {"records": len(plens), "skipped_too_long": skipped, "tokens": int(offsets[-1]), + "supervised_tokens": int(arrays[".lmask"].sum())} diff --git a/chronos/data/corpus/evalsets.py b/chronos/data/corpus/evalsets.py deleted file mode 100644 index b9158fd..0000000 --- a/chronos/data/corpus/evalsets.py +++ /dev/null @@ -1,65 +0,0 @@ -"""Held-out evaluation sets (never trained on; also used for leakage filtering).""" -from __future__ import annotations - -import ast -import json -import os - - -def _flores(raw: str, split: str): - import pyarrow.parquet as pq - path = os.path.join(raw, "facebook__flores__eng-zho", "data", "pair", "eng_Latn-zho_Hans", - f"{split}-00000-of-00001.parquet") - for r in pq.read_table(path, columns=["sentence_eng_Latn", "sentence_zho_Hans"]).to_pylist(): - yield r["sentence_eng_Latn"], r["sentence_zho_Hans"] - - -def _wmt22(raw: str): - import pyarrow.parquet as pq - folder = os.path.join(raw, "haoranxu__WMT22-Test__en-zh", "en-zh") - for name in sorted(os.listdir(folder)): - if not name.endswith(".parquet"): - continue - for r in pq.read_table(os.path.join(folder, name)).to_pylist(): - value = r["en-zh"] - pair = value if isinstance(value, dict) else ast.literal_eval(value) - yield pair["en"], pair["zh"] - - -def _wmt24pp(raw: str): - path = os.path.join(raw, "google__wmt24pp__en-zh_CN", "en-zh_CN.jsonl") - with open(path, encoding="utf-8") as fh: - for line in fh: - r = json.loads(line) - if str(r.get("is_bad_source", "")).strip().lower() == "true": - continue # documented low-quality sources - yield r["source"], r["target"] - - -def _opus_test(raw: str): - import pyarrow.parquet as pq - path = os.path.join(raw, "Helsinki-NLP__opus-100", "en-zh", "test-00000-of-00001.parquet") - for r in pq.read_table(path, columns=["translation"]).to_pylist(): - yield r["translation"]["en"], r["translation"]["zh"] - - -EVAL_SETS = { - "flores_dev": lambda raw: _flores(raw, "dev"), - "flores_devtest": lambda raw: _flores(raw, "devtest"), - "wmt22_enzh": _wmt22, - "wmt24pp_enzh": _wmt24pp, - "opus100_test": _opus_test, -} - - -def load_eval_sets(raw_root: str, names=None) -> dict[str, list[tuple[str, str]]]: - """Return {name: [(en, zh), ...]} for every available set.""" - out = {} - for name, loader in EVAL_SETS.items(): - if names and name not in names: - continue - try: - out[name] = list(loader(raw_root)) - except FileNotFoundError: - continue - return out diff --git a/chronos/data/flexible_dataset.py b/chronos/data/flexible_dataset.py index d93a5c7..5366e99 100644 --- a/chronos/data/flexible_dataset.py +++ b/chronos/data/flexible_dataset.py @@ -9,8 +9,8 @@ instruction+output, conversations, messages). StreamingSFTDataset — supervised fine-tuning. Uses the tokenizer's chat template; only assistant tokens contribute - to the loss (label = -100 elsewhere). Drop-in - for minimind's SFTDataset. + to the loss (label = -100 elsewhere). Reads the + common `conversations` jsonl layout. StreamingDPODataset — preference pairs. Returns the dict shape DPO / ORPO trainers expect. @@ -303,6 +303,48 @@ def _media_value(value): return value +def record_media(record: dict, *, image_size: int = 224, audio_sample_rate: int = 16000, + max_audio_seconds: float = 30.0, media_error_policy: str = "warn"): + """``(modality_inputs, modality_mask[2])`` for one record, or ``None``. + + Pre-encoded ``*_embeds`` take precedence over a path/value of the same + modality. Used by the preference (DPO/ORPO) and GRPO prompt loaders; the + pair or the rollout group shares the record's media.""" + if not detect_modalities(record): + return None + normalized = normalize_multimodal_record(record) + media = {} + for name in ("image_embeds", "audio_embeds"): + value = normalized["modalities"].get(name) + if value is not None: + try: + media[name] = torch.as_tensor(value, dtype=torch.float32) + except Exception as exc: + if media_error_policy == "raise": + raise ValueError(f"invalid {name}: {exc}") from exc + warnings.warn(f"invalid {name}: {exc}", RuntimeWarning, stacklevel=2) + for modality, loader in ( + ("image", lambda v: _load_image(v, image_size)), + ("audio", lambda v: _load_audio(v, audio_sample_rate, max_audio_seconds)), + ): + if f"{modality}_embeds" in media: + continue + value = _media_value(normalized["modalities"].get(modality)) + if value is None: + continue + try: + media[modality] = loader(value) + except Exception as exc: + if media_error_policy == "raise": + raise + warnings.warn(str(exc), RuntimeWarning, stacklevel=2) + if not media: + return None + mask = torch.tensor([float("image" in media or "image_embeds" in media), + float("audio" in media or "audio_embeds" in media)]) + return media, mask + + class MediaResolver: """Lazy media resolver shared by JSONL and API serving paths.""" @@ -563,7 +605,7 @@ def _pad_embeddings(values): # ── SFT (conversations → assistant-token loss mask) ───────────────── class StreamingSFTDataset(_StreamingJSONLBase): - """Streaming counterpart to minimind's SFTDataset. + """Streaming chat-SFT dataset (``conversations`` jsonl records). Reads `conversations: [{role, content, ...}, ...]` records, applies the tokenizer's chat template, and masks every position outside an @@ -575,7 +617,7 @@ def __init__(self, data_path: str, tokenizer, max_length: int = 1024): self.tokenizer = tokenizer self.max_length = max_length # Sentinels marking the assistant turn boundary in encoded form. - # Same formulation minimind uses (`bos`+'assistant\n' / `eos`+'\n'). + # ChatML-style turn markers (`bos`+'assistant\n' / `eos`+'\n'). self.bos_id = tokenizer( f'{tokenizer.bos_token}assistant\n', add_special_tokens=False ).input_ids @@ -699,7 +741,7 @@ def __getitem__(self, index): # ── DPO / ORPO (chosen + rejected pair) ───────────────────────────── class StreamingDPODataset(_StreamingJSONLBase): - """Streaming counterpart to minimind's DPODataset. + """Streaming preference-pair dataset (``chosen`` / ``rejected`` jsonl records). Returns the dict shape the DPO/ORPO trainers expect: {x_chosen, y_chosen, mask_chosen, x_rejected, y_rejected, mask_rejected} @@ -764,3 +806,44 @@ def __getitem__(self, index): "y_rejected": torch.tensor(r_ids[1:], dtype=torch.long), "mask_rejected":torch.tensor(r_mask[1:], dtype=torch.long), } + + +class MultimodalStreamingDPODataset(StreamingDPODataset): + """Preference pairs with the prompt's image/audio. + + Media fields sit on the record (``image``/``audio``/``*_embeds`` or a + ``modalities`` dict, as for SFT); chosen and rejected answer the same + multimodal prompt, so both sides of the pair condition on the same media. + Text-only records keep the ``StreamingDPODataset`` dict.""" + + def __init__(self, data_path, tokenizer, max_length=4096, *, image_size=224, + audio_sample_rate=16000, max_audio_seconds=30.0, media_error_policy="warn"): + super().__init__(data_path, tokenizer, max_length=max_length) + self.media_kwargs = dict(image_size=int(image_size), audio_sample_rate=int(audio_sample_rate), + max_audio_seconds=float(max_audio_seconds), + media_error_policy=str(media_error_policy)) + self.modality_summary = dataset_modality_summary(data_path) + + def __getitem__(self, index): + item = super().__getitem__(index) + found = record_media(self._read_record(index), **self.media_kwargs) + if found is not None: + item["modality_inputs"], item["modality_mask"] = found + return item + + +PREFERENCE_KEYS = ("x_chosen", "y_chosen", "mask_chosen", "x_rejected", "y_rejected", "mask_rejected") + + +def preference_collate(batch): + """Stack DPO/ORPO pairs; media (one set per pair) is batched with the + ``multimodal_collate`` rules, so mixed text/media pairs keep exact masks.""" + out = {key: torch.stack([item[key] for item in batch]) for key in PREFERENCE_KEYS} + if any(item.get("modality_inputs") for item in batch): + stub = torch.zeros(1, dtype=torch.long) + media = multimodal_collate([ + {"input_ids": stub, "labels": stub, "modality_inputs": item["modality_inputs"], + "modality_mask": item.get("modality_mask")} if item.get("modality_inputs") else (stub, stub) + for item in batch]) + out["modality_inputs"], out["modality_mask"] = media.get("modality_inputs", {}), media["modality_mask"] + return out diff --git a/chronos/data/shards.py b/chronos/data/shards.py new file mode 100644 index 0000000..2de910f --- /dev/null +++ b/chronos/data/shards.py @@ -0,0 +1,171 @@ +"""Readers for tokenized, memory-mapped training shards (any task, any language). + +Layout under a shard folder (written by any task's own builder): + +* ``pretrain/{train,valid}/*.bin``: one flat uint16/uint32 token array per + file, documents separated by the EOS token; the reader samples fixed windows. +* ``sft/{train,valid}/.{bin,idx,plen}``: chat-template records in a + token array (``.bin``), int64 record offsets (``.idx``, n+1 entries) and + int32 prompt lengths (``.plen``). Only tokens after the prompt are + supervised, so the loss covers the assistant reply alone. +* optional ``sft/.../.lmask``: one uint8 per token of ``.bin`` (1 = + supervised). Multi-turn records (tool calls, tool results, several + assistant turns) need it: the assistant's text and ``tool_calls`` are + learned, user/system/tool-result tokens are context. When present it + replaces the ``.plen`` rule for that stem; ``.plen`` stays the first + supervised offset so older readers keep working. + +An optional ``shards_manifest.json`` may record ``"dtype": "uint16"|"uint32"``. +""" +from __future__ import annotations + +import json +import os + +import numpy as np + + +def dtype_for(vocab_size: int): + """Smallest unsigned dtype that holds every token id of ``vocab_size``.""" + return np.uint16 if vocab_size <= 65535 else np.uint32 + + +_dtype_for = dtype_for # pre-0.3.1a2 name + + +def manifest_dtype(shards_dir: str, default=np.uint16): + """Token dtype recorded in ``/shards_manifest.json`` (``default`` if absent).""" + path = os.path.join(shards_dir, "shards_manifest.json") + try: + with open(path, encoding="utf-8") as fh: + name = json.load(fh).get("dtype") + except (OSError, ValueError): + return default + return {"uint16": np.uint16, "uint32": np.uint32}.get(name, default) + + +class PackedTokenStream: + """Random fixed-length windows over memory-mapped pretrain shards.""" + + def __init__(self, folder: str, seq_len: int, dtype=np.uint16, seed: int = 0): + files = sorted(os.path.join(folder, f) for f in os.listdir(folder) if f.endswith(".bin")) + self.arrays = [np.memmap(f, dtype=dtype, mode="r") for f in files] + self.arrays = [a for a in self.arrays if a.size > seq_len + 1] + sizes = np.array([a.size for a in self.arrays], dtype=np.float64) + self.weights = sizes / sizes.sum() + self.total_tokens = int(sizes.sum()) + self.seq_len = seq_len + self.rng = np.random.default_rng(seed) + + def batch(self, batch_size: int) -> np.ndarray: + which = self.rng.choice(len(self.arrays), size=batch_size, p=self.weights) + out = np.empty((batch_size, self.seq_len + 1), dtype=np.int32) + for row, i in enumerate(which): + arr = self.arrays[i] + start = int(self.rng.integers(0, arr.size - self.seq_len - 1)) + out[row] = arr[start:start + self.seq_len + 1] + return out + + +class SFTRecords: + """Length-bucketed SFT batches with assistant-only loss masks.""" + + def __init__(self, folder: str, dtype=np.uint16, seed: int = 0, pad_id: int = 0): + stems = sorted(f[:-5] for f in os.listdir(folder) if f.endswith(".plen")) + self.tokens, self.offsets, self.plens, self.index = [], [], [], [] + self.lmasks = [] + for si, stem in enumerate(stems): + base = os.path.join(folder, stem) + tok = np.memmap(base + ".bin", dtype=dtype, mode="r") + off = np.fromfile(base + ".idx", dtype=np.int64) + plen = np.fromfile(base + ".plen", dtype=np.int32) + lmask = None + if os.path.exists(base + ".lmask"): + lmask = np.memmap(base + ".lmask", dtype=np.uint8, mode="r") + if lmask.size != tok.size: + raise ValueError(f"{base}.lmask has {lmask.size} entries for {tok.size} tokens") + self.tokens.append(tok); self.offsets.append(off); self.plens.append(plen) + self.lmasks.append(lmask) + self.index.append(np.stack([np.full(len(plen), si), np.arange(len(plen)), + np.diff(off)], axis=1)) + self.index = np.concatenate(self.index) if self.index else np.zeros((0, 3), np.int64) + # Sorted by length once: each batch is a contiguous similar-length + # window found by binary search (O(log n), no full scan per batch). + self.index = self.index[np.argsort(self.index[:, 2], kind="stable")] + self.lengths = self.index[:, 2] + self.rng = np.random.default_rng(seed) + self.pad_id = pad_id + + def __len__(self): + return len(self.index) + + def batch(self, token_budget: int, max_rows: int = 256, width_multiple: int = 64): + """Sample a bucket of similar-length records filling ~token_budget tokens. + + The padded width is rounded up to ``width_multiple`` so the training + graph sees a handful of shapes (Metal kernels are shape-specialized). + """ + target = int(self.lengths[int(self.rng.integers(0, len(self.index)))]) + tol = max(4, target // 8) + lo = int(np.searchsorted(self.lengths, target - tol, side="left")) + hi = int(np.searchsorted(self.lengths, target + tol, side="right")) + bucket = -(-(target + tol) // width_multiple) * width_multiple + rows = max(1, min(max_rows, token_budget // max(bucket, 1), hi - lo)) + pick = self.index[lo + self.rng.choice(hi - lo, size=rows, replace=False)] + width = int(pick[:, 2].max()) + width = -(-width // width_multiple) * width_multiple + 1 # +1: inputs/labels are shifted + ids = np.full((len(pick), width), self.pad_id, dtype=np.int32) + labels = np.full((len(pick), width), -100, dtype=np.int32) + for r, (si, ri, n) in enumerate(pick): + off = self.offsets[si][ri] + seq = self.tokens[si][off:off + n] + ids[r, :n] = seq + lm = self.lmasks[si] + if lm is not None: + keep = np.asarray(lm[off:off + n]).astype(bool) + # int32 first: under NumPy 2 (NEP 50) np.where keeps uint16 and wraps -100 → 65436. + labels[r, :n] = np.where(keep, np.asarray(seq, dtype=np.int32), -100) + else: + p = int(self.plens[si][ri]) + labels[r, p:n] = seq[p:] + return ids, labels + + def packed_batch(self, token_budget: int, seq_len: int, sep_id: int = 0): + """Rows of exactly ``seq_len + 1`` tokens, each filled with whole records. + + Records are taken in random order and joined by one ``sep_id`` token + (the document separator that ``segment_ids`` cuts on); a record that + does not fit is cut at the row end, a record longer than a row is + truncated. Labels keep the loss mask of each record; separators and + the row's unused tail carry no loss. Compared with ``batch`` there is no + length bucketing and almost no padding, so short SFT data wastes no compute.""" + rows = max(1, int(token_budget) // int(seq_len)) + width = int(seq_len) + 1 + ids = np.full((rows, width), self.pad_id, dtype=np.int32) + labels = np.full((rows, width), -100, dtype=np.int32) + for r in range(rows): + pos = 0 + while pos < width: + si, ri, n = self.index[int(self.rng.integers(0, len(self.index)))] + off = self.offsets[si][ri] + take = min(int(n), width - pos) + seq = np.asarray(self.tokens[si][off:off + take], dtype=np.int32) + ids[r, pos:pos + take] = seq + lm = self.lmasks[si] + if lm is not None: + keep = np.asarray(lm[off:off + take]).astype(bool) + else: + keep = np.arange(take) >= int(self.plens[si][ri]) + labels[r, pos:pos + take] = np.where(keep, seq, -100) + pos += take + if pos < width: + ids[r, pos] = sep_id # closes the document; carries no loss + pos += 1 + return ids, labels + + def supervised_tokens(self) -> int: + """Tokens that carry loss over every record (``.lmask`` or ``.plen`` rule).""" + total = 0 + for off, plen, lm in zip(self.offsets, self.plens, self.lmasks): + total += int(np.asarray(lm).sum()) if lm is not None else int(off[-1]) - int(plen.sum()) + return total diff --git a/chronos/deps.py b/chronos/deps.py index 7a01a4a..9eadcc2 100644 --- a/chronos/deps.py +++ b/chronos/deps.py @@ -1,80 +1,50 @@ -""" -chronos/deps.py — Automatic dependency bootstrap for minimind-master kernel. - -When minimind-master is not found locally, this module downloads it from -GitHub and makes it importable. Called automatically on first import of -any chronos.model module. +"""Compatibility shim (0.3.2+): Chronos has no external kernel dependency. -Legal notice: minimind is licensed under Apache-2.0. -See THIRD_PARTY_NOTICES.md for full attribution. +Before 0.3.2 this module git-cloned minimind from an unpinned ``master`` at +import time and inserted it at the front of ``sys.path``. The kernel pieces +Chronos used now live in :mod:`chronos.model.kernel`; nothing is downloaded +and ``sys.path`` is left alone. ``import chronos.deps`` keeps working for old +scripts, and :func:`get_tokenizer_path` returns the bundled legacy tokenizer. """ -import sys +from __future__ import annotations + import os -import subprocess -import importlib from pathlib import Path -MINIMIND_REPO = "https://github.com/jingyaogong/minimind" -MINIMIND_COMMIT = "master" # pin to a tag/commit for reproducibility - -# Candidate local paths (in priority order) -_CANDIDATE_PATHS = [ - Path(__file__).parent.parent.parent / "minimind-master", # sibling dir - Path(__file__).parent.parent / "minimind-master", - Path.home() / ".cache" / "chronos" / "minimind-master", -] - - -def _find_local() -> Path | None: - # A bundle ships a vendored copy (``/third_party/minimind``) and - # points here, so a recipient never needs git or network access. - override = os.environ.get("CHRONOS_MINIMIND_DIR", "").strip() - if override: - p = Path(override).expanduser() - if not (p / "model" / "model_minimind.py").exists(): - raise FileNotFoundError(f"CHRONOS_MINIMIND_DIR={override!r} has no model/model_minimind.py") - return p - for p in _CANDIDATE_PATHS: - if (p / "model" / "model_minimind.py").exists(): - return p - return None +LEGACY_TOKENIZER_DIR = Path(__file__).resolve().parent / "assets" / "tokenizers" / "legacy_6400" +#: Task-neutral 32768-token BPE (en + zh + code-friendly), the default for NEW models (planner, Train page). +GENERAL_TOKENIZER_DIR = Path(__file__).resolve().parent / "assets" / "tokenizers" / "general_32k" +GENERAL_TOKENIZER_VOCAB = 32768 -def _download(target: Path) -> Path: - target.parent.mkdir(parents=True, exist_ok=True) - print(f"[Chronos] minimind not found locally. Downloading from {MINIMIND_REPO} ...") - print(f"[Chronos] Target: {target}") - print(f"[Chronos] License: Apache-2.0 | Copyright jingyaogong") - subprocess.run( - ["git", "clone", "--depth", "1", "--branch", MINIMIND_COMMIT, - MINIMIND_REPO, str(target)], - check=True, - ) - print(f"[Chronos] minimind downloaded to {target}") - return target +def get_general_tokenizer_path() -> str: + """Bundled general 32k tokenizer for new models (see its NOTICE). - -def ensure_minimind() -> Path: - """ - Ensure minimind-master is available and on sys.path. - Returns the path to the minimind root directory. + Not used as the fallback for old checkpoints: a checkpoint that never recorded its tokenizer was + trained with the legacy 6400-token vocabulary, and :func:`get_tokenizer_path` keeps returning that. """ - local = _find_local() - if local is None: - cache_dir = Path.home() / ".cache" / "chronos" / "minimind-master" - local = _download(cache_dir) - - root = str(local) - if root not in sys.path: - sys.path.insert(0, root) - return local + return str(GENERAL_TOKENIZER_DIR) def get_tokenizer_path() -> str: - """Return the path to the minimind tokenizer directory.""" - root = ensure_minimind() - return str(root / "model") + """Default tokenizer for checkpoints that never recorded one. + + ``CHRONOS_DEFAULT_TOKENIZER`` overrides it; otherwise the bundled legacy + 6400-token vocabulary (data files only, Apache-2.0, see its NOTICE) is + used. New models record their own tokenizer in the checkpoint sidecar. + """ + override = os.environ.get("CHRONOS_DEFAULT_TOKENIZER", "").strip() + if override: + p = Path(override).expanduser() + if not (p / "tokenizer.json").is_file(): + raise FileNotFoundError(f"CHRONOS_DEFAULT_TOKENIZER={override!r} has no tokenizer.json") + return str(p) + return str(LEGACY_TOKENIZER_DIR) -# Run on import -_minimind_root = ensure_minimind() +def ensure_minimind(): + """Removed in 0.3.2: Chronos no longer needs minimind. Returns ``None``.""" + import warnings + warnings.warn("chronos.deps.ensure_minimind() is a no-op since 0.3.2; Chronos ships its own kernel " + "(chronos.model.kernel).", DeprecationWarning, stacklevel=2) + return None diff --git a/chronos/eval/benchmark.py b/chronos/eval/benchmark.py index 75be33f..393a5aa 100644 --- a/chronos/eval/benchmark.py +++ b/chronos/eval/benchmark.py @@ -14,8 +14,7 @@ --device cpu \ --max_new_tokens 64 """ -import sys -import chronos.deps # ensure minimind on sys.path +import chronos.deps # default tokenizer path import argparse import math @@ -108,7 +107,7 @@ def run_benchmark(args): chronos.deps.get_tokenizer_path() ) - from dataset.lm_dataset import PretrainDataset + from chronos.data.flexible_dataset import FlexibleDataset as PretrainDataset dataset = PretrainDataset(args.data_path, tokenizer, max_length=args.max_seq_len) loader = DataLoader(dataset, batch_size=args.batch_size, shuffle=False) diff --git a/chronos/eval/io_profiler.py b/chronos/eval/io_profiler.py index 1c08343..1ca8c3d 100644 --- a/chronos/eval/io_profiler.py +++ b/chronos/eval/io_profiler.py @@ -16,8 +16,7 @@ - Mean L2 routing shift (lower = more cache-friendly) - Cache hit rate estimate given VRAM budget """ -import sys -import chronos.deps # ensure minimind on sys.path +import chronos.deps # default tokenizer path import argparse import json @@ -221,7 +220,7 @@ def main(): chronos.deps.get_tokenizer_path() ) - from dataset.lm_dataset import PretrainDataset + from chronos.data.flexible_dataset import FlexibleDataset as PretrainDataset dataset = PretrainDataset(args.data_path, tokenizer, max_length=args.max_seq_len) loader = DataLoader(dataset, batch_size=args.batch_size, shuffle=False) diff --git a/chronos/expert_clusters.py b/chronos/expert_clusters.py new file mode 100644 index 0000000..37b1e36 --- /dev/null +++ b/chronos/expert_clusters.py @@ -0,0 +1,260 @@ +"""Expert-cluster partition shared by training and lazy inference (no torch / mlx imports). + +A cluster is a fixed set of expert ids that is stored and paged together +(one ``cluster_.ctsr`` file in the MLX store). The training-time +cluster-locality constraint and the inference-time cluster prefetch use the +same partition, so routing that training concentrates on one cluster is the +routing that one SSD read serves at inference. +""" +from __future__ import annotations + +import math +from typing import List, Optional, Sequence + +# Default strength of the training constraint (on by default). Measured on +# the synthetic multi-topic A/B (tools/bench_cluster_locality.py, 300 steps, +# reports/residency_20261107/sweep/): λ = 0.03 / 0.1 / 0.3 / 1.0 cut lazy +# cluster reads per token from 1.48 to 0.51 / 0.15 / 0.023 / 0.026, with +# held-out CE within +0.3–0.6 % of λ = 0 at every value. 0.3 is the smallest +# value that reaches the plateau. +DEFAULT_LAMBDA = 0.3 +# Window used when the data gives no record length (tokens). The same sweep +# put the best window at the stream segment length (16: 0.044, 32: 0.023, +# 64: 0.11, whole sequence: 0.11 reads per token at a 32-token segment). +DEFAULT_WINDOW = 32 +PAGING_MODES = ("auto", "cluster", "expert") + + +def resolve_cluster_count(config) -> int: + """Number of clusters: ``cluster_locality_clusters`` or ``⌈E / (2k)⌉``, at least 1.""" + e = int(getattr(config, "num_experts", 0) or 0) + if e <= 0: + return 1 + n = int(getattr(config, "cluster_locality_clusters", 0) or 0) + if n <= 0: + k = max(1, int(getattr(config, "num_experts_per_tok", 1) or 1)) + n = -(-e // (2 * k)) + return max(1, min(n, e)) + + +def contiguous_clusters(num_experts: int, num_clusters: int) -> List[List[int]]: + """Split ``0..E-1`` into ``num_clusters`` contiguous, near-equal groups.""" + e, c = int(num_experts), max(1, min(int(num_clusters), int(num_experts))) + base, extra = divmod(e, c) + out, start = [], 0 + for i in range(c): + size = base + (1 if i < extra else 0) + out.append(list(range(start, start + size))) + start += size + return out + + +def expert_to_cluster(clusters: Sequence[Sequence[int]], num_experts: int) -> List[int]: + """``assign[e]`` = cluster id of expert ``e``; every expert must appear exactly once.""" + assign = [-1] * int(num_experts) + for cid, members in enumerate(clusters): + for eid in members: + eid = int(eid) + if not 0 <= eid < int(num_experts) or assign[eid] != -1: + raise ValueError(f"expert {eid} is out of range or in two clusters") + assign[eid] = cid + if -1 in assign: + raise ValueError(f"experts {[i for i, c in enumerate(assign) if c == -1]} have no cluster") + return assign + + +def training_clusters(config) -> List[List[int]]: + """The partition the training constraint uses (and that inference should page by).""" + e = int(getattr(config, "num_experts", 0) or 0) + return contiguous_clusters(e, resolve_cluster_count(config)) + + +def cluster_membership(clusters: Sequence[Sequence[int]], num_experts: int) -> List[List[float]]: + """Row-per-expert one-hot ``[E, C]`` (nested lists; callers wrap it as a tensor).""" + assign = expert_to_cluster(clusters, num_experts) + c = len(clusters) + return [[1.0 if assign[e] == j else 0.0 for j in range(c)] for e in range(int(num_experts))] + + +def trained_with_clusters(config) -> bool: + """True when the weights were trained with the cluster-locality constraint (λ > 0).""" + try: + return float(getattr(config, "lambda_cluster_locality", 0.0) or 0.0) > 0.0 + except (TypeError, ValueError): + return False + + +def inference_clusters(config, paging: str = "auto") -> Optional[List[List[int]]]: + """Page layout for lazy inference, adapted to how the model was trained. + + ``paging``: ``"auto"`` pages by the training partition when the weights + were trained with the constraint and per expert otherwise; ``"cluster"`` + forces the training partition; ``"expert"`` forces one page per expert. + Returns the cluster list (singletons for per-expert paging). + """ + if paging not in PAGING_MODES: + raise ValueError(f"paging must be one of {PAGING_MODES}, not {paging!r}") + e = int(getattr(config, "num_experts", 0) or 0) + if e <= 0: + return [] + if paging == "cluster" or (paging == "auto" and trained_with_clusters(config)): + return training_clusters(config) + return [[i] for i in range(e)] + + +def paging_tag(clusters: Sequence[Sequence[int]]) -> str: + """Short cache-directory suffix that identifies a page layout.""" + sizes = sorted({len(c) for c in clusters}) + if sizes == [1]: + return "e" + return f"c{len(clusters)}" + + +def recommended_window(median_record_tokens: Optional[float], seq_len: int) -> int: + """Cluster-locality window for a dataset: the power of two nearest the median + record length (one record ≈ one stream segment), clamped to ``[16, seq_len]``. + Falls back to ``DEFAULT_WINDOW`` when no record length is known.""" + seq_len = max(1, int(seq_len)) + if not median_record_tokens or median_record_tokens <= 0: + return min(DEFAULT_WINDOW, seq_len) + w = 1 << int(round(math.log2(float(median_record_tokens)))) + return int(max(min(16, seq_len), min(w, seq_len))) + + +def median_record_tokens(shards_dir: str, max_files: int = 8) -> float | None: + """Median SFT record length (tokens) from the ``.idx`` offsets under ``/sft/train``. + + Reads at most ``max_files`` index files (offsets only, no token data). + Returns None when the shards have no SFT records (packed pretrain text + has no record boundaries).""" + import glob + import os + + import numpy as np + files = sorted(glob.glob(os.path.join(shards_dir, "sft", "train", "*.idx")))[:max_files] + lengths = [np.diff(np.fromfile(f, dtype=np.int64)) for f in files] + lengths = [x for x in lengths if x.size] + if not lengths: + return None + return float(np.median(np.concatenate(lengths))) + + +def cluster_locality_config(model_config: dict, shards_dir: str | None, *, enabled: bool = True, + lambda_cluster: float | None = None, window: int | None = None, + clusters: int | None = None, seq_len: int | None = None) -> dict: + """Cluster-locality fields for a fine-tune and where each value comes from. + + On by default at ``DEFAULT_LAMBDA`` (measured sweep on a synthetic + multi-topic task, from-scratch training; its effect on a fine-tune of + weights trained without the constraint has not been measured). Off for + dense models and when there are fewer than two clusters.""" + from chronos.model.config import ChronosConfig # lazy: this module stays torch/mlx-free + # The values training will use: longrun builds ChronosConfig(**model_config). + cfg = ChronosConfig(**{k: v for k, v in model_config.items() if v is not None}) + e = int(getattr(cfg, "num_experts", 0) or 0) + k = int(getattr(cfg, "num_experts_per_tok", 1) or 1) + seq = int(seq_len or getattr(cfg, "max_position_embeddings", 512) or 512) + usable = bool(getattr(cfg, "use_moe", True)) and e > 2 * k + lam = 0.0 if not (enabled and usable) else float(DEFAULT_LAMBDA if lambda_cluster is None else lambda_cluster) + if lam < 0: + raise ValueError("lambda_cluster must be >= 0") + median = median_record_tokens(shards_dir) if (shards_dir and window is None) else None + win = int(window) if window is not None else recommended_window(median, seq) + if win < 0: + raise ValueError("cluster_window must be >= 0 (0 = whole sequence)") + values = {"lambda_cluster_locality": lam, "cluster_locality_window": win, + "cluster_locality_clusters": int(clusters or 0)} + if not enabled: + why = "off (disabled by the caller)" + elif not usable: + why = "off: dense model or fewer than two clusters" + elif lambda_cluster is None: + why = f"default {DEFAULT_LAMBDA} (measured sweep, synthetic task; not measured for fine-tuning)" + else: + why = "user value" + if window is not None: + wsrc = "user value" + elif median is not None: + wsrc = f"rule: power of two nearest the median SFT record ({median:.0f} tokens), clamped to [16, {seq}]" + else: + wsrc = "default (no SFT record lengths in the data)" + return {"values": values, "source": {"lambda_cluster_locality": why, "cluster_locality_window": wsrc, + "cluster_locality_clusters": "user value" if clusters else "ceil(E / 2k)"}} + + +# ---- cluster objective: unit of "one stream" -------------------------------- +# "window": fixed ``cluster_locality_window``-token windows (the original form). +# "segment": the documents of the batch, found from the token stream itself +# (``SEGMENT_BOUNDARY_ID`` separators of packed pretraining, one record per SFT +# row); documents longer than ``cluster_locality_window`` are cut into parts. +CLUSTER_MODES = ("window", "segment") +SEGMENT_BOUNDARY_ID = 0 # ``<|endoftext|>`` in Chronos tokenizers: document separator / padding + + +def cluster_locality_mode(config) -> str: + mode = str(getattr(config, "cluster_locality_mode", "window") or "window") + if mode not in CLUSTER_MODES: + raise ValueError(f"cluster_locality_mode must be one of {CLUSTER_MODES}, got {mode!r}") + return mode + + +def segment_ids(input_ids, chunk: int = 0, boundary_id: int = SEGMENT_BOUNDARY_ID): + """``[B, S]`` int64 document index of every position, from the tokens alone. + + A separator ``boundary_id`` closes the document it ends (so does each pad + of a right-padded row; ``token_mask`` removes those from the loss). + ``chunk`` > 0 cuts a document into ``chunk``-token parts. Ids increase + along each row; rows are told apart by ``segment_index``. No label, + prompt template or task token is consulted: what a document contains is + left for the router to discover.""" + import numpy as np + ids = np.asarray(input_ids) + B, S = ids.shape + is_bnd = ids == int(boundary_id) + doc = np.zeros((B, S), np.int64) + if S > 1: + doc[:, 1:] = np.cumsum(is_bnd[:, :-1], axis=1) + if int(chunk or 0) <= 0: + return doc + pos = np.arange(S)[None, :] + first = np.ones((B, S), bool) + first[:, 1:] = doc[:, 1:] != doc[:, :-1] + start = np.maximum.accumulate(np.where(first, pos, 0), axis=1) + key = doc * S + (pos - start) // int(chunk) + new = np.zeros((B, S), np.int64) + new[:, 1:] = key[:, 1:] != key[:, :-1] + return np.cumsum(new, axis=1) + + +def segment_ids_mx(input_ids, boundary_id: int = SEGMENT_BOUNDARY_ID, chunk: int = 0): + """``segment_ids`` for an MLX array, traceable under ``mx.compile`` (no NumPy, no data-dependent shape). + + Same rule: a separator token closes the document it ends, so the id of position t is the + number of separators strictly before t. ``chunk`` > 0 cuts a document into ``chunk``-token parts, + as ``segment_ids`` does. Returns int32 ``[B, S]`` ids that increase along each row and stay below + ``S``, so ``row * S + id`` is a dense batch-wide segment number with the static bound ``B * S``.""" + import mlx.core as mx + ids = input_ids if isinstance(input_ids, mx.array) else mx.array(input_ids) + is_bnd = (ids == int(boundary_id)).astype(mx.int32) + doc = mx.cumsum(is_bnd, axis=1) - is_bnd + if int(chunk or 0) <= 0: + return mx.stop_gradient(doc) + B, S = ids.shape + pos = mx.broadcast_to(mx.arange(S, dtype=mx.int32)[None, :], (B, S)) + doc_changed = doc[:, 1:] != doc[:, :-1] + first = mx.concatenate([mx.ones((B, 1), dtype=mx.bool_), doc_changed], axis=1) + start = mx.cummax(mx.where(first, pos, 0), axis=1) + part = (pos - start) // int(chunk) + new = doc_changed | (part[:, 1:] != part[:, :-1]) + seg = mx.concatenate([mx.zeros((B, 1), dtype=mx.int32), mx.cumsum(new.astype(mx.int32), axis=1)], axis=1) + return mx.stop_gradient(seg) + + +def segment_index(segments): + """``(inverse [B*S] int32, n)``: dense batch-wide segment number of each position.""" + import numpy as np + seg = np.asarray(segments, np.int64) + B, S = seg.shape + flat = (seg + np.arange(B, dtype=np.int64)[:, None] * (S + 1)).reshape(-1) + uniq, inv = np.unique(flat, return_inverse=True) + return inv.astype(np.int32).reshape(-1), int(uniq.size) diff --git a/chronos/export.py b/chronos/export.py index 2ed0b64..6c28f94 100644 --- a/chronos/export.py +++ b/chronos/export.py @@ -538,6 +538,7 @@ def _export_metadata( "recommended_resident_experts": cfg.get("recommended_resident_experts"), "recurrent_enabled": cfg.get("recurrent_enabled", False), "recurrent_groups": cfg.get("recurrent_groups"), + "recurrent_order": cfg.get("recurrent_order", "layer"), "recurrent_depth": cfg.get("recurrent_depth", 1), "min_recurrent_depth": cfg.get("min_recurrent_depth", 1), "max_inference_depth": cfg.get("max_inference_depth"), diff --git a/chronos/io/cluster_layout.py b/chronos/io/cluster_layout.py index 8f9ef54..d473591 100644 --- a/chronos/io/cluster_layout.py +++ b/chronos/io/cluster_layout.py @@ -17,8 +17,7 @@ --data_path ./dataset/calib.jsonl \ --output_dir ./expert_cache_clustered """ -import sys -import chronos.deps # ensure minimind on sys.path +import chronos.deps # default tokenizer path import os import json @@ -406,7 +405,7 @@ def build_clustered_expert_cache( infer expert co-occurrence, cluster experts, and write .ctsr shards plus cluster_manifest.json for Chronos lazy loading. """ - import chronos.deps + import chronos.deps # default tokenizer path from chronos.data.flexible_dataset import FlexibleDataset from chronos.model.moe_chronos import ChronosMOEFeedForward diff --git a/chronos/io/expert_store.py b/chronos/io/expert_store.py index 6145604..b7dc53a 100644 --- a/chronos/io/expert_store.py +++ b/chronos/io/expert_store.py @@ -9,9 +9,6 @@ - Evict VRAM weights via LRU when budget is exceeded - Track per-expert residency state for soft-gating mask generation """ -import sys -import chronos.deps # ensure minimind on sys.path - import contextlib import os import threading @@ -313,7 +310,7 @@ def _expert_dtype(self) -> torch.dtype: return torch.float32 def _build_live_expert(self): - from model.model_minimind import FeedForward + from chronos.model.kernel import FeedForward # No random initialization or temporary full allocation on a cache miss. with torch.device("meta"): return FeedForward(self.config, intermediate_size=self.config.moe_intermediate_size) @@ -353,7 +350,15 @@ def offload_from_state_dict( This is the real lazy-load path for CPU/MPS inference: we avoid materializing MoE expert weights into the live model before setup. """ - if self.storage_format == "safetensors" and clusters is None: + if clusters is not None: + # Paging by the training clusters (lambda_cluster_locality > 0): + # one .ctsr per cluster, so one SSD read brings a stream's experts. + self._write_clusters_from( + lambda li, ei: self._expert_state_from_checkpoint(state_dict, li, ei), clusters) + if replace_live: + self.replace_live_experts_with_placeholders() + return + if self.storage_format == "safetensors": # A raw .pth checkpoint has no co-activation cluster layout. # Falling back to one .pt shard per (layer, expert) preserves # true lazy loading; writing a single all-expert .ctsr cluster @@ -383,11 +388,20 @@ def offload_from_state_reader( materializing the full expert state dict in DRAM: each expert tensor is pulled from the export artifact only while that expert shard is written. """ - if self.storage_format == "safetensors" and clusters is None: + keys = list(reader.keys()) + if clusters is not None: + def from_reader(li, ei): + prefix = f"model.layers.{li}.mlp.experts.{ei}." + return {k[len(prefix):]: reader.get_tensor(k).detach().cpu().contiguous() + for k in keys if k.startswith(prefix)} + self._write_clusters_from(from_reader, clusters) + if replace_live: + self.replace_live_experts_with_placeholders() + return + if self.storage_format == "safetensors": self.storage_format = "pt" self._cluster_storage = None - keys = list(reader.keys()) for li in range(self.num_layers): for ei in range(self.num_experts): path = self._ssd_path(ei, li) @@ -407,6 +421,21 @@ def offload_from_state_reader( if replace_live: self.replace_live_experts_with_placeholders() + def _write_clusters_from(self, get_state, clusters: List[List[int]]): + """Shard experts into one ``.ctsr`` per cluster from ``get_state(layer, expert)``.""" + dtype = self._expert_dtype_cached + + def cast(li, ei): + return {k: (v.to(dtype=dtype) if v.is_floating_point() and v.dtype != dtype else v) + for k, v in get_state(li, ei).items()} + + ClusterStorage.write_clusters_from_states( + cast, clusters=clusters, output_dir=self.ssd_dir, num_layers=self.num_layers, + num_experts=self.num_experts, layer_to_group=self._layer_to_group if self.layer_aware else None, + ) + self.storage_format = "safetensors" + self._cluster_storage = ClusterStorage(self.ssd_dir) + def replace_live_experts_with_placeholders(self): """Drop live expert modules from the active model after SSD offload.""" for li in range(self.num_layers): diff --git a/chronos/io/storage.py b/chronos/io/storage.py index 166b99e..90dc988 100644 --- a/chronos/io/storage.py +++ b/chronos/io/storage.py @@ -225,6 +225,41 @@ def write_clusters( trunk compute dtype: BF16 stays BF16 (no FP16 detour that would clip BF16's range), FP32 stays FP32. Pass a dtype only to convert once. + Returns the path to cluster_manifest.json. + """ + def get_state(li: int, eid: int) -> Dict[str, torch.Tensor]: + if li >= len(moe_layers): + return {} + out = {} + for pname, pval in moe_layers[li].experts[eid].state_dict().items(): + t = pval.detach() + if dtype is not None and t.dtype != dtype: + t = t.to(dtype=dtype) + out[pname] = t + return out + + return ClusterStorage.write_clusters_from_states( + get_state, clusters=clusters, output_dir=output_dir, num_layers=num_layers, + num_experts=num_experts, layer_to_group=layer_to_group, + ) + + @staticmethod + def write_clusters_from_states( + get_state, + clusters: List[List[int]], + output_dir: str, + num_layers: int, + num_experts: int, + layer_to_group: Optional[Dict[int, int]] = None, + ) -> str: + """Write one safetensors file per cluster from ``get_state(layer, expert)``. + + ``get_state`` returns ``{param_name: Tensor}`` for one expert in one + layer (empty when that layer has no routed experts). Only one + cluster's tensors are held at a time, so a full checkpoint state dict + or an export reader can be sharded without materialising every + expert twice. Every expert must appear in exactly one cluster. + Returns the path to cluster_manifest.json. """ if not _HAS_SAFETENSORS: @@ -232,6 +267,9 @@ def write_clusters( "write_clusters requires the `safetensors` package. " "Install with `pip install safetensors>=0.4.0`." ) + seen = [int(e) for cl in clusters for e in cl] + if sorted(seen) != list(range(int(num_experts))): + raise ValueError("clusters must cover every expert exactly once") os.makedirs(output_dir, exist_ok=True) manifest_clusters: Dict[int, Tuple[str, List[int]]] = {} @@ -242,14 +280,8 @@ def write_clusters( for eid in cluster: expert_to_cluster[int(eid)] = cid for li in range(num_layers): - if li >= len(moe_layers): - continue - expert = moe_layers[li].experts[eid] - for pname, pval in expert.state_dict().items(): - t = pval.detach() - if dtype is not None and t.dtype != dtype: - t = t.to(dtype=dtype) - tensors[_key(li, int(eid), pname)] = t.cpu().contiguous() + for pname, t in (get_state(li, int(eid)) or {}).items(): + tensors[_key(li, int(eid), pname)] = t.detach().cpu().contiguous() file_name = f"cluster_{cid}.ctsr" file_path = os.path.join(output_dir, file_name) diff --git a/chronos/lazy_experts.py b/chronos/lazy_experts.py new file mode 100644 index 0000000..365b17d --- /dev/null +++ b/chronos/lazy_experts.py @@ -0,0 +1,389 @@ +"""SSD-lazy routed experts: one implementation for the Web UI, model bundles and the server. + +The page layout adapts to how the checkpoint was trained. Weights trained +with the cluster-locality constraint (``lambda_cluster_locality > 0``) keep a +stream inside one training cluster, so they are paged one cluster file per +read; other weights are paged one expert per read, which never loads +experts the stream does not use (``chronos.expert_clusters.inference_clusters``). +The layout is part of the cache-directory name, so a cache written for one +layout is never reused for the other. + +Residency (what stays loaded) is independent of the layout: ``"planned"`` +evicts the page needed latest by the next-use planner, ``"window"`` keeps the +LRU order with the lookahead window protected. Neither changes the output. +""" +from __future__ import annotations + +import gc +import hashlib +import json +import math +import os +from dataclasses import asdict, dataclass + +from chronos.expert_clusters import PAGING_MODES, inference_clusters, paging_tag, trained_with_clusters + +RESIDENCY_MODES = ("planned", "window") +# Defaults shared by every entry point (the engine's own defaults). +DEFAULT_RESIDENCY = "planned" +DEFAULT_RESIDENCY_DECAY = 0.7 +DEFAULT_DECODE_WAIT_S = 0.012 +DEFAULT_VERIFY_WAIT_S = 0.02 +DEFAULT_RAM_RATIO = 1.0 + + +@dataclass +class LazyOptions: + """User-facing lazy-expert settings; every field has a working default.""" + + paging: str = "auto" # auto | cluster | expert + residency: str = DEFAULT_RESIDENCY # planned | window + residency_decay: float = DEFAULT_RESIDENCY_DECAY + decode_wait_s: float = DEFAULT_DECODE_WAIT_S + verify_wait_s: float = DEFAULT_VERIFY_WAIT_S + ram_ratio: float = DEFAULT_RAM_RATIO + + def validated(self) -> "LazyOptions": + if self.paging not in PAGING_MODES: + raise ValueError(f"paging must be one of {PAGING_MODES}, not {self.paging!r}") + if self.residency not in RESIDENCY_MODES: + raise ValueError(f"residency must be one of {RESIDENCY_MODES}, not {self.residency!r}") + decay = float(self.residency_decay) + if not 0.0 <= decay < 1.0: + raise ValueError("residency_decay must be in [0, 1)") + waits = float(self.decode_wait_s), float(self.verify_wait_s) + if min(waits) < 0: + raise ValueError("decode_wait_s and verify_wait_s must be >= 0") + ratio = float(self.ram_ratio) + if not ratio > 0: + raise ValueError("ram_ratio must be > 0") + return LazyOptions(self.paging, self.residency, decay, waits[0], waits[1], ratio) + + def generate_kwargs(self) -> dict: + """Keyword arguments for ``ChronosMLXInferenceEngine.generate``.""" + return {"residency": self.residency, "residency_decay": self.residency_decay, + "decode_wait_s": self.decode_wait_s, "verify_wait_s": self.verify_wait_s} + + def as_dict(self) -> dict: + return asdict(self) + + +def page_layout(config, paging: str = "auto") -> dict: + """Resolved layout for a checkpoint: clusters, tag and the reason (for UI/stats).""" + clusters = inference_clusters(config, paging) or [] + tag = paging_tag(clusters) if clusters else "e" + trained = trained_with_clusters(config) + if paging == "auto": + reason = "trained with cluster locality" if trained else "trained without cluster locality" + else: + reason = f"forced {paging}" + return {"paging": paging, "resolved": "expert" if tag == "e" else "cluster", "clusters": clusters, + "tag": tag, "num_pages": len(clusters), "trained_with_clusters": trained, "reason": reason} + + +# ── cache location ──────────────────────────────────────────────── + +def checkpoint_cache_dir(model_path: str, config, *, backend: str = "torch", tag: str = "e", + root: str | None = None) -> str: + """Per-checkpoint expert cache directory. + + The key is path + size + mtime + core topology, so a changed checkpoint + gets a fresh namespace. ``tag`` is the page layout (``paging_tag``): + per-expert caches keep their historical names (``ckpt_`` for Torch, + ``ckpt__mlx`` for MLX); cluster layouts add ``_``. + """ + # ``CHRONOS_EXPERT_CACHE_ROOT`` lets a dedicated process (the validation + # probe) keep its caches in a scratch directory it deletes afterwards. + base = root or os.environ.get("CHRONOS_EXPERT_CACHE_ROOT") or os.path.join(os.getcwd(), "expert_cache") + if not model_path or not os.path.exists(model_path): + name_dir = base + else: + try: + st = os.stat(model_path) + except OSError: + name_dir = base + else: + topology = tuple(getattr(config, k, "") for k in ( + "vocab_size", "hidden_size", "num_hidden_layers", "num_experts", "moe_intermediate_size")) + raw = f"{os.path.abspath(model_path)}:{st.st_size}:{st.st_mtime_ns}:{topology}" + name_dir = os.path.join(base, "ckpt_" + hashlib.sha1(raw.encode("utf-8")).hexdigest()[:16]) + if backend == "mlx": + name_dir += "_mlx" + if tag and tag != "e": + name_dir += f"_{tag}" + return name_dir + + +# ── expert budget ───────────────────────────────────────────────── + +def active_expert_count(config) -> int: + """Routed working set per token: observed/recommended size, else top-k × layers.""" + num_experts = int(getattr(config, "num_experts", 1) or 1) + for attr in ("observed_active_experts", "offload_working_set_experts", "recommended_working_set_experts"): + value = getattr(config, attr, None) + if value in (None, "", 0): + continue + try: + return max(1, min(num_experts, int(value))) + except (TypeError, ValueError): + pass + top_k = int(getattr(config, "num_experts_per_tok", 1) or 1) + num_layers = int(getattr(config, "num_hidden_layers", 1) or 1) + # top_k is per layer; the cache is keyed by global expert id, so one token + # can touch up to top_k × layers distinct ids before repeats. + return max(1, min(num_experts, top_k * max(1, num_layers))) + + +def expert_budget(config, ram_ratio: float | str | None = 1.0) -> dict: + """Expert-page budget from the routed working set and the user ratio. + + The ratio produces real lower-budget runs for sweeps; output quality is + preserved by on-demand loading, never by clamping to top-k. + """ + active = active_expert_count(config) + num_experts = int(getattr(config, "num_experts", active) or active) + try: + ratio = float(ram_ratio) + except (TypeError, ValueError): + ratio = 1.0 + ratio = max(0.01, ratio) + routing_top_k = int(getattr(config, "num_experts_per_tok", active) or active) + hard_cap = max(active, int(math.floor(active * 1.25))) + requested = max(1, int(math.ceil(active * ratio))) + effective = max(1, min(num_experts, requested, hard_cap)) + return { + "ideal_active_experts": active, + "routing_top_k": routing_top_k, + "num_moe_layers": int(getattr(config, "num_hidden_layers", 1) or 1), + "requested_ram_load_ratio": round(ratio, 3), + "requested_expert_budget": requested, + "max_allowed_expert_budget": min(num_experts, hard_cap), + "effective_expert_budget": effective, + "effective_vram_expert_budget": effective, + "effective_ram_expert_budget": effective, + "min_vram_expert_budget": 1, + "budget_clamped": effective != requested, + } + + +def apply_torch_budget(engine, config, ram_ratio: float | str | None = 1.0) -> dict: + """Set the Torch store's VRAM/RAM page capacity; a hard budget always wins.""" + budget = expert_budget(config, ram_ratio) + vram_cap = int(budget["effective_vram_expert_budget"]) + ram_cap = int(budget["effective_ram_expert_budget"]) + store = getattr(getattr(engine, "cache_manager", None), "expert_store", None) + if store is None: + return budget + hard_vram = getattr(store, "max_resident_pages", None) + hard_ram = getattr(store, "ram_budget_pages", None) + if hard_vram is not None: + vram_cap = max(1, min(vram_cap, int(hard_vram))) + if hard_ram is not None: + ram_cap = max(1, min(ram_cap, int(hard_ram))) + budget["effective_vram_expert_budget"], budget["effective_ram_expert_budget"] = vram_cap, ram_cap + store.vram_capacity = vram_cap + store.ram_capacity = ram_cap + store.vram_lru.capacity = vram_cap + store.ram_lru.capacity = ram_cap + return budget + + +# ── live-expert placeholders ────────────────────────────────────── + +def torch_experts_to_placeholders(model, config) -> None: + """Drop the constructor's random experts before ``model.to(device)``.""" + from chronos.model.moe_chronos import ChronosMOEFeedForward, LazyExpertPlaceholder + from chronos.precision import torch_model_dtype + + hidden = int(getattr(config, "hidden_size", 0) or 0) + intermediate = int(getattr(config, "moe_intermediate_size", 0) or 0) + if not hidden or not intermediate: + return + for layer in getattr(getattr(model, "model", None), "layers", []): + moe = getattr(layer, "mlp", None) + if not isinstance(moe, ChronosMOEFeedForward): + continue + for idx in range(len(moe.experts)): + # Placeholder dtype follows the trunk; place_torch_model() updates it on move. + moe.experts[idx] = LazyExpertPlaceholder(hidden, intermediate, torch_model_dtype(model)) + + +def mlx_experts_to_placeholders(model) -> None: + import mlx.core as mx + from chronos.mlx.moe import ChronosMLXMOE, LazyFeedForwardMLX + + for layer in getattr(model, "layers", []): + moe = getattr(layer, "mlp", None) + if not isinstance(moe, ChronosMLXMOE): + continue + for idx in range(len(moe.experts)): + moe.experts[idx] = LazyFeedForwardMLX() + gc.collect() + try: + mx.clear_cache() + except Exception: + pass + + +# ── MLX expert cache ────────────────────────────────────────────── + +def _store_torch_dtype(store): + """Torch dtype of the MLX store's pages (= the MLX trunk compute dtype).""" + import torch + name = str(getattr(store, "page_dtype", "float32")).rsplit(".", 1)[-1] + return getattr(torch, name) + + +def write_mlx_cache(store, get_tensor, keys, clusters=None) -> None: + """Write the MLX store's cache: one ``cluster_.ctsr`` per page + manifest. + + ``get_tensor(key)`` returns a checkpoint tensor (``model.layers.L.mlp.experts.E.P``); + ``keys`` is the set of checkpoint keys. ``clusters`` defaults to one page per expert. + Only one page's tensors are held at a time. + """ + from safetensors.torch import save_file # BF16-capable + from chronos.io.storage import ClusterManifest, KEY_SEP, MANIFEST_FILENAME + + num_experts, num_layers = int(store.num_experts), int(store.num_layers) + if clusters is None: + clusters = [[i] for i in range(num_experts)] + os.makedirs(store.ssd_dir, exist_ok=True) + page_dtype = _store_torch_dtype(store) + keys = set(keys) + manifest_clusters, expert_to_cluster = {}, {} + for cid, members in enumerate(clusters): + tensors = {} + for eid in members: + for li in range(num_layers): + for pname in store._PARAM_NAMES: + key = f"model.layers.{li}.mlp.experts.{int(eid)}.{pname}" + if key in keys: + tensors[f"l{li}_e{int(eid)}{KEY_SEP}{pname}"] = ( + get_tensor(key).detach().to(dtype=page_dtype, device="cpu").contiguous()) + if not tensors: + continue + file_name = f"cluster_{cid}.ctsr" + save_file(tensors, os.path.join(store.ssd_dir, file_name)) + manifest_clusters[cid] = (file_name, [int(e) for e in members]) + for eid in members: + expert_to_cluster[int(eid)] = cid + if len(expert_to_cluster) != num_experts: + raise RuntimeError(f"MLX lazy cache is incomplete: wrote {len(expert_to_cluster)}/{num_experts} experts") + manifest = ClusterManifest(version=1, num_experts=num_experts, num_layers=num_layers, + storage_format="safetensors", clusters=manifest_clusters, + expert_to_cluster=expert_to_cluster) + with open(os.path.join(store.ssd_dir, MANIFEST_FILENAME), "w", encoding="utf-8") as f: + json.dump(manifest.to_dict(), f, indent=2) + + +def write_mlx_cache_from_state_dict(store, state_dict: dict, clusters=None) -> None: + write_mlx_cache(store, state_dict.__getitem__, state_dict.keys(), clusters) + + +def write_mlx_cache_from_reader(store, reader, clusters=None) -> None: + write_mlx_cache(store, reader.get_tensor, reader.keys(), clusters) + + +def _manifest_matches(store, clusters) -> bool: + manifest = getattr(store, "_cluster_manifest", None) + if manifest is None: + return False + have = sorted(sorted(int(e) for e in members) for _f, members in manifest.clusters.values()) + return have == sorted(sorted(int(e) for e in c) for c in clusters) + + +def ensure_mlx_cache(store, cache_dir: str, *, reader=None, weights=None, clusters=None) -> bool: + """Attach a complete cache with this layout at ``cache_dir`` or rebuild it. + + Returns True when an existing cache was reused. + """ + import shutil + + if clusters is None: + clusters = [[i] for i in range(int(store.num_experts))] + if store.attach_cluster_manifest(cache_dir) and _manifest_matches(store, clusters): + return True + if os.path.exists(cache_dir): + shutil.rmtree(cache_dir) + os.makedirs(cache_dir, exist_ok=True) + store.ssd_dir = cache_dir + store._cluster_manifest = None + store._loaded_clusters.clear() + store._warm.clear() + store._warm_lru.clear() + if reader is not None: + write_mlx_cache_from_reader(store, reader, clusters) + elif weights is not None: + write_mlx_cache_from_state_dict(store, weights, clusters) + else: + store.offload_all_to_ssd(clusters=clusters) + if not (store.attach_cluster_manifest(cache_dir) and _manifest_matches(store, clusters)): + raise RuntimeError(f"failed to build a complete MLX lazy expert cache at {cache_dir}") + return False + + +def build_mlx_lazy_engine(model_path: str, config, options: LazyOptions | None = None, *, + cache_root: str | None = None, dtype: str = "auto"): + """Load a checkpoint or export into an MLX engine with SSD-lazy experts. + + Only the trunk is materialised; experts are written to the page cache + (layout from ``options.paging`` and the checkpoint) and stream in on demand. + Sets ``config.recommended_resident_experts`` / ``recommended_ram_experts`` + from the budget. Returns ``(engine, info)``; the caller owns ``engine.stop()``. + """ + from chronos.export import is_export_artifact, open_export_reader + from chronos.mlx.inference import ChronosMLXInferenceEngine + from chronos.mlx.model import ChronosMLXModel + from chronos.model.checkpoint import load_checkpoint_state_dict, load_state_dict_controlled + from chronos.model.model_chronos import ChronosForCausalLM + from chronos.precision import resolve_mlx + + opts = (options or LazyOptions()).validated() + layout = page_layout(config, opts.paging) + budget = expert_budget(config, opts.ram_ratio) + config.recommended_resident_experts = int(budget["effective_vram_expert_budget"]) + config.recommended_ram_experts = int(budget["effective_ram_expert_budget"]) + cache_dir = checkpoint_cache_dir(model_path, config, backend="mlx", tag=layout["tag"], root=cache_root) + + reader = weights = None + if model_path and is_export_artifact(model_path): + reader = open_export_reader(model_path) + base_only = reader.load_state_dict(include_experts=False) + elif model_path and os.path.exists(model_path): + weights = load_checkpoint_state_dict(model_path, map_location="cpu") + base_only = {k: v for k, v in weights.items() if ".mlp.experts." not in k} + else: + raise FileNotFoundError("lazy-expert inference needs a checkpoint or export artifact") + engine = None + try: + pt_model = ChronosForCausalLM(config) + if base_only: + load_state_dict_controlled(pt_model, base_only, allow_missing_substrings=(".mlp.experts.",)) + torch_experts_to_placeholders(pt_model, config) + precision = resolve_mlx(dtype) + mlx_model = ChronosMLXModel.from_chronos_pytorch(pt_model.eval(), config, include_experts=False, + dtype=precision.compute) + mlx_experts_to_placeholders(mlx_model) + del pt_model, base_only + gc.collect() + engine = ChronosMLXInferenceEngine(mlx_model, config, ssd_dir=cache_dir) + reused = ensure_mlx_cache(engine.store, cache_dir, reader=reader, weights=weights, + clusters=layout["clusters"]) + except BaseException: + if engine is not None: + engine.stop() + raise + finally: + reader = weights = None + gc.collect() + info = {**budget, "cache_dir": cache_dir, "cache_reused": reused, + "paging": layout["paging"], "paging_resolved": layout["resolved"], "paging_reason": layout["reason"], + "num_pages": layout["num_pages"], "trained_with_clusters": layout["trained_with_clusters"], + "lazy_options": opts.as_dict(), "precision": precision.as_dict()} + return engine, info + + +def warm_ids(config, budget: dict) -> list[int]: + """Experts warmed before the first token (the execution budget, lowest ids first).""" + count = int(budget["effective_vram_expert_budget"]) + return list(range(min(int(getattr(config, "num_experts", 0) or 0), count))) diff --git a/chronos/mlx/__init__.py b/chronos/mlx/__init__.py index d881163..d949318 100644 --- a/chronos/mlx/__init__.py +++ b/chronos/mlx/__init__.py @@ -13,7 +13,8 @@ Key differences from the CUDA backend: - No ExpertStore.promote_to_vram() — mx.eval() pins to Metal on first use - No H2D stream — Metal handles async via its own command queue - - torch.compile unavailable; mx.compile() used instead + - torch.compile unavailable; the training micro step uses mx.compile() + (chronos/mlx/training/compiled.py, CHRONOS_MLX_COMPILE=auto|on|off) - All modules are mlx.nn.Module, not torch.nn.Module """ __all__ = [ diff --git a/chronos/mlx/attention.py b/chronos/mlx/attention.py index 02f1100..6d734b1 100644 --- a/chronos/mlx/attention.py +++ b/chronos/mlx/attention.py @@ -9,7 +9,8 @@ boolean mask built here; softmax is FP32 inside the kernel, so the low-precision chain has no score/probability casts. - SlidingWindow: slice oldest tokens with array indexing, not assignment. -- mx.compile()-friendly: no Python branches on runtime tensor shapes. +- RoPE rotation is one shapeless-compiled kernel; the attention path itself + is compiled as part of the training step (chronos/mlx/training/compiled.py). """ import math from functools import partial @@ -17,7 +18,10 @@ import mlx.core as mx import mlx.nn as nn +from chronos.mlx.checkpointing import Dropout as TapeDropout # replayed under recomputation + from chronos.mlx.kv_quant import kv_read, kv_store +from chronos.mlx.blockwise_attention import blockwise_attention, blockwise_mla_attention, use_blockwise def _rope_freqs( @@ -26,15 +30,22 @@ def _rope_freqs( base: float = 1_000_000.0, rope_scaling: dict | None = None, ) -> mx.array: - """Precompute MiniMind/PyTorch-compatible RoPE tables [max_len, dim]. + """Precompute RoPE tables [max_len, dim] matching ``chronos.model.kernel.precompute_freqs_cis``. The PyTorch path uses duplicated cos/sin columns and rotate-half over the whole last dimension. MLX must mirror that exactly for checkpoint parity. """ half = max(dim // 2, 1) + kind = str((rope_scaling or {}).get("type", "yarn")).lower() + if rope_scaling is not None and kind == "ntk": + # NTK-aware: stretch the base so the lowest frequency spans the longer window. + base = base * float(rope_scaling.get("factor", 1.0)) ** (dim / max(dim - 2, 1)) theta = 1.0 / (base ** (mx.arange(0, dim, 2, dtype=mx.float32)[:half] / dim)) attn_factor = 1.0 - if rope_scaling is not None: + if rope_scaling is not None and kind == "linear": + theta = theta / float(rope_scaling.get("factor", 1.0)) + attn_factor = float(rope_scaling.get("attention_factor", 1.0)) + elif rope_scaling is not None and kind == "yarn": orig_max = float(rope_scaling.get("original_max_position_embeddings", 2048)) factor = float(rope_scaling.get("factor", 16)) beta_fast = float(rope_scaling.get("beta_fast", 32.0)) @@ -119,6 +130,15 @@ def _merge_mask(allowed: mx.array | None, mask: mx.array | None, S: int, T: int) return m if allowed is None else (allowed & m) +def _segment_mask(allowed, segments, S: int, T: int): + """AND a document mask (``segments`` ``[B, T]`` ids, queries = last S) into ``allowed``.""" + if segments is None: + return allowed + seg = segments[:, -T:] + same = seg[:, None, -S:, None] == seg[:, None, None, :] + return same if allowed is None else (allowed & same) + + class _RopeCacheMixin: """FP32 RoPE tables, built once and never converted per call. @@ -210,11 +230,12 @@ def __init__(self, config): self.k_rope_proj = nn.Linear(self.kv_latent_dim, self.n_kv_heads * self.rope_dim, bias=False) self.v_proj = nn.Linear(self.kv_latent_dim, self.n_kv_heads * self.head_dim, bias=False) self.o_proj = nn.Linear(self.n_heads * self.head_dim, H, bias=False) - self.attn_dropout = nn.Dropout(config.dropout) - self.resid_dropout = nn.Dropout(config.dropout) + self.attn_dropout = TapeDropout(config.dropout) + self.resid_dropout = TapeDropout(config.dropout) self.dropout_p = float(config.dropout) self._init_rope_cache(config, self.head_dim, rotated_dim=self.rope_dim) + object.__setattr__(self, "_block_cfg", config) # Inference cache/decode policy (no parameters; see ChronosConfig). object.__setattr__(self, "mla_decode", str(getattr(config, "mla_decode", "expanded") or "expanded").lower()) object.__setattr__(self, "cache_rope", bool(getattr(config, "mla_cache_rope", False))) @@ -283,14 +304,26 @@ def __call__( q_rope = _apply_rope(q_rope, self._cos[past_len:past_len + S], self._sin[past_len:past_len + S]) scale = 1.0 / math.sqrt(self.head_dim) allowed = _merge_mask(_causal_allowed(S, T_full), mask, S, T_full) + allowed = _segment_mask(allowed, getattr(self, "_segments", None), S, T_full) if self._use_absorbed(S, T_full): out = self._absorbed(q_nope, q_rope, c_kv_full, k_rope, scale, allowed) else: - k_nope = self.k_nope_proj(c_kv_full).reshape(B, T_full, self.n_kv_heads, self.nope_dim) - v = self.v_proj(c_kv_full).reshape(B, T_full, self.n_kv_heads, self.head_dim) + blk = use_blockwise(self._block_cfg, S, T_full, self.training) if mask is None else 0 + seg = getattr(self, "_segments", None) q = mx.concatenate([q_nope, q_rope], axis=-1).transpose(0, 2, 1, 3) # [B, nH, S, d] - k = mx.concatenate([k_nope, k_rope], axis=-1).transpose(0, 2, 1, 3) # [B, nKV, T, d] - out = self._attend(q, k, v.transpose(0, 2, 1, 3), scale, allowed) + if blk and self.training and getattr(self._block_cfg, "mla_upproj_recompute", False): + # Keep c_kv only: K and V are rebuilt per block (forward and backward). + out = blockwise_mla_attention(q, c_kv_full, k_rope, self.k_nope_proj.weight, self.v_proj.weight, + scale=scale, block=blk, segments=seg, past=T_full - S) + else: + k_nope = self.k_nope_proj(c_kv_full).reshape(B, T_full, self.n_kv_heads, self.nope_dim) + v = self.v_proj(c_kv_full).reshape(B, T_full, self.n_kv_heads, self.head_dim) + k = mx.concatenate([k_nope, k_rope], axis=-1).transpose(0, 2, 1, 3) # [B, nKV, T, d] + if blk: + out = blockwise_attention(q, k, v.transpose(0, 2, 1, 3), scale=scale, window=None, block=blk, + segments=seg, past=T_full - S) + else: + out = self._attend(q, k, v.transpose(0, 2, 1, 3), scale, allowed) out = out.transpose(0, 2, 1, 3) out = self.resid_dropout(self.o_proj(out.reshape(B, S, -1))) if return_shared_kv: @@ -338,11 +371,12 @@ def __init__(self, config): self.o_proj = nn.Linear(self.n_heads * self.head_dim, H, bias=False) self.q_norm = nn.RMSNorm(self.head_dim, eps=config.rms_norm_eps) self.k_norm = nn.RMSNorm(self.head_dim, eps=config.rms_norm_eps) - self.attn_dropout = nn.Dropout(config.dropout) - self.resid_dropout = nn.Dropout(config.dropout) + self.attn_dropout = TapeDropout(config.dropout) + self.resid_dropout = TapeDropout(config.dropout) self.dropout_p = float(config.dropout) self._init_rope_cache(config, self.head_dim) + object.__setattr__(self, "_block_cfg", config) object.__setattr__(self, "kv_int8", str(getattr(config, "kv_cache_dtype", "auto") or "auto").lower() == "int8") object.__setattr__(self, "kv_group", int(getattr(config, "kv_quant_group_size", 32) or 32)) # Extra retained entries so self-speculative decoding can roll back up @@ -388,23 +422,32 @@ def __call__( # attention leaks future tokens into early queries during long prefill. q_positions = mx.arange(S)[:, None] + cached_len k_positions = mx.arange(T_full)[None, :] - allowed = (k_positions <= q_positions) & (k_positions > q_positions-self.window_size) + allowed = k_positions <= q_positions + if self.window_size is not None: # None: dense (use_hybrid_attention=False) + allowed = allowed & (k_positions > q_positions - self.window_size) + allowed = _segment_mask(allowed, getattr(self, "_segments", None), S, T_full) scale = 1.0 / math.sqrt(self.head_dim) - out = self._attend(q.transpose(0, 2, 1, 3), k.transpose(0, 2, 1, 3), v.transpose(0, 2, 1, 3), - scale, _merge_mask(allowed, mask, S, T_full)) + blk = use_blockwise(self._block_cfg, S, T_full, self.training) if mask is None else 0 + if blk: + out = blockwise_attention(q.transpose(0, 2, 1, 3), k.transpose(0, 2, 1, 3), v.transpose(0, 2, 1, 3), + scale=scale, window=self.window_size, block=blk, + segments=getattr(self, "_segments", None), past=cached_len) + else: + out = self._attend(q.transpose(0, 2, 1, 3), k.transpose(0, 2, 1, 3), v.transpose(0, 2, 1, 3), + scale, _merge_mask(allowed, mask, S, T_full)) out = out.transpose(0, 2, 1, 3).reshape(B, S, -1) # Cache stores [B, T, nKV, d] (pre-repeat, pre-transpose) - keep = self.window_size + int(self.cache_slack) + keep = None if self.window_size is None else self.window_size + int(self.cache_slack) if self.kv_int8 and kv_override is None: # Quantize only the new tokens (each token once), then evict. qk = kv_store(k_new, cache[0] if cache is not None else None, self.kv_group) qv = kv_store(v_new, cache[1] if cache is not None else None, self.kv_group) - start = max(0, qk.shape[1] - keep) + start = 0 if keep is None else max(0, qk.shape[1] - keep) new_cache = (qk[:, start:], qv[:, start:], past_len + S) else: - new_cache = (k[:, -keep:], v[:, -keep:], past_len + S) + new_cache = (k, v, past_len + S) if keep is None else (k[:, -keep:], v[:, -keep:], past_len + S) if return_shared_kv: return self.resid_dropout(self.o_proj(out)), new_cache, (k, v, past_len + S) return self.resid_dropout(self.o_proj(out)), new_cache diff --git a/chronos/mlx/blockwise_attention.py b/chronos/mlx/blockwise_attention.py new file mode 100644 index 0000000..d064fef --- /dev/null +++ b/chronos/mlx/blockwise_attention.py @@ -0,0 +1,139 @@ +"""Blockwise causal attention for long sequences (MLX): no ``[S, T]`` mask. + +The fused SDPA kernel with an explicit boolean mask needs the ``[S, T]`` +mask and, in its VJP, ``[nH, S, T]`` scores, so memory grows as S**2 +(measured: one SWA layer at S=32768 peaked at 40 GiB extra). + +``blockwise_attention`` splits the queries into blocks of ``block`` rows. +Block b only reads the keys it can see: ``[b*block - window + 1, (b+1)*block)`` +for a sliding window, ``[0, (b+1)*block)`` for full causal attention. Each +block runs the fused kernel with a small ``[block, span]`` mask, under +``mx.checkpoint`` so its scores are recomputed in the backward pass. A +sliding-window layer then costs O(S * (window + block)), and the full +causal layer stores O(block * S) at a time instead of O(S**2). + +``segments`` ``[B, S]`` (document ids, non-decreasing along a row) adds +document masking: a query attends only to keys of its own document. + +Exactness: every query sees exactly the keys of the reference mask, and +softmax runs over that set inside the fused kernel, so the output equals +the full-mask path up to floating-point summation order. +""" +import mlx.core as mx + + +def _block_mask(q0, q1, k0, k1, window, seg_q, seg_k): + """Boolean ``[(B,) 1, q1-q0, k1-k0]`` mask for absolute query rows q0..q1-1.""" + q_pos = mx.arange(q0, q1)[:, None] + k_pos = mx.arange(k0, k1)[None, :] + allowed = k_pos <= q_pos + if window is not None: + allowed = allowed & (k_pos > q_pos - int(window)) + if seg_q is None: + return allowed + same = seg_q[:, None, :, None] == seg_k[:, None, None, :] + return allowed[None, None] & same + + +def _mask_for(q0, q1, k0, k1, window, seg_q, seg_k): + """Array mask for one block, or ``"causal"`` for a square diagonal span + where the plain causal rule applies (no mask array in the kernel).""" + # MLX aligns "causal" to the bottom-right, so a block whose last query is + # the last visible key needs no mask array whatever its key span. + if seg_q is None and k1 == q1 and (window is None or window >= q1 - k0): + return "causal" + return mx.stop_gradient(_block_mask(q0, q1, k0, k1, window, seg_q, seg_k)) + + +def _attend_block(q, k, v, mask, scale): + return mx.fast.scaled_dot_product_attention(q, k, v, scale=scale, mask=mask) + + +_attend_block_ckpt = mx.checkpoint(_attend_block) + + +def blockwise_attention(q, k, v, *, scale, window=None, block=1024, segments=None, past=0, checkpoint=True): + """Causal (optionally windowed / document-masked) attention in query blocks. + + ``q [B, nH, S, d]``, ``k``/``v`` ``[B, nKV, T, d]`` with ``T = past + S`` + (``past`` cached keys precede the queries). Returns ``[B, nH, S, dv]``. + """ + S, T = q.shape[2], k.shape[2] + block = max(1, int(block)) + run = _attend_block_ckpt if checkpoint else _attend_block + seg = None if segments is None else mx.stop_gradient(segments) + outs = [] + prev = None + for start in range(0, S, block): + end = min(S, start + block) + qa0, qa1 = past + start, past + end + k0 = 0 if window is None else max(0, qa0 - int(window) + 1) + k1 = min(T, qa1) + seg_q = None if seg is None else seg[:, qa0:qa1] + seg_k = None if seg is None else seg[:, k0:k1] + mask = _mask_for(qa0, qa1, k0, k1, window, seg_q, seg_k) + qb = q[:, :, start:end] + if prev is not None: + qb = mx.depends(qb, prev) # one block's scores live at a time + prev = run(qb, k[:, :, k0:k1], v[:, :, k0:k1], mask, scale) + outs.append(prev) + return outs[0] if len(outs) == 1 else mx.concatenate(outs, axis=2) + + +def _mla_block(qb, cb, rb, w_k, w_v, mask, scale): + """One query block of MLA attention, K and V rebuilt from the latent slice. + + ``cb [B, t, L]`` latent, ``rb [B, t, nKV, r]`` rotated rope keys, + ``w_k [nKV*nope, L]`` and ``w_v [nKV*d, L]`` the up-projections.""" + B, t, _ = cb.shape + n_kv, r = rb.shape[2], rb.shape[3] + k_nope = (cb @ w_k.T).reshape(B, t, n_kv, -1) + v = (cb @ w_v.T).reshape(B, t, n_kv, -1) + k = mx.concatenate([k_nope, rb], axis=-1).transpose(0, 2, 1, 3) + return mx.fast.scaled_dot_product_attention(qb, k, v.transpose(0, 2, 1, 3), scale=scale, mask=mask) + + +_mla_block_ckpt = mx.checkpoint(_mla_block) + + +def blockwise_mla_attention(q, c_kv, k_rope, w_k, w_v, *, scale, block=1024, segments=None, past=0): + """Full-causal MLA attention that never keeps the expanded K and V. + + ``q [B, nH, S, d]``; ``c_kv [B, T, L]``; ``k_rope [B, T, nKV, r]`` (already + rotated); ``w_k``/``w_v`` the ``k_nope_proj`` / ``v_proj`` weights. Every + block runs under ``mx.checkpoint`` with the latent slice as its input, so + the forward pass keeps ``c_kv`` (L wide) instead of K and V (nKV*d wide + each), and the backward pass rebuilds them one block at a time. The same + keys and softmax set as :func:`blockwise_attention`, so the output is + equal up to summation order. Returns ``[B, nH, S, d]``.""" + S, T = q.shape[2], c_kv.shape[1] + block = max(1, int(block)) + seg = None if segments is None else mx.stop_gradient(segments) + outs, prev = [], None + for start in range(0, S, block): + end = min(S, start + block) + qa0, qa1 = past + start, past + end + k1 = min(T, qa1) + seg_q = None if seg is None else seg[:, qa0:qa1] + seg_k = None if seg is None else seg[:, :k1] + mask = _mask_for(qa0, qa1, 0, k1, None, seg_q, seg_k) + qb = q[:, :, start:end] + if prev is not None: + qb = mx.depends(qb, prev) + prev = _mla_block_ckpt(qb, c_kv[:, :k1], k_rope[:, :k1], w_k, w_v, mask, scale) + outs.append(prev) + return outs[0] if len(outs) == 1 else mx.concatenate(outs, axis=2) + + +def use_blockwise(config, S, T, training): + """Rows per attention block from ``config.attention_block_size`` (0 = off). + + Only for multi-row queries without attention dropout, and only when the + sequence is longer than one block (short sequences keep the exact + single-kernel path).""" + size = int(getattr(config, "attention_block_size", 0) or 0) + if size <= 0 or S <= size: + return 0 + if training and float(getattr(config, "dropout", 0.0) or 0.0) > 0.0: + return 0 + return size diff --git a/chronos/mlx/checkpointing.py b/chronos/mlx/checkpointing.py new file mode 100644 index 0000000..719a8f2 --- /dev/null +++ b/chronos/mlx/checkpointing.py @@ -0,0 +1,246 @@ +"""Activation recomputation (``config.activation_checkpointing``) for MLX training. + +Each block call becomes an ``mx.checkpoint`` region: the backward pass keeps +only the block's input and output and recomputes everything in between. +Peak memory in Chronos training is dominated by per-virtual-layer +activations, and a recurrent group runs one physical block once per +iteration, so this is where the memory goes. + +A plain ``mx.checkpoint`` would be silently wrong for these blocks, for two +reasons: + +* **Random draws.** Dropout and the MoE cache-miss simulation + (``fallback_mask_prob``) draw fresh bits when the region is recomputed, so + the backward pass would differentiate a different network than the one the + forward pass ran (measured on mlx 0.32.4: same loss, different gradients). + Every draw goes through :func:`draw`, which records it on the region's tape + during the forward pass and replays the recorded array during the + recomputation. Draws are consumed in the same order and count as without + checkpointing, so the global RNG stream (and resume) is unchanged. +* **Side effects.** The MoE appends its router probabilities once per call, + and the regularized loss reads them. The recomputation must not append a + second copy, and the loss must read the forward-pass arrays (the + recomputed ones are internal to the backward pass). :func:`recomputing` + tells modules that the current call is a recomputation. + +Only arrays cross a region boundary, packed into one output per dtype so +no two outputs can be the same graph node (see :func:`_pack`); +:func:`call_block` rebuilds the non-array parts of a block's return value +(e.g. the SWA absolute position) around them. +""" +from __future__ import annotations + +import threading +from typing import Callable + +import mlx.core as mx +import mlx.nn as nn + +_STATE = threading.local() + + +class _Tape: + __slots__ = ("draws", "pos", "replay", "calls") + + def __init__(self): + self.draws: list = [] + self.pos = 0 + self.replay = False + self.calls = 0 + + +def _tape() -> _Tape | None: + return getattr(_STATE, "tape", None) + + +def recomputing() -> bool: + """True while a checkpointed region is being recomputed for its gradient.""" + tape = _tape() + return tape is not None and tape.replay + + +def recorded(fn: Callable[[], object]): + """``fn()`` in the forward pass; the same value again in its recomputation. + + For values that carry no gradient but decide what a block computes: + random draws, routing indices, and module state read inside a block + (another forward may change that state before the backward pass runs). + Outside a checkpointed region this is just ``fn()``. + """ + tape = _tape() + if tape is None: + return fn() + if tape.replay: + if tape.pos >= len(tape.draws): + raise RuntimeError("checkpoint recomputation recorded more values than its forward pass") + value = tape.draws[tape.pos] + else: + value = fn() + if isinstance(value, mx.array): + value = mx.stop_gradient(value) + tape.draws.append(value) + tape.pos += 1 + return value + + +draw = recorded # random arrays: the common case + + +def dropout(module, x: mx.array) -> mx.array: + """``nn.Dropout`` semantics with a tape-recorded mask.""" + keep = float(getattr(module, "_p_1", 1.0)) + if keep == 1.0 or not module.training: + return x + mask = draw(lambda: mx.random.bernoulli(keep, x.shape)) + return (mask * x) * (1.0 / keep) + + +def checkpointed(module, fn: Callable[..., tuple]) -> Callable[..., tuple]: + """``fn(*arrays)`` recomputed in the backward pass, with tape replay. + + ``module`` owns the trainable parameters ``fn`` uses (they are passed + through the region so their gradients are recomputed too). ``fn`` must + take and return arrays (or tuples of arrays) only. + """ + tape = _Tape() + + def region(params, *args): + prev = _tape() + tape.replay = tape.calls > 0 # 1st call: forward; later calls: recomputation + tape.calls += 1 + tape.pos = 0 + # The forward call receives the module's own arrays; a recomputation + # receives its own primals, which must be the ones the ops capture. + # They are swapped back afterwards so the module never keeps them. + saved = module.trainable_parameters() if tape.replay else None + if saved is not None: + module.update(params) + _STATE.tape = tape + try: + return fn(*args) + finally: + _STATE.tape = prev + if saved is not None: + module.update(saved) + + run = mx.checkpoint(region) + + def call(*args): + return run(module.trainable_parameters(), *args) + + return call + + +class Dropout(nn.Dropout): + """``nn.Dropout`` whose mask is replayed inside a recomputation.""" + + def __call__(self, x: mx.array) -> mx.array: + return dropout(self, x) + + +def side_output_sink() -> list | None: + """Inside a checkpointed block: list collecting ``(owner, kind, array)`` side outputs.""" + return getattr(_STATE, "sink", None) + + +class _Slot: + pass + + +def _split(obj, arrays: list): + """Replace every array leaf with ``_Slot`` and collect it (tuples/lists/dicts).""" + if isinstance(obj, mx.array): + arrays.append(obj) + return _Slot + if isinstance(obj, (tuple, list)): + return type(obj)(_split(o, arrays) for o in obj) + if isinstance(obj, dict): + return {k: _split(v, arrays) for k, v in obj.items()} + return obj # None / int / float / bool / str + + +def _join(spec, it): + if spec is _Slot: + return next(it) + if isinstance(spec, (tuple, list)): + return type(spec)(_join(s, it) for s in spec) + if isinstance(spec, dict): + return {k: _join(v, it) for k, v in spec.items()} + return spec + + +def _pack(arrays: list) -> tuple[tuple, list]: + """Region outputs as one array per dtype (a flat concatenation). + + mlx 0.32.4 keeps the cotangent of only the first copy when a checkpointed + function returns the same graph node more than once, silently dropping + the others' gradients. Aliases are not visible from Python: a block's + new cache and its shared KV view may be one object, but a full-length + slice (``k[:, -keep:]`` with ``keep >= T``) or a same-dtype ``astype`` is + a *new* Python object over the *same* node. Packing makes every output + a distinct node by construction; the concatenation's backward splits + the cotangent exactly, and an aliased array receives the sum of its + copies' cotangents through ordinary autodiff inside the recomputation. + """ + groups: dict = {} + layout = [] + for a in arrays: + members = groups.setdefault(a.dtype, []) + layout.append((a.dtype, len(members), tuple(a.shape), a.size)) + members.append(a) + order = list(groups) + packed = tuple(groups[d][0] if len(groups[d]) == 1 else + mx.concatenate([a.reshape(-1) for a in groups[d]]) for d in order) + starts: dict = {} + for d in order: + offset, starts[d] = 0, [] + for a in groups[d]: + starts[d].append(offset) + offset += a.size + return packed, [(order.index(d), len(groups[d]) == 1, starts[d][j], shape, size) + for d, j, shape, size in layout] + + +def _unpack(packed: tuple, layout: list) -> list: + out = [] + for g, single, start, shape, size in layout: + out.append(packed[g] if single else packed[g][start:start + size].reshape(shape)) + return out + + +def call_block(block, hidden: mx.array, **kwargs): + """``block(hidden, **kwargs)`` as one recomputed region. + + ``kwargs`` and the block's return value may mix arrays with plain Python + values (``None``, ints such as the SWA absolute position); only the + arrays cross the region boundary. Side outputs a module hands to + :func:`side_output_sink` (MoE router probabilities) are returned as + region outputs and delivered to their owner via ``owner.accept_side_output``, + so a loss term that reads them is differentiated through the + recomputation instead of keeping the block's activations alive. + """ + arrays = [hidden] + in_spec = _split(kwargs, arrays) + meta: dict = {} + + def fn(h, *rest): + prev = side_output_sink() + sink: list = [] + _STATE.sink = sink + try: + out = block(h, **_join(in_spec, iter(rest))) + finally: + _STATE.sink = prev + flat: list = [] + meta["spec"] = _split(out, flat) + meta["owners"] = [(owner, kind) for owner, kind, _ in sink] + flat += [value for _, _, value in sink] + packed, meta["layout"] = _pack(flat) + return packed + + outputs = _unpack(checkpointed(block, fn)(*arrays), meta["layout"]) + owners = meta["owners"] + n_main = len(outputs) - len(owners) + for (owner, kind), value in zip(owners, outputs[n_main:]): + owner.accept_side_output(kind, value) + return _join(meta["spec"], iter(outputs[:n_main])) diff --git a/chronos/mlx/chunked_ce.py b/chronos/mlx/chunked_ce.py new file mode 100644 index 0000000..5c60e37 --- /dev/null +++ b/chronos/mlx/chunked_ce.py @@ -0,0 +1,64 @@ +"""Chunked cross-entropy for MLX: the LM-head loss without ``[B, S, V]`` logits. + +For long contexts the FP32 logits dominate peak memory (S=65536, V=16384: +4 GiB per row). ``chunked_lm_loss`` walks the flattened hidden states in +``chunk`` rows. Each chunk computes ``hidden @ W.T`` in FP32, its +logsumexp and the label logit, inside ``mx.checkpoint``, so the backward +pass recomputes that chunk's logits instead of keeping them. Peak logit +memory is one chunk (``chunk * V * 4`` bytes). + +The value equals the mean cross-entropy over labels that are not +``ignore_index``, in FP32, as the full path with ``logits_dtype=mx.float32``. +""" +import mlx.core as mx + +DEFAULT_CHUNK = 4096 + + +def _chunk_sum(h, w, lab, keep): + """Summed CE of one chunk: rows ``h [n, H]``, head ``w [V, H]``, FP32.""" + logits = h.astype(mx.float32) @ w.astype(mx.float32).T + lse = mx.logsumexp(logits, axis=-1) + picked = mx.take_along_axis(logits, mx.stop_gradient(lab)[:, None], axis=-1)[:, 0] + return ((lse - picked) * mx.stop_gradient(keep)).sum() + + +_chunk_sum_ckpt = mx.checkpoint(_chunk_sum) + + +def chunked_ce_sum(hidden, weight, labels, ignore_index=-100, chunk=DEFAULT_CHUNK): + """``(sum of CE, number of supervised labels)`` over ``hidden [..., H]`` / ``labels [...]``.""" + H = hidden.shape[-1] + h = hidden.reshape(-1, H) + lb = labels.reshape(-1) + keep = (lb != ignore_index).astype(mx.float32) + safe = mx.where(lb != ignore_index, lb, 0).astype(mx.int32) + n = h.shape[0] + step = max(1, int(chunk)) + total = mx.zeros((), dtype=mx.float32) + for start in range(0, n, step): + end = min(n, start + step) + rows = h[start:end] + if start: + # Serialize the chunks: chunk k+1 starts after chunk k's sum exists, + # so the scheduler never holds several chunks' logits at once. + rows = mx.depends(rows, total) + total = total + _chunk_sum_ckpt(rows, weight, safe[start:end], keep[start:end]) + return total, keep.sum() + + +def chunked_lm_loss(hidden, weight, labels, ignore_index=-100, chunk=DEFAULT_CHUNK): + """Mean CE of labels aligned with ``hidden`` (no shift), chunked.""" + total, count = chunked_ce_sum(hidden, weight, labels, ignore_index, chunk) + return total / mx.maximum(count, 1.0) + + +def chunked_shifted_lm_loss(hidden, weight, labels, ignore_index=-100, chunk=DEFAULT_CHUNK): + """Mean CE where position t predicts ``labels[:, t + 1]`` (the causal shift).""" + return chunked_lm_loss(hidden[:, :-1, :], weight, labels[:, 1:], ignore_index, chunk) + + +def ce_chunk_for(config, seq_rows: int) -> int: + """Rows per CE chunk from ``config.ce_chunk_size``; 0 = no chunking (full logits).""" + size = int(getattr(config, "ce_chunk_size", 0) or 0) + return 0 if size <= 0 or size >= int(seq_rows) else size diff --git a/chronos/mlx/expert_store.py b/chronos/mlx/expert_store.py index 0afc4b8..d2348f6 100644 --- a/chronos/mlx/expert_store.py +++ b/chronos/mlx/expert_store.py @@ -116,6 +116,8 @@ def __init__(self, model, config, ssd_dir: str = "./expert_cache_mlx"): self._cluster_manifest: ClusterManifest | None = None self._loaded_clusters: set[int] = set() self._protected_experts: set[int] = set() + # Optional residency planner (see set_eviction_ranker); None = LRU. + self._eviction_ranker = None self.storage_format = "npy" # Pages live in the trunk's compute dtype (one precision policy end # to end); a cache written in another dtype is converted once per SSD @@ -194,9 +196,9 @@ def _ssd_path(self, expert_id: int, layer_idx: int, param_name: str) -> str: def _load_from_ssd(self, expert_id: int) -> Dict[int, Dict[str, mx.array]]: if self._cluster_manifest is not None: - self._load_cluster_for_expert(expert_id) - with self._lock: - return self._warm.get(expert_id, {}) + # The loaded page is returned directly: another thread may evict it + # from the warm tier as soon as the lock is released. + return self._load_cluster_for_expert(expert_id) or {} layer_states = {} for li in range(self.num_layers): @@ -285,10 +287,10 @@ def _parse_cluster_key(self, key: str): except ValueError: return None - def _load_cluster_for_expert(self, expert_id: int) -> None: + def _load_cluster_for_expert(self, expert_id: int) -> Dict[int, Dict[str, mx.array]] | None: manifest = self._cluster_manifest if manifest is None or expert_id not in manifest.expert_to_cluster: - return + return None cid = manifest.expert_to_cluster[int(expert_id)] with self._lock: if ( @@ -296,7 +298,7 @@ def _load_cluster_for_expert(self, expert_id: int) -> None: and expert_id in self._warm and self._layer_states_complete(self._warm.get(expert_id)) ): - return + return self._warm[expert_id] file_name = manifest.cluster_file(cid) path = os.path.join(self.ssd_dir, file_name) nested: Dict[int, Dict[int, Dict[str, mx.array]]] = {} @@ -315,6 +317,7 @@ def _load_cluster_for_expert(self, expert_id: int) -> None: self._stats["cluster_experts_loaded"] += 1 self._stats["cluster_loads"] += 1 self._loaded_clusters.add(cid) + return nested.get(int(expert_id)) # ── Prefetch (SSD → unified memory) ────────────────────────── @@ -324,18 +327,25 @@ def prefetch_to_ram(self, expert_ids: List[int]): Call from a background thread for async prefetch. """ for eid in expert_ids: - with self._lock: - if eid in self._warm and self._layer_states_complete(self._warm.get(int(eid))): - self._touch_warm_locked(int(eid)) - self._stats["warm_hits"] += 1 - continue - layer_states = self._complete_state(self._load_from_ssd(eid)) - if not layer_states: - self._stats["prefetch_misses"] += 1 - continue - with self._lock: - self._put_warm_locked(int(eid), layer_states, protected_expert_id=int(eid)) - self._stats["prefetch_loads"] += 1 + self._fetch_to_ram(int(eid)) + + def _fetch_to_ram(self, eid: int) -> Dict[int, Dict[str, mx.array]]: + """Warm page of ``eid`` (SSD read if needed); returned even if evicted meanwhile.""" + with self._lock: + hit = self._warm.get(eid) + if self._layer_states_complete(hit): + self._touch_warm_locked(eid) + self._stats["warm_hits"] += 1 + return hit + layer_states = self._complete_state(self._load_from_ssd(eid)) + if not layer_states: + self._stats["prefetch_misses"] += 1 + return {} + with self._lock: + if self._warm.get(eid) is not layer_states: + self._put_warm_locked(eid, layer_states, protected_expert_id=eid) + self._stats["prefetch_loads"] += 1 + return layer_states def _touch_warm_locked(self, expert_id: int): if expert_id in self._warm_lru: @@ -359,7 +369,31 @@ def set_protected_experts(self, expert_ids: List[int] | set[int] | tuple[int, .. if 0 <= int(eid) < int(self.num_experts) } + def set_eviction_ranker(self, ranker=None): + """Plug a residency planner into both tiers' eviction. + + ``ranker(candidates) -> victim`` receives the evictable pages in LRU + order (oldest first; protected pages are already excluded) and + returns the one to drop, e.g. ``NextUsePlanner.victim``. ``None`` + restores plain LRU. Eviction only decides *when* a page is read + again: a selected page is always materialised before it runs. + """ + with self._lock: + self._eviction_ranker = ranker + + def _coldest_locked(self, order, skip) -> int | None: + candidates = [c for c in order if c not in skip] + if not candidates: + return None + ranker = self._eviction_ranker + if ranker is None: + return candidates[0] + victim = ranker(candidates) + return candidates[0] if victim is None else victim + def _evict_warm_locked(self, protected_expert_id: int | None = None): + if self._eviction_ranker is not None: + return self._evict_warm_scored_locked(protected_expert_id) while len(self._warm_lru) > self._warm_capacity: evict_id = None for candidate in self._warm_lru.keys(): @@ -393,6 +427,31 @@ def _evict_warm_locked(self, protected_expert_id: int | None = None): } self._stats["warm_evictions"] += 1 + def _evict_warm_scored_locked(self, protected_expert_id: int | None = None): + """Score-ordered warm eviction (same tiers and hard capacity as the LRU path).""" + keep = {protected_expert_id} if protected_expert_id is not None else set() + while len(self._warm_lru) > self._warm_capacity: + order = list(self._warm_lru.keys()) + guarded = keep | self._protected_experts + evict_id = self._coldest_locked(order, guarded | set(self._hot_lru.keys())) + if evict_id is None: + evict_id = self._coldest_locked(order, guarded) + if evict_id is None: + evict_id = self._coldest_locked(order, keep) + if evict_id is None: + return + evicted_was_hot = evict_id in self._hot_lru + self._warm_lru.pop(evict_id, None) + self._warm.pop(evict_id, None) + if not evicted_was_hot: + self._replace_expert_with_placeholder(evict_id) + self._loaded_clusters = { + cid for cid in self._loaded_clusters + if not self._cluster_evicted_locked(cid) + } + self._stats["warm_evictions"] += 1 + self._stats["planned_evictions"] += 1 + def _cluster_evicted_locked(self, cluster_id: int) -> bool: manifest = self._cluster_manifest if manifest is None: @@ -487,11 +546,7 @@ def promote_to_vram(self, expert_id: int) -> bool: self._touch_warm_locked(expert_id) if not self._layer_states_complete(layer_states): - self.prefetch_to_ram([expert_id]) - with self._lock: - layer_states = self._warm.get(expert_id) - if layer_states is not None: - self._touch_warm_locked(expert_id) + layer_states = self._fetch_to_ram(expert_id) layer_states = self._complete_state(layer_states) if not layer_states: self._stats["promote_misses"] += 1 @@ -525,11 +580,12 @@ def promote_to_vram(self, expert_id: int) -> bool: self._hot_lru.move_to_end(expert_id) else: while len(self._hot_lru) >= self._capacity: - evicted = None - for candidate in self._hot_lru.keys(): - if candidate != expert_id and candidate not in self._protected_experts: - evicted = candidate - break + evicted = self._coldest_locked( + list(self._hot_lru.keys()), {expert_id} | self._protected_experts) + if evicted is None and self._eviction_ranker is not None: + # Every other page is protected: the hard capacity + # still wins, and the lowest-priority one goes. + evicted = self._coldest_locked(list(self._hot_lru.keys()), {expert_id}) if evicted is None: evicted, _ = self._hot_lru.popitem(last=False) if evicted == expert_id: @@ -598,6 +654,7 @@ def stats(self) -> dict: "max_resident_pages": self.max_resident_pages, "ram_budget_pages": self.ram_budget_pages, "protected_pages": len(self._protected_experts), + "eviction_policy": "planned" if self._eviction_ranker is not None else "lru", "resident_experts": len(hot_ids), "hot_experts": len(hot_ids), "hot_capacity": self._capacity, diff --git a/chronos/mlx/inference.py b/chronos/mlx/inference.py index 0c36a02..5a2fe1e 100644 --- a/chronos/mlx/inference.py +++ b/chronos/mlx/inference.py @@ -4,7 +4,9 @@ Mirrors ChronosInferenceEngine (PyTorch) but uses: - ChronosMLXModel for forward passes - MLXExpertStore (unified memory, no H2D stream) -- mx.compile() for static-graph acceleration +- Lazy MLX graphs evaluated per decode step (decode shapes change every + token, so the step is not traced with mx.compile; RoPE uses a shapeless + compiled kernel) - Async prefetch via Python threading (SSD → unified memory) Usage: @@ -142,6 +144,60 @@ def touch(eid: int) -> None: moe.runtime_on_demand_loader = loader moe.runtime_touch_expert = touch + def _attach_planner(self, planner) -> None: + """Report every lazy-expert run to ``planner`` and let it rank evictions. + + Wraps the hooks of :meth:`_install_runtime_hooks`: before an expert + of dispatch ``(layer, loop iteration)`` is loaded or run, the planner + records it; the dispatch's not-yet-run experts (an MoE runs its + selection in id order) are kept from eviction. The store then evicts + the page needed latest instead of the least recent one. + """ + layer_of = {} + for li, layer in enumerate(self.model.layers): + moe = getattr(layer, "mlp", None) + if not isinstance(moe, ChronosMLXMOE): + continue + layer_of[id(moe)] = li + + def record(eid, moe=moe, li=li): + eid = int(eid) + selected = getattr(moe, "_selected_host", None) or () + pending = [j for j in range(eid + 1, len(selected)) if selected[j]] + planner.access(li, len(moe.iteration_router_probs) - 1, eid, pending) + + base_load, base_touch = moe.runtime_on_demand_loader, moe.runtime_touch_expert + + def load(eid, record=record, base=base_load): + record(eid) + return bool(base(eid)) if base is not None else False + + def touch(eid, record=record, base=base_touch): + record(eid) + if base is not None: + base(eid) + + moe.runtime_on_demand_loader = load + moe.runtime_touch_expert = touch + # Ranking replaces the protected window: a protected set the size of + # the budget would turn every eviction into a forced fallback. + self.store.set_protected_experts([]) + self.store.set_eviction_ranker(planner.victim) + + def _planned_prefetch(self, planner, timeout_s: float) -> int: + """Queue (and briefly await) the pages the next forward needs early; returns the count.""" + hot_cap = max(int(getattr(self.store, "_capacity", 1) or 1), 1) + warm_cap = max(int(getattr(self.store, "_warm_capacity", hot_cap) or hot_cap), 1) + with self.store._lock: + warm = set(self.store._warm.keys()) + hot = self.store.hot_expert_ids() + fetch = planner.prefetch_plan(warm | hot, warm_cap) + promote = planner.prefetch_plan(hot, hot_cap) + if fetch or promote: + self._prefetch_and_promote_window(list(dict.fromkeys(promote + fetch)), promote_ids=promote, + timeout_s=timeout_s) + return len(promote) + def _clear_runtime_hooks(self): for layer in self.model.layers: moe = getattr(layer, "mlp", None) @@ -224,24 +280,37 @@ def _current_virtual_ids(self) -> List[int]: and may pick different experts each time; residency follows the union, so the next step's identical iterations stay hot. """ + values = self._virtual_route_weights(last_only=True) + return [i for i, _v in sorted(((i, v) for i, v in enumerate(values) if v > 0), key=lambda t: (-t[1], t[0]))] + + def _virtual_route_weights(self, last_only: bool = True) -> List[float]: + """Per-expert top-k routing weight summed over every dispatch of the last forward. + + ``last_only`` scores the last position (one decode or draft token); + otherwise every position counts and the sum is divided by the number + of positions, so a verify or prefill forward weighs like one token. + """ from chronos.mlx.moe import ChronosMLXMOE e = int(self.config.num_experts) k = max(1, min(int(self.config.num_experts_per_tok), e)) - rows = [] + rows, positions = [], 1 for layer in self.model.layers: moe = getattr(layer, "mlp", None) if isinstance(moe, ChronosMLXMOE): - rows.extend(p[:, -1, :].reshape(-1, e) for p in (moe.iteration_router_probs or ())) + for p in (moe.iteration_router_probs or ()): + if not last_only: + positions = max(positions, int(p.shape[1])) + rows.append((p[:, -1, :] if last_only else p).reshape(-1, e)) if not rows: - return [] + return [0.0] * e probs = mx.concatenate(rows, axis=0).astype(mx.float32) ids = mx.argpartition(-probs, kth=k - 1, axis=-1)[:, :k] weights = mx.take_along_axis(probs, ids, axis=-1) scores = ((ids[..., None] == mx.arange(e)).astype(mx.float32) * weights[..., None]).sum(axis=(0, 1)) - values = scores.tolist() + values = [float(v) / positions for v in scores.tolist()] with self._stats_lock: self._runtime_stats["virtual_dispatches"] = self._runtime_stats.get("virtual_dispatches", 0) + len(rows) - return [i for i, _v in sorted(((i, v) for i, v in enumerate(values) if v > 0), key=lambda t: (-t[1], t[0]))] + return values def _protect_prediction_window(self, expert_ids: List[int]) -> None: capacity = max( @@ -281,6 +350,11 @@ def generate( top_k: int = 0, seed: Optional[int] = None, eos_token_id=None, + residency: str = "window", # lazy experts: "window" (LRU + protected window) | "planned" + residency_decay: float = 0.7, + decode_wait_s: float = 0.012, # planned: wait for prefetched pages before a decode step + verify_wait_s: float = 0.02, # planned + speculative: wait before the verify forward + repetition_penalty: float = 1.0, ) -> Iterator[int]: """ Yields token IDs one at a time. @@ -293,13 +367,51 @@ def generate( verifies them in one full-depth forward (``chronos.mlx.speculative``); greedy output equals plain greedy decoding. ``eos_token_id`` (int or list) stops generation after that token is yielded. + + ``residency="planned"`` replaces LRU eviction of lazy expert pages + with next-use planning (``chronos.residency_planner``): the previous + forward of the same kind (and, when speculative, the draft queue) + predicts the order in which pages are needed, the page needed latest + is evicted, and pages needed early are prefetched. Output is + unchanged; residency only decides what is loaded when. + ``decode_wait_s`` / ``verify_wait_s`` bound how long a step waits for + its prefetched pages before running (a page still missing is loaded + on demand, so the wait only trades latency for fewer stalls). + + ``repetition_penalty`` (plain decoding only) applies the CTRL rule to + every token already in the prompt or output; speculative decoding + needs 1.0 because the penalty changes the target distribution. """ + if residency not in ("window", "planned"): + raise ValueError("residency must be 'window' or 'planned'") + if not 0.0 <= float(residency_decay) < 1.0: + raise ValueError("residency_decay must be in [0, 1)") + if float(decode_wait_s) < 0 or float(verify_wait_s) < 0: + raise ValueError("decode_wait_s and verify_wait_s must be >= 0") + if float(repetition_penalty) <= 0: + raise ValueError("repetition_penalty must be > 0") + if speculative and float(repetition_penalty) != 1.0: + raise ValueError("speculative decoding needs repetition_penalty=1.0") + self.store.set_eviction_ranker(None) if speculative: yield from self._generate_speculative( input_ids, max_new_tokens=max_new_tokens, temperature=temperature, top_p=top_p, top_k=top_k, draft_depth=draft_depth, gamma=gamma, gamma_max=gamma_max, adaptive_gamma=adaptive_gamma, - seed=seed, eos_token_id=eos_token_id) + seed=seed, eos_token_id=eos_token_id, residency=residency, residency_decay=residency_decay, + verify_wait_s=verify_wait_s) return + penalty = float(repetition_penalty) + seen = None + if penalty != 1.0: + import numpy as np + seen = np.zeros(int(self.config.vocab_size), dtype=bool) + seen[np.array(input_ids.tolist(), dtype=np.int64).reshape(-1)] = True + + def penalised(row): + if seen is None: + return row + row = row.astype(mx.float32) + return mx.where(mx.array(seen), mx.where(row < 0, row * penalty, row / penalty), row) t0 = time.monotonic() setup_mem = self._memory_snapshot() self._last_predicted = set() @@ -312,6 +424,12 @@ def generate( self.store.set_protected_experts([]) else: self._install_runtime_hooks() + planner = None + if not all_resident_fast_path and scheduler is None and residency == "planned": + from chronos.residency_planner import NextUsePlanner + planner = NextUsePlanner(int(self.config.num_experts), decay=float(residency_decay)) + self._attach_planner(planner) + hot_cap = int(getattr(self.store, "_capacity", 1) or 1) # ── Prefill phase: front-load expert IO ─────────────────────────── if scheduler is not None and not all_resident_fast_path: import torch, numpy as np @@ -326,17 +444,24 @@ def generate( prefill_masks = None else: prefill_masks = self._build_avail_masks(None) + if planner is not None: + planner.begin_forward("multi") logits, lookahead_probs, cache = self.model(input_ids, available_expert_masks=prefill_masks) mx.eval(logits) + if planner is not None: + planner.end_forward() self._last_current = [] if all_resident_fast_path else self._current_virtual_ids() prefill_t1 = time.monotonic() prefill_mem = self._memory_snapshot() # Sample from prefill - next_token = self._sample(logits[:, -1, :], temperature, top_p) + next_token = self._sample(penalised(logits[:, -1, :]), temperature, top_p) activated_ids: List[int] = [] tokens = 1 - if not all_resident_fast_path and scheduler is None and lookahead_probs is not None: + if planner is not None: + if lookahead_probs is not None: + planner.hint(self._predict_future_experts(lookahead_probs, capacity=hot_cap, max_steps=1)) + elif not all_resident_fast_path and scheduler is None and lookahead_probs is not None: future_ids = self._predict_future_experts( lookahead_probs, capacity=int(getattr(self.store, "_warm_capacity", self.config.num_experts) or self.config.num_experts), @@ -351,6 +476,8 @@ def generate( self._prefetch_and_promote_window(future_ids, promote_ids=immediate_ids, timeout_s=0.025) eos = set([eos_token_id] if isinstance(eos_token_id, int) else (eos_token_id or [])) first_id = int(next_token.item()) + if seen is not None: + seen[first_id] = True yield first_id for _ in range(0 if first_id in eos else max_new_tokens - 1): @@ -358,6 +485,11 @@ def generate( avail_masks = None elif scheduler is not None: avail_masks = self._build_avail_masks(next_token) + elif planner is not None: + planner.begin_forward("single") + self._planned_prefetch(planner, float(decode_wait_s)) + self._last_predicted = set(planner.upcoming()) + avail_masks = self._build_avail_masks(next_token) else: # LookaheadRouter-driven prefetch if lookahead_probs is not None: @@ -382,12 +514,18 @@ def generate( available_expert_masks=avail_masks, ) mx.eval(logits) + if planner is not None: + planner.end_forward() + if lookahead_probs is not None: + planner.hint(self._predict_future_experts(lookahead_probs, capacity=hot_cap, max_steps=1)) if not all_resident_fast_path: self._last_current = self._current_virtual_ids() - next_token = self._sample(logits[:, -1, :], temperature, top_p) + next_token = self._sample(penalised(logits[:, -1, :]), temperature, top_p) mx.eval(next_token) tok_id = int(next_token.item()) + if seen is not None: + seen[tok_id] = True activated_ids.append(tok_id) tokens += 1 yield tok_id @@ -405,22 +543,38 @@ def generate( "tokens_per_sec": round(tokens / max(end - t0, 1e-6), 2), "prefill_time_s": round(prefill_t1 - prefill_t0, 3), "decode_time_s": round(max(0.0, end - prefill_t1), 3), + "residency": {"mode": "full" if all_resident_fast_path else ( + "planned" if planner is not None else "window"), + **({"planner": dict(planner.stats)} if planner is not None else {})}, **self._memory_fields(setup_mem, "after_setup"), **self._memory_fields(prefill_mem, "after_prefill"), **self._memory_fields(end_mem, "after_decode"), **self._runtime_stat_fields(), **self.store.stats(), } + self.store.set_eviction_ranker(None) def _generate_speculative(self, input_ids, *, max_new_tokens, temperature, top_p, top_k, draft_depth, gamma, - gamma_max, adaptive_gamma, seed, eos_token_id) -> Iterator[int]: + gamma_max, adaptive_gamma, seed, eos_token_id, residency="window", + residency_decay=0.7, verify_wait_s=0.02) -> Iterator[int]: """Self-speculative decoding with the same residency work as plain decoding. Every forward (draft or verify) runs with the current availability masks. After it, the experts its last position routed to (all virtual layers) are unioned with the LookaheadRouter prediction and prefetched, so experts a draft touches are being loaded before the verify forward - that re-reads them.""" + that re-reads them. + + ``residency="planned"`` hands eviction to a next-use planner + (``chronos.residency_planner.NextUsePlanner``). Each draft token ran + the prelude and the first ``draft_depth`` iterations, and verify + re-runs exactly those dispatches for the same tokens plus the deeper + ones, so the draft queue is the verify forward's page-access + reference: pages the queue needs early are prefetched while the + drafts run and awaited right before verify (``verify_wait_s``), and + the page needed latest (or not at all) is evicted first; the + previous forward of the same kind covers the deeper iterations. + Output is unchanged: residency only decides what is loaded when.""" from chronos.mlx.speculative import SpecStats, speculative_tokens t0 = time.monotonic() setup_mem = self._memory_snapshot() @@ -437,12 +591,38 @@ def _generate_speculative(self, input_ids, *, max_new_tokens, temperature, top_p hot_cap = int(getattr(self.store, "_capacity", 1) or 1) timing = {"first": None} + planner = None + if not fast and residency == "planned": + from chronos.residency_planner import NextUsePlanner + planner = NextUsePlanner(int(self.config.num_experts), decay=float(residency_decay)) + self._attach_planner(planner) + queue_stats = {"verify_plans": 0, "verify_planned": 0, "verify_ready": 0} + def forward_fn(ids, cache, depth): + verify = depth is None and cache is not None + if planner is not None: + kind = "draft" if depth is not None else ("multi" if int(ids.shape[1]) > 1 else "single") + planner.begin_forward(kind) + # Drafts only queue SSD reads (the next draft is not delayed); + # verify waits briefly for the draft queue's pages. + self._planned_prefetch(planner, 0.0 if depth is not None else float(verify_wait_s)) + if verify: + hot = self.store.hot_expert_ids() + upcoming = planner.upcoming(hot_cap) + queue_stats["verify_plans"] += 1 + queue_stats["verify_planned"] += len(upcoming) + queue_stats["verify_ready"] += sum(1 for eid in upcoming if eid in hot) masks = None if fast else self._build_avail_masks(None) logits, lookahead, new_cache = self.model(ids, cache=cache, available_expert_masks=masks, recurrent_depth=depth) mx.eval(logits) - if not fast: + if planner is not None: + planner.end_forward(verify=verify) + if lookahead is not None: + planner.hint(self._predict_future_experts(lookahead, capacity=hot_cap, max_steps=1)) + self._last_current = self._current_virtual_ids() + self._last_predicted = set(planner.upcoming()) + elif not fast: self._last_current = self._current_virtual_ids() predicted = (self._predict_future_experts(lookahead, capacity=warm_cap) if lookahead is not None else []) @@ -484,11 +664,16 @@ def forward_fn(ids, cache, depth): "speculative": stats.as_dict() | { "draft_depth": eff_draft, "full_depth": full_depth, "enabled": eff_draft < full_depth, "gamma_final": (stats.gamma_history or [int(gamma)])[-1]}, + "residency": {"mode": "full" if fast else residency, **queue_stats, + "verify_ready_rate": round(queue_stats["verify_ready"] + / max(queue_stats["verify_planned"], 1), 4), + **({"planner": dict(planner.stats)} if planner is not None else {})}, **self._memory_fields(setup_mem, "after_setup"), **self._memory_fields(end_mem, "after_decode"), **self._runtime_stat_fields(), **self.store.stats(), } + self.store.set_eviction_ranker(None) def _predict_future_experts( self, @@ -497,16 +682,24 @@ def _predict_future_experts( max_steps: Optional[int] = None, ) -> List[int]: """Extract bounded top-k expert IDs for future steps.""" + e = int(self.config.num_experts) + budget = e if capacity is None else max(1, min(e, int(capacity))) + values = self._future_expert_scores(lookahead_probs, max_steps=max_steps) + scored = [(idx, value) for idx, value in enumerate(values) if value > 0.0] + scored.sort(key=lambda item: (-item[1], item[0])) + return [int(idx) for idx, _value in scored[:budget]] + + def _future_expert_scores(self, lookahead_probs: mx.array, max_steps: Optional[int] = None) -> List[float]: + """Per-expert LookaheadRouter score: top-k weight of each future step, weighted 1/(offset+1).""" # This store pages an expert ID across physical layers. Preserve # each prediction head until admission, then rank the union of IDs. + e = int(self.config.num_experts) future = lookahead_probs[:, -1, 1:, ...] if max_steps is not None: future = future[:, :max(0, int(max_steps))] if future.shape[1] <= 0: - return [] - e = int(self.config.num_experts) + return [0.0] * e top_k = max(1, min(int(self.config.num_experts_per_tok), e)) - budget = e if capacity is None else max(1, min(e, int(capacity))) scores = mx.zeros((e,), dtype=mx.float32) for offset in range(future.shape[1]): step = future[:, offset, ...].reshape(-1, e).astype(mx.float32) @@ -515,9 +708,7 @@ def _predict_future_experts( one_hot = (ids[..., None] == mx.arange(e)).astype(mx.float32) scores = scores + (one_hot*vals[..., None]).sum(axis=(0, 1)) mx.eval(scores) - scored = [(idx, float(value)) for idx, value in enumerate(scores.tolist()) if float(value) > 0.0] - scored.sort(key=lambda item: (-item[1], item[0])) - return [int(idx) for idx, _value in scored[:budget]] + return [float(v) for v in scores.tolist()] def _build_avail_masks(self, _token) -> List[set[int]] | None: """Promote prefetched experts and return per-layer availability masks.""" diff --git a/chronos/mlx/memory.py b/chronos/mlx/memory.py new file mode 100644 index 0000000..f380b89 --- /dev/null +++ b/chronos/mlx/memory.py @@ -0,0 +1,94 @@ +"""MLX buffer-cache limit, enforced by the kernel for every MLX model. + +MLX keeps freed Metal buffers in a cache for reuse. Its default cache +limit equals the memory limit, so on a unified-memory Mac the cache can grow +until macOS pages and training slows down (measured on a 64 GB machine: +footprint 55.8 → 13.6 GB and ~2.4k → ~5.2k tok/s after an 8 GiB limit). +The limit bounds only reclaimable cache; weights, activations and gradients +are active memory and are not affected. + +Default: ``min(physical memory / 8, 16 GiB)``. A caller value (recipe +``extra.mlx_cache_limit_gb``, ``CHRONOS_MLX_CACHE_LIMIT_GB``) may lower it, +never raise it above that ceiling. Values are GiB (×1024³); metrics report +decimal GB (8 GiB shows as 8.59 GB). +""" +from __future__ import annotations + +import os + +GIB = 1024 ** 3 +CEILING_GIB = 16.0 +FRACTION = 1.0 / 8.0 +ENV = "CHRONOS_MLX_CACHE_LIMIT_GB" + +_applied: dict | None = None + + +def physical_memory_bytes() -> int: + """Total physical memory (MLX device info, then sysctl/sysconf).""" + try: + import mlx.core as mx + info = mx.device_info() if hasattr(mx, "device_info") else mx.metal.device_info() + size = int(info.get("memory_size") or 0) + if size > 0: + return size + except Exception: # noqa: BLE001 - fall back to the OS + pass + try: + return int(os.sysconf("SC_PAGE_SIZE") * os.sysconf("SC_PHYS_PAGES")) + except (ValueError, OSError, AttributeError): + return 0 + + +def ceiling_bytes(total: int | None = None) -> int: + """``min(total / 8, 16 GiB)``; 16 GiB when the total is unknown.""" + total = physical_memory_bytes() if total is None else int(total) + cap = int(CEILING_GIB * GIB) + return cap if total <= 0 else min(int(total * FRACTION), cap) + + +def resolve_cache_limit(requested_gb=None, total: int | None = None) -> tuple[int, str]: + """``(bytes, source)``: the limit to apply. ``requested_gb`` (GiB, > 0) or + the environment variable may lower the ceiling; larger values are clamped.""" + ceiling = ceiling_bytes(total) + raw, source = requested_gb, "recipe" + if raw in (None, ""): + raw, source = os.environ.get(ENV), "env" + if raw in (None, ""): + return ceiling, "default min(RAM/8, 16 GiB)" + try: + value = float(raw) + except (TypeError, ValueError): + raise ValueError(f"mlx_cache_limit_gb must be a positive number of GiB, got {raw!r}") from None + if not value > 0: + raise ValueError(f"mlx_cache_limit_gb must be > 0 GiB, got {raw!r}") + want = int(value * GIB) + if want > ceiling: + return ceiling, f"{source} {value:g} GiB clamped to min(RAM/8, 16 GiB)" + return want, source + + +def apply_cache_limit(requested_gb=None, *, log=None, force: bool = False) -> dict | None: + """Set the MLX cache limit once per process (again with ``force`` or a new + request). Returns ``{"limit_gb", "previous_gb", "ceiling_gb", "source"}`` + in GiB, or ``None`` without MLX.""" + global _applied + try: + import mlx.core as mx + except ModuleNotFoundError: + return None + if _applied is not None and not force and requested_gb in (None, "", _applied.get("requested")): + return _applied + limit, source = resolve_cache_limit(requested_gb) + previous = int(mx.set_cache_limit(limit)) + _applied = {"limit_gb": round(limit / GIB, 3), "previous_gb": round(previous / GIB, 3), + "ceiling_gb": round(ceiling_bytes() / GIB, 3), "source": source, + "requested": requested_gb} + if log is not None: + log(f"[run] MLX cache limit: {limit / GIB:g} GiB (previous {previous / GIB:.1f} GiB; {source})") + return _applied + + +def applied() -> dict | None: + """The last applied limit (``None`` before the first MLX model).""" + return None if _applied is None else {k: v for k, v in _applied.items() if k != "requested"} diff --git a/chronos/mlx/model.py b/chronos/mlx/model.py index 62bfb85..fa6bc8c 100644 --- a/chronos/mlx/model.py +++ b/chronos/mlx/model.py @@ -6,7 +6,9 @@ - MLAAttentionMLX (even layers) / SlidingWindowAttentionMLX (odd layers) - ChronosMLXMOE for feed-forward - LookaheadRouter as a plain Linear projection -- mx.compile()-friendly: no Python control flow on runtime shapes +- Training micro steps are compiled by chronos/mlx/training/compiled.py + (one graph per depth/shape/config signature; Python decisions such as + the executed depth are resolved outside the trace) On Apple Silicon, mx.eval() materialises arrays into Metal shared memory. Prefetch = eagerly eval expert weights during the prefetch window. @@ -16,6 +18,7 @@ import mlx.nn as nn from chronos.mlx.attention import MLAAttentionMLX, SlidingWindowAttentionMLX +from chronos.mlx.checkpointing import call_block from chronos.mlx.moe import ChronosMLXMOE, FeedForwardMLX from chronos.mlx.recurrent import RecurrentControllerMLX, auxiliary_state from chronos.config_schema import resolve_recurrent_attention_mode, recurrent_cache_layout @@ -65,6 +68,18 @@ def __call__(self, x: mx.array) -> mx.array: +def _recompute_block(cfg, index: int, block) -> bool: + """Whether physical block ``index`` is an ``mx.checkpoint`` region under + ``config.recompute_policy`` ("all" | "mla" | "swa" | "alternate").""" + policy = getattr(cfg, "recompute_policy", "all") + if policy == "all": + return True + if policy == "alternate": + return index % 2 == 0 + is_mla = isinstance(block.self_attn, MLAAttentionMLX) + return is_mla if policy == "mla" else not is_mla + + class ChronosMLXBlock(nn.Module): def __init__(self, layer_id: int, config): super().__init__() @@ -79,8 +94,9 @@ def __init__(self, layer_id: int, config): self.self_attn = SlidingWindowAttentionMLX(config) else: self.self_attn = SlidingWindowAttentionMLX(config) - self.self_attn.window_size = 2**63 - 1 + self.self_attn.window_size = None # dense causal GQA (a 2**63 window overflowed int32) + object.__setattr__(self, "_cfg", config) if getattr(config, 'use_moe', True): self.mlp = ChronosMLXMOE(config) else: @@ -95,6 +111,7 @@ def __call__( latent_only: bool = False, kv_override=None, return_shared_kv: bool = False, + top_k: int | None = None, ): new_cache, shared = cache, None if not latent_only: @@ -106,10 +123,16 @@ def __call__( h, new_cache = out x = x + h mlp_in = self.post_norm(x) + # recompute_scope="mlp": only the FFN/MoE is a recomputed region. + sub = (self.training and cache is None and getattr(self._cfg, "recompute_scope", "block") == "mlp" + and bool(getattr(self._cfg, "activation_checkpointing", False))) if isinstance(self.mlp, ChronosMLXMOE): - x = x + self.mlp(mlp_in, available_expert_mask=available_expert_mask) + if sub: + x = x + call_block(self.mlp, mlp_in, available_expert_mask=available_expert_mask, top_k=top_k) + else: + x = x + self.mlp(mlp_in, available_expert_mask=available_expert_mask, top_k=top_k) else: - x = x + self.mlp(mlp_in) + x = x + call_block(self.mlp, mlp_in) if sub else x + self.mlp(mlp_in) if return_shared_kv: return x, new_cache, shared return x, new_cache @@ -125,11 +148,19 @@ class ChronosMLXModel(nn.Module): def __init__(self, config): super().__init__() + # Kernel-level bound on MLX's free-buffer cache (min(RAM/8, 16 GiB)), + # applied once per process before any weight is allocated; a caller + # that set a lower limit first (recipe/env) keeps it. + from chronos.mlx.memory import apply_cache_limit + apply_cache_limit() self.config = config - if config.modalities: - raise ValueError("MLX modality encoders are not implemented; use the PyTorch MPS/CUDA backend for multimodal checkpoints") + # Image/audio encoders + gated cross-attention (Torch parity), only + # for the modalities the config enables. + from chronos.mlx.multimodal import MultimodalFusionMLX + self.multimodal_fusion = MultimodalFusionMLX(config) if config.modalities else None self.recurrent_controller = RecurrentControllerMLX(config) object.__setattr__(self, "last_recurrent_state", None) + object.__setattr__(self, "last_modality_states", {}) self.dropout = nn.Dropout(config.dropout) self.embed_tokens = nn.Embedding(config.vocab_size, config.hidden_size) self.layers = [ChronosMLXBlock(i, config) @@ -147,24 +178,49 @@ def __call__( available_expert_masks=None, # list of [E] float masks, or None logits_dtype=None, # e.g. mx.float32 for losses recurrent_depth=None, # draft depth override (shared_first/first_only) + modality_inputs=None, # {"image"|"audio"|"*_embeds"|"*_mask": array} + modality_mask=None, # [B] or [B, 2] (image, audio) presence + return_hidden: bool = False, # skip the LM head (chunked losses) + segments=None, # [B, S] document ids: attention stays in a document ): - """``logits_dtype=mx.float32`` makes the logits FP32 at birth: the + """``segments`` ``[B, S]`` (non-decreasing document ids of a packed row, + as ``chronos.expert_clusters.segment_ids`` gives) keeps every attention + layer inside the query's own document (document masking for varlen + packing). Rows longer than one block take the blockwise path + (``attention_block_size``); shorter ones get an explicit mask. + + ``return_hidden=True`` returns ``(hidden [B,S,H], lookahead, cache)`` + without the LM head, so a loss never materializes [B,S,V] logits + (``chronos.mlx.chunked_ce``). + + ``logits_dtype=mx.float32`` makes the logits FP32 at birth: the final hidden [B,S,H] and the head [V,H] are upcast (H/V the size of the logits) instead of rounding logits to the compute dtype and casting the large [B,S,V] tensor afterwards.""" + self._set_segments(segments) moes = [layer.mlp for layer in self.layers if isinstance(layer.mlp, ChronosMLXMOE)] for moe in moes: moe.reset_iteration_routing() moe.open_pack_scope() try: - return self._forward(input_ids, cache, available_expert_masks, logits_dtype, recurrent_depth) + return self._forward(input_ids, cache, available_expert_masks, logits_dtype, recurrent_depth, + modality_inputs, modality_mask, return_hidden) finally: for moe in moes: moe.close_pack_scope() + self._set_segments(None) - def _forward(self, input_ids, cache, available_expert_masks, logits_dtype, depth_override=None): + def _forward(self, input_ids, cache, available_expert_masks, logits_dtype, depth_override=None, + modality_inputs=None, modality_mask=None, return_hidden=False): B, S = input_ids.shape x = self.dropout(self.embed_tokens(input_ids)) # [B, S, H] + object.__setattr__(self, "last_modality_states", {}) + if self.multimodal_fusion is not None: + x, states = self.multimodal_fusion(x, modality_inputs, modality_mask) + object.__setattr__(self, "last_modality_states", states) + elif modality_inputs: + raise ValueError("modality_inputs were provided, but this checkpoint has no enabled modalities; " + "set config.modalities before constructing the model") # Each attention layer builds its own boolean causal / window mask # (fused SDPA); no additive mask is materialized in the compute dtype. @@ -178,9 +234,15 @@ def _forward(self, input_ids, cache, available_expert_masks, logits_dtype, depth cfg = self.config object.__setattr__(self, "last_recurrent_state", None) + # Activation recomputation (Torch parity: training, no incoming cache). + recompute = self.training and bool(getattr(cfg, "activation_checkpointing", False)) + def run(i, hidden, slot=None, **kw): avail = available_expert_masks[i] if available_expert_masks is not None else None c = cache[i if slot is None else slot] if "kv_override" not in kw else None + if (recompute and c is None and getattr(cfg, "recompute_scope", "block") == "block" + and _recompute_block(cfg, i, self.layers[i])): + return call_block(self.layers[i], hidden, mask=mask, cache=None, available_expert_mask=avail, **kw) return self.layers[i](hidden, mask=mask, cache=c, available_expert_mask=avail, **kw) if cfg.recurrent_enabled and cfg.recurrent_depth > 1: @@ -204,47 +266,56 @@ def run(i, hidden, slot=None, **kw): for i in range(cfg.prelude_layers): x, new_caches[i] = run(i, x) # Lookahead observes the post-prelude state (Torch parity). - lookahead_probs = self.lookahead_router(x) + lookahead_probs = self.lookahead_router( + mx.stop_gradient(x) if getattr(cfg, "lookahead_input_detach", False) else x) # MLX always returns a cache, so per_iteration (one slot per # iteration) never exits early; shared_first/first_only may. allow_exit = mode != "per_iteration" diagnostics = [] - for group in range(cfg.recurrent_groups): + order = str(getattr(cfg, "recurrent_order", "layer") or "layer") + # Graded top-k: loop iterations after the first route to fewer experts (0 = same as the first). + later_k = int(getattr(cfg, "recurrent_later_topk", 0) or 0) + # Prefix blocks (block order): iterations after the first run only the first later_g layers of the block. + later_g = int(getattr(cfg, "recurrent_later_groups", 0) or 0) + target = min(1.0, max(1e-6, cfg.halting_threshold)) + + def run_layer(group, step, x, shared): + """One loop iteration of one physical layer: condition, attend/route, contract.""" i = cfg.prelude_layers + group - states, halts = [], [] - exited, shared = False, None - halted = cumulative = None - target = min(1.0, max(1e-6, cfg.halting_threshold)) - for step in range(depth): - conditioned = controller.condition(x, step, group) - slot = layout.slot(i, step) - if mode == "per_iteration": - refined, new_caches[slot] = run(i, conditioned, slot) - elif mode == "first_only": - refined, candidate = run(i, conditioned, slot, latent_only=step > 0) - if step == 0: - new_caches[slot] = candidate - elif step == 0: - refined, new_caches[slot], shared = run(i, conditioned, slot, return_shared_kv=True) - else: - refined, _ = run(i, conditioned, kv_override=shared) - x = controller.contract(x, refined, group, cfg) - states.append(x) - prob = controller.halt_probability(x) - halts.append(prob) - # Exact per-token ACT halting (Torch parity, see model_chronos). - if step + 1 >= cfg.min_recurrent_depth: - clipped = mx.clip(prob.astype(mx.float32), 0.0, 1.0) - if halted is None: - cumulative = mx.zeros_like(clipped) - halted = mx.zeros(clipped.shape, dtype=mx.bool_) - newly = mx.logical_and(mx.logical_not(halted), cumulative + clipped >= target) - cumulative = mx.where(mx.logical_or(halted, newly), cumulative, mx.minimum(cumulative + clipped, 1.0)) - halted = mx.logical_or(halted, newly) - if not self.training and adaptive and allow_exit and halted is not None and step + 1 < depth: - if bool(mx.all(halted).item()): - exited = True - break + tk = {"top_k": later_k} if later_k and step > 0 else {} + conditioned = controller.condition(x, step, group) + slot = layout.slot(i, step) + if mode == "per_iteration": + refined, new_caches[slot] = run(i, conditioned, slot, **tk) + elif mode == "first_only": + refined, candidate = run(i, conditioned, slot, latent_only=step > 0, **tk) + if step == 0: + new_caches[slot] = candidate + elif step == 0: + refined, new_caches[slot], shared = run(i, conditioned, slot, return_shared_kv=True) + else: + refined, _ = run(i, conditioned, kv_override=shared, **tk) + return controller.contract(x, refined, group, cfg), shared + + def track(x, step, halted, cumulative): + prob = controller.halt_probability(x) + # Exact per-token ACT halting (Torch parity, see model_chronos). + if step + 1 >= cfg.min_recurrent_depth: + clipped = mx.clip(prob.astype(mx.float32), 0.0, 1.0) + if halted is None: + cumulative = mx.zeros_like(clipped) + halted = mx.zeros(clipped.shape, dtype=mx.bool_) + newly = mx.logical_and(mx.logical_not(halted), cumulative + clipped >= target) + cumulative = mx.where(mx.logical_or(halted, newly), cumulative, mx.minimum(cumulative + clipped, 1.0)) + halted = mx.logical_or(halted, newly) + return prob, halted, cumulative + + def can_exit(halted, step): + if not self.training and adaptive and allow_exit and halted is not None and step + 1 < depth: + return bool(mx.all(halted).item()) + return False + + def finish(states, halts, exited, x): mixed, state = auxiliary_state(states, halts, cfg.min_recurrent_depth, cfg.halting_threshold) if adaptive: x = mixed @@ -254,6 +325,41 @@ def run(i, hidden, slot=None, **kw): state["depth_used"] = mx.full(halts[0].shape, len(states), dtype=mx.float32) state["exited"] = exited diagnostics.append(state) + return x + + if order == "block": + # Block-interleaved recurrence: (layer0 layer1 ... layerG-1) x depth. + # One state trajectory and one halting head per block iteration; each + # physical layer still keeps its own dt, loop/group embeddings and KV. + shared = [None] * cfg.recurrent_groups + states, halts = [], [] + halted = cumulative = None + exited = False + for step in range(depth): + for group in range(cfg.recurrent_groups if step == 0 or not later_g else min(cfg.recurrent_groups, later_g)): + x, shared[group] = run_layer(group, step, x, shared[group]) + states.append(x) + prob, halted, cumulative = track(x, step, halted, cumulative) + halts.append(prob) + if can_exit(halted, step): + exited = True + break + x = finish(states, halts, exited, x) + else: + # Layer-consecutive recurrence (default): layer0 x depth, layer1 x depth, ... + for group in range(cfg.recurrent_groups): + states, halts = [], [] + exited, shared = False, None + halted = cumulative = None + for step in range(depth): + x, shared = run_layer(group, step, x, shared) + states.append(x) + prob, halted, cumulative = track(x, step, halted, cumulative) + halts.append(prob) + if can_exit(halted, step): + exited = True + break + x = finish(states, halts, exited, x) for i in range(cfg.prelude_layers+cfg.recurrent_groups, len(self.layers)): slot = layout.slot(i, 0) x, new_caches[slot] = run(i, x, slot) @@ -268,16 +374,29 @@ def run(i, hidden, slot=None, **kw): x, candidate = run(i, x) new_caches.append(candidate) if i == 0: - lookahead_probs = self.lookahead_router(x) + lookahead_probs = self.lookahead_router( + mx.stop_gradient(x) if getattr(cfg, "lookahead_input_detach", False) else x) x = self.norm(x) - head = self.embed_tokens.weight if self.lm_head is None else self.lm_head.weight + if return_hidden: + return x, lookahead_probs, new_caches + head = self.head_weight() if logits_dtype is not None and logits_dtype != head.dtype: logits = x.astype(logits_dtype) @ head.astype(logits_dtype).T else: logits = self.embed_tokens.as_linear(x) if self.lm_head is None else self.lm_head(x) return logits, lookahead_probs, new_caches + def _set_segments(self, segments) -> None: + """Give every attention layer this forward's document ids (or clear them).""" + seg = None if segments is None else mx.stop_gradient(mx.array(segments).astype(mx.int32)) + for layer in self.layers: + object.__setattr__(layer.self_attn, "_segments", seg) + + def head_weight(self) -> mx.array: + """The LM head matrix ``[V, H]`` (the embedding when tied).""" + return self.embed_tokens.weight if self.lm_head is None else self.lm_head.weight + @staticmethod def from_chronos_pytorch(pt_model, config, include_experts: bool = True, dtype: str | None = None): """ @@ -380,6 +499,9 @@ def _assign_norm(norm, sd, key, missing): proj_layers = mlx_model.lookahead_router.proj.layers _assign_linear(proj_layers[0], sd, "model.lookahead_router.proj.0.weight", missing) _assign_linear(proj_layers[2], sd, "model.lookahead_router.proj.2.weight", missing) + if mlx_model.multimodal_fusion is not None: + from chronos.mlx.multimodal import load_torch_fusion_state + load_torch_fusion_state(mlx_model.multimodal_fusion, sd, _to_mx, missing) if missing: raise RuntimeError( diff --git a/chronos/mlx/moe.py b/chronos/mlx/moe.py index ec162e8..0829a2e 100644 --- a/chronos/mlx/moe.py +++ b/chronos/mlx/moe.py @@ -4,11 +4,13 @@ Soft gating is expressed as weighted sum (compile-safe): out = avail[i] * expert_out + (1 - avail[i]) * shared_out -mx.compile() traces a single graph — no Python branches on mask values. +No Python branches on mask values, so a compiled training step +(chronos/mlx/training/compiled.py) keeps one graph per signature. """ import mlx.core as mx import mlx.nn as nn +from chronos.mlx.checkpointing import draw, recomputing, recorded, side_output_sink from chronos.mlx.moe_kernels import ( gather_mm_supported, grouped_swiglu, sparse_dispatch_ok, stack_expert_weights, training_availability, ) @@ -22,7 +24,7 @@ def _sparse_ok(dtype) -> bool: class FeedForwardMLX(nn.Module): - """SwiGLU FFN matching minimind's FeedForward structure.""" + """SwiGLU FFN matching ``chronos.model.kernel.FeedForward``.""" def __init__(self, hidden_size: int, intermediate_size: int): super().__init__() @@ -77,6 +79,7 @@ def __init__(self, config): self.fallback_mask_prob = float(getattr(config, "fallback_mask_prob", 0.0) or 0.0) # Sorted gather_mm dispatch (requires mlx >= 0.32.4 on M5-class GPUs). self.sparse_dispatch = bool(getattr(config, "moe_sparse_dispatch", True)) and gather_mm_supported() + self.chunk_tokens = int(getattr(config, "moe_chunk_tokens", 0) or 0) self.runtime_on_demand_loader = None self.runtime_touch_expert = None @@ -88,6 +91,13 @@ def last_router_probs(self): def iteration_router_probs(self): return self._iteration_router_probs + def accept_side_output(self, kind, value): + """Record one dispatch's router probabilities ``[B, S, E]``.""" + if kind != "probs": + raise ValueError(f"unknown MoE side output {kind!r}") + object.__setattr__(self, "_last_router_probs", value) + self._iteration_router_probs.append(value) + def reset_iteration_routing(self): object.__setattr__(self, "_iteration_router_probs", []) object.__setattr__(self, "_shared_topk_idx", None) @@ -100,7 +110,9 @@ def close_pack_scope(self): def _expert_stacks(self): scope = self._pack_scope - if scope is None: + if scope is None or recomputing(): + # A recomputation stacks its own primals, so the expert-weight + # gradients reach the region's inputs. return stack_expert_weights(self.experts) # Keyed on the live weight arrays, so an expert swapped in mid-forward # (lazy promotion) can never be served from a stale stack. @@ -115,13 +127,103 @@ def _expert_stacks(self): def last_router_probs(self, value): object.__setattr__(self, "_last_router_probs", value) + def _grouped_chunked(self, x_flat, topk_idx, topk_weight, fallback): + """Sparse dispatch over the routed experts, in token chunks when + ``config.moe_chunk_tokens`` is set and the call is a training forward. + + Each chunk runs under ``mx.checkpoint``: its ``[chunk*K, I]`` gate/up + activations are recomputed in the backward pass instead of kept for the + whole row. Routing, weights and the fallback mask are inputs, so every + token sees the same experts and the result equals one dispatch (up to + summation order inside gather_mm).""" + stacks = self._expert_stacks() + n = x_flat.shape[0] + chunk = self.chunk_tokens + if not self.training or chunk <= 0 or n <= chunk: + return grouped_swiglu(x_flat, topk_idx, topk_weight, *stacks, fallback=fallback) + avail, shared = (None, None) if fallback is None else fallback + outs = [] + prev = None + for start in range(0, n, chunk): + end = min(n, start + chunk) + xs = x_flat[start:end] + if prev is not None: + xs = mx.depends(xs, prev) # one chunk's activations live at a time + if fallback is None: + def part(xc, ic, wc, g, u, d): + return grouped_swiglu(xc, ic, wc, g, u, d) + prev = mx.checkpoint(part)(xs, topk_idx[start:end], topk_weight[start:end], *stacks) + else: + def part(xc, ic, wc, sc, g, u, d): + return grouped_swiglu(xc, ic, wc, g, u, d, fallback=(avail, sc)) + prev = mx.checkpoint(part)(xs, topk_idx[start:end], topk_weight[start:end], shared[start:end], *stacks) + outs.append(prev) + return mx.concatenate(outs, axis=0) + def _shared_out(self, x: mx.array) -> mx.array: return sum(e(x) for e in self.shared_experts) / len(self.shared_experts) + def _resolve_live(self, i: int, python_avail: set) -> bool: + """Materialize selected expert ``i`` under the miss policy; True = real weights. + + Same decisions as the per-expert loop: a miss under ``sync_on_demand`` + loads synchronously (or raises); other policies fall back to the shared expert.""" + policy = getattr(self, "runtime_miss_policy", "") + loader = getattr(self, "runtime_on_demand_loader", None) + sync = loader is not None and policy == "sync_on_demand" + live = i in python_avail or (sync and bool(loader(int(i)))) + if live and isinstance(self.experts[i], LazyFeedForwardMLX): + if sync: + loader(int(i)) + if isinstance(self.experts[i], LazyFeedForwardMLX): + if policy == "sync_on_demand": + raise RuntimeError(f"MLX lazy expert {i} was selected but not materialized") + return False + if not live: + if policy == "sync_on_demand": + raise RuntimeError(f"MLX lazy expert {i} could not be loaded on demand") + return False + touch = getattr(self, "runtime_touch_expert", None) + if touch is not None: + touch(int(i)) + return True + + def _lazy_grouped(self, x_flat, topk_idx, topk_weight, selected_host, python_avail, shared_out): + """Lazy/offload MoE through ``grouped_swiglu`` over the live experts only. + + The full-memory path runs the same kernel, so a lazy decode reproduces + the full decode instead of re-rounding through the per-expert loop + (bf16 on the GPU: a different summation order flips near-tied greedy + tokens). Routed ids are remapped into a compact stack of the live + experts; a miss maps to a spare slot whose output the shared expert + replaces (the loop path's fallback).""" + selected = [i for i, s in enumerate(selected_host) if s] + live, experts = [], [] + for i in selected: + if self._resolve_live(i, python_avail): + # Take the module now: loading the next selected expert may + # evict this one from the hot set (its weights stay valid). + live.append(i) + experts.append(self.experts[i]) + if not live: + # Every routed slot missed: each is served by the shared output. + return shared_out + shared_out * topk_weight.sum(axis=-1, keepdims=True).astype(shared_out.dtype) + remap = [len(live)] * self.num_experts + for j, i in enumerate(live): + remap[i] = j + fallback = None + if len(live) < len(selected): + experts.append(experts[0]) # spare slot; its output is replaced + fallback = (mx.arange(len(experts)) < len(live), shared_out) + local = mx.array(remap, dtype=mx.int32)[topk_idx] + routed = grouped_swiglu(x_flat, local, topk_weight, *stack_expert_weights(experts), fallback=fallback) + return routed + shared_out + def __call__( self, x: mx.array, available_expert_mask: mx.array = None, + top_k: int | None = None, ) -> mx.array: """ x: [B, S, H] @@ -132,21 +234,35 @@ def __call__( x_flat = x.reshape(-1, H) # [N, H] scores = mx.softmax(self.gate(x_flat).astype(mx.float32), axis=-1) # [N, E] - object.__setattr__(self, "_last_router_probs", scores.reshape(B, S, self.num_experts)) - self._iteration_router_probs.append(self._last_router_probs) - - # top-k routing - shared_idx = self._shared_topk_idx - if (self.router_scope == "shared" and shared_idx is not None - and shared_idx.shape[0] == scores.shape[0] and len(self._iteration_router_probs) > 1): + probs = scores.reshape(B, S, self.num_experts) + # Inside a recomputed block (``chronos.mlx.checkpointing``) side + # outputs leave the region as region outputs; the loss then reads the + # forward-pass arrays and never a recomputed copy. + sink = side_output_sink() + + # top-k routing (router_scope="shared": later iterations reuse the + # first dispatch's ids). Indices are discrete: gradients flow through + # topk_weight (gathered scores) only. ``recorded`` makes a + # recomputation follow the forward pass's routing exactly. + # Graded top-k: a later loop iteration may route to fewer experts (top_k < num_experts_per_tok). + k = self.num_experts_per_tok if not top_k else max(1, min(int(top_k), self.num_experts_per_tok)) + shared_idx = recorded(lambda: self._shared_topk_idx if self.router_scope == "shared" else None) + if shared_idx is not None and shared_idx.shape[0] == scores.shape[0]: topk_idx = shared_idx + if k < shared_idx.shape[1]: + # Keep the k best-scoring experts of the first dispatch (no new expert is touched). + topk_idx = recorded(lambda: mx.stop_gradient(mx.take_along_axis( + shared_idx, + mx.argpartition(-mx.take_along_axis(scores, shared_idx, axis=-1), kth=k - 1, axis=-1)[:, :k], + axis=-1))) else: - topk_idx = mx.argpartition(-scores, kth=self.num_experts_per_tok - 1, axis=-1) - # Routing indices are discrete: gradients flow through topk_weight - # (gathered scores) only, never through the integer indices. - topk_idx = mx.stop_gradient(topk_idx[:, :self.num_experts_per_tok]) # [N, K] - if self.router_scope == "shared": + topk_idx = recorded(lambda: mx.stop_gradient(mx.argpartition(-scores, kth=k - 1, axis=-1)[:, :k])) + if self.router_scope == "shared" and self._shared_topk_idx is None and not recomputing(): object.__setattr__(self, "_shared_topk_idx", topk_idx) + if sink is not None: + sink.append((self, "probs", probs)) + else: + self.accept_side_output("probs", probs) topk_weight = mx.take_along_axis(scores, topk_idx, axis=-1) # [N, K] if self.norm_topk_prob: topk_weight = topk_weight / (topk_weight.sum(axis=-1, keepdims=True) + 1e-20) @@ -162,9 +278,8 @@ def __call__( if self.training and self.fallback_mask_prob > 0.0 and shared is not None: # Cache-miss simulation (PyTorch parity): an unavailable routed # expert is served by the shared expert, as at offload inference. - fallback = (training_availability(self.num_experts, self.fallback_mask_prob), shared) - y = grouped_swiglu(x_flat, topk_idx, topk_weight, *self._expert_stacks(), - fallback=fallback) + fallback = (draw(lambda: training_availability(self.num_experts, self.fallback_mask_prob)), shared) + y = self._grouped_chunked(x_flat, topk_idx, topk_weight, fallback) if shared is not None: y = y + shared elif available_expert_mask is None: @@ -193,6 +308,11 @@ def __call__( # ``.item()`` sync per expert per MoE call during decode). hit = (topk_idx.reshape(-1)[:, None] == mx.arange(self.num_experts)[None, :]).any(axis=0) selected_host = hit.tolist() + # Read by residency planners from the runtime hooks below. + object.__setattr__(self, "_selected_host", selected_host) + if self.sparse_dispatch and len(self.shared_experts) > 0 and _sparse_ok(x_flat.dtype): + y = self._lazy_grouped(x_flat, topk_idx, topk_weight, selected_host, python_avail, shared_out) + return y.reshape(B, S, H) for i, expert in enumerate(self.experts): sel = (topk_idx == i) diff --git a/chronos/mlx/multimodal.py b/chronos/mlx/multimodal.py new file mode 100644 index 0000000..14f93c6 --- /dev/null +++ b/chronos/mlx/multimodal.py @@ -0,0 +1,284 @@ +"""MLX twin of ``chronos.model.multimodal``: image/audio encoders and the gated +cross-attention that fuses modality tokens into the text states. + +Same parameters and numerics as the Torch module (parity-tested), so a +checkpoint trains on either backend. Layout differences are handled at +conversion time (``torch_fusion_state`` / ``load_torch_fusion_state``): MLX +convolutions are channels-last (Conv2d weight ``[O,kh,kw,I]``, Conv1d +``[O,k,I]``) and the Torch ``MultiheadAttention`` packs q/k/v into one +``in_proj``. The fused output only feeds the token embeddings, so routing, +recurrence, KV caches and the cluster objectives are unchanged. +""" +from __future__ import annotations + +import mlx.core as mx +import mlx.nn as nn + +MODALITY_KEYS = ("image", "audio", "image_embeds", "audio_embeds", + "image_mask", "audio_mask", "image_embeds_mask", "audio_embeds_mask") + + +def _mx(value, dtype=None): + """torch/numpy/list → mx.array (no copy for mx input).""" + if value is None or isinstance(value, mx.array): + return value if value is None or dtype is None else value.astype(dtype) + try: + import torch + if isinstance(value, torch.Tensor): + t = value.detach().cpu() + if t.dtype == torch.bfloat16: + t = t.float() + value = t.numpy() + except ModuleNotFoundError: + pass + arr = mx.array(value) + return arr if dtype is None else arr.astype(dtype) + + +class PatchImageEncoderMLX(nn.Module): + """``[B,3,H,W]`` (or ``[B,N,3,H,W]``) images → ``[B,T,H]`` patch tokens.""" + + def __init__(self, hidden_size: int, patch_size: int = 16, max_tokens: int = 196): + super().__init__() + self.patch = nn.Conv2d(3, hidden_size, patch_size, stride=patch_size, bias=False) + self.max_tokens = int(max_tokens) + self.norm = nn.LayerNorm(hidden_size) + + def __call__(self, images: mx.array) -> mx.array: + b = images.shape[0] + if images.ndim == 5: + n, c, h, w = images.shape[1:] + images = images.reshape(b * n, c, h, w) + x = self.patch(images.transpose(0, 2, 3, 1).astype(self.patch.weight.dtype)) # NHWC + x = x.reshape(x.shape[0], -1, x.shape[-1]) # row-major patches (Torch flatten(2)) + x = x.reshape(b, -1, x.shape[-1]) + return self.norm(x[:, : self.max_tokens]) + + +class ConvAudioEncoderMLX(nn.Module): + """``[B,T]`` (or ``[B,1,T]``) waveform → ``[B,T',H]`` frame tokens.""" + + def __init__(self, hidden_size: int, max_tokens: int = 128): + super().__init__() + mid = max(32, hidden_size // 2) + self.net = nn.Sequential( + nn.Conv1d(1, mid, 400, stride=160, padding=120), nn.SiLU(), + nn.Conv1d(mid, hidden_size, 5, stride=2, padding=2), nn.SiLU(), + ) + self.max_tokens = int(max_tokens) + self.norm = nn.LayerNorm(hidden_size) + + def __call__(self, audio: mx.array) -> mx.array: + if audio.ndim == 3: + audio = audio[:, 0] + x = self.net(audio[:, :, None].astype(self.net.layers[0].weight.dtype)) # NLC + return self.norm(x[:, : self.max_tokens]) + + +def _validity(present, b: int, n: int, active_col: mx.array, name: str) -> mx.array: + """``[B, n]`` bool: keys a row may attend (Torch ``~key_padding_mask``).""" + if present is None: + return mx.broadcast_to(active_col[:, None], (b, n)) + present = _mx(present).astype(mx.bool_) + if present.ndim == 2: + if present.shape[0] != b: + raise ValueError(f"{name} modality mask batch dimension mismatch") + if present.shape[1] >= n: + return present[:, :n] + return mx.concatenate([present, mx.zeros((b, n - present.shape[1]), dtype=mx.bool_)], axis=1) + present = present.reshape(-1) + if present.size == 1: + present = mx.broadcast_to(present, (b,)) + if present.size != b: + raise ValueError(f"{name} modality mask batch dimension mismatch") + return mx.broadcast_to(mx.logical_and(active_col, present)[:, None], (b, n)) + + +class MultimodalFusionMLX(nn.Module): + """Gated cross-attention of text states to image/audio tokens.""" + + def __init__(self, config): + super().__init__() + h = int(config.hidden_size) + heads = max(1, min(int(config.modality_fusion_heads), int(config.num_attention_heads))) + while h % heads: + heads -= 1 + enabled = set(getattr(config, "modalities", []) or []) + self.image_encoder = (PatchImageEncoderMLX(h, config.image_patch_size, config.max_image_tokens) + if "image" in enabled else None) + self.audio_encoder = (ConvAudioEncoderMLX(h, config.max_audio_tokens) + if "audio" in enabled else None) + self.hidden_size, self.num_heads = h, heads + self.image_embedding = mx.zeros((1, 1, h)) + self.audio_embedding = mx.zeros((1, 1, h)) + self.q_proj = nn.Linear(h, h) + self.k_proj = nn.Linear(h, h) + self.v_proj = nn.Linear(h, h) + self.out_proj = nn.Linear(h, h) + self.gate = mx.zeros(()) + self.attn_dropout = nn.Dropout(float(config.dropout)) + self.dropout = nn.Dropout(float(config.modality_dropout)) + self.freeze_encoders = bool(config.freeze_modality_encoders) + if self.freeze_encoders: + for encoder in (self.image_encoder, self.audio_encoder): + if encoder is not None: + encoder.freeze() + + def _fit_width(self, x: mx.array) -> mx.array: + width = x.shape[-1] + if width == self.hidden_size: + return x + if width > self.hidden_size: + return x[..., : self.hidden_size] + return mx.pad(x, [(0, 0)] * (x.ndim - 1) + [(0, self.hidden_size - width)]) + + def _embeds(self, value, text_dtype, offset): + x = _mx(value, text_dtype) + x = x[:, None] if x.ndim == 2 else x + return self._fit_width(x) + offset.astype(text_dtype) + + def __call__(self, text_states: mx.array, modality_inputs=None, modality_mask=None): + if not modality_inputs: + return text_states, {} + b, dtype = text_states.shape[0], text_states.dtype + parts, states = [], {} # parts: (modality, tokens, validity input) + for name, encoder, offset in (("image", self.image_encoder, self.image_embedding), + ("audio", self.audio_encoder, self.audio_embedding)): + embeds = modality_inputs.get(f"{name}_embeds") + if embeds is not None: + tokens = self._embeds(embeds, dtype, offset) + parts.append((name, tokens, modality_inputs.get(f"{name}_embeds_mask"))) + states[name] = tokens + raw = modality_inputs.get(name) + if raw is not None and embeds is None: + if encoder is None: + raise ValueError(f"{name} input provided but {name} modality is disabled") + tokens = encoder(_mx(raw, mx.float32)) + if self.freeze_encoders: + tokens = mx.stop_gradient(tokens) + tokens = (tokens + offset).astype(dtype) + parts.append((name, tokens, modality_inputs.get(f"{name}_mask"))) + states[name] = mx.concatenate([states[name], tokens], axis=1) if name in states else tokens + if not parts: + return text_states, {} + present = {m for m, _, _ in parts} + if modality_mask is None: + active = mx.broadcast_to(mx.array([["image" in present, "audio" in present]]), (b, 2)) + else: + raw_mask = _mx(modality_mask, mx.float32) + if raw_mask.ndim == 1: + col = raw_mask.reshape(-1, 1) if raw_mask.size != 1 else mx.broadcast_to(raw_mask.reshape(1, 1), (b, 1)) + active = mx.broadcast_to(col > 0, (b, 2)) + elif raw_mask.shape[-1] == 2: + active = raw_mask > 0 + else: + raise ValueError("modality_mask must be [B] or [B,2] (image,audio)") + memory = self.dropout(mx.concatenate([t for _, t, _ in parts], axis=1)) + valid = mx.concatenate([_validity(p, b, t.shape[1], active[:, 0 if m == "image" else 1], m) + for m, t, p in parts], axis=1) + cols = sorted({0 if m == "image" else 1 for m in present}) + no_media = mx.logical_not(mx.any(active[:, cols], axis=1)) + # Rows without media keep one key (no all-masked softmax) and get a zero update. + first = mx.arange(valid.shape[1])[None, :] == 0 + valid = mx.logical_or(valid, mx.logical_and(no_media[:, None], first)) + fused = self._attend(text_states, memory, valid) + fused = mx.where(no_media[:, None, None], mx.zeros_like(fused), fused) + return text_states + mx.sigmoid(self.gate).astype(dtype) * fused, states + + def _attend(self, x: mx.array, memory: mx.array, valid: mx.array) -> mx.array: + b, s, h = x.shape + t, nh = memory.shape[1], self.num_heads + hd = h // nh + q = self.q_proj(x).reshape(b, s, nh, hd).transpose(0, 2, 1, 3) + k = self.k_proj(memory).reshape(b, t, nh, hd).transpose(0, 2, 1, 3) + v = self.v_proj(memory).reshape(b, t, nh, hd).transpose(0, 2, 1, 3) + scores = (q.astype(mx.float32) @ k.astype(mx.float32).transpose(0, 1, 3, 2)) * (hd ** -0.5) + scores = mx.where(valid[:, None, None, :], scores, mx.array(-mx.inf, dtype=mx.float32)) + probs = self.attn_dropout(mx.softmax(scores, axis=-1)) + out = (probs @ v.astype(mx.float32)).astype(x.dtype) + return self.out_proj(out.transpose(0, 2, 1, 3).reshape(b, s, h)) + + +# ---- Torch ↔ MLX state (prefix ``model.multimodal_fusion.``) --------------- +PREFIX = "model.multimodal_fusion." + + +def _pairs(fusion: MultimodalFusionMLX): + """``(torch key, getter, setter, layout)``; layout: None | 'conv2d' | 'conv1d'.""" + out = [("gate", fusion, "gate", None), + ("modality_embeddings.image", fusion, "image_embedding", None), + ("modality_embeddings.audio", fusion, "audio_embedding", None), + ("attn.out_proj.weight", fusion.out_proj, "weight", None), + ("attn.out_proj.bias", fusion.out_proj, "bias", None)] + if fusion.image_encoder is not None: + enc = fusion.image_encoder + out += [("image_encoder.patch.weight", enc.patch, "weight", "conv2d"), + ("image_encoder.norm.weight", enc.norm, "weight", None), + ("image_encoder.norm.bias", enc.norm, "bias", None)] + if fusion.audio_encoder is not None: + enc = fusion.audio_encoder + for i in (0, 2): + conv = enc.net.layers[i] + out += [(f"audio_encoder.net.{i}.weight", conv, "weight", "conv1d"), + (f"audio_encoder.net.{i}.bias", conv, "bias", None)] + out += [("audio_encoder.norm.weight", enc.norm, "weight", None), + ("audio_encoder.norm.bias", enc.norm, "bias", None)] + return out + + +def _to_mlx_layout(arr: mx.array, layout): + if layout == "conv2d": + return arr.transpose(0, 2, 3, 1) # [O,I,kh,kw] → [O,kh,kw,I] + if layout == "conv1d": + return arr.transpose(0, 2, 1) # [O,I,k] → [O,k,I] + return arr + + +def _to_torch_layout(arr: mx.array, layout): + if layout == "conv2d": + return arr.transpose(0, 3, 1, 2) + if layout == "conv1d": + return arr.transpose(0, 2, 1) + return arr + + +def load_torch_fusion_state(fusion: MultimodalFusionMLX, sd, convert, missing: list) -> None: + """Copy ``model.multimodal_fusion.*`` tensors from a Torch state dict. + ``convert(tensor) -> mx.array`` applies the target dtype.""" + for key, obj, attr, layout in _pairs(fusion): + full = PREFIX + key + if full not in sd: + missing.append(full) + continue + value = _to_mlx_layout(convert(sd[full]), layout) + if tuple(value.shape) != tuple(getattr(obj, attr).shape): + raise ValueError(f"MLX checkpoint shape mismatch for {full}: {tuple(value.shape)} != {tuple(getattr(obj, attr).shape)}") + setattr(obj, attr, value) + w, b = PREFIX + "attn.in_proj_weight", PREFIX + "attn.in_proj_bias" + if w not in sd or b not in sd: + missing.extend(k for k in (w, b) if k not in sd) + return + weight, bias, h = convert(sd[w]), convert(sd[b]), fusion.hidden_size + for i, proj in enumerate((fusion.q_proj, fusion.k_proj, fusion.v_proj)): + proj.weight = weight[i * h:(i + 1) * h] + proj.bias = bias[i * h:(i + 1) * h] + + +def torch_fusion_state(fusion: MultimodalFusionMLX, to_torch) -> dict: + """``model.multimodal_fusion.*`` Torch tensors (``to_torch(mx.array)``).""" + sd = {PREFIX + key: to_torch(mx.contiguous(_to_torch_layout(getattr(obj, attr), layout))) + for key, obj, attr, layout in _pairs(fusion)} + sd[PREFIX + "attn.in_proj_weight"] = to_torch(mx.concatenate( + [fusion.q_proj.weight, fusion.k_proj.weight, fusion.v_proj.weight], axis=0)) + sd[PREFIX + "attn.in_proj_bias"] = to_torch(mx.concatenate( + [fusion.q_proj.bias, fusion.k_proj.bias, fusion.v_proj.bias], axis=0)) + return sd + + +def batch_modalities(batch): + """``(ids, labels, modality_inputs | None, modality_mask | None)`` from a + ``(ids, labels)`` pair or a ``multimodal_collate`` dict.""" + if isinstance(batch, dict): + media = batch.get("modality_inputs") or None + return batch["input_ids"], batch["labels"], media, batch.get("modality_mask") + return batch[0], batch[1], None, None diff --git a/chronos/mlx/recurrent.py b/chronos/mlx/recurrent.py index cc8b795..92bcddd 100644 --- a/chronos/mlx/recurrent.py +++ b/chronos/mlx/recurrent.py @@ -10,7 +10,9 @@ def __init__(self, config): h, depth, groups = config.hidden_size, config.recurrent_depth, config.recurrent_groups self.loop_embeddings = mx.zeros((depth, h)) self.group_embeddings = mx.zeros((groups, h)) - self.step_sizes = mx.full((groups,), config.recurrent_dt_init) + from chronos.model.recurrent import _dt_raw_init # same raw->dt init as Torch (inverts sigmoid) + self.step_sizes = mx.full((groups,), _dt_raw_init(str(getattr(config, "recurrent_dt_param", "clamp")), + config.recurrent_dt_init, config.recurrent_dt_min, config.recurrent_dt_max)) self.halting_norm = nn.RMSNorm(h, eps=config.rms_norm_eps) self.halting_head = nn.Linear(h, 1) self.halting_head.weight = mx.zeros((1, h)) @@ -31,6 +33,12 @@ def adaptive_active(self, cfg, training): or self.training_progress >= cfg.depth_schedule_warmup_fraction) def execution_depth(self, cfg, training): + pinned = getattr(self, "_pinned_depth", None) + if pinned is not None and training: + return pinned # sampled once per step by a compiled training step + step_depth = getattr(self, "_step_depth", None) + if step_depth is not None and training: + return step_depth # one depth per optimizer step; all micro-batches of the step share it ceiling = cfg.recurrent_depth if training else cfg.max_inference_depth if not training or cfg.recurrent_strategy == "fixed" or cfg.recurrent_depth_jitter == 0: return ceiling @@ -44,7 +52,15 @@ def condition(self, x, step, group): return x + self.loop_embeddings[min(step, self.loop_embeddings.shape[0]-1)][None, None, :] + self.group_embeddings[group][None, None, :] def contract(self, before, after, group, cfg): - dt = mx.clip(self.step_sizes[group], cfg.recurrent_dt_min, cfg.recurrent_dt_max).astype(after.dtype) + raw = self.step_sizes[group] + lo, hi = cfg.recurrent_dt_min, cfg.recurrent_dt_max + if str(getattr(cfg, "recurrent_dt_param", "clamp")) == "sigmoid": + # dt = lo + (hi-lo)*sigmoid(raw); gradient positive everywhere, no dead zone (matches Torch). + dt = (lo + (hi - lo) * mx.sigmoid(raw)).astype(after.dtype) + else: + # Value of mx.clip, but gradient 1 on the bounds too (torch.clamp does; mx.clip gives 0 at x == lo or hi). + inside = (raw >= lo) & (raw <= hi) + dt = mx.where(inside, raw, mx.stop_gradient(mx.clip(raw, lo, hi))).astype(after.dtype) return before + dt*(after-before) def halt_probability(self, x): diff --git a/chronos/mlx/training/compiled.py b/chronos/mlx/training/compiled.py new file mode 100644 index 0000000..9cceb55 --- /dev/null +++ b/chronos/mlx/training/compiled.py @@ -0,0 +1,275 @@ +"""``mx.compile`` for one MLX training micro step (loss + gradients). + +Measured on mlx 0.32.4 (see the 0.3.2a0 CHANGELOG): the compiled step gives +the eager loss and gradients up to FP32 summation order (<= 1.7e-5 relative +on CPU FP32), consumes the RNG stream identically, and runs 1.08-1.18x +faster on a 50M MoE config (hidden 384, 6 layers, 36 experts) because elementwise chains (RMSNorm, +SwiGLU, softmax/CE, router regularizers) fuse into fewer kernels. + +What compiling needs here, and how it is handled: + +* **Mutable state.** Model parameters and ``mx.random.state`` are declared + as compile inputs *and* outputs, so a step reads the live weights and the + dropout / cache-miss draws advance the global RNG exactly as eagerly. +* **Python decisions are part of the graph.** The executed recurrent depth, + whether ACT mixing is active, the training flag, input shapes and dtypes + all change the traced graph. Each distinct signature gets its own + compiled function; ``depth`` is sampled once per step outside the trace + and pinned for the call (``depth_override``-free: see ``_pinned_depth``). +* **Side outputs.** The loss reads, and telemetry logs, arrays the forward + pass stores on modules (router probabilities, loss components, recurrent + diagnostics). Inside a trace those are placeholders, so they are returned + as explicit outputs and written back after the call. +* **Fallback.** Anything else (multimodal inputs, a lazy expert, an + unexpected trace error) runs eagerly; ``mode="auto"`` logs why once. +""" +from __future__ import annotations + +import contextlib +from typing import Callable + +import mlx.core as mx +import mlx.nn as nn + +# ── side outputs the regularized loss and the telemetry read ────────────── + +_MODEL_SIDE = ("_last_loss_components", "_last_stage_metrics", "last_recurrent_state", "_last_lookahead_probs") + + +def _moes(model): + from chronos.mlx.moe import ChronosMLXMOE + return [layer.mlp for layer in getattr(model, "layers", []) if isinstance(getattr(layer, "mlp", None), ChronosMLXMOE)] + + +def _split(obj, arrays: list): + """Array leaves -> index placeholders; everything else kept (bools, ints).""" + if isinstance(obj, mx.array): + arrays.append(obj) + return ("__array__", len(arrays) - 1) + if isinstance(obj, dict): + return {k: _split(v, arrays) for k, v in obj.items()} + if isinstance(obj, (list, tuple)): + return type(obj)(_split(v, arrays) for v in obj) + return obj + + +def _join(spec, arrays): + if isinstance(spec, tuple) and len(spec) == 2 and spec[0] == "__array__": + return arrays[spec[1]] + if isinstance(spec, dict): + return {k: _join(v, arrays) for k, v in spec.items()} + if isinstance(spec, (list, tuple)): + return type(spec)(_join(v, arrays) for v in spec) + return spec + + +def _side_get(model) -> dict: + return {"model": {k: getattr(model, k, None) for k in _MODEL_SIDE}, + "moe": [[m._last_router_probs, list(m._iteration_router_probs), m._shared_topk_idx] for m in _moes(model)]} + + +def _side_set(model, side: dict) -> None: + for k, v in side["model"].items(): + object.__setattr__(model, k, v) + for m, (last, probs, topk) in zip(_moes(model), side["moe"]): + object.__setattr__(m, "_last_router_probs", last) + object.__setattr__(m, "_iteration_router_probs", list(probs)) + object.__setattr__(m, "_shared_topk_idx", topk) + + +def _state_slots(node, out: list) -> list: + """``(container, key, array)`` for every array leaf of a module's state tree.""" + for key, value in list(node.items() if isinstance(node, dict) else enumerate(node)): + if isinstance(value, mx.array): + out.append((node, key, value)) + elif isinstance(value, (dict, list)): + _state_slots(value, out) + return out + + +def _capture(model) -> dict: + """Weights, RNG key and side outputs as they are before a first trace.""" + return {"slots": _state_slots(model.state, []), + "rng": [int(w) for w in mx.random.state[0].tolist()], + "side": _side_get(model)} + + +def _restore(model, snap: dict) -> None: + """Undo what a failed trace left behind: the saved arrays go back into the module tree, the + RNG is re-seeded from the saved key words (the stream continues exactly), side outputs are reset.""" + for node, key, value in snap["slots"]: + node[key] = value + hi, lo = snap["rng"] + mx.random.seed((hi << 32) | lo) + _side_set(model, snap["side"]) + + +def _static(value): + """Hashable stand-in for a non-array argument, or ``None`` when unsupported.""" + if value is None or isinstance(value, (bool, int, float, str)): + return ("v", value) + if isinstance(value, nn.Module): + return ("m", id(value)) + return None + + +def env_mode(default: str = "auto") -> str: + import os + mode = (os.environ.get("CHRONOS_MLX_COMPILE", "") or default).strip().lower() + return {"1": "on", "true": "on", "0": "off", "false": "off", "none": "off"}.get(mode, mode) + + +class CompiledStep: + """``nn.value_and_grad(model, loss_fn)`` with a compiled graph per signature. + + Call it exactly like the eager ``grad_fn``: ``loss, grads = step(*args)``. + ``args`` may mix arrays, ``None``/scalars and the model itself. After the + call the model's side outputs (router probabilities, loss components, + recurrent diagnostics) hold real arrays, as after an eager call. + + ``mode``: ``"auto"`` compiles and falls back to eager (logging the + reason once) when a signature cannot be compiled; ``"on"`` raises + instead; ``"off"`` is the eager ``grad_fn``. + """ + + def __init__(self, model, loss_fn: Callable, *, mode: str = "auto", log=print, max_graphs: int = 128): + from collections import OrderedDict + mode = str(mode or "auto").lower() + if mode not in {"auto", "on", "off"}: + raise ValueError(f"mlx compile mode must be auto|on|off, got {mode!r}") + self.model, self.mode, self.log, self.max_graphs = model, mode, log, int(max_graphs) + self.eager = nn.value_and_grad(model, loss_fn) + self._graphs: OrderedDict = OrderedDict() + self._specs: dict = {} + self._failed: set = set() + self._logged: set = set() + self.stats = {"compiled": 0, "eager": 0, "traces": 0} + + # -- eligibility --------------------------------------------------------- + def _eager_reason(self, args) -> str | None: + if self.mode == "off": + return "disabled" + from chronos.mlx.moe import LazyFeedForwardMLX + model = self.model + if getattr(model, "multimodal_fusion", None) is not None: + return "multimodal model (encoders run eagerly)" + if any(isinstance(e, LazyFeedForwardMLX) for m in _moes(model) for e in m.experts): + return "lazy (paged) experts" + if any(not isinstance(a, mx.array) and _static(a) is None for a in args): + return "non-array batch argument" + return None + + def _note(self, reason: str) -> None: + if reason not in self._logged: + self._logged.add(reason) + self.log(f"[mlx-compile] eager step: {reason}") + + def _plan(self, args): + """(graph key, depth to pin) for this call; Python decisions included.""" + model, cfg = self.model, self.model.config + depth = adaptive = None + if cfg.recurrent_enabled and cfg.recurrent_depth > 1: + controller = model.recurrent_controller + depth = int(controller.execution_depth(cfg, model.training)) + adaptive = bool(controller.adaptive_active(cfg, model.training)) + sig = tuple(("a", tuple(a.shape), str(a.dtype)) if isinstance(a, mx.array) else _static(a) for a in args) + # Plain config values decide branches too (and callers may toggle them). + conf = tuple(sorted((k, v) for k, v in vars(cfg).items() + if v is None or isinstance(v, (bool, int, float, str)))) + return (sig, bool(model.training), depth, adaptive, conf), depth + + def _prewarm(self, args) -> None: + """Grow RoPE tables before tracing, so no module stores a traced table.""" + length = max([a.shape[1] for a in args if isinstance(a, mx.array) and a.ndim == 2] or [0]) + if length: + for _, module in self.model.named_modules(): + grow = getattr(module, "_ensure_rope_cache", None) + if grow is not None: + grow(length) + + # -- compiled graph ------------------------------------------------------ + def _build(self, key, args): + model = self.model + spec = [None if isinstance(a, mx.array) else a for a in args] + slots = [i for i, a in enumerate(args) if isinstance(a, mx.array)] + meta: dict = {} + state = [model.state, mx.random.state] + + def step(*arrays): + full = list(spec) + for i, a in zip(slots, arrays): + full[i] = a + loss, grads = self.eager(*full) + flat: list = [] + meta["side"] = _split(_side_get(model), flat) + return loss, grads, flat + + fn = mx.compile(step, inputs=state, outputs=state) + return fn, meta + + @contextlib.contextmanager + def _pin(self, depth): + controller = getattr(self.model, "recurrent_controller", None) + if controller is None or depth is None: + yield + return + object.__setattr__(controller, "_pinned_depth", depth) + try: + yield + finally: + object.__setattr__(controller, "_pinned_depth", None) + + def __call__(self, *args): + reason = self._eager_reason(args) + key = depth = None + if reason is None: + key, depth = self._plan(args) + if key in self._failed: + reason = "signature failed to compile earlier" + if reason is not None: + if reason != "disabled": + self._note(reason) + self.stats["eager"] += 1 + with self._pin(depth): + return self.eager(*args) + hit = self._graphs.get(key) + fresh = hit is None + if fresh: + self._prewarm(args) + hit = self._build(key, args) + self._graphs[key] = hit + self.stats["traces"] += 1 + while len(self._graphs) > self.max_graphs: + self._graphs.popitem(last=False) + else: + self._graphs.move_to_end(key) + fn, meta = hit + arrays = [a for a in args if isinstance(a, mx.array)] + # A trace that fails half way leaves tracers in the weights, the RNG key and the side outputs + # (mx.compile swaps them back only on success), so snapshot before tracing and restore on failure. + snapshot = _capture(self.model) if fresh else None + try: + with self._pin(depth): + loss, grads, flat = fn(*arrays) + except Exception as exc: # trace-time failure: never lose the step + self._graphs.pop(key, None) + if snapshot is not None: + _restore(self.model, snapshot) + if self.mode == "on": + raise + self._failed.add(key) + self._note(f"compile failed ({type(exc).__name__}: {str(exc)[:160]})") + self.stats["eager"] += 1 + with self._pin(depth): + return self.eager(*args) + _side_set(self.model, _join(meta["side"], flat)) + self.stats["compiled"] += 1 + return loss, grads + + +def make_grad_fn(model, loss_fn: Callable, *, mode: str | None = None, log=print): + """Training ``grad_fn``: compiled (``CHRONOS_MLX_COMPILE``/``mode``, default auto) or eager.""" + mode = env_mode() if mode is None else str(mode).lower() + if mode == "off": + return nn.value_and_grad(model, loss_fn) + return CompiledStep(model, loss_fn, mode=mode, log=log) diff --git a/chronos/mlx/training/inspect_checkpoint.py b/chronos/mlx/training/inspect_checkpoint.py index 9494a46..a087074 100644 --- a/chronos/mlx/training/inspect_checkpoint.py +++ b/chronos/mlx/training/inspect_checkpoint.py @@ -5,14 +5,16 @@ * held-out CE / perplexity on the phase's fixed validation windows; * routing balance and recurrent-depth statistics on those windows; -* greedy en→zh / zh→en continuations on FLORES+ dev with BLEU / chrF; +* optional task probes: ``inspect_run(..., probes={"name": fn})`` stores + ``fn(spec, model, phase_name, samples)`` under ``report[name]`` (a task + extension supplies them; the kernel has none); and optionally exports a serveable ``.pth`` + ``.config.json`` (with the run's own tokenizer recorded) for ``chronos serve``. The report is written to ``/inspections/_s.json`` so the monitor can show it. - python -m chronos.mlx.training.inspect_checkpoint --run-dir runs/enzh_50m_v1 \ - --export serve_models/chronos_enzh_pretrain_s300.pth + python -m chronos.mlx.training.inspect_checkpoint --run-dir runs/my_run \ + --export serve_models/my_run_pretrain.pth """ from __future__ import annotations @@ -53,11 +55,13 @@ def _phase(spec: dict, state: dict) -> dict: def held_out(spec, config, model, phase, n_batches: int = 8) -> dict: - from chronos.mlx.training.longrun import PretrainSource, SFTSource, recurrent_metrics, routing_metrics + from chronos.mlx.training.longrun import (PretrainSource, RoutingCounts, SFTSource, recurrent_metrics, + token_mask_for) from chronos.mlx.training.trainer import _collect_router_probs source = (PretrainSource(spec["shards_dir"], phase["seq_len"], spec["seed"]) if phase["name"] == "pretrain" else SFTSource(spec["shards_dir"], spec["seed"])) total, count, extra = 0.0, 0, {} + routes, top_k = RoutingCounts(), int(config.num_experts_per_tok) for i, (ids, labels) in enumerate(source.valid_batches(n_batches, phase["micro_tokens"])): logits, _, _ = model(mx.array(ids, dtype=mx.int32), logits_dtype=mx.float32) lb = mx.array(labels, dtype=mx.int32).reshape(-1) @@ -67,11 +71,12 @@ def held_out(spec, config, model, phase, n_batches: int = 8) -> dict: s, n = (ce * mask).sum(), mask.sum() mx.eval(s, n) total, count = total + float(s.item()), count + int(n.item()) + routes.add(_collect_router_probs(model), top_k, token_mask_for(labels)) # real tokens, every batch if i == 0: - extra = {**routing_metrics(_collect_router_probs(model), int(config.num_experts_per_tok)), - **recurrent_metrics(getattr(model, "last_recurrent_state", None))} + extra = recurrent_metrics(getattr(model, "last_recurrent_state", None)) ce = total / max(count, 1) - return {"valid_ce": round(ce, 4), "valid_ppl": round(math.exp(min(ce, 30)), 2), "valid_tokens": count, **extra} + return {"valid_ce": round(ce, 4), "valid_ppl": round(math.exp(min(ce, 30)), 2), "valid_tokens": count, + **routes.summary(top_k), **extra} def greedy(model, tok, prompt_ids: list[int], stop_ids: set[int], limit: int) -> list[int]: @@ -86,47 +91,6 @@ def greedy(model, tok, prompt_ids: list[int], stop_ids: set[int], limit: int) -> return out -def translation_probe(spec, model, phase_name: str, n: int) -> dict: - """Pretrain checkpoints are probed with the ``<|en|>…<|zh|>`` format they - were trained on; SFT checkpoints with the chat prompt.""" - import sacrebleu - from tokenizers import Tokenizer - from chronos.data.corpus.evalsets import load_eval_sets - from chronos.data.corpus.shards import SFT_PROMPT_EN_ZH - tok = Tokenizer.from_file(os.path.join(spec["tokenizer_dir"], "tokenizer.json")) - tid = tok.token_to_id - stop = {tid(t) for t in ("<|endoftext|>", "<|im_end|>", "<|en|>", "<|zh|>")} - raw = (spec.get("extra") or {}).get("raw_root") - pairs = load_eval_sets(raw, ["flores_dev"]).get("flores_dev", [])[:n] if raw else [] - if not pairs: - return {"probe": "skipped: FLORES+ dev not found"} - out, t0 = {}, time.monotonic() - directions = [("en_zh", 0, 1)] + ([("zh_en", 1, 0)] if phase_name == "pretrain" else []) - for name, si, ti in directions: - hyps, samples = [], [] - for pair in pairs: - src, ref = pair[si], pair[ti] - if phase_name == "pretrain": - tags = ("<|en|>", "<|zh|>") if name == "en_zh" else ("<|zh|>", "<|en|>") - prompt = [tid(tags[0])] + tok.encode(src, add_special_tokens=False).ids + [tid(tags[1])] - else: - text = f"<|im_start|>user\n{SFT_PROMPT_EN_ZH}{src}<|im_end|>\n<|im_start|>assistant\n" - prompt = tok.encode(text, add_special_tokens=False).ids - src_len = len(tok.encode(src, add_special_tokens=False).ids) - hyp = tok.decode(greedy(model, tok, prompt, stop, int(1.6 * src_len) + 16), skip_special_tokens=True) - hyps.append(hyp) - if len(samples) < 6: - samples.append({"src": src, "ref": ref, "hyp": hyp}) - refs = [p[ti] for p in pairs] - bleu = sacrebleu.corpus_bleu(hyps, [refs], tokenize="zh" if ti == 1 else "13a") - chrf = sacrebleu.corpus_chrf(hyps, [refs]) - out[name] = {"n": len(pairs), "bleu": round(bleu.score, 2), "chrf": round(chrf.score, 2), - "samples": samples} - out["probe_s"] = round(time.monotonic() - t0, 1) - out["probe_set"] = "flores_dev" - return out - - def export(model, config, spec, out_path: str, stage: str) -> str: from chronos.model.checkpoint import tokenizer_metadata from chronos.mlx.training.trainer import _save_mlx_checkpoint @@ -140,7 +104,7 @@ def export(model, config, spec, out_path: str, stage: str) -> str: def inspect_run(run_dir: str, *, samples: int = 24, n_batches: int = 8, export_path: str | None = None, - device: str = "cpu") -> dict: + device: str = "cpu", probes: dict | None = None) -> dict: t0 = time.monotonic() spec, config, model, state = load_run_model(run_dir, device=device) phase = _phase(spec, state) @@ -150,8 +114,9 @@ def inspect_run(run_dir: str, *, samples: int = 24, n_batches: int = 8, export_p "precision": model._chronos_precision.as_dict(), "train_dtype": spec.get("dtype"), "load_s": round(time.monotonic() - t0, 1)} report["held_out"] = held_out(spec, config, model, phase, n_batches) - if samples: - report["translation"] = translation_probe(spec, model, phase["name"], samples) + for name, probe in (probes or {}).items(): + if samples: + report[name] = probe(spec, model, phase["name"], samples) if export_path: report["exported"] = export(model, config, spec, export_path, phase["name"]) report["elapsed_s"] = round(time.monotonic() - t0, 1) @@ -165,7 +130,7 @@ def inspect_run(run_dir: str, *, samples: int = 24, n_batches: int = 8, export_p def main(argv=None) -> int: p = argparse.ArgumentParser(description=__doc__.split("\n\n")[0]) p.add_argument("--run-dir", required=True) - p.add_argument("--samples", type=int, default=24, help="FLORES+ dev sentences per direction (0 = skip)") + p.add_argument("--samples", type=int, default=24, help="samples per task probe (0 = skip; no probes here)") p.add_argument("--batches", type=int, default=8, help="validation micro-batches") p.add_argument("--export", default=None, help="write a serveable .pth here") p.add_argument("--device", default="cpu", choices=("cpu", "gpu")) diff --git a/chronos/mlx/training/io.py b/chronos/mlx/training/io.py index 1a1eb98..c5e0dc6 100644 --- a/chronos/mlx/training/io.py +++ b/chronos/mlx/training/io.py @@ -69,4 +69,8 @@ def mlx_state_to_torch(mlx_model, config) -> dict[str, torch.Tensor]: proj_layers = mlx_model.lookahead_router.proj.layers sd["model.lookahead_router.proj.0.weight"] = _torch_tensor(proj_layers[0].weight) sd["model.lookahead_router.proj.2.weight"] = _torch_tensor(proj_layers[2].weight) + fusion = getattr(mlx_model, "multimodal_fusion", None) + if fusion is not None: + from chronos.mlx.multimodal import torch_fusion_state + sd.update(torch_fusion_state(fusion, _torch_tensor)) return sd diff --git a/chronos/mlx/training/longrun.py b/chronos/mlx/training/longrun.py index d4bc316..3f0994d 100644 --- a/chronos/mlx/training/longrun.py +++ b/chronos/mlx/training/longrun.py @@ -11,7 +11,12 @@ * Metrics go to ``metrics.jsonl`` (one JSON object per log interval) — losses by component, recurrent depth/halting, routing balance/entropy, lookahead recall, grad norm, LR, tokens/s, memory, plus periodic - validation CE and BLEU/chrF. The UI monitor tails this file. + validation CE. The UI monitor tails this file. + +The runner is task-agnostic. A task adds its own quality metrics by +subclassing ``LongRun`` and overriding ``task_eval`` (called at every +validation and once at the end); whatever keys it returns are logged next to +``valid_ce`` and discovered by the monitor. """ from __future__ import annotations @@ -41,6 +46,12 @@ class PhaseSpec: min_lr_ratio: float = 0.1 weight_decay: float = 0.1 grad_clip: float = 1.0 + # Length curriculum: ``[[progress, seq_len], ...]`` (progress = elapsed fraction + # of the phase, ascending). The window length steps up as the phase advances; + # micro_tokens stays fixed, so rows shrink as rows get longer. None = seq_len. + seq_len_curriculum: list | None = None + # SFT: join short records into full rows (``seq_len`` tokens) with separators. + pack_sft: bool = False @dataclass @@ -55,8 +66,10 @@ class RunSpec: log_every_steps: int = 20 validate_every_s: float = 3600.0 checkpoint_every_s: float = 1800.0 - bleu_samples: int = 200 # periodic FLORES devtest subset during SFT - final_eval_samples: int = 1012 # full FLORES+ devtest at the end (0 = skip) + # Task-metric sample counts handed to ``LongRun.task_eval`` (0 = skip): + # at each validation and once at the end of the run. + eval_samples: int = 0 + final_eval_samples: int = 0 seed: int = 1234 dtype: str = "bfloat16" # "time": warmup + cosine over the phase's wall-clock budget, so the LR @@ -66,15 +79,12 @@ class RunSpec: # Telemetry (monitor pages): per-tensor weight/grad/update statistics every # ``tensor_stats_every_s`` (0 = off) and per-virtual-layer routing. tensor_stats_every_s: float = 1800.0 - # Greedy FLORES+ dev probe at each pretrain validation (``<|en|>…<|zh|>`` - # format, both directions); samples go to ``samples.jsonl``. 0 = off. - probe_samples: int = 16 # Start from these weights instead of a fresh initialization (a bundle's # ``model/*.pth``). The checkpoint's topology and vocabulary must match # ``model_config``; optimizer state starts fresh. Ignored on resume. init_checkpoint: str | None = None # Exported checkpoints are ``/_[.best].pth``. - export_prefix: str = "chronos_enzh" + export_prefix: str = "chronos" extra: dict = field(default_factory=dict) @@ -137,22 +147,76 @@ def _optimizer_restore(optimizer, model, snap: dict) -> None: optimizer.state = tree_unflatten(list(current.items())) -def routing_metrics(router: mx.array | None, top_k: int) -> dict: - """Load balance and confidence over every dispatch ``[B, S, V, E]``.""" - if router is None: - return {} - E = router.shape[-1] - flat = router.reshape(-1, router.shape[2], E).astype(mx.float32) # [N, V, E] - top = mx.argpartition(-flat, kth=top_k - 1, axis=-1)[..., :top_k] - load = (top[..., None] == mx.arange(E)).astype(mx.float32).sum(-2).mean(0) / top_k # [V, E] - importance = flat.mean(0) - entropy = -(flat * mx.log(mx.maximum(flat, 1e-9))).sum(-1).mean() - cv = (load.std(-1) / mx.maximum(load.mean(-1), 1e-9)).mean() - dead = (load.max(0) < (0.05 / E)).sum() - mx.eval(load, importance, entropy, cv, dead) - return {"route_entropy": float(entropy.item()), "route_entropy_max": float(math.log(E)), - "load_cv": float(cv.item()), "dead_experts": int(dead.item()), - "max_expert_load": float(load.max().item() * E)} +def token_mask_for(labels) -> np.ndarray | None: + """Real-token mask ``[B, S]`` of a batch whose labels are aligned with the + inputs (``PretrainSource``/``SFTSource`` pairs, ``labels[t]`` = token t+1). + A row's real tokens end one past its last supervised label (that input + holds the record's final token); later positions are right-padding. + Prompt tokens stay real. ``None`` when nothing is padded (packed + pretraining), so packed batches keep the exact unmasked loss. Same rule + as ``trainer.real_token_mask(labels, aligned=True)``.""" + labels = np.asarray(labels) + if labels.ndim != 2 or labels.size == 0 or not (labels[:, -1] == -100).any(): + return None + pos = np.arange(labels.shape[1]) + last = np.where(labels != -100, pos[None, :], -1).max(axis=1) + mask = pos[None, :] <= (last + 1)[:, None] + return None if mask.all() else mask + + +class RoutingCounts: + """Top-k dispatch counts, router probability mass and entropy per virtual + layer, summed over every micro-batch of a step (real tokens only). + + Training telemetry used to read the last micro-batch alone, padding + included; a step's full batch is what the router losses see.""" + + def __init__(self): + self.load = self.importance = self.entropy = None + self.tokens = 0 + + def add(self, router: mx.array | None, top_k: int, token_mask=None) -> None: + if router is None: + return + E, V = router.shape[-1], router.shape[2] + flat = router.reshape(-1, V, E).astype(mx.float32) # [N, V, E] + w = mx.ones((flat.shape[0],)) if token_mask is None else \ + mx.array(np.asarray(token_mask).reshape(-1), dtype=mx.float32) + top = mx.argpartition(-flat, kth=top_k - 1, axis=-1)[..., :top_k] + hits = (top[..., None] == mx.arange(E)).astype(mx.float32).sum(-2) # [N, V, E] + ent = -(flat * mx.log(mx.maximum(flat, 1e-9))).sum(-1) # [N, V] + load, imp = (hits * w[:, None, None]).sum(0), (flat * w[:, None, None]).sum(0) + ent = (ent * w[:, None]).sum(0) + n = w.sum() + mx.eval(load, imp, ent, n) + if self.load is None: + self.load, self.importance, self.entropy = load, imp, ent + else: + self.load, self.importance, self.entropy = self.load + load, self.importance + imp, self.entropy + ent + self.tokens += int(n.item()) + + def summary(self, top_k: int) -> dict: + if self.load is None or self.tokens <= 0: + return {} + E = self.load.shape[-1] + load = self.load / (self.tokens * top_k) # [V, E] dispatch share + cv = load.std(-1) / mx.maximum(load.mean(-1), 1e-9) # [V] + entropy = (self.entropy / self.tokens).mean() + dead = (load.max(0) < (0.05 / E)).sum() + mx.eval(load, cv, entropy, dead) + return {"route_entropy": float(entropy.item()), "route_entropy_max": float(math.log(E)), + "load_cv": float(cv.mean().item()), "load_cv_max": float(cv.max().item()), + "dead_experts": int(dead.item()), + "max_expert_load": float(load.max().item() * E), "min_expert_load": float(load.min().item() * E), + "route_tokens": int(self.tokens)} + + +def routing_metrics(router: mx.array | None, top_k: int, token_mask=None) -> dict: + """Load balance and confidence over every real-token dispatch ``[B, S, V, E]`` + (``token_mask`` ``[B, S]``, 1 = real; ``None`` = all positions).""" + acc = RoutingCounts() + acc.add(router, top_k, token_mask) + return acc.summary(top_k) def recurrent_metrics(state: dict | None) -> dict: @@ -172,9 +236,25 @@ def recurrent_metrics(state: dict | None) -> dict: return out +def curriculum_seq_len(phase, progress: float) -> int: + """Window length for ``progress`` in [0, 1] under ``phase.seq_len_curriculum``.""" + stages = getattr(phase, "seq_len_curriculum", None) + if not stages: + return int(phase.seq_len) + length = int(stages[0][1]) + for start, n in stages: + if progress >= float(start): + length = int(n) + return length + + class PretrainSource: + def set_seq_len(self, n: int) -> None: + self.stream.seq_len = int(n) + self.valid.seq_len = int(n) + def __init__(self, shards_dir, seq_len, seed): - from chronos.data.corpus.shards import PackedTokenStream + from chronos.data.shards import PackedTokenStream self.stream = PackedTokenStream(os.path.join(shards_dir, "pretrain", "train"), seq_len, seed=seed) self.valid = PackedTokenStream(os.path.join(shards_dir, "pretrain", "valid"), seq_len, seed=seed + 1) @@ -199,8 +279,9 @@ def set_rng_state(self, state): class SFTSource: - def __init__(self, shards_dir, seed): - from chronos.data.corpus.shards import SFTRecords + def __init__(self, shards_dir, seed, pack_len: int = 0): + self.pack_len = int(pack_len or 0) + from chronos.data.shards import SFTRecords self.records = SFTRecords(os.path.join(shards_dir, "sft", "train"), seed=seed) self.valid = SFTRecords(os.path.join(shards_dir, "sft", "valid"), seed=seed + 1) @@ -209,12 +290,16 @@ def _shift(ids, labels): return ids[:, :-1], labels[:, 1:] # labels already -100 outside replies def batch(self, micro_tokens: int): + if self.pack_len: + return self._shift(*self.records.packed_batch(micro_tokens, self.pack_len)) return self._shift(*self.records.batch(micro_tokens)) def valid_batches(self, n: int, micro_tokens: int): state = self.valid.rng.bit_generator.state self.valid.rng = np.random.default_rng(0) - out = [self._shift(*self.valid.batch(micro_tokens)) for _ in range(n)] + draw = (lambda: self.valid.packed_batch(micro_tokens, self.pack_len)) if self.pack_len else \ + (lambda: self.valid.batch(micro_tokens)) + out = [self._shift(*draw()) for _ in range(n)] self.valid.rng.bit_generator.state = state return out @@ -239,7 +324,7 @@ def check_init_checkpoint(path: str, config) -> None: if not saved: return # no sidecar: load_state_dict_controlled still checks shapes keys = SNIFFABLE_TOPOLOGY_FIELDS + UNSNIFFABLE_REQUIRED_FIELDS + ( - "recurrent_depth", "prelude_layers", "coda_layers", "recurrent_attention_mode", "rope_layout") + "recurrent_depth", "prelude_layers", "coda_layers", "recurrent_attention_mode", "recurrent_order", "rope_layout") diff = {k: (saved[k], getattr(config, k, None)) for k in keys if k in saved and saved[k] is not None and saved[k] != getattr(config, k, None)} if diff: @@ -256,6 +341,10 @@ def __init__(self, spec: RunSpec, log=print): self.spec, self.log = spec, log os.makedirs(spec.run_dir, exist_ok=True) self.config = ChronosConfig(**spec.model_config) + # MLX free-buffer cache bound, set before the model exists: recipe + # ``extra.mlx_cache_limit_gb`` (GiB) may lower min(RAM/8, 16 GiB). + from chronos.mlx.memory import apply_cache_limit + self.cache_limit = apply_cache_limit((spec.extra or {}).get("mlx_cache_limit_gb"), log=log, force=True) import torch torch.manual_seed(spec.seed) # reproducible initialization (built in Torch, then converted) mx.random.seed(spec.seed) @@ -279,7 +368,14 @@ def __init__(self, spec: RunSpec, log=print): self.telemetry = telemetry self.heartbeat = telemetry.Heartbeat(spec.run_dir) self.precision = getattr(self.model, "_chronos_precision", None) + # mx.compile of the micro step: recipe ``extra.mlx_compile`` (auto|on|off), + # else CHRONOS_MLX_COMPILE, else auto. + from chronos.mlx.training.compiled import env_mode + self.compile_mode = env_mode(str((spec.extra or {}).get("mlx_compile") or "auto")) self.runtime = telemetry.runtime_info(self.model, spec, self.precision) + if self.cache_limit is not None: + self.runtime["mlx_cache_limit_gb"] = self.cache_limit["limit_gb"] + self.runtime["mlx_cache_limit"] = {k: v for k, v in self.cache_limit.items() if k != "requested"} try: telemetry._atomic_json(os.path.join(spec.run_dir, "runtime.json"), self.runtime) except OSError: @@ -349,7 +445,8 @@ def _beat(self, state: str | None = None, **fields): rollbacks=int(st.get("rollbacks", 0)), lr_scale=float(st.get("lr_scale", 1.0)), best_valid=st.get("best_valid"), **fields) - def _tensor_telemetry(self, phase, step: int, grads, before, accum: int, lr: float, norm: float): + def _tensor_telemetry(self, phase, step: int, grads, before, accum: int, lr: float, norm: float, + routes: RoutingCounts | None = None): """One ``parameters.jsonl`` row: per-tensor weight RMS/|max|, pre-clip gradient RMS, relative update, per-group norms, expert grid, routing.""" tel = self.telemetry @@ -360,34 +457,33 @@ def _tensor_telemetry(self, phase, step: int, grads, before, accum: int, lr: flo grad_scale=1.0 / max(1, accum)) row = {"time": time.strftime("%Y-%m-%dT%H:%M:%S"), "phase": phase.name, "step": step, "lr": lr, "grad_norm": norm, **stats, "experts": tel.expert_table(stats["tensors"]), - "routing": tel.routing_snapshot(self.model)} + "routing": tel.routing_snapshot(self.model, counts=routes)} row["telemetry_s"] = round(time.monotonic() - t0, 3) with open(self.parameters_path, "a", encoding="utf-8") as fh: fh.write(json.dumps(row, ensure_ascii=False) + "\n") return row # ---- training ---------------------------------------------------------- - def _loss_fn(self, model, ids, labels): - from chronos.mlx.training.trainer import _chronos_regularized_loss, draft_exit_kl, draft_exit_logits + def _loss_fn(self, model, ids, labels, token_mask=None): + """CE on supervised labels + Chronos regularizers; ``token_mask`` ``[B, S]`` + (1 = real token) keeps right-padding out of the router regularizers.""" + from chronos.mlx.training.trainer import _chronos_regularized_loss, draft_exit_kl, draft_exit_logits, lm_ce draft = draft_exit_logits(model, ids, model.config) # None unless draft_exit_kl_coef > 0 - logits, lookahead, _ = model(ids, logits_dtype=mx.float32) - lg = logits.reshape(-1, logits.shape[-1]) - lb = labels.reshape(-1) - mask = lb != -100 - ce = nn.losses.cross_entropy(lg, mx.where(mask, lb, 0), reduction="none") - ce = (ce * mask).sum() / mx.maximum(mask.sum(), 1) + ce, lookahead, logits = lm_ce(model, ids, labels, aligned=True, need_logits=draft is not None) # Labels here are pre-aligned with the logits (no shift). draft_kl = None if draft is None else draft_exit_kl(draft, logits, labels != -100) return _chronos_regularized_loss(model, ce, lookahead, model.config, metrics={"ce": ce, "primary": ce}, - draft_kl=draft_kl) + draft_kl=draft_kl, token_mask=token_mask, input_ids=ids) def _source(self, phase: PhaseSpec): if phase.name == "pretrain": - return PretrainSource(self.spec.shards_dir, phase.seq_len, self.spec.seed) - return SFTSource(self.spec.shards_dir, self.spec.seed) + return PretrainSource(self.spec.shards_dir, max([int(phase.seq_len)] + [int(n) for _, n in (phase.seq_len_curriculum or [])]), self.spec.seed) + return SFTSource(self.spec.shards_dir, self.spec.seed, pack_len=phase.seq_len if phase.pack_sft else 0) def _micro_step(self, grad_fn, ids, labels): - loss, grads = grad_fn(self.model, mx.array(ids, dtype=mx.int32), mx.array(labels, dtype=mx.int32)) + mask = token_mask_for(labels) + loss, grads = grad_fn(self.model, mx.array(ids, dtype=mx.int32), mx.array(labels, dtype=mx.int32), + None if mask is None else mx.array(mask)) return loss, grads def _apply(self, grads, n_micro, phase, lr): @@ -417,13 +513,16 @@ def _validate(self, source, phase, n_batches=8) -> float: def run_phase(self, pi: int, deadline_s: float, max_steps: int | None = None): """Train phase ``pi`` until its step total, its deadline, or ``max_steps`` more optimizer updates (used by tests and staged runs).""" - from chronos.mlx.training.trainer import _add_grads, _collect_router_probs, _tree_all_finite + from chronos.mlx.training.trainer import _add_grads, _check_ids_in_vocab, _collect_router_probs, _tree_all_finite phase = self.spec.phases[pi] source = self._source(phase) if self.state["rng"].get(phase.name): source.set_rng_state(self.state["rng"][phase.name]) accum = max(1, phase.tokens_per_step // phase.micro_tokens) - grad_fn = nn.value_and_grad(self.model, self._loss_fn) + if getattr(self, "_grad_fn", None) is None: # one compiled step (and its graphs) per run + from chronos.mlx.training.compiled import make_grad_fn + self._grad_fn = make_grad_fn(self.model, self._loss_fn, mode=self.compile_mode, log=self.log) + grad_fn = self._grad_fn controller = self.model.recurrent_controller top_k = int(self.config.num_experts_per_tok) t_phase = time.monotonic() @@ -457,6 +556,8 @@ def run_phase(self, pi: int, deadline_s: float, max_steps: int | None = None): progress = (self.state["phase_wall_s"] / self.state["phase_budget_s"]) if time_based else \ step / max(total or 1_000_000, 1) controller.set_training_progress(int(progress * 1_000_000), 1_000_000) + if phase.name == "pretrain" and phase.seq_len_curriculum: + source.set_seq_len(curriculum_seq_len(phase, progress)) # MLX's global RNG (cache-miss simulation, dropout) cannot be # snapshotted, so make each step's randomness a pure function of # (seed, phase, step, rollbacks): resume is then bit-exact. @@ -469,17 +570,28 @@ def run_phase(self, pi: int, deadline_s: float, max_steps: int | None = None): lr *= float(self.state.get("lr_scale", 1.0)) t0 = time.monotonic() acc, tokens, processed, loss_sum = None, 0, 0, mx.zeros(()) + # Routing telemetry covers the whole step (every micro-batch, real + # tokens only), counted only on steps that are logged or sampled. + will_log = (step + 1) % self.spec.log_every_steps == 0 or step < 3 + want_tensors = tensor_every > 0 and time.monotonic() - last_tensors >= tensor_every + routes = RoutingCounts() if will_log or want_tensors else None + # One recurrent depth per optimizer step: jitter samples per step, not per micro-batch, so a step's + # gradient accumulation and router telemetry share one architecture (virtual-layer count). + controller._step_depth = controller.execution_depth(self.config, True) for _ in range(accum): ids, labels = source.batch(phase.micro_tokens) + _check_ids_in_vocab(ids, int(self.model.config.vocab_size), "longrun batch") loss, grads = self._micro_step(grad_fn, ids, labels) + if routes is not None: + routes.add(_collect_router_probs(self.model), top_k, token_mask_for(labels)) acc = grads if acc is None else _add_grads(acc, grads) loss_sum = loss_sum + loss tokens += int((labels != -100).sum()) # supervised tokens processed += int(ids.size) # forward/backward tokens mx.eval(acc, loss_sum) # bound the lazy graph to one micro-batch + controller._step_depth = None # end of step: stop pinning the sampled depth # Tensor telemetry keeps references to the pre-update weights (MLX # arrays are immutable: no copy) and the FP32 accumulated grads. - want_tensors = tensor_every > 0 and time.monotonic() - last_tensors >= tensor_every before = self.model.parameters() if want_tensors else None norm = self._apply(acc, accum, phase, lr) mx.eval(self.model.parameters(), self.optimizer.state, norm) @@ -508,7 +620,8 @@ def run_phase(self, pi: int, deadline_s: float, max_steps: int | None = None): self.state["phase_step"] = step + 1 if want_tensors: try: - self._tensor_telemetry(phase, step + 1, acc, before, accum, lr, float(norm.item())) + self._tensor_telemetry(phase, step + 1, acc, before, accum, lr, float(norm.item()), + routes=routes) except Exception as exc: # noqa: BLE001 - telemetry must never stop training self.log(f"[telemetry] tensor stats skipped: {exc!r}") last_tensors = time.monotonic() @@ -528,7 +641,7 @@ def run_phase(self, pi: int, deadline_s: float, max_steps: int | None = None): self.log(f"[run] {phase.name}: {tps:,.0f} tok/s → ~{self.state['phase_total']} steps " f"(~{self.state['phase_total'] * tokens / 1e9:.2f}B tokens)") self.state["phase_tokens_per_s"][phase.name] = tps - if (step + 1) % self.spec.log_every_steps == 0 or step < 3: + if will_log: comps = {k: round(float(v.item()), 5) for k, v in getattr(self.model, "_last_loss_components", {}).items()} rec = {"phase": phase.name, "step": step + 1, "total": self.state["phase_total"], "lr": lr, "grad_norm": float(norm.item()), "loss": float(loss_sum.item()) / accum, @@ -541,7 +654,7 @@ def run_phase(self, pi: int, deadline_s: float, max_steps: int | None = None): "phase_wall_s": self.state.get("phase_wall_s"), "phase_budget_s": self.state.get("phase_budget_s"), "lr_scale": float(self.state.get("lr_scale", 1.0)), "rollbacks": int(self.state.get("rollbacks", 0)), **comps, **recurrent_metrics(getattr(self.model, "last_recurrent_state", None)), - **routing_metrics(_collect_router_probs(self.model), top_k)} + **(routes.summary(top_k) if routes is not None else {})} self._emit(rec) self.log(f"[{phase.name}] {step + 1}/{self.state['phase_total']} loss={rec['loss']:.4f} " f"ce={comps.get('primary_loss', 0):.4f} gn={rec['grad_norm']:.2f} lr={lr:.2e} " @@ -573,10 +686,7 @@ def _periodic_eval(self, source, phase): ce = self._validate(source, phase) rec = {"phase": phase.name, "step": self.state["phase_step"], "event": "validation", "valid_ce": ce, "valid_ppl": math.exp(min(ce, 30))} - if phase.name == "sft" and self.spec.bleu_samples: - rec.update(self.translation_eval(self.spec.bleu_samples)) - elif phase.name == "pretrain" and getattr(self.spec, "probe_samples", 0): - rec.update(self._pretrain_probe(int(self.spec.probe_samples))) + rec.update(self._safe_task_eval(phase.name, final=False)) best = self.state["best_valid"].get(phase.name) if best is None or ce < best: self.state["best_valid"][phase.name] = ce @@ -584,93 +694,74 @@ def _periodic_eval(self, source, phase): self._emit(rec) self.log(f"[eval] {json.dumps(rec, ensure_ascii=False)}") - def _pretrain_probe(self, n: int) -> dict: - from chronos.mlx.training.inspect_checkpoint import translation_probe + # ---- task hooks (overridden by task extensions) -------------------------- + def task_eval(self, phase_name: str, n: int, *, final: bool = False) -> dict: + """Task metrics for the current weights; the kernel itself has none. + + ``n`` comes from ``eval_samples_for`` (never 0: a zero count skips the call). + Return flat ``{metric_key: number}``; the keys land in the + ``validation`` / ``final`` rows of ``metrics.jsonl``. Use + ``write_samples`` for example outputs and ``generate`` for decoding. + """ + return {} + + def eval_samples_for(self, phase_name: str, *, final: bool) -> int: + """Sample count for ``task_eval`` (per phase in task extensions).""" + return int((self.spec.final_eval_samples if final else self.spec.eval_samples) or 0) + + def _safe_task_eval(self, phase_name: str, *, final: bool, n: int | None = None) -> dict: + n = self.eval_samples_for(phase_name, final=final) if n is None else int(n) + if n <= 0: + return {} self.model.eval() try: - probe = translation_probe(asdict(self.spec), self.model, "pretrain", n) - except Exception as exc: # noqa: BLE001 - a probe failure must not stop training - self.log(f"[eval] pretrain probe skipped: {exc!r}") - return {} + return dict(self.task_eval(phase_name, n, final=final) or {}) + except Exception as exc: # noqa: BLE001 - a task metric must not stop training + self.log(f"[eval] task_eval skipped: {exc!r}") + return {"task_eval_error": f"{type(exc).__name__}: {exc}"[:200]} finally: self.model.train() - out = {} - with open(os.path.join(self.spec.run_dir, "samples.jsonl"), "a", encoding="utf-8") as fh: - for direction in ("en_zh", "zh_en"): - res = probe.get(direction) - if not isinstance(res, dict): - continue - out[f"probe_{direction}_bleu"], out[f"probe_{direction}_chrf"] = res["bleu"], res["chrf"] - for sample in res.get("samples", [])[:3]: - fh.write(json.dumps({"time": time.strftime("%Y-%m-%dT%H:%M:%S"), "phase": "pretrain", - "step": self.state["phase_step"], "direction": direction, - "set": probe.get("probe_set"), **sample}, ensure_ascii=False) + "\n") - if out: - out["probe_n"], out["probe_s"] = n, probe.get("probe_s") - return out - # ---- translation quality (greedy, KV cache, MLX GPU) ---------------------- def _tokenizer(self): if not hasattr(self, "_tok"): from tokenizers import Tokenizer self._tok = Tokenizer.from_file(os.path.join(self.spec.tokenizer_dir, "tokenizer.json")) return self._tok - def translate(self, sources: list[str], max_new_tokens: int = 160) -> list[str]: - from chronos.data.corpus.shards import SFT_PROMPT_EN_ZH - tok = self._tokenizer() - end = tok.token_to_id("<|im_end|>") - self.model.eval() + def generate(self, prompt_ids: list[int], limit: int, stop_ids=()) -> list[int]: + """Greedy continuation with the KV cache (no sampling, no penalty).""" + stop = set(int(i) for i in stop_ids) + logits, _, cache = self.model(mx.array([prompt_ids], dtype=mx.int32)) out = [] - for src in sources: - prompt = f"<|im_start|>user\n{SFT_PROMPT_EN_ZH}{src}<|im_end|>\n<|im_start|>assistant\n" - ids = tok.encode(prompt, add_special_tokens=False).ids - src_len = len(tok.encode(src, add_special_tokens=False).ids) - limit = min(max_new_tokens, int(1.6 * src_len) + 16) # zh output ≲ 1.6× en tokens - logits, _, cache = self.model(mx.array([ids], dtype=mx.int32)) - gen = [] - for _ in range(limit): - nxt = int(mx.argmax(logits[0, -1]).item()) - if nxt == end: - break - gen.append(nxt) - logits, _, cache = self.model(mx.array([[nxt]], dtype=mx.int32), cache=cache) - out.append(tok.decode(gen, skip_special_tokens=True)) - self.model.train() + for _ in range(int(limit)): + nxt = int(mx.argmax(logits[0, -1]).item()) + if nxt in stop: + break + out.append(nxt) + logits, _, cache = self.model(mx.array([[nxt]], dtype=mx.int32), cache=cache) return out - def translation_eval(self, n: int) -> dict: - import sacrebleu - from chronos.data.corpus.evalsets import load_eval_sets - raw = self.spec.extra.get("raw_root") - if not raw: - return {} - pairs = load_eval_sets(raw, ["flores_devtest"]).get("flores_devtest", [])[:n] - if not pairs: - return {} - t0 = time.monotonic() - hyps = self.translate([en for en, _zh in pairs]) - refs = [zh for _en, zh in pairs] - bleu = sacrebleu.corpus_bleu(hyps, [refs], tokenize="zh") - chrf = sacrebleu.corpus_chrf(hyps, [refs]) + def write_samples(self, rows: list[dict]) -> None: + """Append example outputs to ``samples.jsonl`` (any keys; the monitor shows them).""" + if not rows: + return + phase = self.spec.phases[min(self.state["phase_index"], len(self.spec.phases) - 1)].name + stamp = time.strftime("%Y-%m-%dT%H:%M:%S") with open(os.path.join(self.spec.run_dir, "samples.jsonl"), "a", encoding="utf-8") as fh: - for (en, zh), hyp in list(zip(pairs, hyps))[:5]: - fh.write(json.dumps({"time": time.strftime("%Y-%m-%dT%H:%M:%S"), "phase": self.spec.phases[ - min(self.state["phase_index"], len(self.spec.phases) - 1)].name, "step": self.state["phase_step"], - "direction": "en_zh", "set": "flores_devtest", "src": en, "ref": zh, "hyp": hyp}, - ensure_ascii=False) + "\n") - return {"flores_devtest_n": len(pairs), "bleu_zh": round(bleu.score, 2), "chrf": round(chrf.score, 2), - "eval_s": round(time.monotonic() - t0, 1)} + for r in rows: + fh.write(json.dumps({"time": stamp, "phase": phase, "step": self.state["phase_step"], **r}, + ensure_ascii=False) + "\n") + + def pinned_modules(self) -> tuple[str, ...]: + """Modules imported at start so source edits during a long run cannot + change the code that evaluates it; extensions add theirs.""" + return ("tokenizers", "chronos.data.shards", "chronos.mlx.training.inspect_checkpoint") # ---- whole run ----------------------------------------------------------- def run(self): - # Pin every lazily-used module now so source edits during a multi-day - # run cannot change the code that evaluates it. - import sacrebleu # noqa: F401 - import tokenizers # noqa: F401 - import chronos.data.corpus.evalsets # noqa: F401 - import chronos.data.corpus.shards # noqa: F401 - import chronos.mlx.training.inspect_checkpoint # noqa: F401 + import importlib + for name in self.pinned_modules(): + importlib.import_module(name) try: return self._run() except KeyboardInterrupt: @@ -703,26 +794,83 @@ def _run(self): self._beat("evaluating") final = {"event": "final", "tokens_seen": self.state["tokens_seen"], "hours": round((time.monotonic() - start) / 3600, 2)} - if self.spec.final_eval_samples: - final.update(self.translation_eval(self.spec.final_eval_samples)) + phase = self.spec.phases[-1].name if self.spec.phases else "" + final.update(self._safe_task_eval(phase, final=True)) self._emit(final) self._beat("finished", final=final) self.log(f"[run] done: {json.dumps(final, ensure_ascii=False)}") return final -def main(argv=None) -> int: +PATH_KEYS = ("run_dir", "shards_dir", "tokenizer_dir", "init_checkpoint") + + +def load_spec(path: str, budget_hours: float | None = None, *, spec_cls=None, extra_path_keys=()) -> RunSpec: + """Read a RunSpec JSON. + + Relative paths (``PATH_KEYS`` and ``extra.``) resolve + against the recipe's folder, so a recipe can travel with its data. Keys + starting with ``_`` are comments. Any other unknown key is an error: it + usually belongs to a task extension's own spec class (``spec_cls``). + """ + spec_cls = spec_cls or RunSpec + base = os.path.dirname(os.path.abspath(path)) + with open(path, encoding="utf-8") as fh: + raw = {k: v for k, v in json.load(fh).items() if not k.startswith("_")} + + def resolve(v): + return v if not v or os.path.isabs(v) else os.path.normpath(os.path.join(base, os.path.expanduser(v))) + + for key in PATH_KEYS: + if raw.get(key): + raw[key] = resolve(raw[key]) + extra = dict(raw.get("extra") or {}) + for key in extra_path_keys: + if extra.get(key): + extra[key] = resolve(extra[key]) + raw["extra"] = extra + unknown = sorted(set(raw) - set(spec_cls.__dataclass_fields__)) + if unknown: + raise ValueError(f"{path}: unknown RunSpec keys {unknown}; task-specific keys need the task's " + f"runner that supplies its own RunSpec class") + raw["phases"] = [PhaseSpec(**p) for p in raw["phases"]] + spec = spec_cls(**raw) + if budget_hours is not None: + spec.budget_hours = float(budget_hours) + return spec + + +def main(argv=None, *, runner_cls=None, spec_cls=None, extra_path_keys=(), description=None, + prepare=None) -> int: + """CLI for a time-budgeted run; task extensions pass their own runner/spec classes + (``prepare(spec, args)`` may adjust the spec after loading).""" import argparse - parser = argparse.ArgumentParser(description="Time-budgeted Chronos MLX training run") - parser.add_argument("--spec", required=True, help="RunSpec JSON (see chronos/mlx/training/recipes)") + runner_cls = runner_cls or LongRun + parser = argparse.ArgumentParser(description=description or "Time-budgeted Chronos MLX training run") + parser.add_argument("--spec", required=True, help="RunSpec JSON (paths may be relative to it)") parser.add_argument("--budget-hours", type=float, default=None) + parser.add_argument("--max-steps", type=int, default=None, + help="smoke test: this many updates per phase, then the closing eval (no full budget)") + parser.add_argument("--run-dir", default=None, help="override the recipe's run_dir (e.g. a smoke-test folder)") args = parser.parse_args(argv) - raw = json.load(open(args.spec, encoding="utf-8")) - raw["phases"] = [PhaseSpec(**p) for p in raw["phases"]] - spec = RunSpec(**raw) - if args.budget_hours is not None: - spec.budget_hours = args.budget_hours - LongRun(spec, log=lambda m: print(m, flush=True)).run() + spec = load_spec(args.spec, args.budget_hours, spec_cls=spec_cls, extra_path_keys=extra_path_keys) + if args.run_dir: + spec.run_dir = os.path.abspath(args.run_dir) + if prepare is not None: + prepare(spec, args) + run = runner_cls(spec, log=lambda m: print(m, flush=True)) + if args.max_steps is None: + run.run() + return 0 + deadline = time.monotonic() + spec.budget_hours * 3600 + for pi in range(len(spec.phases)): + run.state.update(phase_index=pi, phase_step=0, phase_total=None, phase_budget_s=None, phase_wall_s=0.0) + run.run_phase(pi, deadline, max_steps=args.max_steps) + last = spec.phases[-1].name + n = min(run.eval_samples_for(last, final=True), 4) + if n > 0: # smoke: errors surface instead of being logged + run.model.eval() + print(json.dumps(run.task_eval(last, n, final=True), ensure_ascii=False), flush=True) return 0 diff --git a/chronos/mlx/training/telemetry.py b/chronos/mlx/training/telemetry.py index 673bd8e..b381dd7 100644 --- a/chronos/mlx/training/telemetry.py +++ b/chronos/mlx/training/telemetry.py @@ -144,10 +144,13 @@ def grid(i): return {"layers": layers, "weight_rms": grid(1), "grad_rms": grid(2)} if layers else {} -def routing_snapshot(model) -> dict | None: - """Per virtual layer: load share, mean router probability and entropy of - the last forward's dispatches (``[V, E]``), with ``L·`` - labels so recurrent iterations of one physical layer sit side by side.""" +def routing_snapshot(model, counts=None) -> dict | None: + """Per virtual layer: load share, mean router probability and entropy + (``[V, E]``), with ``L·`` labels so recurrent iterations + of one physical layer sit side by side. + + ``counts`` (``longrun.RoutingCounts``) = the whole step's real tokens; + without it, the last forward's dispatches (every position).""" from chronos.mlx.moe import ChronosMLXMOE probs, labels = [], [] for li, layer in enumerate(getattr(model, "layers", [])): @@ -156,21 +159,30 @@ def routing_snapshot(model) -> dict | None: for it, p in enumerate(moe.iteration_router_probs): probs.append(p) labels.append(f"L{li}·{it}") - if not probs: - return None top_k = int(model.config.num_experts_per_tok) - router = mx.stack(probs, axis=2) # [B, S, V, E] - E, V = router.shape[-1], router.shape[2] - flat = router.reshape(-1, V, E).astype(mx.float32) - top = mx.argpartition(-flat, kth=top_k - 1, axis=-1)[..., :top_k] - load = (top[..., None] == mx.arange(E)).astype(mx.float32).sum(-2).mean(0) / top_k - importance = flat.mean(0) - entropy = -(flat * mx.log(mx.maximum(flat, 1e-9))).sum(-1).mean(0) + if counts is not None and counts.load is not None and counts.tokens > 0: + n = float(counts.tokens) + load, importance, entropy = counts.load / (n * top_k), counts.importance / n, counts.entropy / n + E = int(load.shape[-1]) + if len(labels) != int(load.shape[0]): + labels = [f"V{v}" for v in range(int(load.shape[0]))] + source = "all micro-batches of the step, real tokens" + else: + if not probs: + return None + router = mx.stack(probs, axis=2) # [B, S, V, E] + E, V = router.shape[-1], router.shape[2] + flat = router.reshape(-1, V, E).astype(mx.float32) + top = mx.argpartition(-flat, kth=top_k - 1, axis=-1)[..., :top_k] + load = (top[..., None] == mx.arange(E)).astype(mx.float32).sum(-2).mean(0) / top_k + importance = flat.mean(0) + entropy = -(flat * mx.log(mx.maximum(flat, 1e-9))).sum(-1).mean(0) + source = "last micro-batch of the step" mx.eval(load, importance, entropy) r4 = lambda grid: [[round(v, 4) for v in row] for row in grid] return {"labels": labels, "experts": E, "top_k": top_k, "load": r4(load.tolist()), "importance": r4(importance.tolist()), "entropy": [round(v, 4) for v in entropy.tolist()], - "entropy_max": round(math.log(E), 4), "source": "last micro-batch of the step"} + "entropy_max": round(math.log(E), 4), "source": source} def code_fingerprint(root: str | None = None) -> dict: diff --git a/chronos/mlx/training/trainer.py b/chronos/mlx/training/trainer.py index d6d2b38..6c2e4df 100644 --- a/chronos/mlx/training/trainer.py +++ b/chronos/mlx/training/trainer.py @@ -1,6 +1,7 @@ """Minimal but real MLX-native six-stage training support.""" from __future__ import annotations +import math import os import time from dataclasses import dataclass @@ -24,6 +25,7 @@ from chronos.mlx.model import ChronosMLXModel from chronos.mlx.moe import ChronosMLXMOE + from chronos.mlx.multimodal import batch_modalities from chronos.mlx.training.io import mlx_state_to_torch from chronos.mlx.training.optim import MixedPrecisionAdamW except ModuleNotFoundError: @@ -33,6 +35,7 @@ tree_map = None ChronosMLXModel = None ChronosMLXMOE = None + batch_modalities = None mlx_state_to_torch = None @@ -44,6 +47,32 @@ def _ids_to_mx(x) -> mx.array: return mx.array(x).astype(mx.int32) +def _check_ids_in_vocab(ids, vocab_size: int, where: str) -> None: + """Raise instead of reading outside the embedding table. + + MLX does not bounds-check gathers, so an id >= vocab_size reads whatever memory follows the table + and crashes the process some of the time. Float arrays are not token ids and pass.""" + import numpy as np + arr = ids.detach().cpu().numpy() if isinstance(ids, torch.Tensor) else np.asarray(ids) + if arr.dtype.kind not in "iu" or arr.size == 0: + return + low, high = int(arr.min()), int(arr.max()) + if low < 0 or high >= int(vocab_size): + raise ValueError(f"{where}: token ids span [{low}, {high}] but the model's vocab_size is {int(vocab_size)}; " + "use the tokenizer the model was trained with") + + +def _check_batch_ids(batch, vocab_size: int, stage: str) -> None: + """Range-check the input ids of one stage batch (a tuple, a multimodal dict or a DPO pair).""" + if isinstance(batch, dict): + for key in ("input_ids", "x_chosen", "x_rejected"): + if key in batch: + _check_ids_in_vocab(batch[key], vocab_size, f"{stage} batch[{key!r}]") + elif isinstance(batch, (tuple, list)) and batch: + _check_ids_in_vocab(batch[0], vocab_size, f"{stage} batch ids") + + + def _f32(x: mx.array) -> mx.array: """FP32 view for loss math; a no-op when logits were born FP32.""" return x if x.dtype == mx.float32 else x.astype(mx.float32) @@ -60,6 +89,15 @@ def _masked_lm_loss(logits: mx.array, labels: mx.array) -> mx.array: return (losses * mask.astype(losses.dtype)).sum() / mx.maximum(mask.astype(mx.float32).sum(), 1.0) +def _masked_lm_loss_aligned(logits: mx.array, labels: mx.array) -> mx.array: + """Mean CE of labels already aligned with the logits (no shift); -100 = ignored.""" + flat_logits = _f32(logits.reshape(-1, logits.shape[-1])) + flat_labels = labels.reshape(-1) + mask = flat_labels != -100 + losses = nn.losses.cross_entropy(flat_logits, mx.where(mask, flat_labels, 0), reduction="none") + return (losses * mask).sum() / mx.maximum(mask.sum(), 1) + + def _gather_token_logprobs(logits: mx.array, labels: mx.array) -> mx.array: labels = labels.astype(mx.int32) logits = _f32(logits) @@ -108,14 +146,73 @@ def _first_iteration_router_probs(model) -> mx.array | None: return mx.stack(probs, axis=2) if probs else None -def _temporal_locality_loss(router_mean: mx.array) -> mx.array: +def _masked_mean(values: mx.array, mask: mx.array | None) -> mx.array: + """Mean of ``values`` over positions where ``mask`` (same shape, 1 = real) is set.""" + if mask is None: + return values.mean() + m = mask.astype(mx.float32) + return (values * m).sum() / mx.maximum(m.sum(), 1.0) + + +_PAIR_SEGMENTS: list = [None] # [B, S] document ids of the batch being regularized +_LOOKAHEAD_SEGMENTS: list = [None] # document ids for the lookahead terms (own switch) + + +def _pair_mask(token_mask: mx.array | None, k: int = 1, groups: int = 1) -> mx.array | None: + """``[B, S-k]``: positions t and t+k are both real tokens of one document. + + Documents come from ``_PAIR_SEGMENTS`` (set by ``_chronos_regularized_loss`` + when ``config.reset_router_at_documents``): temporal, locality and + lookahead terms then never pair tokens across a packed-row boundary. + ``groups`` > 1: the caller flattened that many routing groups into the + batch axis (``B*G`` rows), so the document ids are repeated to match.""" + seg = _PAIR_SEGMENTS[0] + if seg is not None and groups > 1: + seg = mx.repeat(seg, groups, axis=0) + if token_mask is None and seg is None: + return None + m = None + if token_mask is not None: + t = token_mask.astype(mx.float32) + m = t[:, :-k] * t[:, k:] + if seg is not None and seg.shape[1] > k: + same = (seg[:, :-k] == seg[:, k:]).astype(mx.float32) + m = same if m is None else m * same + return m + + +def _group_mask(token_mask: mx.array | None, groups: int) -> mx.array | None: + """Repeat a ``[B, S]`` mask for the ``B*G`` rows of ``_flatten_lookahead_groups``.""" + if token_mask is None or groups <= 1: + return token_mask + return mx.repeat(token_mask, groups, axis=0) + + +_TEMPORAL_SPAN: list = [0] # temporal_grad_span of the loss being built (0 = full chain) + + +def _span_detach(prev: mx.array) -> mx.array: + """The older side of every adjacent pair, stop-gradient at span boundaries. + + With ``temporal_grad_span`` = n the sequence is cut in blocks of n positions: inside a + block the older token keeps its gradient; the pair that straddles a block edge detaches + it, so no gradient chain runs across more than n steps.""" + n = int(_TEMPORAL_SPAN[0] or 0) + if n <= 0 or prev.shape[1] <= 1: + return prev + edge = (mx.arange(prev.shape[1]) % n) == (n - 1) + return mx.where(edge[None, :, None], mx.stop_gradient(prev), prev) + + +def _temporal_locality_loss(router_mean: mx.array, token_mask: mx.array | None = None) -> mx.array: if router_mean.shape[1] <= 1: return mx.zeros(()) - diff = router_mean[:, 1:, :] - router_mean[:, :-1, :] - return (diff * diff).sum(axis=-1).mean() + diff = router_mean[:, 1:, :] - _span_detach(router_mean[:, :-1, :]) + return _masked_mean((diff * diff).sum(axis=-1), _pair_mask(token_mask)) -def _router_locality_loss(router_mean: mx.array, num_experts_per_tok: int) -> mx.array: +def _router_locality_loss(router_mean: mx.array, num_experts_per_tok: int, + token_mask: mx.array | None = None) -> mx.array: if router_mean.shape[1] <= 1: return mx.zeros(()) B, _S, E = router_mean.shape @@ -125,19 +222,171 @@ def _router_locality_loss(router_mean: mx.array, num_experts_per_tok: int) -> mx target_ids = mx.argpartition(-prev, kth=top_k - 1, axis=-1)[:, :, :top_k] target_mask = (target_ids[..., None] == mx.arange(E)).astype(cur.dtype).sum(axis=-2) mass = (cur * target_mask).sum(axis=-1) - return (-mx.log(mx.maximum(mass / float(top_k), 1e-9))).mean() + return _masked_mean(-mx.log(mx.maximum(mass / float(top_k), 1e-9)), _pair_mask(token_mask)) + + +_MEMBERSHIP_CACHE: dict = {} + +def _cluster_membership(config) -> mx.array: + """``[E, C]`` one-hot of ``chronos.expert_clusters.training_clusters(config)`` (cached).""" + from chronos.expert_clusters import cluster_membership, resolve_cluster_count, training_clusters + e = int(config.num_experts) + key = (e, resolve_cluster_count(config)) + hit = _MEMBERSHIP_CACHE.get(key) + if hit is None: + hit = mx.array(cluster_membership(training_clusters(config), e), dtype=mx.float32) + _MEMBERSHIP_CACHE[key] = hit + return hit -def _load_balance_loss(router_4d: mx.array, num_experts_per_tok: int) -> mx.array: + +def _cluster_locality_loss(router_4d: mx.array, membership: mx.array, window: int = 0, + token_mask: mx.array | None = None) -> mx.array: + """MLX twin of ``chronos.model.temporal_loss.cluster_locality_loss``: ``1 − I(window; cluster)/log C``. + + ``token_mask`` ``[B, S]`` (1 = real token) drops right-padding: a window's + cluster distribution averages its real tokens only, and windows count in + proportion to them, so pad runs are neither a "domain" of their own nor + dilute the windows they share. ``None`` = every position is real. + """ + B, S, V, E = router_4d.shape + C = int(membership.shape[1]) + w = S if int(window or 0) <= 0 else min(int(window), S) + n = S // w + if C <= 1 or n <= 0: + return mx.zeros(()) + mass = (router_4d.astype(mx.float32).reshape(-1, E) @ membership).reshape(B, S, V, C) + mass = mass[:, : n * w].reshape(B, n, w, V, C) + + def entropy(p): + p = mx.maximum(p, 1e-9) + return -(p * mx.log(p)).sum(axis=-1) + + if token_mask is None: + pw = mass.mean(axis=(2, 3)).reshape(B * n, C) + mutual = entropy(pw.mean(axis=0)) - entropy(pw).mean() + return 1.0 - mutual / math.log(C) + m = token_mask[:, : n * w].astype(mx.float32).reshape(B, n, w) + count = m.sum(axis=2) # [B, n] real tokens per window + pw = ((mass * m[..., None, None]).sum(axis=2).mean(axis=2) + / mx.maximum(count, 1.0)[..., None]).reshape(B * n, C) + weight = (count / mx.maximum(count.sum(), 1.0)).reshape(B * n) # windows ∝ real tokens + marginal = (pw * weight[:, None]).sum(axis=0) + mutual = entropy(marginal) - (entropy(pw) * weight).sum() + return 1.0 - mutual / math.log(C) + + +def _segment_cluster_loss(router_4d: mx.array, membership: mx.array, segments, + token_mask: mx.array | None = None) -> mx.array: + """``1 − I(segment; cluster)/log C`` with documents as the unit (MLX twin of + ``chronos.model.temporal_loss.segment_cluster_loss``), written with static shapes so it traces + under ``mx.compile``. + + ``segments`` ``[B, S]`` comes from ``chronos.expert_clusters.segment_ids`` (NumPy) or + ``segment_ids_mx``: the token stream's own document separators, no label or task token. Ids stay + below ``S``, so ``row * S + id`` indexes ``B * S`` segment slots; unused slots have weight 0. Each + segment's cluster mass is pooled over its real tokens and every dispatch; segments weigh by + real-token count. A batch with a single segment gives 0, as in the Torch twin.""" + B, S, V, E = router_4d.shape + C = int(membership.shape[1]) + if C <= 1: + return mx.zeros(()) + seg = (segments if isinstance(segments, mx.array) else mx.array(segments)).astype(mx.int32) + slots = B * S + idx = (seg + (mx.arange(B, dtype=mx.int32) * S)[:, None]).reshape(-1) + mass = (router_4d.astype(mx.float32).reshape(-1, E) @ membership).reshape(B * S, V, C).mean(axis=1) + m = (mx.ones((B * S,), mx.float32) if token_mask is None + else token_mask.reshape(B * S).astype(mx.float32)) + total = mx.zeros((slots, C), mx.float32).at[idx].add(mass * m[:, None]) + count = mx.zeros((slots,), mx.float32).at[idx].add(m) + present = mx.zeros((slots,), mx.float32).at[idx].add(mx.ones((B * S,), mx.float32)) # padding counts + ps = total / mx.maximum(count, 1.0)[:, None] + weight = count / mx.maximum(count.sum(), 1.0) + + def entropy(p): + p = mx.maximum(p, 1e-9) + return -(p * mx.log(p)).sum(axis=-1) + + marginal = (ps * weight[:, None]).sum(axis=0) + mutual = entropy(marginal) - (entropy(ps) * weight).sum() + loss = 1.0 - mutual / math.log(C) + return mx.where((present > 0).sum() > 1, loss, mx.zeros(())) + + +def _cluster_objective(router_4d: mx.array, config, token_mask=None, input_ids=None) -> mx.array: + """The configured cluster-locality term: ``window`` (fixed token windows) + or ``segment`` (documents found from ``input_ids``; window form without them).""" + from chronos.expert_clusters import cluster_locality_mode, segment_ids_mx + window = int(getattr(config, "cluster_locality_window", 0) or 0) + membership = _cluster_membership(config) + if cluster_locality_mode(config) == "segment" and input_ids is not None: + return _segment_cluster_loss(router_4d, membership, segment_ids_mx(input_ids, chunk=window), token_mask) + return _cluster_locality_loss(router_4d, membership, window, token_mask) + + +def _recurrent_iteration_probs(model, config) -> mx.array | None: + """``[B, S, G, D, E]``: router probabilities of each recurrent layer at each loop iteration. + + None unless every recurrent layer dispatched the same number (>= 2) of times in the last forward.""" + start, groups = int(config.prelude_layers), int(config.recurrent_groups) + rows = [] + for layer in list(getattr(model, "layers", []))[start:start + groups]: + moe = getattr(layer, "mlp", None) + if not isinstance(moe, ChronosMLXMOE) or not moe.iteration_router_probs: + return None + rows.append(mx.stack(moe.iteration_router_probs, axis=2)) # [B, S, D, E] + if not rows or rows[0].shape[2] < 2 or any(r.shape[2] != rows[0].shape[2] for r in rows): + return None + return mx.stack(rows, axis=2) + + +def _iteration_mean_router_probs(model) -> mx.array | None: + """Per physical layer, router probabilities averaged over its loop iterations ``[B, S, L, E]`` + (lookahead teacher that covers every iteration; equals the step-0 routing for one-dispatch layers).""" + probs = [mx.stack(layer.mlp.iteration_router_probs, axis=0).mean(axis=0) for layer in getattr(model, "layers", []) + if isinstance(getattr(layer, "mlp", None), ChronosMLXMOE) and layer.mlp.iteration_router_probs] + return mx.stack(probs, axis=2) if probs else None + + +def _iteration_cluster_spread(probs5: mx.array, membership: mx.array, token_mask: mx.array | None = None) -> mx.array: + """Iteration-axis cluster locality: for each token and recurrent layer, the total variation between the + cluster-mass distribution of every loop iteration and the mean over its iterations, averaged. + + 0 = every iteration of a token routes into the same clusters (one cluster read serves them all); the + experts inside a cluster are free to differ per iteration. MLX twin of + ``chronos.model.temporal_loss.iteration_cluster_spread``.""" + B, S, G, D, E = probs5.shape + C = int(membership.shape[1]) + if D < 2 or C <= 1: + return mx.zeros(()) + mass = (probs5.astype(mx.float32).reshape(-1, E) @ membership).reshape(B, S, G, D, C) + spread = 0.5 * mx.abs(mass - mass.mean(axis=3, keepdims=True)).sum(axis=-1) # [B, S, G, D] + return _masked_mean(spread.mean(axis=(2, 3)), token_mask) + +def _load_balance_loss(router_4d: mx.array, num_experts_per_tok: int, + token_mask: mx.array | None = None) -> mx.array: + """Switch-style ``E · Σ load·importance`` per virtual layer, summed. + + ``token_mask`` ``[B, S]`` (1 = real token) restricts load and importance + to real tokens; ``None`` = every position counts (packed pretraining).""" B, S, L, E = router_4d.shape top_k = max(1, min(int(num_experts_per_tok or 1), E)) total = mx.zeros(()) + w = None + if token_mask is not None: + w = token_mask.reshape(B * S).astype(router_4d.dtype) + w = w / mx.maximum(w.sum(), 1.0) for li in range(L): scores = router_4d[:, :, li, :].reshape(B * S, E) topk_idx = mx.argpartition(-scores, kth=top_k - 1, axis=-1)[:, :top_k] selected = (topk_idx[..., None] == mx.arange(E)).astype(scores.dtype) - load = selected.mean(axis=0) # [K, E], matching the PyTorch trainer - total = total + (load * scores.mean(axis=0)).sum() * E + if w is None: + load = selected.mean(axis=0) # [K, E], matching the PyTorch trainer + importance = scores.mean(axis=0) + else: + load = (selected * w[:, None, None]).sum(axis=0) + importance = (scores * w[:, None]).sum(axis=0) + total = total + (load * importance).sum() * E return total @@ -167,8 +416,11 @@ def _lookahead_supervision_loss( lookahead_probs: mx.array | None, teacher_router_probs: mx.array | None, lookahead_steps: int, + token_mask: mx.array | None = None, ) -> mx.array: + groups = lookahead_probs.shape[3] if lookahead_probs is not None and lookahead_probs.ndim == 5 else 1 lookahead_probs, teacher_router_probs = _flatten_lookahead_groups(lookahead_probs, teacher_router_probs) + token_mask = _group_mask(token_mask, groups) if lookahead_probs is None: return mx.zeros(()) if teacher_router_probs is None: @@ -185,7 +437,8 @@ def _lookahead_supervision_loss( continue teacher_k = teacher[:, k:, :] pred_k = lookahead_probs[:, :-k, k, :].astype(mx.float32) - total = total + (-(teacher_k * mx.log(mx.maximum(pred_k, 1e-9))).sum(axis=-1)).mean() + total = total + _masked_mean(-(teacher_k * mx.log(mx.maximum(pred_k, 1e-9))).sum(axis=-1), + _pair_mask(token_mask, k, groups)) terms += 1 return total / max(terms, 1) @@ -195,8 +448,11 @@ def _lookahead_topk_hit_loss( teacher_router_probs: mx.array | None, lookahead_steps: int, num_experts_per_tok: int, + token_mask: mx.array | None = None, ) -> mx.array: + groups = lookahead_probs.shape[3] if lookahead_probs is not None and lookahead_probs.ndim == 5 else 1 lookahead_probs, teacher_router_probs = _flatten_lookahead_groups(lookahead_probs, teacher_router_probs) + token_mask = _group_mask(token_mask, groups) if lookahead_probs is None: return mx.zeros(()) if teacher_router_probs is None: @@ -217,7 +473,8 @@ def _lookahead_topk_hit_loss( target_ids = mx.argpartition(-teacher_k, kth=top_k - 1, axis=-1)[:, :, :top_k] target_mask = (target_ids[..., None] == mx.arange(E)).astype(pred_k.dtype).sum(axis=-2) hit_mass = (pred_k * target_mask).sum(axis=-1) - total = total + (-mx.log(mx.maximum(hit_mass / float(top_k), 1e-9))).mean() + total = total + _masked_mean(-mx.log(mx.maximum(hit_mass / float(top_k), 1e-9)), + _pair_mask(token_mask, k, groups)) terms += 1 return total / max(terms, 1) @@ -227,8 +484,11 @@ def _lookahead_union_loss( teacher_router_probs: mx.array | None, lookahead_steps: int, num_experts_per_tok: int, + token_mask: mx.array | None = None, ) -> mx.array: + groups = lookahead_probs.shape[3] if lookahead_probs is not None and lookahead_probs.ndim == 5 else 1 lookahead_probs, teacher_router_probs = _flatten_lookahead_groups(lookahead_probs, teacher_router_probs) + token_mask = _group_mask(token_mask, groups) if lookahead_probs is None: return mx.zeros(()) if teacher_router_probs is None: @@ -247,7 +507,8 @@ def _lookahead_union_loss( pred_union = lookahead_probs[:, :S - K, 1:K + 1, :].astype(mx.float32).max(axis=2) mass = (pred_union * union_target).sum(axis=-1) target_count = mx.maximum(union_target.sum(axis=-1), 1.0) - return (-mx.log(mx.maximum(mass / target_count, 1e-9))).mean() + # Union over t+1..t+K: position t counts when it and t+K are real (right padding). + return _masked_mean(-mx.log(mx.maximum(mass / target_count, 1e-9)), _pair_mask(token_mask, K, groups)) def _offload_training_metrics( @@ -334,7 +595,7 @@ def draft_exit_active(model, config) -> bool: return 1 <= int(getattr(config, "draft_exit_depth", 1)) < int(config.recurrent_depth) -def draft_exit_logits(model, input_ids, config): +def draft_exit_logits(model, input_ids, config, media=None): """Draft-depth FP32 logits, or None when the KL hook is off. Run *before* the full-depth forward: the full pass then owns the routing @@ -343,7 +604,7 @@ def draft_exit_logits(model, input_ids, config): if not draft_exit_active(model, config): return None logits, _lookahead, _cache = model(input_ids, logits_dtype=mx.float32, - recurrent_depth=int(config.draft_exit_depth)) + recurrent_depth=int(config.draft_exit_depth), **(media or {})) return logits @@ -360,6 +621,22 @@ def draft_exit_kl(draft_logits: mx.array, full_logits: mx.array, keep: mx.array return (kl * keep).sum() / mx.maximum(keep.sum(), 1.0) +def real_token_mask(labels: mx.array, *, aligned: bool = False) -> mx.array: + """``[B, S]`` bool: input positions holding real tokens of a right-padded batch. + + Padding carries label -100 after each row's last supervised token, so a + row's real tokens end at that token: ``labels[t]`` is token ``t`` itself + (``aligned=False``, HF convention, the loss shifts) or token ``t+1`` + (``aligned=True``, labels pre-shifted onto the logits). Prompt tokens + (-100 before the reply) stay real: they are routed context. Packed + pretraining (no -100) gives an all-true mask. + """ + labels = mx.array(labels) if not isinstance(labels, mx.array) else labels + pos = mx.arange(labels.shape[1]) + last = mx.max(mx.where(labels != -100, pos[None, :], -1), axis=1) + return pos[None, :] <= (last + (1 if aligned else 0))[:, None] + + def _shifted_keep(labels: mx.array) -> mx.array: """Logit t is supervised when label t+1 is not -100 (CE shift).""" nxt = labels[:, 1:] != -100 @@ -367,8 +644,36 @@ def _shifted_keep(labels: mx.array) -> mx.array: def _chronos_regularized_loss(model, base_loss, lookahead_probs, config, router_ref=None, metrics=None, - draft_kl=None): - """Return total loss and retain the actual weighted components for logging.""" + draft_kl=None, token_mask=None, input_ids=None): + """Return total loss and retain the actual weighted components for logging. + + ``token_mask`` ``[B, S]`` (1 = real token, 0 = right padding) keeps padding + out of every router regularizer; ``None`` = all positions are real. + ``input_ids`` ``[B, S]`` lets ``cluster_locality_mode="segment"`` find the + documents of the batch (without it the window form is used).""" + segments = look_segments = None + reset_router = bool(getattr(config, "reset_router_at_documents", False)) + reset_look = getattr(config, "reset_lookahead_at_documents", None) + reset_look = reset_router if reset_look is None else bool(reset_look) + if input_ids is not None and (reset_router or reset_look): + from chronos.expert_clusters import segment_ids_mx + docs = segment_ids_mx(input_ids) + segments = docs if reset_router else None + look_segments = docs if reset_look else None + _PAIR_SEGMENTS[0] = segments + _LOOKAHEAD_SEGMENTS[0] = look_segments + _TEMPORAL_SPAN[0] = int(getattr(config, "temporal_grad_span", 0) or 0) + try: + return _regularized_terms(model, base_loss, lookahead_probs, config, router_ref, metrics, + draft_kl, token_mask, input_ids) + finally: + _PAIR_SEGMENTS[0] = None + _LOOKAHEAD_SEGMENTS[0] = None + _TEMPORAL_SPAN[0] = 0 + + +def _regularized_terms(model, base_loss, lookahead_probs, config, router_ref, metrics, draft_kl, + token_mask, input_ids): object.__setattr__(model, "_last_lookahead_probs", lookahead_probs) terms = {"primary_loss": base_loss.astype(mx.float32)} def add(name, coefficient, value): @@ -387,20 +692,34 @@ def add(name, coefficient, value): if router is not None: router = router.astype(mx.float32) top_k = config.num_experts_per_tok - add("balance_loss", config.lambda_balance, _load_balance_loss(router, top_k)) + add("balance_loss", config.lambda_balance, _load_balance_loss(router, top_k, token_mask)) + if float(getattr(config, "lambda_cluster_locality", 0.0) or 0.0) > 0.0: + add("cluster_locality_loss", config.lambda_cluster_locality, + _cluster_objective(router, config, token_mask, input_ids)) + if float(getattr(config, "lambda_iteration_cluster", 0.0) or 0.0) > 0.0: + iteration_probs = _recurrent_iteration_probs(model, config) + if iteration_probs is not None: + add("iteration_cluster_loss", config.lambda_iteration_cluster, + _iteration_cluster_spread(iteration_probs, _cluster_membership(config), token_mask)) if router.shape[1] > 1: mean = router.mean(axis=2) - add("temporal_loss", config.lambda_temporal, _temporal_locality_loss(mean)) - add("locality_loss", config.lambda_router_locality, _router_locality_loss(mean, top_k)) - if lookahead_probs is not None and config.lambda_lookahead > 0 and config.lookahead_steps > 0: - teacher = _lookahead_teacher(_first_iteration_router_probs(model).astype(mx.float32), - lookahead_probs, config) - add("lookahead_loss", config.lambda_lookahead, - _lookahead_supervision_loss(lookahead_probs, teacher, config.lookahead_steps)) - add("lookahead_topk_loss", config.lambda_lookahead_topk, - _lookahead_topk_hit_loss(lookahead_probs, teacher, config.lookahead_steps, top_k)) - add("lookahead_union_loss", config.lambda_lookahead_union, - _lookahead_union_loss(lookahead_probs, teacher, config.lookahead_steps, top_k)) + add("temporal_loss", config.lambda_temporal, _temporal_locality_loss(mean, token_mask)) + add("locality_loss", config.lambda_router_locality, _router_locality_loss(mean, top_k, token_mask)) + saved_pairs = _PAIR_SEGMENTS[0] + _PAIR_SEGMENTS[0] = _LOOKAHEAD_SEGMENTS[0] # lookahead keeps its own document rule + try: + if lookahead_probs is not None and config.lambda_lookahead > 0 and config.lookahead_steps > 0: + source = (_iteration_mean_router_probs(model) if getattr(config, "lookahead_teacher_scope", "first") == "iterations" + else _first_iteration_router_probs(model)) + teacher = _lookahead_teacher(source.astype(mx.float32), lookahead_probs, config) + add("lookahead_loss", config.lambda_lookahead, + _lookahead_supervision_loss(lookahead_probs, teacher, config.lookahead_steps, token_mask)) + add("lookahead_topk_loss", config.lambda_lookahead_topk, + _lookahead_topk_hit_loss(lookahead_probs, teacher, config.lookahead_steps, top_k, token_mask)) + add("lookahead_union_loss", config.lambda_lookahead_union, + _lookahead_union_loss(lookahead_probs, teacher, config.lookahead_steps, top_k, token_mask)) + finally: + _PAIR_SEGMENTS[0] = saved_pairs add("anchor_loss", 1, _router_kl_anchor(mean, router_ref, config.lambda_router_anchor)) if draft_kl is not None: add("draft_exit_kl", getattr(config, "draft_exit_kl_coef", 0.0), draft_kl) @@ -410,13 +729,62 @@ def add(name, coefficient, value): return loss -def _ce_stage_loss(model, input_ids, labels): - draft = draft_exit_logits(model, input_ids, model.config) - logits, lookahead, _cache = model(input_ids, logits_dtype=mx.float32) - base = _masked_lm_loss(logits, labels) +def lm_ce(model, input_ids, labels, *, aligned: bool = False, need_logits: bool = False, **forward_kw): + """Forward + LM cross-entropy: ``(ce, lookahead, logits_or_None)``. + + ``config.ce_chunk_size`` > 0 (and no caller needing the full logits) + computes the loss in row chunks from the final hidden state + (``chronos.mlx.chunked_ce``): no ``[B, S, V]`` tensor exists. The value + equals the full FP32 path. ``aligned``: labels already sit on the + logits (no causal shift). ``config.document_masking`` keeps attention inside + each packed document (``segments`` from the separator tokens).""" + from chronos.mlx.chunked_ce import ce_chunk_for, chunked_lm_loss, chunked_shifted_lm_loss + chunk = 0 if need_logits else ce_chunk_for(model.config, int(input_ids.shape[0]) * int(input_ids.shape[1])) + if getattr(model.config, "document_masking", False) and "segments" not in forward_kw: + from chronos.expert_clusters import segment_ids_mx + # Varlen packing: queries attend only inside their own document; the + # separator token closes the document it ends (segment_ids rule). + forward_kw["segments"] = segment_ids_mx(input_ids) + if chunk: + hidden, lookahead, _cache = model(input_ids, return_hidden=True, **forward_kw) + loss_fn = chunked_lm_loss if aligned else chunked_shifted_lm_loss + return loss_fn(hidden, model.head_weight(), labels, chunk=chunk), lookahead, None + logits, lookahead, _cache = model(input_ids, logits_dtype=mx.float32, **forward_kw) + if aligned: + return _masked_lm_loss_aligned(logits, labels), lookahead, logits + return _masked_lm_loss(logits, labels), lookahead, logits + + +def _ce_stage_loss(model, input_ids, labels, modality_inputs=None, modality_mask=None): + media = {"modality_inputs": modality_inputs, "modality_mask": modality_mask} if modality_inputs else None + draft = draft_exit_logits(model, input_ids, model.config, media) + base, lookahead, logits = lm_ce(model, input_ids, labels, + need_logits=draft is not None, **(media or {})) draft_kl = None if draft is None else draft_exit_kl(draft, logits, _shifted_keep(labels)) return _chronos_regularized_loss(model, base, lookahead, model.config, metrics={"ce": base, "primary": base}, - draft_kl=draft_kl) + draft_kl=draft_kl, token_mask=real_token_mask(labels), input_ids=input_ids) + + +def _tile_media(batch, copies: int) -> dict: + """Model kwargs with the batch's media repeated ``copies`` times along the + batch axis (chosen‖rejected pairs, GRPO groups); ``{}`` for text-only.""" + media = batch.get("modality_inputs") if isinstance(batch, dict) else None + if not media: + return {} + from chronos.mlx.multimodal import _mx + tiled = {k: mx.concatenate([_mx(v)] * copies, axis=0) if copies > 1 else _mx(v) + for k, v in media.items() if v is not None} + mask = batch.get("modality_mask") + if mask is not None: + mask = _mx(mask, mx.float32) + mask = mx.concatenate([mask] * copies, axis=0) if copies > 1 else mask + return {"modality_inputs": tiled, "modality_mask": mask} + + +def _frozen_media(frozen, media: dict) -> dict: + """A text-only reference/teacher is a valid source for a multimodal + student (Torch distill parity): pass media only if it can fuse them.""" + return media if media and getattr(frozen, "multimodal_fusion", None) is not None else {} def _dpo_stage_loss(model, reference, batch, beta: float = 0.1, router_ref=None): @@ -427,12 +795,13 @@ def _dpo_stage_loss(model, reference, batch, beta: float = 0.1, router_ref=None) m_c = _ids_to_mx(batch["mask_chosen"]) m_r = _ids_to_mx(batch["mask_rejected"]) x = mx.concatenate([x_c, x_r], axis=0) - logits, lookahead, _cache = model(x, logits_dtype=mx.float32) + media = _tile_media(batch, 2) # chosen and rejected answer the same prompt media + logits, lookahead, _cache = model(x, logits_dtype=mx.float32, **media) B = x_c.shape[0] lp_c = _aligned_sequence_logprob(logits[:B], y_c, m_c) lp_r = _aligned_sequence_logprob(logits[B:], y_r, m_r) if reference is not None: - ref_logits, _ref_lp, _ref_cache = reference(x, logits_dtype=mx.float32) + ref_logits, _ref_lp, _ref_cache = reference(x, logits_dtype=mx.float32, **_frozen_media(reference, media)) ref_c = mx.stop_gradient(_aligned_sequence_logprob(ref_logits[:B], y_c, m_c)) ref_r = mx.stop_gradient(_aligned_sequence_logprob(ref_logits[B:], y_r, m_r)) base = -mx.mean(nn.log_sigmoid(beta * ((lp_c - lp_r) - (ref_c - ref_r)))) @@ -449,7 +818,7 @@ def _orpo_stage_loss(model, batch, beta: float = 0.1, lambda_or: float = 0.1, ro m_c = _ids_to_mx(batch["mask_chosen"]) m_r = _ids_to_mx(batch["mask_rejected"]) x = mx.concatenate([x_c, x_r], axis=0) - logits, lookahead, _cache = model(x, logits_dtype=mx.float32) + logits, lookahead, _cache = model(x, logits_dtype=mx.float32, **_tile_media(batch, 2)) B = x_c.shape[0] lp_c = _aligned_sequence_logprob(logits[:B], y_c, m_c, average=True) lp_r = _aligned_sequence_logprob(logits[B:], y_r, m_r, average=True) @@ -473,9 +842,13 @@ def _distill_stage_loss( alpha: float = 0.7, temperature: float = 4.0, router_ref=None, + modality_inputs=None, + modality_mask=None, ): - logits, lookahead, _cache = model(input_ids, logits_dtype=mx.float32) - t_logits, _tlp, _tcache = teacher(teacher_input_ids if teacher_input_ids is not None else input_ids, logits_dtype=mx.float32) + media = {"modality_inputs": modality_inputs, "modality_mask": modality_mask} if modality_inputs else {} + logits, lookahead, _cache = model(input_ids, logits_dtype=mx.float32, **media) + t_logits, _tlp, _tcache = teacher(teacher_input_ids if teacher_input_ids is not None else input_ids, + logits_dtype=mx.float32, **_frozen_media(teacher, media)) V = min(logits.shape[-1], t_logits.shape[-1]) S = min(logits.shape[1], t_logits.shape[1]) logits_kd = logits[:, :S, :V] @@ -489,7 +862,9 @@ def _distill_stage_loss( kd = (temperature * temperature) * (kd_tok * mask).sum() / mx.maximum(mask.sum(), 1.0) ce = _masked_lm_loss(logits, labels) base = alpha * kd + (1.0 - alpha) * ce - return _chronos_regularized_loss(model, base, lookahead, model.config, router_ref=router_ref, metrics={"primary": kd, "secondary": ce, "ce": ce}) + return _chronos_regularized_loss(model, base, lookahead, model.config, router_ref=router_ref, + metrics={"primary": kd, "secondary": ce, "ce": ce}, + token_mask=real_token_mask(labels)) def _fit_teacher_input(ids: mx.array, teacher_vocab_size: int) -> mx.array: @@ -500,7 +875,8 @@ def _grpo_stage_loss(model, reference, batch, beta: float = 0.04, router_ref=Non ids = _ids_to_mx(batch["ids"]) response_mask = mx.array(batch["response_mask"]).astype(mx.float32) advantages = mx.array(batch["advantages"]).astype(mx.float32) - logits, lookahead, _cache = model(ids, logits_dtype=mx.float32) + media = _tile_media(batch, int(ids.shape[0])) # one prompt's media for every trajectory + logits, lookahead, _cache = model(ids, logits_dtype=mx.float32, **media) lp_tok = _shifted_token_logprobs(logits, ids) mask = response_mask[:, 1:] seq_lp = (lp_tok * mask).sum(axis=1) / mx.maximum(mask.sum(axis=1), 1.0) @@ -508,7 +884,7 @@ def _grpo_stage_loss(model, reference, batch, beta: float = 0.04, router_ref=Non kl = mx.zeros((), dtype=logits.dtype) if reference is not None: - ref_logits, _ref_lp, _ref_cache = reference(ids, logits_dtype=mx.float32) + ref_logits, _ref_lp, _ref_cache = reference(ids, logits_dtype=mx.float32, **_frozen_media(reference, media)) ref_lp_tok = mx.stop_gradient(_shifted_token_logprobs(ref_logits, ids)) log_ratio = ref_lp_tok - lp_tok kl = ((mx.exp(log_ratio) - log_ratio - 1.0) * mask).sum() / mx.maximum(mask.sum(), 1.0) @@ -519,13 +895,17 @@ def _grpo_stage_loss(model, reference, batch, beta: float = 0.04, router_ref=Non def _capture_router_ref(model, batch, stage: str) -> mx.array | None: if stage in {"pretrain", "grpo"}: return None + media, media_mask = None, None if stage in {"sft", "distill"}: - ids = _ids_to_mx(batch[0]) + raw_ids, _labels, media, media_mask = batch_modalities(batch) + ids = _ids_to_mx(raw_ids) elif stage in {"dpo", "orpo"}: ids = mx.concatenate([_ids_to_mx(batch["x_chosen"]), _ids_to_mx(batch["x_rejected"])], axis=0) + tiled = _tile_media(batch, 2) + media, media_mask = tiled.get("modality_inputs"), tiled.get("modality_mask") else: return None - _logits, _lookahead, _cache = model(ids) + _logits, _lookahead, _cache = model(ids, modality_inputs=media, modality_mask=media_mask) router_4d = _collect_router_probs(model) if router_4d is None: return None @@ -541,13 +921,38 @@ def _sample_next(logits: mx.array, temperature: float) -> mx.array: return mx.random.categorical(mx.log(probs + 1e-9)).astype(mx.int32) -def _rollout_one(model, prompt_ids: mx.array, max_gen_len: int, temperature: float, eos_token_id: int | None) -> tuple[mx.array, list[int]]: +def _encoded_media(model, media: dict) -> dict: + """Rollout kwargs with raw image/audio encoded once into ``*_embeds``. + + Every decode step re-applies the fusion (Torch ``generate`` parity); the + encoder output is constant, so it is computed once and passed through + the pre-encoded path (same tokens, same offsets, same validity).""" + if not media: + return {} + fusion = getattr(model, "multimodal_fusion", None) + inputs = dict(media["modality_inputs"]) + if fusion is not None: + from chronos.mlx.multimodal import _mx + for name, encoder in (("image", fusion.image_encoder), ("audio", fusion.audio_encoder)): + raw = inputs.get(name) + if raw is None or encoder is None or inputs.get(f"{name}_embeds") is not None: + continue + inputs.pop(name) + inputs[f"{name}_embeds"] = mx.stop_gradient(encoder(_mx(raw, mx.float32))) + mask = inputs.pop(f"{name}_mask", None) + if mask is not None: + inputs[f"{name}_embeds_mask"] = mask + return {"modality_inputs": inputs, "modality_mask": media.get("modality_mask")} + + +def _rollout_one(model, prompt_ids: mx.array, max_gen_len: int, temperature: float, eos_token_id: int | None, + media: dict | None = None) -> tuple[mx.array, list[int]]: ids = prompt_ids cache = None generated: list[int] = [] for _ in range(max(1, int(max_gen_len))): token_in = ids if cache is None else ids[:, -1:] - logits, _lookahead, cache = model(token_in, cache=cache) + logits, _lookahead, cache = model(token_in, cache=cache, **(media or {})) next_id = _sample_next(logits[:, -1, :], temperature).reshape(1, 1) mx.eval(next_id) tok = int(next_id.item()) @@ -559,7 +964,28 @@ def _rollout_one(model, prompt_ids: mx.array, max_gen_len: int, temperature: flo return ids, generated -def _build_grpo_batch(model, prompt: str, tokenizer, reward_fn, args) -> dict: +def _grpo_prompt_media(item, args): + """``(prompt_text, media)`` for a GRPO prompt: a string, or the + ``{"prompt", "record"}`` dict of ``load_grpo_prompt_records`` (its + image/audio resolved here, once per step, with the dataset loaders).""" + if not isinstance(item, dict): + return str(item), None + from chronos.data.flexible_dataset import record_media + get = (lambda k, d: getattr(args, k, d)) if args is not None else (lambda _k, d: d) + found = record_media(item.get("record") or {}, image_size=int(get("image_size", 224)), + audio_sample_rate=int(get("audio_sample_rate", 16000)), + max_audio_seconds=float(get("max_audio_seconds", 30.0)), + media_error_policy=str(get("media_error_policy", "warn"))) + if found is None: + return str(item["prompt"]), None + media, mask = found + batched = {k: v.unsqueeze(0) for k, v in media.items()} # one prompt → batch of 1 + return str(item["prompt"]), {"modality_inputs": batched, "modality_mask": mask.unsqueeze(0)} + + +def _build_grpo_batch(model, prompt, tokenizer, reward_fn, args) -> dict: + prompt, media = _grpo_prompt_media(prompt, args) + rollout_media = _encoded_media(model, media) rendered = tokenizer.apply_chat_template( [{"role": "user", "content": prompt}], tokenize=False, @@ -571,6 +997,7 @@ def _build_grpo_batch(model, prompt: str, tokenizer, reward_fn, args) -> dict: temperature = float(getattr(args, "temperature", 1.0) if args is not None else 1.0) enc = tokenizer(rendered, return_tensors="pt", truncation=True, max_length=max_seq_len) prompt_ids = _ids_to_mx(enc.input_ids) + _check_ids_in_vocab(prompt_ids, int(model.config.vocab_size), "grpo prompt (tokenized with the tokenizer bundled in chronos.deps)") prompt_len = int(prompt_ids.shape[1]) trajectories = [] rewards = [] @@ -581,6 +1008,7 @@ def _build_grpo_batch(model, prompt: str, tokenizer, reward_fn, args) -> dict: max_gen_len=max_gen_len, temperature=temperature, eos_token_id=tokenizer.eos_token_id, + media=rollout_media, ) trajectories.append(full_ids) rewards.append(float(reward_fn(prompt, response_tokens, tokenizer))) @@ -599,11 +1027,14 @@ def _build_grpo_batch(model, prompt: str, tokenizer, reward_fn, args) -> dict: denom = mx.maximum(mx.sqrt(((adv * adv).mean())), 1e-6) advantages = adv / denom mx.eval(advantages) - return { + out = { "ids": ids_rows, "response_mask": mask_rows, "advantages": advantages.tolist(), } + if media: # the policy update re-encodes (encoder gradients), tiled per trajectory + out.update(media) + return out @dataclass @@ -886,14 +1317,17 @@ def _save_checkpoint(reason: str) -> None: def loss_fn(m, batch): if stage in {"pretrain", "sft"}: - ids, labels = batch + ids, labels, media, media_mask = batch_modalities(batch) + if media: + return _ce_stage_loss(m, _ids_to_mx(ids), _ids_to_mx(labels), + modality_inputs=media, modality_mask=media_mask) return _ce_stage_loss(m, _ids_to_mx(ids), _ids_to_mx(labels)) if stage == "dpo": return _dpo_stage_loss(m, reference, batch, beta=beta, router_ref=router_ref) if stage == "orpo": return _orpo_stage_loss(m, batch, beta=beta, lambda_or=lambda_or, router_ref=router_ref) if stage == "distill": - ids, labels = batch + ids, labels, media, media_mask = batch_modalities(batch) ids = _ids_to_mx(ids) labels = _ids_to_mx(labels) teacher_vocab = int(getattr(getattr(teacher, "config", config), "vocab_size", config.vocab_size)) @@ -906,12 +1340,30 @@ def loss_fn(m, batch): alpha=alpha, temperature=temperature, router_ref=router_ref, + modality_inputs=media, + modality_mask=media_mask, ) if stage == "grpo": return _grpo_stage_loss(m, reference, batch, beta=beta, router_ref=router_ref) raise ValueError(f"unknown MLX stage: {stage}") - grad_fn = nn.value_and_grad(model, loss_fn) + eager_grad = nn.value_and_grad(model, loss_fn) + text_grad = None + if stage in {"pretrain", "sft"}: + # Text batches take the compiled micro step (``CHRONOS_MLX_COMPILE``, + # default auto); media batches and other stages stay eager. + from chronos.mlx.training.compiled import make_grad_fn + text_grad = make_grad_fn(model, lambda m, ids, labels: _ce_stage_loss(m, ids, labels), + mode=getattr(args, "mlx_compile", None) if args is not None else None, + log=print) + + def grad_fn(m, batch): + if text_grad is not None: + ids, labels, media, _mask = batch_modalities(batch) + if not media: + return text_grad(m, _ids_to_mx(ids), _ids_to_mx(labels)) + return eager_grad(m, batch) + _emit({ "event": "start", "stage": stage, @@ -980,9 +1432,11 @@ def evaluate_validation(epoch): was_training = model.training model.eval() try: - for ids, labels in validation_loader: + for vbatch in validation_loader: + ids, labels, media, media_mask = batch_modalities(vbatch) labels = _ids_to_mx(labels) - logits, _, _ = model(_ids_to_mx(ids), logits_dtype=mx.float32) + logits, _, _ = model(_ids_to_mx(ids), logits_dtype=mx.float32, + modality_inputs=media, modality_mask=media_mask) ce = _masked_lm_loss(logits, labels) count = mx.sum(labels[:, 1:] != -100) mx.eval(ce, count) @@ -1004,6 +1458,7 @@ def evaluate_validation(epoch): for batch in data_iter: if _should_stop(): break + _check_batch_ids(batch, int(model.config.vocab_size), stage) if router_ref is None and stage in {"sft", "dpo", "orpo", "distill"}: router_ref = _capture_router_ref(model, batch, stage) train_batch = batch @@ -1012,7 +1467,7 @@ def evaluate_validation(epoch): break train_batch = _build_grpo_batch( model, - str(batch), + batch if isinstance(batch, dict) else str(batch), tokenizer, reward_fn, args, @@ -1024,7 +1479,8 @@ def evaluate_validation(epoch): # supervised-token count are materialised by one device sync. finite_check = _tree_finite_check((loss, grads)) candidate = _add_grads(pending_grads, grads) - n_supervised = mx.sum(_ids_to_mx(train_batch[1])[:, 1:] != -100) if supervised else None + n_supervised = (mx.sum(_ids_to_mx(batch_modalities(train_batch)[1])[:, 1:] != -100) + if supervised else None) mx.eval(loss, finite_check, candidate, *([n_supervised] if supervised else [])) steps += 1 finite = bool(finite_check.item()) diff --git a/chronos/model/checkpoint.py b/chronos/model/checkpoint.py index a2717e6..4b3e22f 100644 --- a/chronos/model/checkpoint.py +++ b/chronos/model/checkpoint.py @@ -103,7 +103,8 @@ def resolve_checkpoint_tokenizer(checkpoint_path: str | None = None, explicit: s 1. ``explicit``; 2. ``/tokenizer`` (bundle layout); 3. the ``tokenizer.path`` recorded in the sidecar config; - 4. the minimind tokenizer, only when ``fallback`` is set. + 4. the bundled legacy 6400-token tokenizer (``chronos.deps.get_tokenizer_path``), + only when ``fallback`` is set. A path that exists but holds no ``tokenizer.json`` raises an error. It is never silently skipped, because a wrong vocabulary corrupts training without failing. @@ -231,6 +232,10 @@ def read_checkpoint_config(checkpoint_path: str) -> tuple[dict, str | None]: "layer_aware_lookahead": False, "layer_aware_cache": False, }) + if "lambda_cluster_locality" not in cfg: + # Saved before the cluster-locality field existed: those weights were + # trained without the constraint (the field defaults on since 0.3.1). + cfg["lambda_cluster_locality"] = 0.0 return cfg, path @@ -395,6 +400,9 @@ def config_dict_for_checkpoint( cfg.update(sniffed) sources.append(f"{checkpoint_path} (tensor shapes)") + # How the weights were trained is a property of the checkpoint: a project + # config must not fill it in (0.0 would otherwise count as "missing"). + trained_lambda = cfg.get("lambda_cluster_locality") project_cfg, project_path = read_project_config(project_config_path) if project_cfg: for key, value in project_cfg.items(): @@ -403,6 +411,8 @@ def config_dict_for_checkpoint( if key not in cfg or cfg.get(key) in (None, "", 0): cfg[key] = value sources.append(project_path or project_config_path or "chronos_config.json") + if trained_lambda is not None: + cfg["lambda_cluster_locality"] = trained_lambda if overrides: for key, value in overrides.items(): diff --git a/chronos/model/config.py b/chronos/model/config.py index 6e96663..cf2e214 100644 --- a/chronos/model/config.py +++ b/chronos/model/config.py @@ -1,12 +1,9 @@ -import sys -import chronos.deps # ensure minimind on sys.path +from chronos.model.kernel import ChronosBaseConfig -from model.model_minimind import MiniMindConfig - -class ChronosConfig(MiniMindConfig): +class ChronosConfig(ChronosBaseConfig): """ - Extends MiniMindConfig with Project Chronos-specific fields: + Extends ChronosBaseConfig with Project Chronos-specific fields: - lookahead_steps: how many future token steps to predict expert routing for - num_shared_experts: experts always resident in VRAM as fallback - lambda_balance / lambda_temporal: loss coefficients @@ -51,6 +48,14 @@ def __init__(self, **kwargs): self.recurrent_dt_init: float = kwargs.pop("recurrent_dt_init", 0.25) self.recurrent_dt_min: float = kwargs.pop("recurrent_dt_min", 0.05) self.recurrent_dt_max: float = kwargs.pop("recurrent_dt_max", 1.0) + # Map the learned per-group raw parameter to dt in [dt_min, dt_max]: + # "clamp" (default) = clip(raw, dt_min, dt_max), the historical behaviour, exact for existing checkpoints, + # but the gradient is 0 below dt_min and on both bounds (a collapsed dt cannot recover). + # "sigmoid" = dt_min + (dt_max - dt_min) * sigmoid(raw): gradient positive everywhere, so dt can move back. + # The stored scalar is the logit; the init inverts the sigmoid so dt at step 0 equals recurrent_dt_init. + self.recurrent_dt_param: str = str(kwargs.pop("recurrent_dt_param", "clamp")) + if self.recurrent_dt_param not in ("clamp", "sigmoid"): + raise ValueError("recurrent_dt_param must be 'clamp' or 'sigmoid'") # v3 recurrent attention contract (see config_schema.resolve_*): # shared_first | per_iteration | first_only. An explicit legacy # ``recurrent_latent_refinement`` without a mode keeps v2 meaning. @@ -66,6 +71,30 @@ def __init__(self, **kwargs): if mode not in ("shared_first", "per_iteration", "first_only"): raise ValueError(f"unknown recurrent_attention_mode {mode!r}") self.recurrent_attention_mode: str = mode + # Loop order: ``layer`` repeats each recurrent layer ``depth`` times in a + # row (A A B B ...); ``block`` repeats the whole group of layers + # (A B A B ...), so iteration 0 is an ordinary depth-1 forward pass. + order = str(kwargs.pop("recurrent_order", "layer") or "layer").lower() + if order not in ("layer", "block"): + raise ValueError(f"unknown recurrent_order {order!r}") + self.recurrent_order: str = order + # Graded top-k: loop iterations after the first route to this many experts per token + # (0 = the full num_experts_per_tok); the shared expert always runs. Iteration 0 keeps the full top-k. + later = int(kwargs.pop("recurrent_later_topk", 0) or 0) + if later < 0: + raise ValueError(f"recurrent_later_topk must be >= 0, got {later}") + self.recurrent_later_topk: int = later + # Prefix blocks: in block order, loop iterations after the first run only the first N recurrent layers of + # the block (0 = all). Cost scales with the number of layer calls, so this cuts time and expert pages. + # Needs a depth-independent cache (shared_first / first_only): a skipped layer has no later KV slot. + later_groups = int(kwargs.pop("recurrent_later_groups", 0) or 0) + if later_groups < 0: + raise ValueError(f"recurrent_later_groups must be >= 0, got {later_groups}") + if later_groups and order != "block": + raise ValueError("recurrent_later_groups needs recurrent_order='block'") + if later_groups and mode == "per_iteration": + raise ValueError("recurrent_later_groups needs recurrent_attention_mode shared_first or first_only") + self.recurrent_later_groups: int = later_groups # Keep the legacy flag coherent for estimator/export consumers. self.recurrent_latent_refinement = mode == "first_only" # Execution/training policy for shared recurrent blocks. ``fixed`` @@ -94,6 +123,58 @@ def __init__(self, **kwargs): self.optimizer_page_dir: str = kwargs.pop("optimizer_page_dir", "./optimizer_pages") self.page_size_mb: int = kwargs.pop("page_size_mb", 64) self.activation_checkpointing: bool = kwargs.pop("activation_checkpointing", False) + # Long-context training (0.3.2a1). ce_chunk_size > 0 computes the LM + # loss in row chunks from the final hidden state, never building the + # [B, S, V] logits (0 = full logits, the historical path). + self.ce_chunk_size: int = int(kwargs.pop("ce_chunk_size", 0) or 0) + # attention_block_size > 0 runs MLX attention over long multi-row + # queries in blocks that read only their visible keys (no [S, T] mask; + # SWA costs O(S * window)). Exact; 0 = one fused call (historical). + self.attention_block_size: int = int(kwargs.pop("attention_block_size", 0) or 0) + # Packed rows: when True, the temporal / router-locality / lookahead + # regularizers drop token pairs that straddle a document separator, + # so no routing penalty links two unrelated documents. + self.reset_router_at_documents: bool = bool(kwargs.pop("reset_router_at_documents", False)) + # Packed rows: attention stays inside each document (separator-delimited). + self.document_masking: bool = bool(kwargs.pop("document_masking", False)) + # Which blocks are recomputed when activation_checkpointing is on: + # "all", "mla" (global-attention blocks), "swa", "alternate" (every second + # block). Selective policies trade some memory for less recompute time. + self.recompute_policy: str = str(kwargs.pop("recompute_policy", "all") or "all").lower() + if self.recompute_policy not in ("all", "mla", "swa", "alternate"): + raise ValueError(f"unknown recompute_policy {self.recompute_policy!r}") + # What activation_checkpointing recomputes: "block" (a whole block) or "mlp" (only the + # MoE/FFN of each block: most saved activations, none of the quadratic attention). + # MLX only; recompute_policy applies to scope=block. + self.recompute_scope: str = str(kwargs.pop("recompute_scope", "block") or "block").lower() + if self.recompute_scope not in ("block", "mlp"): + raise ValueError(f"unknown recompute_scope {self.recompute_scope!r}") + # MLA training with attention_block_size: keep only the latent c_kv and rebuild K and V + # per attention block, in both passes (no [B, T, nKV, d] K/V tensors). Exact. + self.mla_upproj_recompute: bool = bool(kwargs.pop("mla_upproj_recompute", False)) + # MoE sparse dispatch in chunks of this many tokens, each recomputed in the + # backward pass, so [N*K, I] expert activations never exist for a whole row + # (0 = one dispatch, the historical path). + self.moe_chunk_tokens: int = int(kwargs.pop("moe_chunk_tokens", 0) or 0) + # Lookahead supervision's own document rule: None follows + # reset_router_at_documents; True/False decouples it from the temporal and + # router-locality terms. + _lrd = kwargs.pop("reset_lookahead_at_documents", None) + if isinstance(_lrd, str): # web UI tri-state: "" follows the router switch + _lrd = None if _lrd.strip() == "" else _lrd.strip().lower() in ("1", "true", "yes", "on") + self.reset_lookahead_at_documents = None if _lrd is None else bool(_lrd) + # Two-stage lookahead decoupling. True: the LookaheadRouter reads a stop-gradient copy of + # the hidden state, so its losses train only the router and add no gradient path + # through the backbone (fine-tune the router on a frozen trunk). + self.lookahead_input_detach: bool = bool(kwargs.pop("lookahead_input_detach", False)) + # > 0: the temporal / locality terms keep gradient only for the newer token of a pair + # every this-many positions (blocks of that length, the older side is detached), so + # no gradient chain crosses a whole row. 0 = full chain (historical). + self.temporal_grad_span: int = int(kwargs.pop("temporal_grad_span", 0) or 0) + # Long-context RoPE for training: {"type": "yarn"|"linear"|"ntk", "factor": f, + # "original_max_position_embeddings": n, ...}; applied after the base init. + _rts = kwargs.pop("rope_train_scaling", None) + self.rope_train_scaling = dict(_rts) if _rts else None # Multimodal encoders are native kernel inputs, but are instantiated # only for modalities discovered/enabled by the data pipeline. @@ -195,6 +276,34 @@ def __init__(self, **kwargs): self.lambda_lookahead_topk: float = kwargs.pop("lambda_lookahead_topk", 0.15) self.lambda_lookahead_union: float = kwargs.pop("lambda_lookahead_union", 0.05) self.lambda_router_locality: float = kwargs.pop("lambda_router_locality", 0.02) + # Cluster-locality constraint: within each ``cluster_locality_window`` + # tokens (0 = whole sequence) and each virtual layer (every loop + # iteration), push routing mass into few expert clusters. The + # partition is ``chronos.expert_clusters.training_clusters`` and is the + # one lazy inference pages by (``inference_clusters``: automatic when + # λ > 0). The class default stays 0 so a stored recipe or checkpoint + # that predates the field keeps its training objective; every entry + # point that creates a new training config (planner, presets, CLI, + # task extensions) turns it on at the measured + # ``chronos.expert_clusters.DEFAULT_LAMBDA``. + self.lambda_cluster_locality: float = kwargs.pop("lambda_cluster_locality", 0.0) + self.cluster_locality_clusters: int = kwargs.pop("cluster_locality_clusters", 0) + self.cluster_locality_window: int = kwargs.pop("cluster_locality_window", 32) + # Unit of the constraint: "window" (fixed windows above) or "segment" + # (the batch's documents, read from the tokens' own separators; a + # document longer than the window is cut into window-sized parts). + # Neither consults labels or task tokens. + self.cluster_locality_mode: str = str(kwargs.pop("cluster_locality_mode", "window") or "window") + # Iteration-axis cluster locality (0 = off): weight on the total variation between the cluster + # distribution of each loop iteration of a token and the mean over its iterations, so every iteration + # of a recurrent layer reads the same expert clusters. Experts inside a cluster stay free to differ. + self.lambda_iteration_cluster: float = float(kwargs.pop("lambda_iteration_cluster", 0.0) or 0.0) + # Lookahead teacher: routing of loop iteration 0 only ("first") or averaged over every iteration of the + # layer ("iterations"), so prefetch predicts the experts the deeper iterations need as well. + scope = str(kwargs.pop("lookahead_teacher_scope", "first") or "first").lower() + if scope not in ("first", "iterations"): + raise ValueError(f"unknown lookahead_teacher_scope {scope!r}") + self.lookahead_teacher_scope: str = scope # M4: weight on the router KL anchor (alignment stages only). # Prevents SFT/DPO/ORPO/GRPO gradients from drifting routing away # from the pretrained distribution that the cluster layout was @@ -213,13 +322,15 @@ def __init__(self, **kwargs): self.offload_miss_policy_default: str = kwargs.pop("offload_miss_policy_default", "on_demand") self.recommended_resident_experts: int | None = kwargs.pop("recommended_resident_experts", None) self.offload_working_set_experts: int | None = kwargs.pop("offload_working_set_experts", None) - # M7: regularization defaults. MiniMindConfig defaults dropout=0.0 + # M7: regularization defaults. ChronosBaseConfig defaults dropout=0.0 # and weight_decay isn't even a config field — both major causes # of overfitting on small corpora. Override here. kwargs.setdefault("dropout", 0.1) # Force MoE on kwargs.setdefault("use_moe", True) super().__init__(**kwargs) + if self.rope_train_scaling is not None: + self.rope_scaling = dict(self.rope_train_scaling) from chronos.config_schema import normalize_model_dimensions resolved = normalize_model_dimensions(vars(self)) diff --git a/chronos/model/factory.py b/chronos/model/factory.py index c731987..59d976b 100644 --- a/chronos/model/factory.py +++ b/chronos/model/factory.py @@ -78,17 +78,3 @@ def fit_config(target_total: float, target_active: float, *, vocab_size: int, if best is None: raise ValueError("no valid configuration in the search space") return best - - -ENZH_DEMO_BASE = dict( - architecture_version=3, num_hidden_layers=6, prelude_layers=1, coda_layers=1, - recurrent_depth=4, min_recurrent_depth=1, max_inference_depth=4, - recurrent_attention_mode="shared_first", adaptive_halting=True, - depth_schedule="fixed_then_adaptive", depth_schedule_warmup_fraction=0.3, - halting_threshold=0.95, num_experts_per_tok=2, num_shared_experts=1, - kv_latent_dim=128, rope_dim=32, rope_layout="per_head", sliding_window_size=128, - max_position_embeddings=1024, - layer_aware_lookahead=True, layer_aware_cache=True, lookahead_steps=2, - dropout=0.0, fallback_mask_prob=0.08, rope_theta=1e6, - bos_token_id=1, eos_token_id=2, tie_word_embeddings=True, -) diff --git a/chronos/model/hf_io.py b/chronos/model/hf_io.py index e7f4409..7c4e363 100644 --- a/chronos/model/hf_io.py +++ b/chronos/model/hf_io.py @@ -68,7 +68,7 @@ def save_chronos_pretrained( if paging is not None: paging.materialize_all() - # MiniMind/Chronos tie ``lm_head.weight`` to ``model.embed_tokens.weight`` + # Chronos ties ``lm_head.weight`` to ``model.embed_tokens.weight`` # but doesn't declare it via ``_tied_weights_keys``, which trips # safetensors' shared-tensor detector. Clone lm_head once before saving; # restore the tie after. @@ -115,7 +115,7 @@ def load_chronos_pretrained( from chronos.model.model_chronos import ChronosForCausalLM model = ChronosForCausalLM.from_pretrained(save_directory, **from_pretrained_kwargs) - # MiniMind/Chronos precompute RoPE frequencies as *persistent* buffers. + # Chronos precomputes RoPE frequencies from config (FP32, not buffers). # When the checkpoint is saved as fp16 and reloaded, these deterministic # buffers get truncated to zeros/NaNs. Recompute them from scratch — # they are a pure function of config. @@ -131,22 +131,15 @@ def load_chronos_pretrained( def _rehydrate_rope_buffers(model) -> None: - """Recompute ``freqs_cos`` and ``freqs_sin`` on the inner ChronosModel. - These are deterministic from config; the precompute logic lives inside - ``ChronosModel.__init__``. We invoke it via a fresh ChronosModel and - copy the buffers across. Cheap — only runs once per load.""" - try: - inner = getattr(model, "model", None) - if inner is None: - return - cfg = model.config - from chronos.model.model_chronos import ChronosModel - fresh = ChronosModel(cfg) - if hasattr(inner, "freqs_cos") and hasattr(fresh, "freqs_cos"): - inner.freqs_cos = fresh.freqs_cos - if hasattr(inner, "freqs_sin") and hasattr(fresh, "freqs_sin"): - inner.freqs_sin = fresh.freqs_sin - except Exception: - # Rehydration is best-effort; fall through silently so an unexpected - # config shape doesn't block the load. - pass + """Point the inner model's ``freqs_cos/sin`` at fresh FP32 tables. + + They are a pure function of config (``kernel.rope_tables``), so no model + is rebuilt; a half-precision save can never truncate them. + """ + inner = getattr(model, "model", None) + if inner is None or not hasattr(inner, "freqs_cos"): + return + from chronos.model.kernel import rope_tables + cfg = model.config + inner.freqs_cos, inner.freqs_sin = rope_tables( + cfg.head_dim, cfg.max_position_embeddings, cfg.rope_theta, cfg.rope_scaling, inner.freqs_cos.device) diff --git a/chronos/model/hybrid_attention.py b/chronos/model/hybrid_attention.py index dc69dde..4a16c21 100644 --- a/chronos/model/hybrid_attention.py +++ b/chronos/model/hybrid_attention.py @@ -13,9 +13,6 @@ Even layers: MLA for global context with compressed cache Odd layers: SlidingWindow for local patterns with bounded cache """ -import sys -import chronos.deps # ensure minimind on sys.path - import math import torch import torch.nn as nn @@ -295,6 +292,9 @@ def _absorbed_attention(self, q_nope, q_rope, c_kv, k_rope, mask, is_causal, dro # ── Sliding Window Attention ────────────────────────────────────── +_CONFIG_WINDOW = object() # sentinel: take ``sliding_window_size`` from the config + + class SlidingWindowAttention(_RopeTables, nn.Module): """ Local sliding window attention. KV cache is capped at window_size tokens, @@ -304,14 +304,15 @@ class SlidingWindowAttention(_RopeTables, nn.Module): During decode: KV cache evicts oldest tokens beyond window_size. """ - def __init__(self, config: ChronosConfig): + def __init__(self, config: ChronosConfig, window_size=_CONFIG_WINDOW): super().__init__() self.n_heads = config.num_attention_heads self.n_kv_heads = config.num_key_value_heads or config.num_attention_heads self.head_dim = config.head_dim self.n_rep = self.n_heads // self.n_kv_heads self.dropout = config.dropout - self.window_size = getattr(config, 'sliding_window_size', 2048) + # ``None`` = no window (GlobalAttention): full causal GQA, no eviction. + self.window_size = getattr(config, 'sliding_window_size', 2048) if window_size is _CONFIG_WINDOW else window_size # Extra retained cache entries (outside the attention window, masked # out) so speculative decoding can roll back rejected draft tokens. self.cache_slack = 0 @@ -362,16 +363,18 @@ def forward(self, x, position_embeddings, past_key_value=None, use_cache=False, # Keep full keys for this chunk's queries, then bound the persistent # cache. Track absolute positions after eviction for correct RoPE. - keep = self.window_size + int(self.cache_slack) + keep = None if self.window_size is None else self.window_size + int(self.cache_slack) past_kv = None if use_cache and self.kv_int8 and kv_override is None: # Quantize only the new tokens (each token once); evict afterwards. prev = past_key_value if past_key_value is not None else (None, None) qk = kv_store(new_k, prev[0], True, self.kv_group) qv = kv_store(new_v, prev[1], True, self.kv_group) - past_kv = (qk[:, max(0, qk.shape[1] - keep):], qv[:, max(0, qv.shape[1] - keep):], past_len + S) + if keep is not None: + qk, qv = qk[:, max(0, qk.shape[1] - keep):], qv[:, max(0, qv.shape[1] - keep):] + past_kv = (qk, qv, past_len + S) elif use_cache: - past_kv = (xk[:, -keep:], xv[:, -keep:], past_len+S) + past_kv = (xk, xv, past_len + S) if keep is None else (xk[:, -keep:], xv[:, -keep:], past_len + S) shared_kv = (xk, xv, past_len + S) T = xk.shape[1] @@ -386,12 +389,28 @@ def forward(self, x, position_embeddings, past_key_value=None, use_cache=False, return self.resid_dropout(self.o_proj(out)), past_kv +class GlobalAttention(SlidingWindowAttention): + """Full causal GQA, used when ``use_hybrid_attention=False``. + + It is the sliding-window kernel without a window. Parameter names + (``q/k/v/o_proj``, ``q_norm``, ``k_norm``) and the ``(k, v, abs_pos)`` + cache are the same, so every recurrent mode works on it, as do int8 KV, + padding masks and speculative rollback. + """ + + def __init__(self, config: ChronosConfig): + super().__init__(config, window_size=None) + + def make_attention(layer_id: int, config: ChronosConfig) -> nn.Module: """ - Layer assignment: + Layer assignment (``use_hybrid_attention``, default True): even layers → MLAAttention (global context, compressed KV cache) odd layers → SlidingWindowAttention (local patterns, bounded KV cache) + With hybrid attention off, every layer is GlobalAttention (full GQA). """ + if not getattr(config, "use_hybrid_attention", True): + return GlobalAttention(config) if layer_id % 2 == 0: return MLAAttention(config) return SlidingWindowAttention(config) diff --git a/chronos/model/kernel.py b/chronos/model/kernel.py new file mode 100644 index 0000000..e94c194 --- /dev/null +++ b/chronos/model/kernel.py @@ -0,0 +1,324 @@ +"""Chronos native kernel primitives (replaces the former minimind dependency). + +Before 0.3.2 Chronos imported its config base, RoPE tables, SwiGLU FFN and a +dense GQA attention from a minimind checkout that ``chronos.deps`` cloned +from an unpinned ``master`` at import time and pushed onto ``sys.path``. +This module owns those pieces. Field names, defaults, parameter names and +RoPE numerics are kept identical, so every existing checkpoint and config +sidecar loads unchanged (``tests/test_native_kernel.py`` checks this). + +What changed by design: + +* RoPE tables are FP32 and bit-identical to the old ones, but one table per + ``(dim, base, scaling, device)`` is shared by every layer (``rope_tables``) + instead of each attention layer holding its own copy. +* ``SwiGLU`` uses ``F.silu`` directly (no ``ACT2FN`` lookup per call) and keeps + the ``gate_proj/up_proj/down_proj`` names expert pages are stored under. +* Logging is a sink registry (``add_log_sink``), so callers capture trainer + output without monkey-patching a module attribute. +""" +from __future__ import annotations + +import math +import os +import random +import threading +from contextlib import contextmanager +from typing import Callable + +import torch +import torch.nn as nn +import torch.nn.functional as F +from transformers import PretrainedConfig + +# ── Config base ─────────────────────────────────────────────────────────── + +YARN_DEFAULT = { + "beta_fast": 32, "beta_slow": 1, "factor": 16, + "original_max_position_embeddings": 2048, "attention_factor": 1.0, "type": "yarn", +} + + +class ChronosBaseConfig(PretrainedConfig): + """Dense-transformer fields every Chronos model shares. + + Names and defaults match the pre-0.3.2 base so ``config.json`` sidecars + written by any earlier release resolve to the same values. + """ + + model_type = "chronos_base" + + def __init__(self, hidden_size: int = 768, num_hidden_layers: int = 8, use_moe: bool = False, **kwargs): + super().__init__(**kwargs) + g = kwargs.get + self.hidden_size = hidden_size + self.num_hidden_layers = num_hidden_layers + self.use_moe = use_moe + self.dropout = g("dropout", 0.0) + self.vocab_size = g("vocab_size", 6400) + self.bos_token_id = g("bos_token_id", 1) + self.eos_token_id = g("eos_token_id", 2) + self.flash_attn = g("flash_attn", True) + self.num_attention_heads = g("num_attention_heads", 8) + self.num_key_value_heads = g("num_key_value_heads", 4) + self.head_dim = g("head_dim", self.hidden_size // self.num_attention_heads) + self.hidden_act = g("hidden_act", "silu") + self.intermediate_size = g("intermediate_size", math.ceil(hidden_size * math.pi / 64) * 64) + self.max_position_embeddings = g("max_position_embeddings", 32768) + self.rms_norm_eps = g("rms_norm_eps", 1e-6) + self.rope_theta = g("rope_theta", 1e6) + self.tie_word_embeddings = g("tie_word_embeddings", True) + self.inference_rope_scaling = g("inference_rope_scaling", False) + # YaRN is switched on by ``inference_rope_scaling``; transformers 5 + # validates an explicit ``rope_scaling`` kwarg against its own schema. + self.rope_scaling = dict(YARN_DEFAULT) if self.inference_rope_scaling else None + # MoE fields (ignored when use_moe is False). + self.num_experts = g("num_experts", 4) + self.num_experts_per_tok = g("num_experts_per_tok", 1) + self.moe_intermediate_size = g("moe_intermediate_size", self.intermediate_size) + self.norm_topk_prob = g("norm_topk_prob", True) + self.router_aux_loss_coef = g("router_aux_loss_coef", 5e-4) + + +# ── RoPE (FP32, rotate-half layout, optional YaRN) ──────────────────────── + +def _inv_freq(dim: int, base: float, scaling: dict | None, end: int) -> tuple[torch.Tensor, float]: + cpu = torch.device("cpu") # explicit: callers may run under ``with torch.device('meta')`` + kind = str((scaling or {}).get("type", "yarn")).lower() + if scaling is not None and kind == "ntk": + # NTK-aware: stretch the base so the lowest frequency spans the longer window. + base = base * float(scaling.get("factor", 1.0)) ** (dim / max(dim - 2, 1)) + freqs = 1.0 / (base ** (torch.arange(0, dim, 2, device=cpu)[: dim // 2].float() / dim)) + attn_factor = 1.0 + if scaling is not None and kind == "linear": + freqs = freqs / float(scaling.get("factor", 1.0)) + attn_factor = float(scaling.get("attention_factor", 1.0)) + elif scaling is not None and kind == "yarn": + # YaRN: f'(i) = f(i) * ((1 - g) + g / s), g a linear ramp over the band. + orig_max = scaling.get("original_max_position_embeddings", 2048) + factor = scaling.get("factor", 16) + beta_fast, beta_slow = scaling.get("beta_fast", 32.0), scaling.get("beta_slow", 1.0) + attn_factor = scaling.get("attention_factor", 1.0) + if end / orig_max > 1.0: + def inv_dim(b): + return (dim * math.log(orig_max / (b * 2 * math.pi))) / (2 * math.log(base)) + low = max(math.floor(inv_dim(beta_fast)), 0) + high = min(math.ceil(inv_dim(beta_slow)), dim // 2 - 1) + ramp = torch.clamp((torch.arange(dim // 2, device=cpu).float() - low) / max(high - low, 0.001), 0, 1) + freqs = freqs * (1 - ramp + ramp / factor) + return freqs, attn_factor + + +def precompute_freqs_cis(dim: int, end: int = 32 * 1024, rope_base: float = 1e6, + rope_scaling: dict | None = None) -> tuple[torch.Tensor, torch.Tensor]: + """FP32 duplicated cos/sin tables ``[end, dim]`` (rotate-half layout), on CPU. + + Same signature and bit-identical output as the pre-0.3.2 helper, so the + MLX mirror (``chronos.mlx.attention._rope_freqs``) and every trained + checkpoint keep their RoPE. + """ + freqs, attn_factor = _inv_freq(int(dim), float(rope_base), rope_scaling, int(end)) + angles = torch.outer(torch.arange(int(end), device=freqs.device), freqs).float() + # One thread: torch splits cos/sin across threads above a size threshold, + # and the vector/scalar split points then differ by one ulp from a + # shorter table (measured on torch 2.10, 18 threads). Single-threaded, + # every row depends on its angle only, so a cached table's prefix equals + # a freshly computed shorter one bit for bit. Built once per process. + threads = torch.get_num_threads() + torch.set_num_threads(1) + try: + c, s = torch.cos(angles), torch.sin(angles) + finally: + torch.set_num_threads(threads) + cos = torch.cat([c, c], dim=-1) * attn_factor + sin = torch.cat([s, s], dim=-1) * attn_factor + return cos, sin + + +_ROPE_LOCK = threading.Lock() +_ROPE_TABLES: dict[tuple, tuple[torch.Tensor, torch.Tensor]] = {} + + +def _scaling_key(scaling: dict | None): + return None if not scaling else tuple(sorted((str(k), str(v)) for k, v in scaling.items())) + + +def rope_tables(dim: int, length: int, base: float, scaling, device) -> tuple[torch.Tensor, torch.Tensor]: + """Shared FP32 cos/sin tables with at least ``length`` rows on ``device``. + + One table per ``(dim, base, scaling, device)`` serves every layer and + grows geometrically. YaRN rescales the frequencies only when the table + is longer than ``original_max_position_embeddings``, so scaled tables are + keyed by that regime as well, and growth never crosses the boundary. Rows + are therefore bit-identical to ``precompute_freqs_cis(dim, length)``. + """ + dim, length = int(dim), int(length) + dev = torch.device(device) if device is not None else torch.device("cpu") + cap = None + regime = None + if scaling: + orig = scaling.get("original_max_position_embeddings", 2048) + regime = length / orig > 1.0 + cap = None if regime else int(orig) # unscaled regime stops at orig rows + key = (dim, float(base), _scaling_key(scaling), str(dev), regime) + with _ROPE_LOCK: + hit = _ROPE_TABLES.get(key) + if hit is not None and hit[0].shape[0] >= length: + return hit + rows = max(length, 2 * (hit[0].shape[0] if hit is not None else 0)) + if cap is not None: + rows = max(length, min(rows, cap)) + cos, sin = precompute_freqs_cis(dim, rows, base, scaling) + out = (cos.to(device=dev, dtype=torch.float32), sin.to(device=dev, dtype=torch.float32)) + _ROPE_TABLES[key] = out + return out + + +def clear_rope_tables() -> None: + with _ROPE_LOCK: + _ROPE_TABLES.clear() + + +def rotate_half(x: torch.Tensor) -> torch.Tensor: + half = x.shape[-1] // 2 + return torch.cat((-x[..., half:], x[..., :half]), dim=-1) + + +def apply_rotary_pos_emb(q, k, cos, sin, unsqueeze_dim: int = 1): + """Rotate q/k with tables broadcast on ``unsqueeze_dim``; one rounding each.""" + c, s = cos.unsqueeze(unsqueeze_dim), sin.unsqueeze(unsqueeze_dim) + return (q * c + rotate_half(q) * s).to(q.dtype), (k * c + rotate_half(k) * s).to(k.dtype) + + +def repeat_kv(x: torch.Tensor, n_rep: int) -> torch.Tensor: + """[B, T, nKV, d] -> [B, T, nKV * n_rep, d] (only for kernels without native GQA).""" + if n_rep == 1: + return x + b, t, h, d = x.shape + return x[:, :, :, None, :].expand(b, t, h, n_rep, d).reshape(b, t, h * n_rep, d) + + +# ── SwiGLU feed-forward ─────────────────────────────────────────────────── + +_ACTIVATIONS: dict[str, Callable[[torch.Tensor], torch.Tensor]] = { + "silu": F.silu, "swish": F.silu, "gelu": F.gelu, "relu": F.relu, + "gelu_pytorch_tanh": lambda x: F.gelu(x, approximate="tanh"), +} + + +def activation(name: str) -> Callable[[torch.Tensor], torch.Tensor]: + if name in _ACTIVATIONS: + return _ACTIVATIONS[name] + from transformers.activations import ACT2FN # rare activations only + return ACT2FN[name] + + +class FeedForward(nn.Module): + """Gated FFN ``down(act(gate(x)) * up(x))``. + + Parameter names are the on-disk contract (dense FFN, routed and shared + experts, ``.ctsr`` expert pages), so they must not change. + """ + + def __init__(self, config, intermediate_size: int | None = None): + super().__init__() + inter = int(intermediate_size or config.intermediate_size) + self.gate_proj = nn.Linear(config.hidden_size, inter, bias=False) + self.down_proj = nn.Linear(inter, config.hidden_size, bias=False) + self.up_proj = nn.Linear(config.hidden_size, inter, bias=False) + self.act_fn = activation(getattr(config, "hidden_act", "silu")) + + def forward(self, x: torch.Tensor) -> torch.Tensor: + return self.down_proj(self.act_fn(self.gate_proj(x)) * self.up_proj(x)) + + +SwiGLU = FeedForward + + +# ── Training utilities ──────────────────────────────────────────────────── + +def is_main_process() -> bool: + import torch.distributed as dist + return not (dist.is_available() and dist.is_initialized()) or dist.get_rank() == 0 + + +_LOG_SINKS: list[Callable[[str], None]] = [] + + +def Logger(content) -> None: # noqa: N802 (historic trainer API name) + """Print on the main process and forward the line to registered sinks.""" + if not is_main_process(): + return + print(content) + for sink in list(_LOG_SINKS): + try: + sink(str(content)) + except Exception: + pass + + +@contextmanager +def add_log_sink(sink: Callable[[str], None]): + """Receive every ``Logger`` line while the context is active.""" + _LOG_SINKS.append(sink) + try: + yield sink + finally: + try: + _LOG_SINKS.remove(sink) + except ValueError: + pass + + +def setup_seed(seed: int) -> None: + """Seed Python, NumPy and torch (all devices); deterministic cuDNN.""" + import numpy as np + random.seed(seed) + np.random.seed(seed) + torch.manual_seed(seed) + if torch.cuda.is_available(): + torch.cuda.manual_seed_all(seed) + torch.backends.cudnn.deterministic = True + torch.backends.cudnn.benchmark = False + + +def _unwrap(module): + module = getattr(module, "module", module) # DDP + return getattr(module, "_orig_mod", module) # torch.compile + + +def save_resume_state(path: str, *, model, optimizer=None, epoch: int = 0, step: int = 0, **extra) -> str: + """Atomically write a resume file (weights in their dtype + optimizer + counters). + + The release checkpoint itself is written by + ``chronos.model.checkpoint.save_state_dict_with_config``; this file only + carries what is needed to continue training. + """ + import torch.distributed as dist + os.makedirs(os.path.dirname(os.path.abspath(path)) or ".", exist_ok=True) + state = { + "model": {k: v.detach().cpu() for k, v in _unwrap(model).state_dict().items()}, + "optimizer": optimizer.state_dict() if optimizer is not None else None, + "epoch": int(epoch), "step": int(step), + "world_size": dist.get_world_size() if dist.is_available() and dist.is_initialized() else 1, + } + for key, value in extra.items(): + if value is not None: + state[key] = _unwrap(value).state_dict() if hasattr(value, "state_dict") else value + tmp = path + ".tmp" + torch.save(state, tmp) + os.replace(tmp, path) + return path + + +def load_resume_state(path: str): + """Load a resume file; ``step`` is rescaled when the world size changed.""" + import torch.distributed as dist + if not os.path.exists(path): + return None + data = torch.load(path, map_location="cpu", weights_only=False) + saved = int(data.get("world_size", 1) or 1) + current = dist.get_world_size() if dist.is_available() and dist.is_initialized() else 1 + if saved != current: + data["step"] = int(data.get("step", 0)) * saved // current + return data diff --git a/chronos/model/model_chronos.py b/chronos/model/model_chronos.py index a7ec7d7..c5d1202 100644 --- a/chronos/model/model_chronos.py +++ b/chronos/model/model_chronos.py @@ -1,20 +1,15 @@ -import sys -import chronos.deps # ensure minimind on sys.path - import math import torch import torch.nn as nn import torch.nn.functional as F from transformers import PreTrainedModel, GenerationMixin -from model.model_minimind import ( - precompute_freqs_cis, Attention, FeedForward, -) +from .kernel import FeedForward, rope_tables from .config import ChronosConfig from .precision_ops import RMSNorm, lm_head_logits from .lookahead_router import LookaheadRouter from .moe_chronos import ChronosMOEFeedForward -from .hybrid_attention import make_attention +from .hybrid_attention import MLAAttention, make_attention from .recurrent import RecurrentController, recurrent_auxiliary_state from .outputs import ChronosCausalLMOutput from .multimodal import MultimodalFusion @@ -60,10 +55,7 @@ class ChronosBlock(nn.Module): def __init__(self, layer_id: int, config: ChronosConfig): super().__init__() self.layer_id = layer_id - if getattr(config, 'use_hybrid_attention', True): - self.self_attn = make_attention(layer_id, config) - else: - self.self_attn = Attention(config) + self.self_attn = make_attention(layer_id, config) self.input_layernorm = RMSNorm(config.hidden_size, eps=config.rms_norm_eps) self.post_attention_layernorm = RMSNorm(config.hidden_size, eps=config.rms_norm_eps) self.mlp = ChronosMOEFeedForward(config) if config.use_moe else FeedForward(config) @@ -79,6 +71,7 @@ def forward( latent_only: bool = False, kv_override=None, return_shared_kv: bool = False, + top_k: int | None = None, ): """One physical block. @@ -112,7 +105,7 @@ def forward( hidden_states = hidden_states + residual mlp_in = self.post_attention_layernorm(hidden_states) if isinstance(self.mlp, ChronosMOEFeedForward): - hidden_states = hidden_states + self.mlp(mlp_in, available_expert_mask) + hidden_states = hidden_states + self.mlp(mlp_in, available_expert_mask, top_k=top_k) else: hidden_states = hidden_states + self.mlp(mlp_in) if return_shared_kv: @@ -133,7 +126,7 @@ def apply_repetition_penalty(logits, input_ids, penalty: float): class ChronosModel(nn.Module): """ - Backbone: identical to MiniMindModel but: + Backbone: pre-norm decoder (native kernel, ``chronos.model.kernel``) that: - Uses ChronosBlock (with ChronosMOEFeedForward) - Inserts LookaheadRouter after block 0 - Exposes router_probs_seq for temporal loss computation @@ -154,29 +147,37 @@ def __init__(self, config: ChronosConfig): self.recurrent_controller = RecurrentController(config) # Pure-text models carry no image/audio encoder parameters or compute. self.multimodal_fusion = MultimodalFusion(config) if config.modalities else None - freqs_cos, freqs_sin = precompute_freqs_cis( - dim=config.head_dim, - end=config.max_position_embeddings, - rope_base=config.rope_theta, - rope_scaling=config.rope_scaling, - ) # Plain FP32 attributes (not buffers): ``model.to(bf16)`` must not - # round them. Attention layers own their own FP32 tables; these are - # kept for callers that read the model-level RoPE. - self.freqs_cos, self.freqs_sin = freqs_cos.float(), freqs_sin.float() + # round them. The table is the shared one every SWA/global layer + # uses (``kernel.rope_tables``), so it costs no extra memory. + self.freqs_cos, self.freqs_sin = rope_tables( + config.head_dim, config.max_position_embeddings, config.rope_theta, config.rope_scaling, "cpu") self.last_recurrent_state = None + def _recompute_block(self, layer) -> bool: + """Whether ``layer`` is recomputed under ``config.recompute_policy`` + ("all" | "mla" | "swa" | "alternate"); MLX parity.""" + policy = getattr(self.config, "recompute_policy", "all") + if policy == "all": + return True + if policy == "alternate": + return next(i for i, other in enumerate(self.layers) if other is layer) % 2 == 0 + is_mla = isinstance(layer.self_attn, MLAAttention) + return is_mla if policy == "mla" else not is_mla + def _run_block( self, layer, hidden_states, position_embeddings, *, past_key_value=None, use_cache=False, attention_mask=None, available_expert_mask=None, latent_only: bool = False, kv_override=None, return_shared_kv: bool = False, + top_k: int | None = None, ): """Run one physical block with optional selective recomputation.""" if ( bool(getattr(self.config, "activation_checkpointing", False)) and self.training and not use_cache and not return_shared_kv + and self._recompute_block(layer) ): from torch.utils.checkpoint import checkpoint @@ -185,7 +186,7 @@ def transition(states): states, position_embeddings, past_key_value=None, use_cache=False, attention_mask=attention_mask, available_expert_mask=available_expert_mask, - latent_only=latent_only, kv_override=kv_override, + latent_only=latent_only, kv_override=kv_override, top_k=top_k, )[0] return checkpoint(transition, hidden_states, use_reentrant=False), None @@ -197,6 +198,7 @@ def transition(states): latent_only=latent_only, kv_override=kv_override, return_shared_kv=return_shared_kv, + top_k=top_k, ) def _forward_recurrent( @@ -270,80 +272,120 @@ def mask_for(li): adaptive_active = self.recurrent_controller.adaptive_active(cfg, self.training) threshold = float(cfg.halting_threshold) min_depth = int(cfg.min_recurrent_depth) - for group in range(g): + controller = self.recurrent_controller + order = str(getattr(cfg, "recurrent_order", "layer") or "layer") + # Graded top-k: loop iterations after the first route to fewer experts (0 = same as the first). + later_k = int(getattr(cfg, "recurrent_later_topk", 0) or 0) + # Prefix blocks (block order): iterations after the first run only the first later_g layers of the block. + later_g = int(getattr(cfg, "recurrent_later_groups", 0) or 0) + + def run_layer(group, step, hidden, shared_kv): + """One loop iteration of one physical layer: condition, attend/route, contract.""" li = p + group layer = self.layers[li] - group_states, group_halts = [], [] - exited_early = False - shared_kv = None - halted = cumulative = None - target = min(1.0, max(1e-6, threshold)) - for step in range(depth): - conditioned = self.recurrent_controller.condition(hidden_states, step, group) - slot = layout.slot(li, step) - block_kwargs = dict( - use_cache=use_cache, attention_mask=attention_mask, - available_expert_mask=mask_for(li), - ) - if mode == "per_iteration": - refined, presents[slot] = self._run_block( - layer, conditioned, position_embeddings, - past_key_value=past_key_values[slot], **block_kwargs) - elif mode == "first_only": - refined, present = self._run_block( - layer, conditioned, position_embeddings, - past_key_value=past_key_values[slot], latent_only=step > 0, **block_kwargs) - if step == 0: - presents[slot] = present - elif step == 0: # shared_first, writer iteration - refined, presents[slot], shared_kv = self._run_block( - layer, conditioned, position_embeddings, - past_key_value=past_key_values[slot], return_shared_kv=True, **block_kwargs) - else: # shared_first, reader iteration - refined, _ = self._run_block( - layer, conditioned, position_embeddings, - past_key_value=None, kv_override=shared_kv, - use_cache=False, attention_mask=attention_mask, - available_expert_mask=mask_for(li)) - hidden_states = self.recurrent_controller.contract(hidden_states, refined, group) - group_states.append(hidden_states) - halt_probability = self.recurrent_controller.halt_probability(hidden_states) - group_halts.append(halt_probability) - # Exact ACT bookkeeping (same rule as recurrent_auxiliary_state): - # a token halts once its accumulated mass reaches the threshold - # after min_depth. Later iterations get zero mixture weight, so - # once *every* token has halted the remaining iterations cannot - # change the output; exiting is then exact, and each token's - # result is independent of what else is in the batch (required - # for speculative verification to equal token-by-token decode). - if step + 1 >= min_depth: - clipped = halt_probability.float().clamp(0.0, 1.0) - if halted is None: - cumulative = torch.zeros_like(clipped) - halted = torch.zeros_like(clipped, dtype=torch.bool) - newly = (~halted) & ((cumulative + clipped) >= target) - cumulative = torch.where(halted | newly, cumulative, (cumulative + clipped).clamp(max=1.0)) - halted = halted | newly - if ( - not self.training and adaptive_active and allow_adaptive_exit - and halted is not None and step + 1 < depth - ): - if bool(halted.all()): # one fused device→host read per step - exited_early = True - break - # ACT is state interpolation rather than a ragged Python loop. - mixed, state = recurrent_auxiliary_state( - group_states, group_halts, min_depth=min_depth, threshold=threshold, + tk = {"top_k": later_k} if later_k and step > 0 else {} + conditioned = controller.condition(hidden, step, group) + slot = layout.slot(li, step) + block_kwargs = dict( + use_cache=use_cache, attention_mask=attention_mask, + available_expert_mask=mask_for(li), **tk, ) + if mode == "per_iteration": + refined, presents[slot] = self._run_block( + layer, conditioned, position_embeddings, + past_key_value=past_key_values[slot], **block_kwargs) + elif mode == "first_only": + refined, present = self._run_block( + layer, conditioned, position_embeddings, + past_key_value=past_key_values[slot], latent_only=step > 0, **block_kwargs) + if step == 0: + presents[slot] = present + elif step == 0: # shared_first, writer iteration + refined, presents[slot], shared_kv = self._run_block( + layer, conditioned, position_embeddings, + past_key_value=past_key_values[slot], return_shared_kv=True, **block_kwargs) + else: # shared_first, reader iteration + refined, _ = self._run_block( + layer, conditioned, position_embeddings, + past_key_value=None, kv_override=shared_kv, + use_cache=False, attention_mask=attention_mask, + available_expert_mask=mask_for(li), **tk) + return controller.contract(hidden, refined, group), shared_kv + + def track(hidden, step, halted, cumulative): + """Halting probability plus exact ACT bookkeeping (same rule as recurrent_auxiliary_state).""" + # A token halts once its accumulated mass reaches the threshold after + # min_depth. Later iterations get zero mixture weight, so once *every* + # token has halted the remaining iterations cannot change the output; + # exiting is then exact, and each token's result is independent of what + # else is in the batch (required for speculative verification to equal + # token-by-token decode). + halt_probability = controller.halt_probability(hidden) + if step + 1 >= min_depth: + clipped = halt_probability.float().clamp(0.0, 1.0) + if halted is None: + cumulative = torch.zeros_like(clipped) + halted = torch.zeros_like(clipped, dtype=torch.bool) + newly = (~halted) & ((cumulative + clipped) >= target) + cumulative = torch.where(halted | newly, cumulative, (cumulative + clipped).clamp(max=1.0)) + halted = halted | newly + return halt_probability, halted, cumulative + + def can_exit(halted, step): + if not self.training and adaptive_active and allow_adaptive_exit and halted is not None and step + 1 < depth: + return bool(halted.all()) # one fused device→host read per step + return False + + def finish(states, halts, exited_early, hidden): + # ACT is state interpolation rather than a ragged Python loop. + mixed, state = recurrent_auxiliary_state(states, halts, min_depth=min_depth, threshold=threshold) if adaptive_active: - hidden_states = mixed + hidden = mixed else: - hidden_states = group_states[-1] - state.ponder_cost = hidden_states.new_zeros(()) - state.depth_used = torch.full_like(state.depth_used, float(len(group_states))) + hidden = states[-1] + state.ponder_cost = hidden.new_zeros(()) + state.depth_used = torch.full_like(state.depth_used, float(len(states))) state.exited_early = exited_early recurrent_states.append(state) - + return hidden + + target = min(1.0, max(1e-6, threshold)) + if order == "block": + # Block-interleaved recurrence: (layer0 layer1 ... layerG-1) x depth. + # One state trajectory and one halting head per block iteration; each + # physical layer still keeps its own dt, loop/group embeddings and KV. + shared = [None] * g + states, halts = [], [] + halted = cumulative = None + exited_early = False + for step in range(depth): + for group in range(g if step == 0 or not later_g else min(g, later_g)): + hidden_states, shared[group] = run_layer(group, step, hidden_states, shared[group]) + states.append(hidden_states) + prob, halted, cumulative = track(hidden_states, step, halted, cumulative) + halts.append(prob) + if can_exit(halted, step): + exited_early = True + break + if states: + hidden_states = finish(states, halts, exited_early, hidden_states) + else: + # Layer-consecutive recurrence (default): layer0 x depth, layer1 x depth, ... + for group in range(g): + group_states, group_halts = [], [] + exited_early = False + shared_kv = None + halted = cumulative = None + for step in range(depth): + hidden_states, shared_kv = run_layer(group, step, hidden_states, shared_kv) + group_states.append(hidden_states) + prob, halted, cumulative = track(hidden_states, step, halted, cumulative) + group_halts.append(prob) + if can_exit(halted, step): + exited_early = True + break + hidden_states = finish(group_states, group_halts, exited_early, hidden_states) + # Coda uses the remaining physical layers. for ci in range(c): li = p + g + ci @@ -385,14 +427,8 @@ def _ensure_rope_cache(self, needed_len: int, device: torch.device) -> None: if needed_len <= current_len and self.freqs_cos.device == device: return target_len = max(needed_len, current_len * 2, int(self.config.max_position_embeddings)) - freqs_cos, freqs_sin = precompute_freqs_cis( - dim=self.config.head_dim, - end=target_len, - rope_base=self.config.rope_theta, - rope_scaling=self.config.rope_scaling, - ) - self.freqs_cos = freqs_cos.to(device=device) - self.freqs_sin = freqs_sin.to(device=device) + self.freqs_cos, self.freqs_sin = rope_tables( + self.config.head_dim, target_len, self.config.rope_theta, self.config.rope_scaling, device) self.config.max_position_embeddings = max( int(self.config.max_position_embeddings), target_len, diff --git a/chronos/model/moe_chronos.py b/chronos/model/moe_chronos.py index b637c7f..fe3862d 100644 --- a/chronos/model/moe_chronos.py +++ b/chronos/model/moe_chronos.py @@ -1,12 +1,9 @@ -import sys -import chronos.deps # ensure minimind on sys.path - import torch import torch.nn as nn import torch.nn.functional as F from transformers.activations import ACT2FN -from model.model_minimind import FeedForward, MOEFeedForward +from .kernel import FeedForward from .config import ChronosConfig @@ -38,13 +35,13 @@ def _run_expert(expert: nn.Module, x: torch.Tensor) -> torch.Tensor: class ChronosMOEFeedForward(nn.Module): """ - Extends MOEFeedForward with: + Routed SwiGLU experts plus: 1. shared_experts: always resident in VRAM, used as soft fallback 2. soft_gate: when target experts are unavailable (cache miss), blend their routing weight into shared experts instead of blocking on I/O - Training (available_expert_mask=None): identical to MOEFeedForward, - plus stores per-token routing probs for temporal_locality_loss. + Training (available_expert_mask=None): softmax top-k dispatch with a + load-balance term, plus stores per-token routing probs for temporal_locality_loss. Inference (available_expert_mask provided): routes cache-miss tokens to shared experts with zero latency. @@ -126,6 +123,7 @@ def forward( self, x: torch.Tensor, available_expert_mask: torch.Tensor = None, + top_k: int | None = None, ) -> torch.Tensor: """ Args: @@ -154,14 +152,19 @@ def forward( self.iteration_router_probs.append(self.last_router_probs) self.iteration_router_probs_grad.append(scores_bse) + # Graded top-k: a later loop iteration may route to fewer experts (top_k < num_experts_per_tok). + k = self.num_experts_per_tok if not top_k else max(1, min(int(top_k), self.num_experts_per_tok)) shared_idx = self._shared_topk_idx if (self.router_scope == "shared" and shared_idx is not None and shared_idx.shape[0] == scores.shape[0] and len(self.iteration_router_probs) > 1): topk_idx = shared_idx + if k < topk_idx.shape[1]: + keep = scores.gather(-1, topk_idx).topk(k, dim=-1, sorted=False).indices + topk_idx = topk_idx.gather(-1, keep) topk_weight = scores.gather(-1, topk_idx) else: topk_weight, topk_idx = torch.topk( - scores, k=self.num_experts_per_tok, dim=-1, sorted=False + scores, k=k, dim=-1, sorted=False ) if self.router_scope == "shared": self._shared_topk_idx = topk_idx @@ -194,7 +197,7 @@ def forward( flat_idx = topk_idx.reshape(-1) order = torch.argsort(flat_idx, stable=True) counts = torch.bincount(flat_idx, minlength=self.num_experts).tolist() - rows = order // self.num_experts_per_tok + rows = order // topk_idx.shape[1] row_weight = topk_weight.reshape(-1)[order].unsqueeze(-1) offset = 0 for i, expert in enumerate(self.experts): @@ -261,7 +264,7 @@ def forward( # values and the index_add_ order are unchanged. flat_idx = topk_idx.reshape(-1) order = torch.argsort(flat_idx, stable=True) - sorted_rows = order // self.num_experts_per_tok + sorted_rows = order // topk_idx.shape[1] sorted_weight = topk_weight.reshape(-1)[order].unsqueeze(-1) mass = torch.zeros(self.num_experts, dtype=torch.float32, device=x_flat.device).index_add_( 0, flat_idx, topk_weight.detach().reshape(-1).float()) diff --git a/chronos/model/planner.py b/chronos/model/planner.py index b3429c3..1198e02 100644 --- a/chronos/model/planner.py +++ b/chronos/model/planner.py @@ -53,7 +53,7 @@ class PlanRequest: active_experts: int | None = None # ... or this (top-k); active_params wins if both memory_saving: str = "none" # MEMORY_LEVELS data_paths: tuple = () # pretrain + sft + preference files/dirs - vocab_size: int | None = None # None: tokenizer report / dataset, else 16384 + vocab_size: int | None = None # None: tokenizer report / dataset, else the bundled 32768 tokenizer seq_len: int | None = None # None: from the dataset profile ram_gb: float | None = None # None: detected token_budget: float | None = None # pretrain tokens; None: dataset tokens (one pass) @@ -73,6 +73,7 @@ class DatasetProfile: chars_per_token: float | None = None seq_p95_tokens: int | None = None # sampled records (estimated) seq_cap_tokens: int | None = None # exact cap from a shard manifest + seq_median_tokens: float | None = None # sampled records (estimated) vocab_size: int | None = None tokenizer_dir: str = "" notes: list = field(default_factory=list) @@ -224,7 +225,8 @@ def profile_datasets(paths, *, max_files: int = 64) -> DatasetProfile: prof.seq_p95_tokens = int(math.ceil(tok_lens[int(0.95 * (len(tok_lens) - 1))])) total_tok = sum(tok_lens) prof.chars_per_token = round(chars / total_tok, 3) if total_tok else None - prof.notes.append(f"median record ≈ {statistics.median(tok_lens):.0f} tokens (estimated)") + prof.seq_median_tokens = float(statistics.median(tok_lens)) + prof.notes.append(f"median record ≈ {prof.seq_median_tokens:.0f} tokens (estimated)") return prof @@ -446,8 +448,10 @@ def plan_training(req: PlanRequest, profile: DatasetProfile | None = None, *, ve policy = MEMORY_POLICIES[level] prof = profile if profile is not None else profile_datasets(req.data_paths) notes, sources = list(prof.notes), {} - vocab = int(req.vocab_size or prof.vocab_size or 16384) - sources["vocab_size"] = "user" if req.vocab_size else ("tokenizer report" if prof.vocab_size else "default") + from chronos.deps import GENERAL_TOKENIZER_VOCAB + vocab = int(req.vocab_size or prof.vocab_size or GENERAL_TOKENIZER_VOCAB) + sources["vocab_size"] = ("user" if req.vocab_size else "tokenizer report" if prof.vocab_size + else "default (bundled general 32k tokenizer)") depth = max(1, int(req.recurrent_depth)) arch = search_architecture(req.target_total, use_moe=req.use_moe, num_experts=req.num_experts, vocab_size=vocab, depth=depth, active_params=req.active_params, @@ -557,12 +561,47 @@ def save_interval(steps: float) -> int: # SWA window: the typical record must fit; long documents use MLA layers. window = min(seq_len, max(128, 1 << int(math.ceil(math.log2(max(2, p95 // 4)))))) if p95 \ else max(128, seq_len // 4) + # Cluster-locality training (on for MoE): measured default strength, window + # = one record (stream segment); C = ⌈E/2k⌉ is resolved from the topology. + from chronos.expert_clusters import DEFAULT_LAMBDA, recommended_window + cluster_lambda = DEFAULT_LAMBDA if req.use_moe and arch.num_experts > 2 * arch.num_experts_per_tok else 0.0 + cluster_window = recommended_window(prof.seq_median_tokens, seq_len) + sources["lambda_cluster_locality"] = ( + "measured sweep, tools/bench_cluster_locality.py (smallest λ on the plateau)" if cluster_lambda + else "off: dense model or fewer than two clusters") + sources["cluster_locality_window"] = ( + "median record length (estimated)" if prof.seq_median_tokens else "default (no record lengths sampled)") per_expert_bytes = 3 * h * arch.ffn_width * 2 # bf16 page expert_mb = routed * 2 / 2**20 ram_budget = None if policy["ram_fraction"] >= 1 or not req.use_moe else \ round(max(per_expert_bytes * L * max(2, arch.num_experts_per_tok) / 2**20, expert_mb * policy["ram_fraction"]), 1) resident_weights = (arch.total - routed * (1 - policy["resident_fraction"])) * 2 + # Loop knobs. Measured at 15M (30 min per arm, one seed per arm): block order beat layer order at equal step + # once the step size is healthy, and a fixed integration horizon T = depth * dt = 2 held at depth 4 and 8. + # The sigmoid parameterisation keeps dt trainable (the clamp default collapsed onto its floor). + loop_knobs = {} + if depth > 1: + from chronos.model.recurrent import recommended_dt_init + loop_knobs = dict(recurrent_order='block', recurrent_dt_param='sigmoid', + recurrent_dt_init=round(recommended_dt_init(depth), 4)) + sources["recurrent_order"] = "measured, 15M one seed: block beat layer at equal step with a healthy dt" + sources["recurrent_dt_param"] = "measured, 15M: the clamp default collapsed onto its floor and stopped learning" + sources["recurrent_dt_init"] = "estimated: horizon 2 / depth (15M, depth 4 and 8; other sizes not measured)" + # The other loop knobs keep the values the 15M runs favoured; each source says why. + loop_knobs.update(recurrent_later_topk=0, recurrent_later_groups=0, lambda_iteration_cluster=0.0, + lookahead_teacher_scope='first', recurrent_dt_min=0.05, recurrent_dt_max=1.0) + sources["recurrent_later_topk"] = ("measured, 15M one seed: 1 expert in later iterations raised valid CE " + "4.543 -> 4.600 at the same speed") + sources["recurrent_later_groups"] = ("measured, 15M one seed: the full block is best per step; 2 of 4 layers " + "in later iterations give about 1.3x steps per second at depth 4 for up to 0.055 more training loss " + "per step; never 1 (one layer looping alone)") + sources["lambda_iteration_cluster"] = ("measured, 15M: with cluster locality on, 99.5-100% of later-iteration " + "clusters are already used at iteration 0") + sources["lookahead_teacher_scope"] = ("measured, 15M: the lookahead head picks the right cluster for 0.97 of " + "tokens at every iteration") + sources["recurrent_dt_min"] = sources["recurrent_dt_max"] = ("measured, 15M: sigmoid arms with range 0.05-1 " + "(depth 4) and 0.1-1 (depth 8) learned dt 0.14-0.30, inside the range") model = dict( architecture_version=3, recurrent_attention_mode="shared_first", rope_layout="per_head", hidden_size=h, num_hidden_layers=L, num_attention_heads=arch.num_attention_heads, @@ -574,12 +613,13 @@ def save_interval(steps: float) -> int: intermediate_size=0 if req.use_moe else arch.ffn_width, lookahead_steps=LOOKAHEAD_STEPS, layer_aware_lookahead=True, layer_aware_cache=True, recurrent_enabled=depth > 1, recurrent_groups=groups, recurrent_depth=depth, prelude_layers=1, - coda_layers=1, min_recurrent_depth=max(1, depth // 2), max_inference_depth=depth, + coda_layers=1, min_recurrent_depth=max(1, depth // 2), max_inference_depth=depth, **loop_knobs, adaptive_halting=depth > 1, halting_threshold=0.95, depth_schedule="fixed_then_adaptive", depth_schedule_warmup_fraction=0.3, recurrent_strategy="scheduled", recurrent_latent_refinement=False, ponder_loss_coef=3e-3, recurrent_distill_coef=0.05, recurrent_stability_coef=1e-3, lambda_balance=5e-3 if req.use_moe else 0.0, lambda_temporal=1e-3, lambda_lookahead=0.1, lambda_lookahead_topk=0.05, fallback_mask_prob=0.08 if req.use_moe else 0.0, dropout=0.0, + lambda_cluster_locality=cluster_lambda, cluster_locality_clusters=0, cluster_locality_window=cluster_window, kv_cache_dtype=policy["kv_cache_dtype"], mla_cache_rope=policy["mla_cache_rope"], router_scope=policy["router_scope"], ram_budget_mb=ram_budget, activation_checkpointing=policy["activation_checkpointing"], optimizer_paging=policy["optimizer_paging"], @@ -590,6 +630,12 @@ def save_interval(steps: float) -> int: # The tokenizer the dataset was profiled with is the one the model needs. config["tokenizer_path"] = prof.tokenizer_dir sources["tokenizer_path"] = "dataset tokenizer report" + elif not req.vocab_size and not prof.vocab_size: + # Nothing named a vocabulary: new models start from the bundled task-neutral 32k tokenizer, whose + # size is the vocab_size chosen above. Old checkpoints keep the legacy 6400 default (chronos.deps). + from chronos.deps import get_general_tokenizer_path + config["tokenizer_path"] = get_general_tokenizer_path() + sources["tokenizer_path"] = "default (bundled general 32k tokenizer)" longrun = [ dict(name="pretrain", budget_fraction=0.5, peak_lr=lr, tokens_per_step=int(batch_tokens), diff --git a/chronos/model/precision_ops.py b/chronos/model/precision_ops.py index 70e55de..2ad9205 100644 --- a/chronos/model/precision_ops.py +++ b/chronos/model/precision_ops.py @@ -30,8 +30,8 @@ class RMSNorm(nn.Module): """RMSNorm with FP32 statistics and a single rounding to the input dtype. - Parameter name (``weight``) and class-name suffix match minimind's - RMSNorm, so checkpoints and the no-decay optimizer grouping are unchanged. + Parameter name (``weight``) and the ``RMSNorm`` class-name suffix are the + checkpoint and no-decay optimizer-grouping contract. """ def __init__(self, dim: int, eps: float = 1e-5): @@ -48,11 +48,9 @@ def forward(self, x: torch.Tensor) -> torch.Tensor: def rope_tables(dim: int, length: int, base: float, scaling, device) -> tuple[torch.Tensor, torch.Tensor]: - """FP32 duplicated cos/sin tables [length, dim] (minimind layout).""" - import chronos.deps # noqa: F401 (minimind on sys.path) - from model.model_minimind import precompute_freqs_cis - cos, sin = precompute_freqs_cis(dim=int(dim), end=int(length), rope_base=base, rope_scaling=scaling) - return cos.to(device=device, dtype=torch.float32), sin.to(device=device, dtype=torch.float32) + """FP32 duplicated cos/sin tables [>=length, dim], shared by every layer.""" + from chronos.model.kernel import rope_tables as _shared + return _shared(dim, length, base, scaling, device) def _rotate_half(x: torch.Tensor) -> torch.Tensor: diff --git a/chronos/model/recurrent.py b/chronos/model/recurrent.py index c01d199..188f36e 100644 --- a/chronos/model/recurrent.py +++ b/chronos/model/recurrent.py @@ -14,6 +14,47 @@ from chronos.model.precision_ops import RMSNorm +def recommended_dt_init(depth, horizon=2.0, cap=0.5): + """Step-size init for a looped block: dt = horizon / depth, at most ``cap``. + + One loop iteration is an explicit Euler step x <- x + dt * f(x) of dx/dtau = f(x), where f is the + block's residual update, so R iterations integrate over the horizon T = R * dt. Near the fixed + direction f(x) ~ lambda * x each iteration multiplies the residual by (1 + dt * lambda) and the loop + by (1 + dt * lambda)^(R-1), about exp(T * lambda): constructive interference sets the total gain through T, + and depth only refines the integration. Holding T fixed therefore keeps the gain while depth grows. + + Measured at 15M (30 min per arm, block order, one seed per arm, noise floor about 0.005-0.008): + - depth 8, dt 0.25 (T = 2) beat dt 0.5 (T = 4) by 0.018-0.079 in every block of steps after step 10; + - depth 8, dt 0.25 beat the clamp default whose dt collapsed to 0.05 (T = 0.4) only by 0.002-0.015; + - depth 8, sigmoid from dt 0.0625 ended at dt 0.033 (T = 0.26) and was worse than dt 0.25 by 0.085-0.333 + after step 100 (within noise before); + - depth 4 was flat for dt 0.2-0.5 (T = 0.8-2) and worse at dt 1.0 or 0.05; + - at equal step depth 8 (dt 0.25) led depth 4 (dt 0.5) by 0.041-0.049 in steps 100-600 and was level + (+0.002, +0.008) afterwards; + - depth 8, sigmoid from dt 0.25 (range 0.1-1) moved to dt 0.145 (T = 1.16) and ended 0.020-0.023 below + the fixed dt 0.25 arm after step 600 (validation CE 4.761 against 4.776), so the optimiser prefers a + smaller T than 2. + The block rescales its own output when dt changes: the per-iteration residual gain g stayed near 1.07 for + dt 0.15-0.5 (effective lambda = (g - 1) / dt fell from 0.48 to 0.13), and the total log-gain + (R - 1) * ln g was 0.45-0.51 in all three. Only kappa = dt * lambda and that total are physical; dt alone + is a gauge. So T = 2 is a safe starting point inside a flat region, not a fitted optimum, and ``cap`` is + the largest dt that was measured; depths 2 and 3 are extrapolation. + Use it with recurrent_dt_param="sigmoid", so the optimizer can still move dt either way.""" + depth = max(1, int(depth)) + return min(float(cap), float(horizon) / depth) + + +def _dt_raw_init(param, dt_init, dt_min, dt_max): + """Raw stored value so step 0 gives dt == dt_init under the chosen parameterisation. + clamp: store dt_init directly. sigmoid: store the logit that inverts dt_min + (dt_max-dt_min)*sigmoid(raw).""" + import math + if param != "sigmoid": + return float(dt_init) + span = max(float(dt_max) - float(dt_min), 1e-9) + frac = min(max((float(dt_init) - float(dt_min)) / span, 1e-6), 1 - 1e-6) + return float(math.log(frac / (1.0 - frac))) + + @dataclass class RecurrentDepthState: halting_probs: torch.Tensor @@ -40,6 +81,7 @@ def __init__(self, config): self.epsilon = float(config.halting_epsilon) self.dt_min = float(config.recurrent_dt_min) self.dt_max = float(config.recurrent_dt_max) + self.dt_param = str(getattr(config, "recurrent_dt_param", "clamp")) self.loop_embeddings = nn.Parameter(torch.zeros(depth, hidden)) self.group_embeddings = nn.Parameter(torch.zeros(groups, hidden)) @@ -49,7 +91,7 @@ def __init__(self, config): nn.init.zeros_(self.halting_head.weight) nn.init.constant_(self.halting_head.bias, -1.0) self.step_sizes = nn.Parameter( - torch.full((groups,), float(config.recurrent_dt_init)) + torch.full((groups,), _dt_raw_init(self.dt_param, config.recurrent_dt_init, self.dt_min, self.dt_max)) ) self.training_progress = 0.0 @@ -98,6 +140,8 @@ def condition(self, hidden: torch.Tensor, step: int, group: int) -> torch.Tensor return hidden + self.loop_embeddings[depth_idx][None, None, :] + self.group_embeddings[group][None, None, :] def step_size(self, group: int) -> torch.Tensor: + if self.dt_param == "sigmoid": + return self.dt_min + (self.dt_max - self.dt_min) * torch.sigmoid(self.step_sizes[group]) return self.step_sizes[group].clamp(self.dt_min, self.dt_max) def contract(self, before: torch.Tensor, after: torch.Tensor, group: int) -> torch.Tensor: diff --git a/chronos/model/temporal_loss.py b/chronos/model/temporal_loss.py index ab013cf..cab49b0 100644 --- a/chronos/model/temporal_loss.py +++ b/chronos/model/temporal_loss.py @@ -1,3 +1,5 @@ +import math + import torch import torch.nn.functional as F @@ -65,6 +67,116 @@ def router_locality_loss( return (-torch.log(overlap_mass / float(top_k))).mean() +def _window_cluster_mass(router_4d: torch.Tensor, membership: torch.Tensor, window: int): + """``[W, C]``: routing mass per cluster for each window (tokens × every dispatch).""" + B, S, V, E = router_4d.shape + C = int(membership.shape[1]) + w = S if int(window or 0) <= 0 else min(int(window), S) + n = S // w + if n <= 0 or C <= 1: + return None + mass = torch.einsum("bsve,ec->bsvc", router_4d.float(), membership.to(router_4d.device, torch.float32)) + return mass[:, : n * w].reshape(B, n, w, V, C).mean(dim=(2, 3)).reshape(B * n, C) + + +def _entropy(p: torch.Tensor) -> torch.Tensor: + p = p.clamp_min(1e-9) + return -(p * p.log()).sum(dim=-1) + + +def cluster_locality_loss( + router_4d: torch.Tensor, + membership: torch.Tensor, + window: int = 0, +) -> torch.Tensor: + """Cluster-locality constraint over a stream and its recurrent iterations. + + ``router_4d`` is ``[B, S, V, E]``: every MoE dispatch (V = virtual layers, + so a recurrent group contributes one slice per loop iteration). + ``membership`` is the ``[E, C]`` one-hot expert→cluster map that the lazy + store pages by. For each window of ``window`` tokens (0 = the whole + sequence) the routing mass per cluster is averaged over its tokens *and* + all its dispatches, giving ``p_w``. The loss is + + 1 − I(window; cluster) / log C, I = H(mean_w p_w) − mean_w H(p_w) + + Low ``H(p_w)`` keeps a stream, across tokens, layers and loop + iterations, inside few clusters: the pages one cluster read serves. + High ``H(mean_w p_w)`` spreads different windows over different + clusters, so experts specialise per stream instead of collapsing onto + one cluster. Range ``[0, 1]``; one window in the batch gives no signal. + """ + if router_4d is None or router_4d.dim() != 4: + return torch.tensor(0.0) + pw = _window_cluster_mass(router_4d, membership, window) + if pw is None: + return router_4d.new_zeros(()) + log_c = math.log(int(membership.shape[1])) + mutual = _entropy(pw.mean(dim=0)) - _entropy(pw).mean() + return 1.0 - mutual / log_c + + +def segment_cluster_loss(router_4d: torch.Tensor, membership: torch.Tensor, segments, + token_mask: torch.Tensor | None = None) -> torch.Tensor: + """``1 − I(segment; cluster)/log C`` with the batch's documents as streams. + + ``segments`` ``[B, S]`` is ``chronos.expert_clusters.segment_ids(input_ids, + window)``: documents found from the tokens' own separators, long ones cut + into window-sized parts. Each segment's cluster mass is averaged over its + real tokens (``token_mask``, default all) and every dispatch; segments + weigh by real-token count. A fixed window that straddles two packed + documents rewards routing both into one cluster, so the split it learns + can follow position instead of content; with documents as the unit, the + way to keep each one inside a cluster while the batch spreads over all + clusters is to send similar documents to the same cluster. + """ + from chronos.expert_clusters import segment_index + if router_4d is None or router_4d.dim() != 4: + return torch.tensor(0.0) + B, S, V, E = router_4d.shape + C = int(membership.shape[1]) + inv, n = segment_index(segments) + if C <= 1 or n <= 1: + return router_4d.new_zeros(()) + mass = torch.einsum("bsve,ec->bsc", router_4d.float(), + membership.to(router_4d.device, torch.float32)).reshape(B * S, C) / V + m = (torch.ones(B * S, device=router_4d.device) if token_mask is None + else token_mask.reshape(B * S).to(router_4d.device, torch.float32)) + idx = torch.as_tensor(inv, device=router_4d.device, dtype=torch.long) + total = mass.new_zeros(n, C).index_add(0, idx, mass * m[:, None]) + count = mass.new_zeros(n).index_add(0, idx, m) + ps = total / count.clamp_min(1.0)[:, None] + weight = count / count.sum().clamp_min(1.0) + marginal = (ps * weight[:, None]).sum(dim=0) + mutual = _entropy(marginal) - (_entropy(ps) * weight).sum() + return 1.0 - mutual / math.log(C) + + +def cluster_routing_metrics(router_4d: torch.Tensor, membership: torch.Tensor, top_k: int, + window: int = 0) -> dict[str, float]: + """Detached diagnostics of the cluster constraint (normalised entropies, clusters touched).""" + if router_4d is None or router_4d.dim() != 4: + return {} + with torch.no_grad(): + B, S, V, E = router_4d.shape + C = int(membership.shape[1]) + w = S if int(window or 0) <= 0 else min(int(window), S) + n = S // w + pw = _window_cluster_mass(router_4d, membership, window) + if pw is None: + return {} + log_c = math.log(C) + k = max(1, min(int(top_k), E)) + cid = membership.to(router_4d.device).argmax(dim=-1)[router_4d.float().topk(k, dim=-1).indices] + hit = torch.zeros(B, S, V, C, device=router_4d.device).scatter_(-1, cid, 1.0) + touched = hit[:, : n * w].reshape(B, n, w * V, C).amax(dim=2).sum(dim=-1) + return { + "cluster_window_entropy": float(_entropy(pw).mean() / log_c), + "cluster_marginal_entropy": float(_entropy(pw.mean(dim=0)) / log_c), + "clusters_per_window": float(touched.mean()), + } + + def router_offload_metrics( router_probs: torch.Tensor, lookahead_probs: torch.Tensor = None, @@ -131,7 +243,7 @@ def load_balance_loss( num_experts_per_tok: int, ) -> torch.Tensor: """ - Standard auxiliary load-balancing loss (same formulation as minimind). + Standard auxiliary load-balancing loss (Switch-Transformer style, E·Σ f_i·P_i over top-k). Args: router_logits: [N, num_experts] (N = B*S flattened) @@ -333,3 +445,22 @@ def total_loss( lookahead_probs, teacher_probs, lookahead_steps, num_experts_per_tok, ) return loss + + +def iteration_cluster_spread(probs5: torch.Tensor, membership: torch.Tensor, token_mask: torch.Tensor | None = None) -> torch.Tensor: + """Iteration-axis cluster locality over ``probs5`` ``[B, S, G, D, E]`` (G recurrent layers, D loop iterations). + + Per token and layer: total variation between each iteration's cluster-mass distribution and the mean over + its iterations, averaged. 0 = every iteration routes into the same clusters, so one cluster read serves + them all; experts inside a cluster may still differ. Twin of ``mlx.training.trainer._iteration_cluster_spread``. + """ + _b, _s, _g, d, _e = probs5.shape + if d < 2 or int(membership.shape[1]) <= 1: + return probs5.new_zeros(()) + mass = torch.einsum("bsgde,ec->bsgdc", probs5.float(), membership.to(probs5.device, torch.float32)) + spread = 0.5 * (mass - mass.mean(dim=3, keepdim=True)).abs().sum(dim=-1) + per_token = spread.mean(dim=(2, 3)) + if token_mask is None: + return per_token.mean() + m = token_mask.to(per_token.dtype) + return (per_token * m).sum() / m.sum().clamp_min(1.0) diff --git a/chronos/monitor/evals.py b/chronos/monitor/evals.py index 9f6ca18..8e6c705 100644 --- a/chronos/monitor/evals.py +++ b/chronos/monitor/evals.py @@ -2,12 +2,12 @@ Trainers record whatever they measure as numeric keys on ``validation`` and ``final`` events: ``valid_ce`` for every run, plus task metrics such as -``probe_en_zh_bleu``, ``accuracy``, ``pass_at_1`` or ``reward_mean``. This -module discovers them; the pages never hard-code a task or a language pair. +``dev_bleu``, ``accuracy``, ``pass_at_1`` or ``reward_mean``. This +module discovers them; the pages never hard-code a task. A key ``_`` whose last token is a known metric name is grouped -by that metric, so ``probe_en_zh_bleu`` and ``probe_zh_en_bleu`` share one -chart with series ``probe en_zh`` / ``probe zh_en``. Everything else gets a +by that metric, so ``probe_math_accuracy`` and ``probe_code_accuracy`` share +one chart with series ``probe math`` / ``probe code``. Everything else gets a chart of its own. Bookkeeping keys (sample counts, durations, token counts) are listed as context, never charted. """ @@ -44,8 +44,8 @@ def is_context_key(key: str) -> bool: def split_key(key: str) -> tuple[str, str]: """Map a key to (metric family, series label). - ``probe_en_zh_bleu`` → (``bleu``, ``probe en_zh``); ``bleu_zh`` → (``bleu``, - ``bleu_zh``); ``accuracy`` → (``accuracy``, ``accuracy``); unknown keys + ``probe_math_accuracy`` → (``accuracy``, ``probe math``); ``bleu_dev`` → + (``bleu``, ``bleu_dev``); ``accuracy`` → (``accuracy``, ``accuracy``); unknown keys form a family of their own. """ head, sep, last = key.rpartition("_") diff --git a/chronos/monitor/server.py b/chronos/monitor/server.py index 1200fc8..f3e7ce1 100644 --- a/chronos/monitor/server.py +++ b/chronos/monitor/server.py @@ -203,6 +203,12 @@ def tensor(request: Request, name: str, run: str | None = None): _guard(request) return {"name": name, "history": _run_or_404(mon.tensor_history, run, name)} + @app.get("/api/lazy_probes") + def lazy_probes(request: Request, run: str | None = None, limit: int = 200): + """Every lazy-expert probe of a run (``lazy_probe.jsonl``), newest last; the snapshot keeps 20.""" + _guard(request) + return {"probes": _run_or_404(mon.lazy_probes, run, max(1, min(int(limit), 1000)))} + @app.get("/api/log") def log(request: Request, run: str | None = None, bytes: int = 16000): # noqa: A002 - query name _guard(request) diff --git a/chronos/monitor/snapshot.py b/chronos/monitor/snapshot.py index 135cad0..44db490 100644 --- a/chronos/monitor/snapshot.py +++ b/chronos/monitor/snapshot.py @@ -137,7 +137,9 @@ def _status(self, path: str, spec: dict | None, rows: list[dict]) -> dict: last = rows[-1] if rows else {} finished = any(r.get("event") == "final" for r in rows[-50:]) declared = heartbeat.get("state") - if declared in ("finished", "failed") and not alive: + if declared in ("finished", "failed") and (not alive or finished): + # A heartbeat that declares the end, backed by a ``final`` event, wins even when the pid + # is still alive (the writer runs inside a longer-lived process, or the pid was reused). state = declared elif finished and not alive: state = "finished" @@ -163,7 +165,62 @@ def _status(self, path: str, spec: dict | None, rows: list[dict]) -> dict: # ---- progress / ETA ------------------------------------------------------ @staticmethod - def _progress(spec: dict | None, status: dict, latest: dict | None, rows: list[dict]) -> dict: + def _rate(prows: list[dict], key: str, horizon_s: float = 1800.0): + """Units of ``key`` per wall second over the latest rows (≤ ``horizon_s``). + + Wall time between log rows includes validation, checkpoints and + telemetry, so the rate already prices them in.""" + pts = [] + for r in prows: + v, ts = r.get(key), r.get("time") + if v is None or ts is None: + continue + try: + pts.append((datetime.fromisoformat(str(ts)).timestamp(), float(v))) + except ValueError: + continue + if len(pts) < 2: + return None + t_end, v_end = pts[-1] + first = next((p for p in pts if t_end - p[0] <= horizon_s), pts[0]) + if first is pts[-1]: + first = pts[-2] + dt, dv = t_end - first[0], v_end - first[1] + return dv / dt if dt > 0 and dv > 0 else None + + @classmethod + def _phase_eta(cls, phase: dict, prows: list[dict], hb: dict, active: bool, spec: dict | None) -> dict: + """Remaining wall seconds of one phase, from measured progress. + + A phase ends at the first of: its step total (step schedule), its data + target (``extra.target_passes``), or its wall-clock deadline. Each + measured candidate is projected at the recent rate; the smallest wins + and is reported with its basis. The deadline always bounds it.""" + last = prows[-1] if prows else {} + cands = {} + if active and hb.get("phase_wall_s") is not None and hb.get("phase_budget_s"): + cands["deadline"] = max(0.0, float(hb["phase_budget_s"]) - float(hb["phase_wall_s"])) + if (spec or {}).get("schedule", "time") != "time" and last.get("total"): + rate = cls._rate(prows, "step") + if rate: + cands["steps"] = max(0, int(last["total"]) - int(last.get("step") or 0)) / rate + target = (((spec or {}).get("extra") or {}).get("target_passes") or {}).get(phase.get("name")) + if target and last.get("passes") is not None: + rate = cls._rate(prows, "passes") + if rate: + cands["target_passes"] = max(0.0, float(target) - float(last["passes"])) / rate + if not cands and last.get("total") and last.get("step_s"): + cands["steps"] = max(0, int(last["total"]) - int(last.get("step") or 0)) * float(last["step_s"]) + if not cands: + return {} + basis = min(cands, key=cands.get) + out = {"remaining_s": cands[basis], "basis": basis} + if "deadline" in cands and basis != "deadline": + out["deadline_remaining_s"] = cands["deadline"] + return out + + @classmethod + def _progress(cls, spec: dict | None, status: dict, latest: dict | None, rows: list[dict]) -> dict: phases = (spec or {}).get("phases") or [] hb = status.get("heartbeat") or {} budget_h = float((spec or {}).get("budget_hours") or 0.0) @@ -172,6 +229,11 @@ def _progress(spec: dict | None, status: dict, latest: dict | None, rows: list[d current = hb.get("phase") or (latest or {}).get("phase") names = [p.get("name") for p in phases] index = names.index(current) if current in names else 0 + finished = status.get("state") == "finished" + # A clock ETA needs a live process; a stopped or failed run keeps its + # remaining time (work left at the measured rate) but no end time. + moving = status.get("state") in ("running", "starting", "evaluating", "checkpointing") + now = time.time() out = [] for i, phase in enumerate(phases): prows = [r for r in rows if r.get("phase") == phase.get("name") and "event" not in r] @@ -179,20 +241,48 @@ def _progress(spec: dict | None, status: dict, latest: dict | None, rows: list[d entry = {"name": phase.get("name"), "budget_h": round(train_s * float(phase.get("budget_fraction", 0)) / 3600, 2), "step": last.get("step", 0), "total": last.get("total"), "state": "complete" if i < index else ("active" if i == index else "pending")} - if i == index and status.get("state") == "finished": + if i == index and finished: entry["state"] = "complete" + if last.get("passes") is not None: + entry["passes"] = last["passes"] out.append(entry) result = {"phases": out, "current": current, "budget_hours": budget_h, "train_budget_hours": round(train_s / 3600, 2)} if hb.get("phase_wall_s") is not None and hb.get("phase_budget_s"): result["phase_fraction"] = min(1.0, float(hb["phase_wall_s"]) / float(hb["phase_budget_s"])) - result["phase_remaining_s"] = max(0.0, float(hb["phase_budget_s"]) - float(hb["phase_wall_s"])) elif latest and latest.get("total"): result["phase_fraction"] = min(1.0, latest["step"] / max(1, latest["total"])) - result["phase_remaining_s"] = max(0, latest["total"] - latest["step"]) * float(latest.get("step_s") or 0) - if result.get("phase_remaining_s") is not None: - later = sum(e["budget_h"] for e in out[index + 1:]) * 3600 - result["run_remaining_s"] = result["phase_remaining_s"] + later + budget_h * 3600 * reserve - result["eta"] = datetime.fromtimestamp(time.time() + result["run_remaining_s"]).isoformat(timespec="minutes") + if not finished and out: + cur_rows = [r for r in rows if r.get("phase") == current and "event" not in r] + eta = cls._phase_eta(phases[index], cur_rows, hb, True, spec) + if eta: + result["phase_remaining_s"] = eta["remaining_s"] + result["eta_basis"] = eta["basis"] + if "deadline_remaining_s" in eta: + result["phase_deadline_remaining_s"] = eta["deadline_remaining_s"] + out[index]["remaining_s"] = round(eta["remaining_s"], 1) + if moving: + out[index]["eta"] = datetime.fromtimestamp(now + eta["remaining_s"]).isoformat(timespec="minutes") + out[index]["eta_basis"] = eta["basis"] + # A phase that ends before its deadline hands the rest of its + # time to the next one (deadlines are fixed from the run start), + # so later phases are bounded by their deadlines; the run ends + # at the last one plus the final-eval reserve. + cursor = eta["remaining_s"] + slack = max(0.0, eta.get("deadline_remaining_s", eta["remaining_s"]) - eta["remaining_s"]) + for j in range(index + 1, len(out)): + span = out[j]["budget_h"] * 3600 + slack + target = (((spec or {}).get("extra") or {}).get("target_passes") or {}).get(out[j]["name"]) + out[j]["remaining_s"] = round(cursor + span, 1) + if moving: + out[j]["eta"] = datetime.fromtimestamp(now + cursor + span).isoformat(timespec="minutes") + out[j]["eta_basis"] = "deadline" if not target else "deadline (target_passes may end it earlier)" + cursor += span + slack = 0.0 + result["run_remaining_s"] = cursor + budget_h * 3600 * reserve + if moving: + result["eta"] = datetime.fromtimestamp(now + result["run_remaining_s"]).isoformat(timespec="minutes") + else: + result["eta_paused"] = status.get("state") if hb.get("run_wall_s") is not None: result["run_wall_s"] = hb["run_wall_s"] return result @@ -229,6 +319,7 @@ def snapshot(self, run: str | None = None, *, history: bool = True) -> dict: self._stream(os.path.join(path, "samples.jsonl"), max_rows=200).read()[-40:] if isinstance(x, dict)], "inspections": self._inspections(path), "checkpoints": self._checkpoints(path), + "lazy_probe": self._lazy_probes(path, limit=20), "counts": {"metric_rows": len(train_rows), "events": len(events), "parameter_rows": len(params)}, } if history: @@ -303,7 +394,7 @@ def log_tail(self, run: str | None, max_bytes: int = 16000) -> str: @staticmethod def _inspections(path: str) -> list[dict]: """Offline reports: identity fields plus every numeric leaf, flattened - (``held_out.valid_ce``, ``translation.en_zh.bleu``, ``qa.accuracy`` …).""" + (``held_out.valid_ce``, ``probe.dev.bleu``, ``qa.accuracy`` …).""" meta = ("time", "phase", "step", "tokens_seen", "device", "compute_dtype", "train_dtype", "elapsed_s") out = [] for file in sorted(glob.glob(os.path.join(path, "inspections", "*.json")))[-12:]: @@ -314,6 +405,55 @@ def _inspections(path: str) -> list[dict]: out.append({"file": os.path.basename(file), **{k: data.get(k) for k in meta}, "metrics": metrics}) return out + # Columns the monitor table shows per probe variant (the full result stays in lazy_probe.jsonl). + PROBE_MEASURED = ("tokens_per_s", "decode_tokens_per_s", "speed_vs_full", "tokens", + "prefill_time_s", "decode_time_s", + "resident_hit_rate", "cache_hits", "cache_misses", + "prediction_hit_rate", "prediction_hits", "prediction_total", + "cold_miss_predict_hit_rate", "cold_prediction_hits", "cold_prediction_total", + "on_demand_loads", "on_demand_load_time_s", "sync_ssd_loads", "cluster_loads", + "prefetch_wait_time_s", "peak_rss_gb", "spec_acceptance_rate", + "paging_resolved", "num_pages", "num_clusters", "storage_format", "eviction_policy", + "effective_expert_budget", "ideal_active_experts") + PROBE_FIDELITY = ("exact_match_rate", "positionwise_agreement", "min_matching_prefix", "reference_tokens") + + def _lazy_probes(self, path: str, limit: int = 20) -> list[dict]: + """Mid-training lazy-expert probe results (``lazy_probe.jsonl``), newest last. + + Each entry keeps phase / step / wall time and, per variant, the label, + settings, measured efficiency + hit rates and fidelity versus the + full-memory reference; skipped requests keep their reason.""" + out = [] + for row in self._stream(os.path.join(path, "lazy_probe.jsonl"), max_rows=500).read()[-limit:]: + if not isinstance(row, dict): + continue + entry = {k: row.get(k) for k in ("time", "phase", "step", "checkpoint", "wall_s", "skipped", "error") if k in row} + result = row.get("result") or {} + if result.get("skipped"): + entry["skipped"] = result["skipped"] + if result.get("variants") is not None: + entry.update({k: result.get(k) for k in ("trained_with_clusters", "auto_paging", "num_experts", + "top_k", "truncated", "variants_requested", "elapsed_s", + "conditions")}) + refs = result.get("references") or {} + entry["references"] = {b: (r.get("measured") or {}).get("tokens_per_s") for b, r in refs.items()} + entry["reference_measured"] = { + b: ({"error": r["error"]} if "error" in r else + {k: (r.get("measured") or {}).get(k) for k in self.PROBE_MEASURED}) + for b, r in refs.items()} + entry["variants"] = [{ + "label": v.get("label"), "settings": v.get("settings"), + **({"error": v["error"]} if "error" in v else {}), + "measured": {k: (v.get("measured") or {}).get(k) for k in self.PROBE_MEASURED}, + "fidelity": {k: (v.get("fidelity") or {}).get(k) for k in self.PROBE_FIDELITY}, + } for v in result["variants"]] + out.append(entry) + return out + + def lazy_probes(self, run: str | None, limit: int = 200) -> list[dict]: + path = self.run_dir(run) + return self._lazy_probes(path, limit=limit) if path else [] + @staticmethod def _checkpoints(path: str) -> list[dict]: files = glob.glob(os.path.join(path, "*.pth")) + glob.glob(os.path.join(path, "checkpoints", "*.pkl")) diff --git a/chronos/monitor/static/app.js b/chronos/monitor/static/app.js index 5024df6..20bff24 100644 --- a/chronos/monitor/static/app.js +++ b/chronos/monitor/static/app.js @@ -18,14 +18,14 @@ const STR = { n_stale: "最近 {age} 没有新的日志行(正常间隔约 {int})。训练进程可能卡住或被挂起。", n_derived: "此运行由旧版代码启动,没有 status.json / parameters.jsonl。状态由指标流和进程表推断;张量统计、路由热图和评测探针会在下次以新代码恢复(resume)后出现。", n_error: "运行报告错误:", n_paused: "训练进程处于 SIGSTOP 挂起状态,恢复后会继续。", n_none: "没有找到运行目录。用 chronos longrun 启动训练后,这里会自动出现。", - phase: "阶段", step: "步", of: "/", budget: "预算", remaining: "剩余", eta: "预计完成", wall: "已用", elapsed: "已运行", + phase: "阶段", step: "步", of: "/", budget: "预算", remaining: "剩余", eta: "预计完成", basis_deadline: "按时间预算", basis_steps: "按步数进度", basis_target_passes: "按数据轮次进度", phase_eta: "本阶段预计 {t}", wall: "已用", elapsed: "已运行", ph_complete: "完成", ph_active: "进行中", ph_pending: "未开始", pretrain: "预训练", sft: "SFT", k_loss: "训练损失", k_ce: "主损失 (CE)", k_valid: "最佳验证 CE", k_tps: "吞吐", k_eta: "预计完成", k_mem: "内存", k_grad: "梯度范数", k_depth: "平均循环深度", k_lr: "学习率", k_route: "路由熵", sub_ppl: "困惑度 {v}", sub_at: "第 {s} 步", sub_proc: "含填充 {v} tok/s", sub_footprint: "进程物理占用 (phys_footprint)", sub_peak: "MLX 峰值 {v} · 活跃 {a}", sub_clip: "裁剪阈值 {v}", sub_maxdepth: "最大 {v}", sub_entmax: "上限 {v}", sub_left: "剩余 {v}", t_overview: "总览", t_loss: "损失分量", t_recurrent: "循环深度", t_routing: "MoE 路由", t_params: "参数统计", - t_evals: "评测与样例", t_config: "训练参数", t_log: "日志", t_ckpt: "检查点", + t_evals: "评测与样例", t_lazy: "懒加载", t_config: "训练参数", t_log: "日志", t_ckpt: "检查点", window: "窗口", w_all: "全部", w_last: "最近 {n} 点", phase_all: "全部阶段", events_on: "显示验证/回滚标记", c_loss: "训练损失", c_primary: "主损失 (CE)", c_valid: "验证 CE", c_lr: "学习率", c_grad: "梯度范数(裁剪前)", c_tps: "吞吐 (tok/s)", c_step: "单步耗时 (s)", c_mem: "MLX 内存 (GB)", c_tokens: "累计 token", @@ -60,14 +60,14 @@ const STR = { n_stale: "No new log line for {age} (usual interval about {int}). The trainer may be stuck or suspended.", n_derived: "This run was started by older code and writes no status.json / parameters.jsonl. Status is derived from the metric stream and the process table; tensor stats, routing heatmaps and evaluation probes appear after the next resume with the new code.", n_error: "The run reported an error: ", n_paused: "The trainer is suspended (SIGSTOP) and will continue when resumed.", n_none: "No run directories found. Runs started with chronos longrun show up here.", - phase: "Phase", step: "step", of: "/", budget: "budget", remaining: "remaining", eta: "ETA", wall: "used", elapsed: "Elapsed", + phase: "Phase", step: "step", of: "/", budget: "budget", remaining: "remaining", eta: "ETA", basis_deadline: "by time budget", basis_steps: "by step progress", basis_target_passes: "by data-pass progress", phase_eta: "phase ends ~{t}", wall: "used", elapsed: "Elapsed", ph_complete: "complete", ph_active: "active", ph_pending: "pending", pretrain: "Pretrain", sft: "SFT", k_loss: "Training loss", k_ce: "Primary loss (CE)", k_valid: "Best valid CE", k_tps: "Throughput", k_eta: "ETA", k_mem: "Memory", k_grad: "Grad norm", k_depth: "Mean recurrent depth", k_lr: "Learning rate", k_route: "Routing entropy", sub_ppl: "perplexity {v}", sub_at: "step {s}", sub_proc: "{v} tok/s incl. padding", sub_footprint: "process phys_footprint", sub_peak: "MLX peak {v} · active {a}", sub_clip: "clip at {v}", sub_maxdepth: "max {v}", sub_entmax: "max {v}", sub_left: "{v} left", t_overview: "Overview", t_loss: "Loss terms", t_recurrent: "Recurrence", t_routing: "MoE routing", t_params: "Parameters", - t_evals: "Evals & samples", t_config: "Training parameters", t_log: "Log", t_ckpt: "Checkpoints", + t_evals: "Evals & samples", t_lazy: "Lazy experts", t_config: "Training parameters", t_log: "Log", t_ckpt: "Checkpoints", window: "Window", w_all: "All", w_last: "Last {n} points", phase_all: "All phases", events_on: "Show validation/rollback marks", c_loss: "Training loss", c_primary: "Primary loss (CE)", c_valid: "Validation CE", c_lr: "Learning rate", c_grad: "Grad norm (pre-clip)", c_tps: "Throughput (tok/s)", c_step: "Step time (s)", c_mem: "MLX memory (GB)", c_tokens: "Tokens seen", @@ -248,6 +248,7 @@ async function refresh() { S.error = null; if (snap.run) S.run = snap.run; if (S.tab === "log" && S.logAuto) await loadLog(); + if (S.tab === "lazy") await loadLazy(); renderAll(false); } catch (e) { if (e instanceof AuthError) showLogin(""); @@ -309,7 +310,8 @@ function renderProgress() { const p = snap.progress || {}; const latest = snap.latest || {}; const pct = isNum(p.phase_fraction) ? ` · ${(p.phase_fraction * 100).toFixed(1)}%` : ""; - const right = [p.eta ? `${tr("eta")} ${fmtTime(p.eta)}` : null, + const basis = (b) => (b ? tr("basis_" + String(b).split(" ")[0]) : ""); + const right = [p.eta ? `${tr("eta")} ${fmtTime(p.eta)}${p.eta_basis ? ` (${basis(p.eta_basis)})` : ""}` : null, isNum(p.run_remaining_s) ? `${tr("remaining")} ${fmtDur(p.run_remaining_s)}` : null, isNum(p.run_wall_s) ? `${tr("wall")} ${fmtDur(p.run_wall_s)}` : null, isNum(p.budget_hours) && p.budget_hours ? `${tr("budget")} ${p.budget_hours} h` : null].filter(Boolean).join(" · "); @@ -329,7 +331,8 @@ function renderProgress() { h("div", { class: "track", role: "progressbar", "aria-label": phaseName(ph.name), "aria-valuemin": "0", "aria-valuemax": "100", "aria-valuenow": String(Math.round(frac * 100)) }, fill), h("b", { text: phaseName(ph.name) }), ` ${tr("ph_" + ph.state)} · ${ph.budget_h} h`, - ph.total ? ` · ${fmtInt(ph.step)}/${fmtInt(ph.total)}` : "")); + ph.total ? ` · ${fmtInt(ph.step)}/${fmtInt(ph.total)}` : "", + ph.eta && ph.state !== "complete" ? ` · ${tr("phase_eta", { t: fmtTime(ph.eta) })}` : "")); } box.append(phases); } @@ -368,7 +371,8 @@ function renderTiles() { tile(tr("k_valid"), best ? fmt(best.valid_ce) : "—", best ? `${tr("sub_at", { s: fmtInt(best.step) })} · ${tr("sub_ppl", { v: fmt(Math.exp(best.valid_ce), 3) })}` : null); tile(tr("k_tps"), isNum(L.tokens_per_s) ? `${fmtCount(L.tokens_per_s)} tok/s` : "—", isNum(L.processed_tokens_per_s) ? tr("sub_proc", { v: fmtCount(L.processed_tokens_per_s) }) : null, "tokens_per_s"); - tile(tr("k_eta"), p.eta ? fmtTime(p.eta) : "—", isNum(p.run_remaining_s) ? tr("sub_left", { v: fmtDur(p.run_remaining_s) }) : null); + tile(tr("k_eta"), p.eta ? fmtTime(p.eta) : (p.eta_paused ? tr(`st_${p.eta_paused}`) : "—"), + isNum(p.run_remaining_s) ? tr("sub_left", { v: fmtDur(p.run_remaining_s) }) : null); const osMem = isNum(mem.footprint_gb); // live process footprint has no history; MLX peak does tile(tr("k_mem"), osMem ? fmtGB(mem.footprint_gb) : fmtGB(L.peak_mem_gb), `${osMem ? tr("sub_footprint") + " · " : ""}${tr("sub_peak", { v: fmtGB(L.peak_mem_gb), a: fmtGB(L.active_mem_gb) })}`, osMem ? null : "peak_mem_gb"); @@ -379,7 +383,7 @@ function renderTiles() { } // ---- tabs ---------------------------------------------------------------------------- -const TABS = ["overview", "loss", "recurrent", "routing", "params", "evals", "config", "log", "ckpt"]; +const TABS = ["overview", "loss", "recurrent", "routing", "params", "evals", "lazy", "config", "log", "ckpt"]; function renderTabs() { const nav = clear($("tabs")); if (!TABS.includes(S.tab)) S.tab = "overview"; @@ -405,6 +409,7 @@ function selectTab(id) { renderTabs(); renderPanel(true); if (id === "log") loadLog().then(() => renderPanel(true)); + if (id === "lazy") loadLazy().then(() => renderPanel(true)); } // ---- tooltip ------------------------------------------------------------------------- const tip = { @@ -441,7 +446,7 @@ function bisect(xs, x) { // ---- line chart (small multiple; one y axis; crosshair tooltip) --------------------------- const pendingDraws = []; -function lineChart({ title, series, events = [], fmtY = fmt, note }) { +function lineChart({ title, series, events = [], fmtY = fmt, note, yRange }) { const live = series.map((sr, i) => ({ ...sr, cls: sr.cls || `s${i + 1}`, pts: (sr.rows || []).filter((r) => isNum(r[sr.key]) && isNum(r.step)).map((r) => ({ x: r.step, y: r[sr.key], t: r.time })) })) .filter((sr) => sr.pts.length); @@ -456,10 +461,10 @@ function lineChart({ title, series, events = [], fmtY = fmt, note }) { const svg = s("svg", { role: "img", "aria-label": `${title}: ${lastPts ? fmtY(lastPts.y) : ""}` }); card.append(svg); if (note) card.append(h("figcaption", { class: "sub muted", text: note })); - pendingDraws.push(() => drawLines(card, svg, live, events, fmtY)); + pendingDraws.push(() => drawLines(card, svg, live, events, fmtY, yRange)); return card; } -function drawLines(card, svg, live, events, fmtY) { +function drawLines(card, svg, live, events, fmtY, yRange) { const W = Math.max(240, Math.round(svg.getBoundingClientRect().width || card.clientWidth - 28)), H = 170; const m = { l: 52, r: 10, t: 8, b: 22 }; clear(svg); @@ -470,6 +475,8 @@ function drawLines(card, svg, live, events, fmtY) { if (x0 === x1) { x0 -= 1; x1 += 1; } if (y0 === y1) { const d = Math.abs(y0) * 0.05 || 1; y0 -= d; y1 += d; } const pad = (y1 - y0) * 0.06; y0 -= pad; y1 += pad; + if (yRange) { y0 = Math.max(y0, yRange[0]); y1 = Math.min(y1, yRange[1]); } // rates stay in [0, 1] + if (yRange && y0 >= y1) { y0 = yRange[0]; y1 = yRange[1]; } const X = (v) => m.l + (v - x0) / (x1 - x0) * (W - m.l - m.r); const Y = (v) => m.t + (1 - (v - y0) / (y1 - y0)) * (H - m.t - m.b); const grid = s("g", { class: "grid" }), axis = s("g", { class: "axis" }); @@ -957,6 +964,162 @@ function panelLog() { h("label", { class: "field" }, auto, tr("log_auto"))), pre]; } +// ---- lazy experts (lazy_probe.jsonl) --------------------------------------------------------------------- +Object.assign(STR.zh, { + ev_lazy_probe: "懒加载探针", + lz_none: "这个运行还没有懒加载探针结果(lazy_probe.jsonl)。Web UI 启动的训练默认在每次验证后探测;命令行训练可另开 `chronos lazy-probe --watch <运行目录>`。", + lz_latest: "最近一次探针", lz_meta: "{phase} · 第 {step} 步 · {t} · 耗时 {s}", lz_cond: "贪心解码,{n} 条提示,每条最多 {k} 个 token;全部为实测值。全内存参考 = 同一后端的全内存解码。", + lz_trained: "使用簇局部性训练", lz_auto: "自动分页", lz_experts: "专家 / top-k", lz_capped: "变体数被限制:请求 {n},实测 {c}", + lz_skipped: "已跳过:{r}", lz_failed: "失败:{r}", yes: "是", no: "否", + lz_skip_dense: "稠密模型,没有可分页的路由专家", lz_skip_no_ckpt: "磁盘上还没有检查点", + lz_skip_busy: "上一次探测仍在运行", lz_skip_writing: "检查点仍在写入", + lz_skip_superseded: "已被第 {step} 步的新验证取代", + lz_eff: "效率", lz_paging: "分页与加载", lz_hit: "命中率", lz_fid: "保真度(对照全内存参考)", lz_ref: "全内存参考", + lz_variant: "组合", lz_backend: "后端", lz_tps: "token/秒", lz_dtps: "解码 token/秒", lz_vsfull: "相对全内存速度", lz_prefill: "预填充 (s)", lz_decode: "解码 (s)", + lz_rss: "峰值 RSS", lz_wait: "预取等待 (s)", lz_loads: "按需加载次数", lz_load_s: "加载耗时 (s)", lz_sync: "同步 SSD 读", lz_cluster_loads: "簇加载", + lz_pages: "分页 · 页数", lz_budget: "专家预算", lz_ideal: "理想激活专家", lz_evict: "淘汰策略", lz_accept: "草稿接受率", + lz_res_hit: "常驻命中率", lz_hits: "命中 / 未命中", lz_pred_hit: "预测命中率", lz_pred_n: "预测命中 / 总数", lz_cold: "冷未命中预测率", lz_cold_n: "冷未命中预测 / 总数", + lz_exact: "完全一致", lz_agree: "token 一致率", lz_prefix: "最短一致前缀", lz_ref_tokens: "参照 token", lz_error: "错误", + lz_pick: "组合", lz_c_hit: "命中率 · {p}", lz_c_fid: "保真度 · {p}", lz_c_speed: "解码速度(token/秒)· {p}", + lz_c_load: "加载次数 · {p}", lz_c_rss: "峰值 RSS (GB) · {p}", lz_history_note: "每次验证后运行一次;步数在每个阶段重新计数,所以只画当前阶段。", + lz_all: "全部探针记录", lz_status: "状态", lz_variants_n: "组合数", lz_ok: "完成", +}); +Object.assign(STR.en, { + ev_lazy_probe: "Lazy-expert probe", + lz_none: "No lazy-expert probe results for this run yet (lazy_probe.jsonl). Web UI training probes after each validation by default; for a command-line run, start `chronos lazy-probe --watch `.", + lz_latest: "Latest probe", lz_meta: "{phase} · step {step} · {t} · took {s}", lz_cond: "Greedy decoding, {n} prompts, up to {k} tokens each; all values measured. Reference = full-memory decode on the same backend.", + lz_trained: "Trained with cluster locality", lz_auto: "Auto paging layout", lz_experts: "Experts / top-k", lz_capped: "Variants capped: {n} requested, {c} measured", + lz_skipped: "Skipped: {r}", lz_failed: "Failed: {r}", yes: "yes", no: "no", + lz_skip_dense: "dense model, no routed experts to page", lz_skip_no_ckpt: "no checkpoint on disk yet", + lz_skip_busy: "previous probe still running", lz_skip_writing: "checkpoint still being written", + lz_skip_superseded: "superseded by the validation at step {step}", + lz_eff: "Efficiency", lz_paging: "Paging and loads", lz_hit: "Hit rates", lz_fid: "Fidelity (vs the full-memory reference)", lz_ref: "Full-memory reference", + lz_variant: "Variant", lz_backend: "Backend", lz_tps: "Tokens/s", lz_dtps: "Decode tokens/s", lz_vsfull: "Speed vs full memory", lz_prefill: "Prefill (s)", lz_decode: "Decode (s)", + lz_rss: "Peak RSS", lz_wait: "Prefetch wait (s)", lz_loads: "On-demand loads", lz_load_s: "Load time (s)", lz_sync: "Sync SSD reads", lz_cluster_loads: "Cluster loads", + lz_pages: "Paging · pages", lz_budget: "Expert budget", lz_ideal: "Ideal active experts", lz_evict: "Eviction", lz_accept: "Draft acceptance", + lz_res_hit: "Resident hit rate", lz_hits: "Hits / misses", lz_pred_hit: "Prediction hit rate", lz_pred_n: "Predicted hits / total", lz_cold: "Cold-miss predicted", lz_cold_n: "Cold hits / total", + lz_exact: "Exact match", lz_agree: "Token agreement", lz_prefix: "Shortest matching prefix", lz_ref_tokens: "Reference tokens", lz_error: "Error", + lz_pick: "Variant", lz_c_hit: "Hit rates · {p}", lz_c_fid: "Fidelity · {p}", lz_c_speed: "Decode speed (tokens/s) · {p}", + lz_c_load: "Loads · {p}", lz_c_rss: "Peak RSS (GB) · {p}", lz_history_note: "One probe after each validation; steps restart in every phase, so only the current phase is plotted.", + lz_all: "All probes", lz_status: "Status", lz_variants_n: "Variants", lz_ok: "done", +}); +// Results of chronos/workbench/lazy_probe.py after each validation: the checkpoint is +// decoded with experts paged from SSD and compared with a full-memory decode. +const fmtPct = (v) => (isNum(v) ? (v * 100).toFixed(1) + "%" : "—"); +const fmtSec = (v) => (isNum(v) ? (Math.abs(v) >= 10 ? v.toFixed(1) : v.toFixed(3)) : "—"); +const pair = (a, b) => (isNum(a) || isNum(b) ? `${fmtInt(a)} / ${fmtInt(b)}` : "—"); +const yesNo = (v) => (v === null || v === undefined ? "—" : tr(v ? "yes" : "no")); +async function loadLazy() { + try { const r = await api("api/lazy_probes", { run: S.run, limit: 500 }); S.lazy = r.probes || []; S.lazyFor = S.run; } + catch (e) { if (e instanceof AuthError) showLogin(""); else S.lazy = null; } +} +function lazyProbes() { return (S.lazy && S.lazyFor === S.run ? S.lazy : (S.snap && S.snap.lazy_probe)) || []; } +const lzm = (label, key, f) => ({ label, get: (v) => (v.measured || {})[key], num: true, fmt: f }); +const lzf = (label, key, f) => ({ label, get: (v) => (v.fidelity || {})[key], num: true, fmt: f }); +// Skip reasons come from chronos.workbench.lazy_probe / train_worker in English; unknown ones pass through. +const LZ_SKIPS = [[/^dense model/, "lz_skip_dense"], [/^no checkpoint/, "lz_skip_no_ckpt"], + [/^previous probe/, "lz_skip_busy"], [/^checkpoint still/, "lz_skip_writing"], + [/^superseded by step (\d+)/, "lz_skip_superseded"]]; +function lazySkipText(reason) { + for (const [re, key] of LZ_SKIPS) { + const m = re.exec(String(reason || "")); + if (m) return tr(key, { step: m[1] || "" }); + } + return String(reason || ""); +} +function lazyStatus(p) { + if (p.error) return tr("lz_failed", { r: p.error }); + if (p.skipped) return tr("lz_skipped", { r: lazySkipText(p.skipped) }); + return tr("lz_ok"); +} +function lazyLatest(latest) { + const c = latest.conditions || {}; + const refs = Object.entries(latest.reference_measured || {}).map(([b, m]) => ({ + label: `${tr("lz_ref")} · ${b}`, measured: m && !m.error ? m : {}, error: m && m.error })); + const variants = latest.variants || []; + const name = { label: tr("lz_variant"), get: (v) => v.label, keep: true }; + const err = { label: tr("lz_error"), get: (v) => v.error || "" }; + const box = (title, columns, rows) => h("div", { class: "box card" }, h("h3", { text: title }), table(columns, rows, { hideEmpty: true })); + const facts = [`${tr("lz_trained")}: ${yesNo(latest.trained_with_clusters)}`, `${tr("lz_auto")}: ${latest.auto_paging ?? "—"}`, + `${tr("lz_experts")}: ${latest.num_experts ?? "—"} / ${latest.top_k ?? "—"}`, + latest.truncated ? tr("lz_capped", { n: fmtInt(latest.variants_requested), c: fmtInt(variants.length) }) : null].filter(Boolean); + return [ + h("div", { class: "box card" }, h("h3", { text: tr("lz_latest") }), + h("p", { class: "caption", text: tr("lz_meta", { phase: phaseName(latest.phase), step: fmtInt(latest.step), + t: fmtTime(latest.time), s: fmtDur(latest.elapsed_s ?? latest.wall_s) }) }), + h("p", { class: "caption muted", text: facts.join(" · ") }), + h("p", { class: "caption muted", text: tr("lz_cond", { n: fmtInt(c.prompts), k: fmtInt(c.max_new_tokens) }) })), + box(tr("lz_eff"), [name, lzm(tr("lz_tps"), "tokens_per_s", (v) => fmt(v, 4)), lzm(tr("lz_dtps"), "decode_tokens_per_s", (v) => fmt(v, 4)), + lzm(tr("lz_vsfull"), "speed_vs_full", (v) => (isNum(v) ? `${v.toFixed(2)}×` : "—")), + lzm(tr("lz_prefill"), "prefill_time_s", fmtSec), lzm(tr("lz_decode"), "decode_time_s", fmtSec), + lzm(tr("lz_rss"), "peak_rss_gb", fmtGB), lzm(tr("lz_accept"), "spec_acceptance_rate", fmtPct), err], [...variants, ...refs]), + box(tr("lz_paging"), [name, lzm(tr("lz_loads"), "on_demand_loads", fmtInt), lzm(tr("lz_load_s"), "on_demand_load_time_s", fmtSec), + lzm(tr("lz_sync"), "sync_ssd_loads", fmtInt), lzm(tr("lz_cluster_loads"), "cluster_loads", fmtInt), + lzm(tr("lz_wait"), "prefetch_wait_time_s", fmtSec), + { label: tr("lz_pages"), get: (v) => ((v.measured || {}).paging_resolved ? `${v.measured.paging_resolved} · ${fmtInt(v.measured.num_pages)}` : null) }, + lzm(tr("lz_budget"), "effective_expert_budget", fmtInt), lzm(tr("lz_ideal"), "ideal_active_experts", fmtInt), + { label: tr("lz_evict"), get: (v) => (v.measured || {}).eviction_policy }], variants), + box(tr("lz_hit"), [name, lzm(tr("lz_res_hit"), "resident_hit_rate", fmtPct), + { label: tr("lz_hits"), num: true, get: (v) => (v.measured && (isNum(v.measured.cache_hits) || isNum(v.measured.cache_misses)) ? pair(v.measured.cache_hits, v.measured.cache_misses) : null) }, + lzm(tr("lz_pred_hit"), "prediction_hit_rate", fmtPct), + { label: tr("lz_pred_n"), num: true, get: (v) => (v.measured && v.measured.prediction_total ? pair(v.measured.prediction_hits, v.measured.prediction_total) : null) }, + lzm(tr("lz_cold"), "cold_miss_predict_hit_rate", fmtPct), + { label: tr("lz_cold_n"), num: true, get: (v) => (v.measured && v.measured.cold_prediction_total ? pair(v.measured.cold_prediction_hits, v.measured.cold_prediction_total) : null) }], + variants), + box(tr("lz_fid"), [name, lzf(tr("lz_exact"), "exact_match_rate", fmtPct), lzf(tr("lz_agree"), "positionwise_agreement", fmtPct), + lzf(tr("lz_prefix"), "min_matching_prefix", fmtInt), lzf(tr("lz_ref_tokens"), "reference_tokens", fmtInt), err], variants), + ]; +} +// One chosen variant across the probes of the newest phase (steps restart per phase). +function lazyHistory(done) { + const phase = done[done.length - 1].phase; + const runs = done.filter((p) => p.phase === phase); + const labels = [...new Set(runs.flatMap((p) => (p.variants || []).filter((v) => !v.error).map((v) => v.label)))]; + if (runs.length < 2 || !labels.length) return []; + const pick = labels.includes(S.lazyPick) ? S.lazyPick : (labels.find((l) => l.includes("sync_on_demand")) || labels[0]); + const rows = runs.map((p) => { + const v = (p.variants || []).find((x) => x.label === pick && !x.error); + return v ? { step: p.step, time: p.time, ...(v.measured || {}), ...(v.fidelity || {}) } : null; + }).filter(Boolean); + const sel = h("select", { "aria-label": tr("lz_pick"), onchange: (e) => { S.lazyPick = e.target.value; renderPanel(true); } }, + labels.map((l) => h("option", { value: l, text: l }))); + sel.value = pick; + const p = phaseName(phase); + const line = (title, series, fmtY, yRange) => + lineChart({ title, fmtY, yRange, series: series.map(([key, label]) => ({ key, label, rows })) }); + return [h("div", { class: "toolbar" }, h("label", { class: "field" }, tr("lz_pick"), sel)), + h("p", { class: "caption muted", text: tr("lz_history_note") }), + charts( + line(tr("lz_c_hit", { p }), [["resident_hit_rate", tr("lz_res_hit")], ["prediction_hit_rate", tr("lz_pred_hit")], + ["cold_miss_predict_hit_rate", tr("lz_cold")]], fmtPct, [0, 1]), + line(tr("lz_c_fid", { p }), [["exact_match_rate", tr("lz_exact")], ["positionwise_agreement", tr("lz_agree")]], fmtPct, [0, 1]), + line(tr("lz_c_speed", { p }), [["tokens_per_s", tr("lz_tps")], ["decode_tokens_per_s", tr("lz_dtps")]], (v) => fmt(v, 4)), + line(tr("lz_c_load", { p }), [["on_demand_loads", tr("lz_loads")], ["sync_ssd_loads", tr("lz_sync")], ["cluster_loads", tr("lz_cluster_loads")]], fmtCount), + line(tr("lz_c_rss", { p }), [["peak_rss_gb", tr("lz_rss")]], (v) => fmt(v, 3)))]; +} +function panelLazy() { + const probes = lazyProbes(); + if (!probes.length) return [h("div", { class: "empty", text: tr("lz_none") })]; + const done = probes.filter((p) => Array.isArray(p.variants)); + const last = probes[probes.length - 1]; + const out = []; + if (last !== done[done.length - 1]) { + out.push(h("div", { class: "notice warn", role: "status" }, h("span", { class: "icon", text: "!" }), + h("span", { text: `${phaseName(last.phase)} · ${tr("step")} ${fmtInt(last.step)}: ${lazyStatus(last)}` }))); + } + if (done.length) out.push(...lazyLatest(done[done.length - 1]), ...lazyHistory(done)); + out.push(h("div", { class: "box card" }, h("h3", { text: tr("lz_all") }), table([ + { label: tr("time"), key: "time", fmt: fmtTime }, { label: tr("phase"), key: "phase", fmt: phaseName }, + { label: tr("step"), key: "step", num: true, fmt: fmtInt }, { label: tr("lz_status"), get: lazyStatus }, + { label: tr("lz_variants_n"), num: true, get: (p) => (Array.isArray(p.variants) ? p.variants.length : null), fmt: fmtInt }, + { label: tr("lz_res_hit"), num: true, fmt: fmtPct, + get: (p) => { const xs = (p.variants || []).map((v) => (v.measured || {}).resident_hit_rate).filter(isNum); return xs.length ? Math.min(...xs) : null; } }, + { label: tr("lz_exact"), num: true, fmt: fmtPct, + get: (p) => { const xs = (p.variants || []).map((v) => (v.fidelity || {}).exact_match_rate).filter(isNum); return xs.length ? Math.min(...xs) : null; } }, + ], probes.slice().reverse()))); + return out; +} + // ---- checkpoints ----------------------------------------------------------------------------------------- function panelCkpt() { const list = (S.snap && S.snap.checkpoints) || []; @@ -968,7 +1131,7 @@ function panelCkpt() { // ---- render orchestration ----------------------------------------------------------------------------------- const PANELS = { overview: panelOverview, loss: panelLoss, recurrent: panelRecurrent, routing: panelRouting, params: panelParams, - evals: panelEvals, config: panelConfig, log: panelLog, ckpt: panelCkpt }; + evals: panelEvals, lazy: panelLazy, config: panelConfig, log: panelLog, ckpt: panelCkpt }; function panelKey() { const snap = S.snap || {}; if (S.tab === "params") return [snap.run, (snap.parameters || {}).step, S.tensors && S.tensors.step, S.tensorPick, (S.tensorHist || []).length, S.lang].join("|"); @@ -1002,7 +1165,7 @@ function renderFoot() { function renderAll(force) { renderChrome(); renderNotices(); renderProgress(); renderTiles(); renderPanel(force); renderFoot(); } // ---- wiring -------------------------------------------------------------------------------------------------- -function resetRunCaches() { S.params = S.tensors = S.tensorHist = S.log = null; S.tensorPick = null; S.paramsFor = S.tensorsFor = undefined; S.panelKey = null; S.phase = ""; } +function resetRunCaches() { S.params = S.tensors = S.tensorHist = S.log = S.lazy = null; S.tensorPick = null; S.paramsFor = S.tensorsFor = undefined; S.panelKey = null; S.phase = ""; } function init() { $("run").addEventListener("change", (e) => { S.run = e.target.value; resetRunCaches(); refresh(); }); $("lang").addEventListener("click", () => { diff --git a/chronos/residency_planner.py b/chronos/residency_planner.py new file mode 100644 index 0000000..b1b571c --- /dev/null +++ b/chronos/residency_planner.py @@ -0,0 +1,154 @@ +"""Next-use residency planning for lazy expert pages (backend-free; no torch / mlx imports). + +A lazy store holds fewer expert pages than one forward touches, so the page +to evict is the one needed *latest*. Decoding is repetitive enough to +predict that order: + +* forwards of one kind run the same dispatch sequence (prelude, every loop + iteration of every recurrent layer, coda), and consecutive tokens route + similarly, so the previous forward of the same kind is a next-use + reference; +* in self-speculative decoding the *draft queue* is a better reference for + the verify forward: each draft token ran the prelude and the first + ``draft_depth`` iterations, and verify re-runs exactly those dispatches + for the same token, plus the deeper iterations. + +``NextUsePlanner`` records the page-access trace of every forward (fed by +the MoE runtime hooks), builds the next-use table of the reference before +each forward, and ranks pages for eviction: + + -1 selected by the dispatch running now and not executed yet → never + 0 used again later in this forward → evict the one needed latest + 1 not again in this forward, expected in the next one + 2 not expected → evict first; pages the LookaheadRouter predicts + (:meth:`hint`) go last, then the lowest decayed demand + (``score ← decay·score + uses`` per forward, the sliding window) + +It also proposes a bounded prefetch: pages the reference needs early that +are not resident, at most as many as free slots plus resident pages of +class 2, so a prefetch never displaces a page needed sooner. +""" +from __future__ import annotations + +from typing import Dict, Iterable, List, Optional, Tuple + +Key = Tuple[int, int] # (physical MoE layer, loop iteration) + +_FAR = 1 << 30 + + +class NextUsePlanner: + def __init__(self, num_experts: int, *, decay: float = 0.7): + if not 0.0 <= float(decay) < 1.0: + raise ValueError("decay must be in [0, 1)") + self.num_experts = int(num_experts) + self.decay = float(decay) + self.score = [0.0] * self.num_experts + self._order: Dict[Key, int] = {} # dispatch → execution ordinal (learned once) + self._prev: Dict[str, List[Tuple[int, int]]] = {} + self._drafts: List[List[Tuple[int, int]]] = [] + self._kind = "single" + self._trace: List[Tuple[int, int]] = [] + self._next_use: Dict[int, List[int]] = {} + self._next_forward: set[int] = set() + self._here = -1 + self._pending: frozenset = frozenset() + self._hint: frozenset = frozenset() + self.stats = {"forwards": 0, "accesses": 0, "queue_verifies": 0} + + # ── forward boundaries ──────────────────────────────────────── + + def begin_forward(self, kind: str) -> None: + """``kind``: ``"single"`` (one-token decode), ``"multi"`` (prefill / verify) or ``"draft"``.""" + self._kind = kind + self._trace = [] + self._here = -1 + self._pending = frozenset() + ref = list(self._prev.get(kind, ())) + if kind == "multi" and self._drafts: + ref += [a for d in self._drafts for a in d] + self.stats["queue_verifies"] += 1 + table: Dict[int, List[int]] = {} + for ordinal, eid in ref: + table.setdefault(eid, []).append(ordinal) + for v in table.values(): + v.sort() + self._next_use = table + nxt = "draft" if kind == "multi" and "draft" in self._prev else kind + self._next_forward = {eid for _o, eid in self._prev.get(nxt, ())} + + def access(self, layer: int, iteration: int, eid: int, pending: Iterable[int] = ()) -> None: + """Dispatch ``(layer, iteration)`` is about to run expert ``eid``. + + ``pending`` are the dispatch's other selected experts that run after + it (an MoE runs its selected experts in id order); they are never + evicted to make room for ``eid``. + """ + key = (int(layer), int(iteration)) + ordinal = self._order.get(key) + if ordinal is None: + ordinal = self._order[key] = len(self._order) + self._here = ordinal + self._pending = frozenset(int(e) for e in pending) + entry = (ordinal, int(eid)) + if not self._trace or self._trace[-1] != entry: # loader + touch report one run + self._trace.append(entry) + self.stats["accesses"] += 1 + + def end_forward(self, *, verify: bool = False) -> None: + trace = self._trace + self._prev[self._kind] = trace + if self._kind == "draft": + self._drafts.append(trace) + elif verify: + self._drafts = [] + used = {eid for _o, eid in trace} + d = self.decay + self.score = [s * d + (1.0 if i in used else 0.0) for i, s in enumerate(self.score)] + self.stats["forwards"] += 1 + + def hint(self, expert_ids: Iterable[int]) -> None: + """Pages predicted for the next token (LookaheadRouter); kept over other class-2 pages.""" + self._hint = frozenset(int(e) for e in expert_ids) + + # ── ranking ─────────────────────────────────────────────────── + + def evict_key(self, eid: int): + """Sort key; the *largest* is evicted first.""" + if int(eid) in self._pending: + return (-1, 0, 0.0) + later = self._next_use.get(int(eid)) + if later: + for ordinal in later: + if ordinal > self._here: + return (0, ordinal, 0.0) + if int(eid) in self._next_forward: + return (1, 0, -self.score[int(eid)]) + return (2, 0 if int(eid) in self._hint else 1, -self.score[int(eid)]) + + def victim(self, candidates: Iterable[int]) -> Optional[int]: + best, best_key = None, None + for eid in candidates: + key = self.evict_key(eid) + if best_key is None or key > best_key: + best, best_key = eid, key + return best + + def upcoming(self, limit: Optional[int] = None) -> List[int]: + """Pages the upcoming forward is expected to touch, earliest first.""" + first = sorted((v[0], eid) for eid, v in self._next_use.items() if v) + ids = [eid for _o, eid in first] + return ids if limit is None else ids[:max(0, int(limit))] + + def prefetch_plan(self, resident: Iterable[int], capacity: int) -> List[int]: + """Missing pages the upcoming forward needs, earliest first, that fit without + displacing a page needed sooner: free slots plus resident class-2 pages. + + Call between :meth:`begin_forward` and the forward itself. + """ + resident = set(int(e) for e in resident) + spare = sum(1 for e in resident if self.evict_key(e)[0] == 2) + budget = spare + max(0, int(capacity) - len(resident)) + if budget <= 0: + return [] + return [eid for eid in self.upcoming() if eid not in resident][:budget] diff --git a/chronos/runtime/inference_engine.py b/chronos/runtime/inference_engine.py index fd0e1ec..0f253af 100644 --- a/chronos/runtime/inference_engine.py +++ b/chronos/runtime/inference_engine.py @@ -13,9 +13,6 @@ output_ids = engine.generate(input_ids, max_new_tokens=200) print(engine.last_stats) """ -import sys -import chronos.deps # ensure minimind on sys.path - import time from typing import Dict, Hashable, List, Optional @@ -299,15 +296,18 @@ def setup_from_state_dict( self, state_dict: dict, warm_expert_ids: Optional[List[int]] = None, + clusters: Optional[List[List[int]]] = None, ): """Setup path for real lazy expert loading on CPU/MPS. The caller loads base/non-expert weights into the live model, then hands the full checkpoint here so ExpertStore can shard only expert tensors to SSD and replace live experts with placeholders. + ``clusters`` pages by cluster file (``chronos.lazy_experts``); None + keeps one shard per expert. """ print("[Chronos] Offloading expert weights to SSD from checkpoint...") - self.cache_manager.expert_store.offload_from_state_dict(state_dict) + self.cache_manager.expert_store.offload_from_state_dict(state_dict, clusters=clusters) self.cache_manager.start() print("[Chronos] Warming up VRAM cache...") self.cache_manager.warm_up(warm_expert_ids) @@ -317,10 +317,11 @@ def setup_from_state_reader( self, reader, warm_expert_ids: Optional[List[int]] = None, + clusters: Optional[List[List[int]]] = None, ): """Setup lazy expert loading from a safetensors/GGUF export reader.""" print("[Chronos] Offloading expert weights to SSD from export reader...") - self.cache_manager.expert_store.offload_from_state_reader(reader) + self.cache_manager.expert_store.offload_from_state_reader(reader, clusters=clusters) self.cache_manager.start() print("[Chronos] Warming up VRAM cache...") self.cache_manager.warm_up(warm_expert_ids) diff --git a/chronos/serving/adapter.py b/chronos/serving/adapter.py index 033728b..2da9ef8 100644 --- a/chronos/serving/adapter.py +++ b/chronos/serving/adapter.py @@ -12,6 +12,8 @@ import torch +from chronos.tokenizer.visible import decode_visible + from .api_compat import ( message_text, openai_chat_response, @@ -60,7 +62,7 @@ def generate(self, *, messages=None, prompt=None, max_tokens: int = 128, modality_mask=(torch.ones(ids.shape[0]) if modalities else None), ) generated = output[:, ids.shape[1]:] - text = self.tokenizer.decode(generated[0].tolist(), skip_special_tokens=True) + text = decode_visible(self.tokenizer, generated[0].tolist()) stats = dict(getattr(self.engine, "last_stats", {}) or {}) stats.setdefault("prompt_tokens", int(ids.shape[1])) stats.setdefault("completion_tokens", int(generated.shape[1])) diff --git a/chronos/serving/ollama_server.py b/chronos/serving/ollama_server.py index 8b2a8e5..2629810 100644 --- a/chronos/serving/ollama_server.py +++ b/chronos/serving/ollama_server.py @@ -3,8 +3,8 @@ The stock ``ollama`` CLI and any Ollama/OpenAI client can talk to the native Chronos runtime by pointing at this server:: - chronos serve --models-dir runs/enzh_50m_v1 --port 11435 - OLLAMA_HOST=127.0.0.1:11435 ollama run chronos_enzh_sft "Hello world" + chronos serve --models-dir runs/my_run --port 11435 + OLLAMA_HOST=127.0.0.1:11435 ollama run chronos_sft "Hello world" The kernel is never converted to another architecture: recurrent depth, SSD-lazy experts with lookahead prefetch, compressed KV and self-speculative @@ -30,6 +30,8 @@ except ImportError: # pragma: no cover - serving extra not installed FastAPI = HTTPException = Request = JSONResponse = PlainTextResponse = StreamingResponse = None +from chronos.serving.tool_calls import ToolCallStream, ollama_tool_calls, openai_tool_calls, split_tool_calls + OLLAMA_COMPAT_VERSION = "0.40.14" @@ -42,6 +44,28 @@ def _digest(path: str) -> str: return hashlib.sha256(f"{path}:{st.st_size}:{st.st_mtime_ns}".encode()).hexdigest() +def _chat_messages(body: dict) -> list[dict]: + """Request messages as template input: role, content, and (when present) + the assistant's ``tool_calls`` (Ollama/OpenAI shapes; OpenAI string + arguments are parsed) so tool conversations render as they were trained.""" + out = [] + for m in body.get("messages") or []: + msg = {"role": m.get("role", "user"), "content": m.get("content") or ""} + calls = [] + for call in m.get("tool_calls") or []: + fn = dict(call.get("function") or call) + if isinstance(fn.get("arguments"), str): + try: + fn["arguments"] = json.loads(fn["arguments"]) + except ValueError: + pass + calls.append({"function": {"name": fn.get("name", ""), "arguments": fn.get("arguments", {})}}) + if calls: + msg["tool_calls"] = calls + out.append(msg) + return out + + def _options(body: dict) -> dict: opts = dict(body.get("options") or {}) return { @@ -148,6 +172,7 @@ async def show(request: Request): cfg = meta.get("config", {}) info = {"general.architecture": "chronos", "chronos.recurrent_depth": cfg.get("recurrent_depth"), "chronos.recurrent_attention_mode": cfg.get("recurrent_attention_mode"), + "chronos.recurrent_order": cfg.get("recurrent_order", "layer"), "chronos.num_experts": cfg.get("num_experts"), "chronos.experts_per_token": cfg.get("num_experts_per_tok"), "chronos.kv_latent_dim": cfg.get("kv_latent_dim"), "chronos.context_length": cfg.get("max_position_embeddings"), "chronos.hidden_size": cfg.get("hidden_size"), "chronos.vocab_size": cfg.get("vocab_size")} @@ -165,7 +190,10 @@ def ps(): entry.update(size_vram=int(st.get("vram_bytes", 0) or 0), expires_at=datetime.fromtimestamp(runtime.last_used.get(name, time.time()) + runtime.keep_alive_s, timezone.utc).isoformat().replace("+00:00", "Z"), - chronos={"device": lm.device, "lazy_experts": lm.lazy_experts, "expert_store": st}) + chronos={"device": lm.device, "lazy_experts": lm.lazy_experts, + **{k: lm.meta[k] for k in ("paging", "paging_resolved", "num_pages") + if k in (lm.meta or {})}, + "expert_store": st}) out.append(entry) return {"models": out} @@ -194,7 +222,9 @@ def events(): final["error"] = item["error"] yield shape(None, final) else: - yield shape(item["text"], None) + chunk = shape(item["text"], None) + if chunk is not None: # text held back (possible start of a tag) + yield chunk return events def _respond(body, events, collect): @@ -235,8 +265,7 @@ def collect(items): async def chat(request: Request): body = await request.json() name = (body.get("model") or "").split(":")[0] - messages = [{"role": m.get("role", "user"), "content": m.get("content", "")} - for m in body.get("messages") or []] + messages = _chat_messages(body) if _unload_if_requested(body, name): return {"model": body.get("model"), "created_at": _now(), "message": {"role": "assistant", "content": ""}, "done": True, "done_reason": "unload"} @@ -244,17 +273,36 @@ async def chat(request: Request): if not messages: return {"model": body.get("model"), "created_at": _now(), "message": {"role": "assistant", "content": ""}, "done": True, "done_reason": "load"} - ids = runtime.encode_chat(lm, messages) + ids = runtime.encode_chat(lm, messages, body.get("tools")) + # With ``tools`` the model may answer with blocks: parse them + # into message.tool_calls (Ollama shape) as they stream. + parser = ToolCallStream() if body.get("tools") else None + + def message(text, calls=()): + msg = {"role": "assistant", "content": text} + if calls: + msg["tool_calls"] = ollama_tool_calls(list(calls)) + return msg def shape(text, final): if final is not None: - return {**final, "message": {"role": "assistant", "content": ""}} - return {"model": body.get("model"), "created_at": _now(), - "message": {"role": "assistant", "content": text}, "done": False} + tail = parser.finish()[0] if parser is not None else "" + return {**final, "message": message(tail)} + if parser is None: + return {"model": body.get("model"), "created_at": _now(), "message": message(text), "done": False} + content, calls = parser.feed(text) + if not content and not calls: + return None + return {"model": body.get("model"), "created_at": _now(), "message": message(content, calls), + "done": False} def collect(items): - text = "".join(i["message"]["content"] for i in items[:-1]) - return {**items[-1], "message": {"role": "assistant", "content": text}} + text = "".join(i["message"]["content"] for i in items) + calls = [c for i in items for c in i["message"].get("tool_calls", [])] + msg = {"role": "assistant", "content": text.strip() if calls else text} + if calls: + msg["tool_calls"] = calls + return {**items[-1], "message": msg} return _respond(body, _run(body, ids, lm, load_s, shape), collect) @app.get("/v1/models") @@ -268,31 +316,55 @@ async def openai_chat(request: Request): body = await request.json() name = (body.get("model") or "").split(":")[0] lm, load_s = _resolve(name) - messages = [{"role": m.get("role", "user"), "content": m.get("content", "")} for m in body.get("messages") or []] - ids = runtime.encode_chat(lm, messages) + ids = runtime.encode_chat(lm, _chat_messages(body), body.get("tools")) opts = _options({**body, "options": {"num_predict": body.get("max_tokens") or body.get("max_completion_tokens") or 256, "temperature": body.get("temperature", 0.0), "top_p": body.get("top_p", 1.0), "seed": body.get("seed"), "stop": body.get("stop"), **(body.get("chronos") or {})}}) cid, created = f"chatcmpl-{uuid.uuid4().hex}", int(time.time()) + with_tools = bool(body.get("tools")) + + def finish_reason(final, n_calls): + return "tool_calls" if n_calls else final.get("done_reason", "stop") + if body.get("stream"): def sse(): + parser = ToolCallStream() if with_tools else None + n_calls = 0 + + def chunk(delta, reason=None, extra=None): + out = {"id": cid, "object": "chat.completion.chunk", "created": created, "model": name, + "choices": [{"index": 0, "delta": delta, "finish_reason": reason}], **(extra or {})} + return f"data: {json.dumps(out, ensure_ascii=False)}\n\n" for item in runtime.generate_stream(name, ids, **opts): if item.get("done"): - chunk = {"id": cid, "object": "chat.completion.chunk", "created": created, "model": name, - "choices": [{"index": 0, "delta": {}, "finish_reason": item.get("done_reason", "stop")}], - "chronos": item} - yield f"data: {json.dumps(chunk, ensure_ascii=False)}\n\ndata: [DONE]\n\n" + tail = parser.finish()[0] if parser is not None else "" + if tail: + yield chunk({"content": tail}) + yield chunk({}, finish_reason(item, n_calls), {"chronos": item}) + "data: [DONE]\n\n" + elif parser is None: + yield chunk({"content": item["text"]}) else: - chunk = {"id": cid, "object": "chat.completion.chunk", "created": created, "model": name, - "choices": [{"index": 0, "delta": {"content": item["text"]}, "finish_reason": None}]} - yield f"data: {json.dumps(chunk, ensure_ascii=False)}\n\n" + content, calls = parser.feed(item["text"]) + if content: + yield chunk({"content": content}) + if calls: + yield chunk({"tool_calls": openai_tool_calls(calls, start=n_calls)}) + n_calls += len(calls) return StreamingResponse(sse(), media_type="text/event-stream") items = list(runtime.generate_stream(name, ids, **opts)) final = items[-1] + text = "".join(i["text"] for i in items[:-1]) + msg = {"role": "assistant", "content": text} + calls = [] + if with_tools: + content, calls = split_tool_calls(text) + if calls: + msg = {"role": "assistant", "content": content or None, + "tool_calls": [{k: v for k, v in c.items() if k != "index"} # index: stream deltas only + for c in openai_tool_calls(calls)]} return {"id": cid, "object": "chat.completion", "created": created, "model": name, - "choices": [{"index": 0, "message": {"role": "assistant", "content": "".join(i["text"] for i in items[:-1])}, - "finish_reason": final.get("done_reason", "stop")}], + "choices": [{"index": 0, "message": msg, "finish_reason": finish_reason(final, len(calls))}], "usage": {"prompt_tokens": final.get("prompt_tokens", 0), "completion_tokens": final.get("completion_tokens", 0), "total_tokens": final.get("prompt_tokens", 0) + final.get("completion_tokens", 0)}, "chronos": final} @@ -311,6 +383,9 @@ def main(argv=None) -> int: "(auto: CUDA bf16/fp16, MPS fp32, CPU fp32)") parser.add_argument("--no-lazy-experts", action="store_true", help="keep every expert resident (no SSD offload)") parser.add_argument("--ram-expert-fraction", type=float, default=0.5) + parser.add_argument("--paging", choices=["auto", "cluster", "expert"], default="auto", + help="expert page layout; auto pages by training cluster when the checkpoint " + "was trained with cluster locality, per expert otherwise") # Inference-only options (default: whatever the checkpoint config says). parser.add_argument("--kv-cache-dtype", choices=["auto", "int8"], default=None, help="int8: per-token int8 KV cache with FP32 group scales") @@ -338,7 +413,7 @@ def main(argv=None) -> int: overrides = {k: v for k, v in overrides.items() if v is not None} runtime = ChronosRuntime(args.models_dir, device=args.device, lazy_experts=not args.no_lazy_experts, ram_expert_fraction=args.ram_expert_fraction, dtype=args.dtype, - inference_overrides=overrides) + inference_overrides=overrides, paging=args.paging) print(f"[chronos serve] http://{args.host}:{args.port} models={sorted(runtime.available())} " f"auth={'on' if args.api_key else 'off (loopback only)'} overrides={overrides or 'none'}", flush=True) if args.monitor_runs_dir: diff --git a/chronos/serving/runtime.py b/chronos/serving/runtime.py index b765fc4..96c72fc 100644 --- a/chronos/serving/runtime.py +++ b/chronos/serving/runtime.py @@ -17,6 +17,8 @@ import torch +from chronos.tokenizer.visible import decode_visible + def _rss_mb() -> float: try: @@ -87,12 +89,14 @@ def _find_tokenizer_dir(ckpt_path: str, meta: dict) -> str: def load_model(path: str, *, name: str | None = None, device: str | None = "auto", lazy_experts: bool = True, ram_expert_fraction: float = 0.5, expert_cache_root: str | None = None, dtype: str = "auto", - inference_overrides: dict | None = None) -> LoadedModel: + inference_overrides: dict | None = None, paging: str = "auto") -> LoadedModel: """Load a Chronos checkpoint for serving. With ``lazy_experts`` (default) the routed experts are sharded to an SSD cache and only ``ram_expert_fraction`` of them are ever resident; the - rest stream in on demand, guided by the lookahead router. ``dtype`` + rest stream in on demand, guided by the lookahead router. ``paging`` + (``chronos.lazy_experts.page_layout``) pages by training cluster when the + checkpoint was trained with cluster locality, per expert otherwise. ``dtype`` picks the single compute dtype (``chronos.precision.resolve_torch``): weights, activations, KV cache and expert pages all use it. """ @@ -116,21 +120,27 @@ def load_model(path: str, *, name: str | None = None, device: str | None = "auto weights = load_checkpoint_state_dict(path, map_location="cpu") model = ChronosForCausalLM(config) engine = None + paging_info = {} if lazy_experts and getattr(config, "use_moe", True): - from chronos.runtime.inference_engine import ChronosInferenceEngine - from ui.tabs.inference_tab import ( - _apply_offload_expert_budget, _checkpoint_expert_cache_dir, - _replace_torch_experts_with_placeholders, + from chronos.lazy_experts import ( + apply_torch_budget, checkpoint_cache_dir, page_layout, torch_experts_to_placeholders, ) + from chronos.runtime.inference_engine import ChronosInferenceEngine + layout = page_layout(config, paging) base = {k: v for k, v in weights.items() if ".mlp.experts." not in k} load_state_dict_controlled(model, base, allow_missing_substrings=(".mlp.experts.",)) - _replace_torch_experts_with_placeholders(model, config) + torch_experts_to_placeholders(model, config) model, precision = place_torch_model(model, device, dtype) model = model.eval() - cache_dir = expert_cache_root or _checkpoint_expert_cache_dir(path, config) + cache_dir = checkpoint_cache_dir(path, config, tag=layout["tag"]) + if expert_cache_root: + cache_dir = os.path.join(expert_cache_root, os.path.basename(cache_dir)) engine = ChronosInferenceEngine(model, config, ssd_dir=cache_dir) - _apply_offload_expert_budget(engine, config, ram_expert_fraction) - engine.setup_from_state_dict(weights, warm_expert_ids=[]) + apply_torch_budget(engine, config, ram_expert_fraction) + engine.setup_from_state_dict(weights, warm_expert_ids=[], + clusters=None if layout["tag"] == "e" else layout["clusters"]) + paging_info = {"paging": layout["paging"], "paging_resolved": layout["resolved"], + "num_pages": layout["num_pages"]} else: load_state_dict_controlled(model, weights) model, precision = place_torch_model(model, device, dtype) @@ -141,7 +151,7 @@ def load_model(path: str, *, name: str | None = None, device: str | None = "auto config=config, model=model, tokenizer=tokenizer, engine=engine, device=device, lazy_experts=engine is not None, meta={"tokenizer_dir": tok_dir, "precision": precision.as_dict(), - "inference_overrides": applied, **meta_full}) + "inference_overrides": applied, **paging_info, **meta_full}) class ChronosRuntime: @@ -149,12 +159,16 @@ class ChronosRuntime: def __init__(self, models_dir: str | None = None, *, device: str = "auto", lazy_experts: bool = True, ram_expert_fraction: float = 0.5, keep_alive_s: float = 300.0, dtype: str = "auto", - inference_overrides: dict | None = None): + inference_overrides: dict | None = None, paging: str = "auto"): self.models_dir = models_dir self.inference_overrides = dict(inference_overrides or {}) self.dtype = dtype self.device, self.lazy_experts = device, lazy_experts self.ram_expert_fraction = ram_expert_fraction + from chronos.expert_clusters import PAGING_MODES + if paging not in PAGING_MODES: + raise ValueError(f"paging must be one of {PAGING_MODES}") + self.paging = paging self.keep_alive_s = keep_alive_s self.loaded: dict[str, LoadedModel] = {} self.last_used: dict[str, float] = {} @@ -184,7 +198,8 @@ def get(self, name: str) -> LoadedModel: lazy_experts=self.lazy_experts, ram_expert_fraction=self.ram_expert_fraction, dtype=self.dtype, - inference_overrides=self.inference_overrides) + inference_overrides=self.inference_overrides, + paging=self.paging) self.last_used[name] = time.time() return self.loaded[name] @@ -232,8 +247,11 @@ def fwd(ids, cache, depth): return out return fwd - def encode_chat(self, lm: LoadedModel, messages: list[dict]) -> list[int]: - text = lm.tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) + def encode_chat(self, lm: LoadedModel, messages: list[dict], tools: list | None = None) -> list[int]: + # ``tools`` reach the template only when given, so templates without + # tool support render exactly as before. + extra = {"tools": tools} if tools else {} + text = lm.tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True, **extra) return lm.tokenizer(text, add_special_tokens=False)["input_ids"] def encode_prompt(self, lm: LoadedModel, prompt: str, system: str | None = None, raw: bool = False): @@ -281,7 +299,7 @@ def on_token(t): if t in eos: return generated.append(t) - text = tok.decode(generated, skip_special_tokens=True) + text = decode_visible(tok, generated) # keeps even if special if text.endswith("�"): return # wait for the rest of a multi-byte char delta, emitted_text = text[len(emitted_text):], text diff --git a/chronos/serving/tool_calls.py b/chronos/serving/tool_calls.py new file mode 100644 index 0000000..b79e7b7 --- /dev/null +++ b/chronos/serving/tool_calls.py @@ -0,0 +1,130 @@ +"""Parse ``{json}`` blocks out of generated text. + +The chat template (``chronos.tokenizer.model.CHAT_TEMPLATE``) teaches the +model to emit tool calls as ``{"name": ..., "arguments": {...}} +`` lines after (optional) assistant text. ``ToolCallStream`` +consumes decoded text pieces as they stream and splits them into visible +content and parsed calls, holding back only what could still be the start +of a tag, so clients never see half a tag. + +A block whose JSON does not parse, or that has no ``name``, is returned as +ordinary content: nothing the model wrote is dropped. +""" +from __future__ import annotations + +import json +import uuid + +OPEN, CLOSE = "", "" + + +def _prefix_hold(text: str, tag: str) -> int: + """Length of the longest suffix of ``text`` that is a proper prefix of ``tag``.""" + for n in range(min(len(text), len(tag) - 1), 0, -1): + if tag.startswith(text[-n:]): + return n + return 0 + + +def parse_call(body: str) -> dict | None: + """``{"name": str, "arguments": dict}`` or ``None`` for an invalid block.""" + try: + obj = json.loads(body) + except (TypeError, ValueError): + return None + if not isinstance(obj, dict): + return None + fn = obj.get("function") if isinstance(obj.get("function"), dict) else obj + name = fn.get("name") + if not isinstance(name, str) or not name: + return None + args = fn.get("arguments", fn.get("parameters", {})) + if isinstance(args, str): + try: + args = json.loads(args) if args.strip() else {} + except ValueError: + return None + if not isinstance(args, dict): + return None + return {"name": name, "arguments": args} + + +class ToolCallStream: + """Incremental splitter: ``feed(piece) -> (content, calls)``, then ``finish()``. + + Whitespace between consecutive calls (the template's ``"\\n"`` joiner) is + not reported as content once a call has been parsed.""" + + def __init__(self): + self._buf = "" # undecided text (outside a block) + self._block = None # text inside an open block, or None + self._pending_ws = "" # whitespace after a call, emitted only if real text follows + self.calls: list[dict] = [] + + def _emit_text(self, text: str) -> str: + if not text: + return "" + if self.calls and not text.strip(): + self._pending_ws += text + return "" + out, self._pending_ws = self._pending_ws + text, "" + return out + + def feed(self, piece: str) -> tuple[str, list[dict]]: + content, calls = [], [] + self._buf += piece or "" + while True: + if self._block is None: + i = self._buf.find(OPEN) + if i < 0: + keep = _prefix_hold(self._buf, OPEN) + content.append(self._emit_text(self._buf[: len(self._buf) - keep])) + self._buf = self._buf[len(self._buf) - keep:] + break + content.append(self._emit_text(self._buf[:i])) + self._block, self._buf = "", self._buf[i + len(OPEN):] + else: + j = self._buf.find(CLOSE) + if j < 0: + keep = _prefix_hold(self._buf, CLOSE) + self._block += self._buf[: len(self._buf) - keep] + self._buf = self._buf[len(self._buf) - keep:] + break + body, self._buf = self._block + self._buf[:j], self._buf[j + len(CLOSE):] + self._block = None + call = parse_call(body.strip()) + if call is None: + content.append(self._emit_text(OPEN + body + CLOSE)) + else: + self._pending_ws = "" + self.calls.append(call) + calls.append(call) + return "".join(content), calls + + def finish(self) -> tuple[str, list[dict]]: + """Flush held text; an unterminated block is returned as content.""" + tail = self._buf if self._block is None else OPEN + self._block + self._buf + self._buf, self._block = "", None + text = tail if not (self.calls and not tail.strip()) else "" + self._pending_ws = "" + return text, [] + + +def split_tool_calls(text: str) -> tuple[str, list[dict]]: + """One-shot form of ``ToolCallStream``.""" + stream = ToolCallStream() + content, calls = stream.feed(text) + tail, _ = stream.finish() + return (content + tail).strip() if calls else content + tail, calls + + +def ollama_tool_calls(calls: list[dict]) -> list[dict]: + """Ollama ``message.tool_calls`` (arguments stay an object).""" + return [{"function": {"name": c["name"], "arguments": c["arguments"]}} for c in calls] + + +def openai_tool_calls(calls: list[dict], *, start: int = 0) -> list[dict]: + """OpenAI ``tool_calls`` (arguments are a JSON string, each call has an id).""" + return [{"index": start + k, "id": f"call_{uuid.uuid4().hex[:24]}", "type": "function", + "function": {"name": c["name"], "arguments": json.dumps(c["arguments"], ensure_ascii=False)}} + for k, c in enumerate(calls)] diff --git a/chronos/tokenizer/__init__.py b/chronos/tokenizer/__init__.py index 06d2468..e88831d 100644 --- a/chronos/tokenizer/__init__.py +++ b/chronos/tokenizer/__init__.py @@ -13,10 +13,10 @@ from .evaluate import evaluate_tokenizer from .extract import ExtractConfig, extract_texts -from .model import DEFAULT_SPECIAL_TOKENS, ChronosTokenizer +from .model import DEFAULT_SPECIAL_TOKENS, ChronosTokenizer, special_tokens_with from .trainer import BPETrainerConfig, train_bpe -__all__ = ["build_tokenizer", "ChronosTokenizer", "BPETrainerConfig", "ExtractConfig"] +__all__ = ["build_tokenizer", "ChronosTokenizer", "BPETrainerConfig", "ExtractConfig", "special_tokens_with"] def build_tokenizer(paths: list[str], out_dir: str, *, vocab_size: int = 16384, @@ -61,11 +61,14 @@ def main(argv=None) -> int: parser.add_argument("--per-source", type=int, default=400_000) parser.add_argument("--fields", nargs="*", default=None) parser.add_argument("--temperature", type=float, default=0.5) + parser.add_argument("--extra-special", nargs="*", default=(), metavar="TOKEN", + help="task control tokens placed at ids 3, 4, … (e.g. language tags)") args = parser.parse_args(argv) build_tokenizer( args.paths, args.out, vocab_size=args.vocab_size, extract=ExtractConfig(per_source_texts=args.per_source, fields=args.fields), trainer=BPETrainerConfig(vocab_size=args.vocab_size, language_temperature=args.temperature), + special_tokens=special_tokens_with(args.extra_special), log=lambda m: print(m, flush=True), ) return 0 diff --git a/chronos/tokenizer/extract.py b/chronos/tokenizer/extract.py index eb56b77..3760981 100644 --- a/chronos/tokenizer/extract.py +++ b/chronos/tokenizer/extract.py @@ -2,7 +2,7 @@ Accepts any mix of files/directories (parquet, jsonl, json, csv, tsv, txt). For each record it finds text fields automatically (conversations, pairs, -``text``/``content``/``translation.*`` …) unless a field list is given, buckets +``text``/``content``, nested string fields …) unless a field list is given, buckets text by script, and keeps a seeded per-source reservoir so every source is represented regardless of size. """ @@ -59,7 +59,7 @@ def _texts_from_record(record, fields: list[str] | None) -> Iterator[str]: for key, value in record.items(): if isinstance(value, str) and (key in TEXT_KEYS or len(key) <= 3 or key.startswith("sentence")): yield value - elif isinstance(value, dict): # translation: {en: ..., zh: ...} + elif isinstance(value, dict): # nested string fields, e.g. {"a": ..., "b": ...} for sub in value.values(): if isinstance(sub, str): yield sub diff --git a/chronos/tokenizer/model.py b/chronos/tokenizer/model.py index 854d27b..6d87555 100644 --- a/chronos/tokenizer/model.py +++ b/chronos/tokenizer/model.py @@ -21,17 +21,57 @@ _BYTE_RE = re.compile(r"^<0x([0-9A-F]{2})>$") _BYTE_SPLIT_RE = re.compile(r"(<0x[0-9A-F]{2}>)") +# Plain turns render exactly as before (``<|im_start|>role\ncontent<|im_end|>\n``). +# Tools: the definitions go into one system block, an assistant turn's +# ``tool_calls`` follow its text as ``{json}`` lines, and +# ``tool`` turns carry the results. ``chronos.data.chat_records.render_chat`` +# produces the same text in Python (with per-turn spans for loss masks). CHAT_TEMPLATE = ( + "{% if tools %}{{ '<|im_start|>system\n' }}" + "{% if messages and messages[0]['role'] == 'system' %}{{ messages[0]['content'] + '\n\n' }}{% endif %}" + "{{ '\n' }}{% for tool in tools %}{{ tool | tojson + '\n' }}{% endfor %}" + "{{ '<|im_end|>\n' }}{% endif %}" "{% for message in messages %}" - "{{ '<|im_start|>' + message['role'] + '\n' + message['content'] + '<|im_end|>' + '\n' }}" + "{% if not (tools and loop.first and message['role'] == 'system') %}" + "{{ '<|im_start|>' + message['role'] + '\n' + (message['content'] or '') }}" + "{% if message['role'] == 'assistant' and message.get('tool_calls') %}" + "{% set text = message['content'] or '' %}" + "{% for call in message['tool_calls'] %}" + "{% set fn = call['function'] if call.get('function') else call %}" + "{% if text or not loop.first %}{{ '\n' }}{% endif %}" + "{{ '' + {'name': fn['name'], 'arguments': fn['arguments']} | tojson + '' }}" + "{% endfor %}{% endif %}" + "{{ '<|im_end|>' + '\n' }}" + "{% endif %}" "{% endfor %}" "{% if add_generation_prompt %}{{ '<|im_start|>assistant\n' }}{% endif %}" ) -DEFAULT_SPECIAL_TOKENS = ( - "<|endoftext|>", "<|im_start|>", "<|im_end|>", - "<|en|>", "<|zh|>", "<|translate|>", "<|pad|>", -) + tuple(f"<|reserved_{i}|>" for i in range(57)) +#: Ids 0–2 are fixed (EOS / chat start / chat end); the rest of the 64 +#: control slots are ``<|reserved_i|>`` until a task claims them. +CORE_SPECIAL_TOKENS = ("<|endoftext|>", "<|im_start|>", "<|im_end|>", "<|pad|>") +SPECIAL_SLOTS = 64 + + +def special_tokens_with(extra=(), *, slots: int = SPECIAL_SLOTS) -> tuple[str, ...]: + """Core control tokens, then ``extra`` task tokens, padded with reserved slots. + + ``extra`` tokens go right after ``<|im_end|>`` (ids 3, 4, …) in the given + order; a token already in the core set keeps its core position. + """ + head = list(CORE_SPECIAL_TOKENS[:3]) + for tok in extra: + if tok not in head: + head.append(tok) + for tok in CORE_SPECIAL_TOKENS[3:]: + if tok not in head: + head.append(tok) + if len(head) > slots: + raise ValueError(f"{len(head)} special tokens exceed the {slots} control slots") + return tuple(head) + tuple(f"<|reserved_{i}|>" for i in range(slots - len(head))) + + +DEFAULT_SPECIAL_TOKENS = special_tokens_with() def tokenizer_normalize(text: str) -> str: diff --git a/chronos/tokenizer/normalize.py b/chronos/tokenizer/normalize.py index 828857a..efe9689 100644 --- a/chronos/tokenizer/normalize.py +++ b/chronos/tokenizer/normalize.py @@ -42,7 +42,7 @@ def normalize_text(text: str, *, form: str = "NFKC", unsegment_cjk: bool = False """NFKC, control-character removal, whitespace collapsing. ``unsegment_cjk`` removes spaces between CJK characters (for corpora that - ship word-segmented Chinese, e.g. the iic WMT CSV). + ship word-segmented Chinese). """ if form: text = unicodedata.normalize(form, text) diff --git a/chronos/tokenizer/visible.py b/chronos/tokenizer/visible.py new file mode 100644 index 0000000..4c5e405 --- /dev/null +++ b/chronos/tokenizer/visible.py @@ -0,0 +1,72 @@ +"""Decode generated ids for display without losing structural tags. + +``skip_special_tokens=True`` strips every *special* token. A custom HF +tokenizer may register ```` / ```` (and ````) +as special or added tokens; plain skipping then deletes the tags and the +serving tool-call parser sees bare JSON. :func:`decode_visible` drops only +control tokens (``<|im_end|>``, padding, BOS/EOS, ...) and keeps the tags as +text, for HF tokenizers and the native ``ChronosTokenizer`` alike. +""" +from __future__ import annotations + +from typing import Iterable + +# Tags the chat template writes as text and the server parses back. +STRUCTURAL_TAGS: tuple[str, ...] = ("", "", "", "") + + +def _token_id(tokenizer, token: str) -> int | None: + vocab_lookup = getattr(tokenizer, "convert_tokens_to_ids", None) + if vocab_lookup is not None: + tid = vocab_lookup(token) + unk = getattr(tokenizer, "unk_token_id", None) + if isinstance(tid, int) and tid >= 0 and (unk is None or tid != unk or token == getattr(tokenizer, "unk_token", None)): + return tid + return None + vocab = getattr(tokenizer, "vocab", None) + if isinstance(vocab, dict): + tid = vocab.get(token) + return int(tid) if tid is not None else None + return None + + +def control_token_ids(tokenizer, keep: Iterable[str] = STRUCTURAL_TAGS) -> frozenset[int]: + """Ids of special/added tokens to hide, i.e. all of them except ``keep``. + + Cached on the tokenizer object; the set only changes if tokens are added + later, which the cache key (vocab size) detects. + """ + keep = tuple(keep) + size = len(tokenizer) if hasattr(tokenizer, "__len__") else None + cache = getattr(tokenizer, "_chronos_control_ids", None) + if cache is not None and cache[0] == (size, keep): + return cache[1] + keep_ids = {i for i in (_token_id(tokenizer, t) for t in keep) if i is not None} + hidden: set[int] = set(int(i) for i in (getattr(tokenizer, "all_special_ids", None) or ())) + decoder = getattr(tokenizer, "added_tokens_decoder", None) + if isinstance(decoder, dict): # HF: added tokens flagged ``special`` + hidden.update(int(i) for i, tok in decoder.items() if getattr(tok, "special", False)) + special = getattr(tokenizer, "special_tokens", None) + if isinstance(special, (list, tuple)): # native ChronosTokenizer + hidden.update(i for i in (_token_id(tokenizer, t) for t in special) if i is not None) + for attr in ("bos_token_id", "eos_token_id", "pad_token_id", "unk_token_id"): + tid = getattr(tokenizer, attr, None) # minimal tokenizers expose only these + if isinstance(tid, int): + hidden.add(tid) + ids = frozenset(hidden - keep_ids) + try: + tokenizer._chronos_control_ids = ((size, keep), ids) + except Exception: # slotted / frozen tokenizer objects + pass + return ids + + +def decode_visible(tokenizer, ids, keep: Iterable[str] = STRUCTURAL_TAGS) -> str: + """Decode ``ids`` hiding control tokens but keeping structural tags.""" + hidden = control_token_ids(tokenizer, keep) + kept = [int(i) for i in ids if int(i) not in hidden] + if not kept: + return "" + if hasattr(tokenizer, "special_tokens") and not hasattr(tokenizer, "all_special_ids"): + return tokenizer.decode(kept, skip_special=False) # ChronosTokenizer + return tokenizer.decode(kept, skip_special_tokens=False) diff --git a/chronos/trainer/chronos_trainer.py b/chronos/trainer/chronos_trainer.py index d80cfbc..536b872 100644 --- a/chronos/trainer/chronos_trainer.py +++ b/chronos/trainer/chronos_trainer.py @@ -1,6 +1,3 @@ -import sys -import chronos.deps # ensure minimind on sys.path - import os import time import torch @@ -8,10 +5,7 @@ from torch import optim from torch.utils.data import DataLoader -from model.model_minimind import MiniMindConfig -from trainer.trainer_utils import ( - Logger, is_main_process, lm_checkpoint, setup_seed, -) +from chronos.model.kernel import Logger, is_main_process, save_resume_state, setup_seed from chronos.trainer.optim_utils import get_lr # warmup→cosine override from chronos.data.flexible_dataset import ( FlexibleDataset as PretrainDataset, @@ -39,7 +33,7 @@ class ChronosTrainer: """ Training orchestrator for Project Chronos. - Wraps minimind's training loop and injects: + Pretraining loop (native kernel utilities) that injects: - temporal_locality_loss via λ2 * ||E_t - E_{t-1}||^2 - load_balance_loss via λ1 (already computed inside ChronosMOEFeedForward) - LookaheadRouter accuracy logging @@ -107,7 +101,7 @@ def train_step(self, input_ids, labels, step, total_steps, *, modality_inputs=No loss = chronos_loss_term( self.model, ce_loss, lookahead_probs, self.config, - aux_loss=aux_loss, + aux_loss=aux_loss, input_ids=input_ids, labels=labels, ) # Standalone lookahead loss value for logging @@ -191,10 +185,11 @@ def _save(self, epoch, step, wandb=None): self.config, stage="chronos", ) - lm_checkpoint( - self.config, weight='chronos', model=self.model, - optimizer=self.optimizer, scaler=self.scaler, - epoch=epoch, step=step, wandb=wandb, - save_dir=self.args.save_dir, + # Resume state only; the release checkpoint above keeps its dtype + # policy (BF16 stays BF16) and is not rewritten here. + save_resume_state( + f'{self.args.save_dir}/chronos_{self.config.hidden_size}_moe_resume.pth', + model=self.model, optimizer=self.optimizer, epoch=epoch, step=step, + scaler=self.scaler, wandb_id=getattr(wandb, 'id', None) if wandb else None, ) self.model.train() diff --git a/chronos/trainer/distill_trainer.py b/chronos/trainer/distill_trainer.py index caf64ff..4f5d699 100644 --- a/chronos/trainer/distill_trainer.py +++ b/chronos/trainer/distill_trainer.py @@ -6,8 +6,8 @@ L_label = cross_entropy(student_logits, labels, ignore_index=-100) L_total = α · L_KD + (1 − α) · L_label + chronos_loss_term (lookahead etc.) -The teacher is any frozen model that returns ``.logits`` on forward (Chronos -or MiniMind checkpoints both work). Router KL anchor still applies — Stage +The teacher is any frozen model that returns ``.logits`` on forward (any Chronos +checkpoint works). Router KL anchor still applies — Stage 6 shouldn't corrupt the cache layout any more than SFT/DPO can. """ from __future__ import annotations @@ -20,8 +20,7 @@ from torch import optim from torch.utils.data import DataLoader -import chronos.deps # noqa: F401 -from trainer.trainer_utils import Logger # type: ignore +from chronos.model.kernel import Logger from chronos.data.flexible_dataset import ( StreamingSFTDataset as SFTDataset, MultimodalStreamingSFTDataset, multimodal_collate, diff --git a/chronos/trainer/dpo_trainer.py b/chronos/trainer/dpo_trainer.py index 7d6e537..b0d1634 100644 --- a/chronos/trainer/dpo_trainer.py +++ b/chronos/trainer/dpo_trainer.py @@ -19,8 +19,7 @@ from torch import optim from torch.utils.data import DataLoader -import chronos.deps # noqa -from trainer.trainer_utils import Logger, is_main_process # type: ignore +from chronos.model.kernel import Logger, is_main_process from chronos.data.flexible_dataset import StreamingDPODataset as DPODataset from chronos.model.config import ChronosConfig diff --git a/chronos/trainer/grpo_trainer.py b/chronos/trainer/grpo_trainer.py index f89cecc..973c732 100644 --- a/chronos/trainer/grpo_trainer.py +++ b/chronos/trainer/grpo_trainer.py @@ -31,8 +31,7 @@ from torch import optim from torch.utils.data import DataLoader -import chronos.deps # noqa -from trainer.trainer_utils import Logger # type: ignore +from chronos.model.kernel import Logger from chronos.model.config import ChronosConfig from chronos.model.model_chronos import ChronosForCausalLM @@ -315,3 +314,28 @@ def load_grpo_prompts(data_path: str, max_prompts: int = None) -> List[str]: if max_prompts and len(prompts) >= max_prompts: break return prompts + + +def load_grpo_prompt_records(data_path: str, max_prompts: int = None) -> list: + """Like ``load_grpo_prompts``, but a record that carries image/audio + (``image``/``audio``/``*_embeds`` or a ``modalities`` dict) is returned as + ``{"prompt": str, "record": dict}`` so the trainer can resolve its media + lazily, once per step; text-only records stay plain strings.""" + import json + from chronos.data.flexible_dataset import detect_modalities + out = [] + with open(data_path, encoding="utf-8") as f: + for line in f: + if not line.strip(): + continue + row = json.loads(line) + msgs = row.get("conversations") or row.get("messages") or [] + prompt = next((m.get("content") for m in msgs if m.get("role") == "user"), None) + if prompt is None and isinstance(row.get("prompt"), str): + prompt = row["prompt"] + if prompt is None: + continue + out.append({"prompt": prompt, "record": row} if detect_modalities(row) else prompt) + if max_prompts and len(out) >= max_prompts: + break + return out diff --git a/chronos/trainer/loss_mixin.py b/chronos/trainer/loss_mixin.py index 8df63fa..8e7b553 100644 --- a/chronos/trainer/loss_mixin.py +++ b/chronos/trainer/loss_mixin.py @@ -27,12 +27,15 @@ from chronos.model.moe_chronos import ChronosMOEFeedForward from chronos.model.temporal_loss import ( + cluster_locality_loss, + iteration_cluster_spread, temporal_locality_loss, lookahead_supervision_loss, lookahead_topk_hit_loss, lookahead_union_loss, router_locality_loss, router_offload_metrics, + segment_cluster_loss, ) @@ -61,6 +64,23 @@ def collect_router_probs(model, *, with_grad: bool = False) -> Optional[torch.Te return torch.stack(probs, dim=2) +def real_token_mask_torch(labels: torch.Tensor) -> torch.Tensor: + """``[B, S]`` bool real-token mask of a right-padded batch (HF labels: the + loss shifts). A row's real tokens end at its last supervised label; later + positions are padding. Prompt tokens stay real. Same rule as the MLX + ``trainer.real_token_mask(labels)``.""" + pos = torch.arange(labels.shape[1], device=labels.device) + last = torch.where(labels != -100, pos[None, :], torch.full_like(labels, -1)).max(dim=1).values + return pos[None, :] <= last[:, None] + + +def cluster_membership_tensor(config, device=None) -> torch.Tensor: + """``[E, C]`` one-hot of ``chronos.expert_clusters.training_clusters(config)``.""" + from chronos.expert_clusters import cluster_membership, training_clusters + e = int(config.num_experts) + return torch.tensor(cluster_membership(training_clusters(config), e), dtype=torch.float32, device=device) + + def collect_iteration_router_probs(model, *, with_grad: bool = False) -> Optional[torch.Tensor]: """Every dispatch decision of the last forward as ``[B, S, V, E]``. @@ -88,6 +108,35 @@ def first_iteration_router_probs(model) -> Optional[torch.Tensor]: return torch.stack(probs, dim=2) if probs else None +def recurrent_iteration_probs(model, config, *, with_grad: bool = True) -> Optional[torch.Tensor]: + """``[B, S, G, D, E]``: router probabilities of each recurrent layer at each loop iteration (None unless + every recurrent layer dispatched the same number, at least 2, of times in the last forward).""" + start, groups = int(getattr(config, "prelude_layers", 0) or 0), int(getattr(config, "recurrent_groups", 0) or 0) + rows = [] + for layer in list(model.model.layers)[start:start + groups]: + mlp = getattr(layer, "mlp", None) + if not isinstance(mlp, ChronosMOEFeedForward): + return None + seq = mlp.iteration_router_probs_grad if with_grad else mlp.iteration_router_probs + if not seq: + return None + rows.append(torch.stack(list(seq), dim=2)) + if not rows or rows[0].shape[2] < 2 or any(r.shape[2] != rows[0].shape[2] for r in rows): + return None + return torch.stack(rows, dim=2) + + +def iteration_mean_router_probs(model) -> Optional[torch.Tensor]: + """Per physical layer, router probabilities averaged over its loop iterations ``[B, S, L, E]`` + (lookahead teacher covering every iteration; the step-0 routing for one-dispatch layers).""" + probs = [] + for layer in model.model.layers: + mlp = getattr(layer, "mlp", None) + if isinstance(mlp, ChronosMOEFeedForward) and mlp.iteration_router_probs: + probs.append(torch.stack(list(mlp.iteration_router_probs), dim=0).mean(dim=0)) + return torch.stack(probs, dim=2) if probs else None + + def lookahead_teacher(router_4d, lookahead_probs, config): """Align prediction head g to physical layer prelude_layers + g.""" if lookahead_probs.dim() == 4: @@ -107,6 +156,8 @@ def chronos_loss_term( config, *, aux_loss: Optional[torch.Tensor] = None, + input_ids: Optional[torch.Tensor] = None, + labels: Optional[torch.Tensor] = None, ) -> torch.Tensor: """ Combine `base_loss` with the Chronos-specific regularizers: @@ -119,6 +170,10 @@ def chronos_loss_term( The function is safe to call from any stage: it gracefully degrades when the necessary tensors are unavailable (e.g. lookahead_probs is None during a model that doesn't expose it). + + ``input_ids`` (and ``labels``, for the padding mask) let + ``cluster_locality_mode="segment"`` find the documents of the batch; + without them the window form is used. """ loss = base_loss @@ -153,6 +208,25 @@ def chronos_loss_term( router_mean, int(getattr(config, "num_experts_per_tok", 1) or 1), ) + lambda_cluster = float(getattr(config, "lambda_cluster_locality", 0.0) or 0.0) + if lambda_cluster > 0.0: + from chronos.expert_clusters import cluster_locality_mode, segment_ids + membership = cluster_membership_tensor(config, router_4d.device) + window = int(getattr(config, "cluster_locality_window", 0) or 0) + if cluster_locality_mode(config) == "segment" and input_ids is not None: + ids = input_ids.detach().cpu().numpy() + mask = None if labels is None else real_token_mask_torch(labels) + cluster_term = segment_cluster_loss(router_4d, membership, segment_ids(ids, window), mask) + else: + cluster_term = cluster_locality_loss(router_4d, membership, window) + loss = loss + lambda_cluster * cluster_term + + lambda_iteration = float(getattr(config, "lambda_iteration_cluster", 0.0) or 0.0) + if lambda_iteration > 0.0: + iteration_probs = recurrent_iteration_probs(model, config) + if iteration_probs is not None: + mask = None if labels is None else real_token_mask_torch(labels) + loss = loss + lambda_iteration * iteration_cluster_spread(iteration_probs, cluster_membership_tensor(config, iteration_probs.device), mask) lambda_lookahead = float(getattr(config, "lambda_lookahead", 0.0)) lookahead_steps = int(getattr(config, "lookahead_steps", 0)) @@ -163,7 +237,9 @@ def chronos_loss_term( ): # Teacher must be detached: lookahead targets are stop-grad'd # by construction (we predict the *future* router state). - teacher = lookahead_teacher(first_iteration_router_probs(model), lookahead_probs, config) + source = (iteration_mean_router_probs(model) if getattr(config, "lookahead_teacher_scope", "first") == "iterations" + else first_iteration_router_probs(model)) + teacher = lookahead_teacher(source, lookahead_probs, config) la = lookahead_supervision_loss(lookahead_probs, teacher, lookahead_steps) loss = loss + lambda_lookahead * la lambda_lookahead_topk = float(getattr(config, "lambda_lookahead_topk", 0.0)) @@ -272,7 +348,7 @@ def capture_reference_routing(model, calibration_batch, device, *, modality_inpu try: _ = model(ids, use_cache=False, modality_inputs=modality_inputs, modality_mask=modality_mask) except TypeError: - _ = model(ids) # minimind models don't accept use_cache kwarg here + _ = model(ids) # plain HF-style models without the Chronos kwargs router_4d = collect_router_probs(model) if router_4d is None: ref = None diff --git a/chronos/trainer/optim_utils.py b/chronos/trainer/optim_utils.py index cf40c8d..2185d8d 100644 --- a/chronos/trainer/optim_utils.py +++ b/chronos/trainer/optim_utils.py @@ -12,7 +12,7 @@ this in one place means every trainer benefits from the same correct recipe and we don't get drift. -2. Warmup-then-cosine schedule. minimind's get_lr is pure cosine (effective +2. Warmup-then-cosine schedule. The pre-0.2 schedule was pure cosine (effective LR at step 0 is already 0.55·base_lr), which destabilizes the first few hundred steps with small batches. Linear warmup over the first ~5% of steps then cosine decay to 10% of base is the boring-and-correct choice. diff --git a/chronos/trainer/orpo_trainer.py b/chronos/trainer/orpo_trainer.py index 7d75377..00c0686 100644 --- a/chronos/trainer/orpo_trainer.py +++ b/chronos/trainer/orpo_trainer.py @@ -25,8 +25,7 @@ from torch import optim from torch.utils.data import DataLoader -import chronos.deps # noqa -from trainer.trainer_utils import Logger, is_main_process # type: ignore +from chronos.model.kernel import Logger, is_main_process from chronos.data.flexible_dataset import StreamingDPODataset as DPODataset from chronos.model.config import ChronosConfig diff --git a/chronos/trainer/reward.py b/chronos/trainer/reward.py index 23d20b0..06c89db 100644 --- a/chronos/trainer/reward.py +++ b/chronos/trainer/reward.py @@ -7,8 +7,7 @@ No external dependencies, used in smoke tests and when no real reward model is configured. - ``LMRewardModel`` — wraps an HF AutoModel that exposes a ``.get_score(...)`` - method (the minimind convention, see - ``minimind-master/trainer/trainer_utils.py:160``). Loads lazily so + method (the ABI of InternLM2-style reward checkpoints). Loads lazily so importing this file never forces an HF network download. Any callable ``score(prompt: str, response_tokens: List[int], tokenizer) -> float`` @@ -19,6 +18,8 @@ from typing import List, Optional +from chronos.tokenizer.visible import decode_visible + TOY_VOCAB = { "the", "quick", "brown", "fox", "machine", "learning", "model", "expert", @@ -42,7 +43,7 @@ def __call__(self, prompt: str, response_tokens: List[int], tokenizer) -> float: return self.score(prompt, response_tokens, tokenizer) def score(self, prompt: str, response_tokens: List[int], tokenizer) -> float: - text = tokenizer.decode(response_tokens, skip_special_tokens=True) + text = decode_visible(tokenizer, response_tokens) words = text.split() if not words: return -1.0 @@ -58,7 +59,7 @@ class LMRewardModel: """HF-backed reward model. Wraps any ``AutoModel`` that exposes ``get_score(tokenizer, messages) -> float`` - (the reward-model ABI used by minimind and several open reward-model + (the ABI of InternLM2-style and several other open reward-model checkpoints). The model is loaded lazily on the first call so that importing this module is free. @@ -67,8 +68,7 @@ class LMRewardModel: reward = LMRewardModel("path/to/internlm2-1_8b-reward") r = reward.score(prompt, response_tokens, tokenizer) - The score is clipped to [-3.0, 3.0] to keep GRPO advantages well-scaled, - matching the minimind convention. + The score is clipped to [-3.0, 3.0] to keep GRPO advantages well-scaled. """ def __init__(self, model_path: str, device: str = "cpu", @@ -98,7 +98,7 @@ def __call__(self, prompt: str, response_tokens: List[int], tokenizer) -> float: def score(self, prompt: str, response_tokens: List[int], tokenizer) -> float: self._load() - response = tokenizer.decode(response_tokens, skip_special_tokens=True) + response = decode_visible(tokenizer, response_tokens) # tool tags survive messages = [ {"role": "user", "content": prompt}, {"role": "assistant", "content": response}, diff --git a/chronos/trainer/sft_trainer.py b/chronos/trainer/sft_trainer.py index 537bbb9..5ea16aa 100644 --- a/chronos/trainer/sft_trainer.py +++ b/chronos/trainer/sft_trainer.py @@ -3,13 +3,12 @@ Chronos-aware supervised fine-tuning trainer. -Built around minimind's SFTDataset (jsonl with `conversations` field, -tokenizer.apply_chat_template + per-assistant-token loss mask) so the data -pipeline is identical to the one in minimind-master/trainer/train_full_sft.py. -What we add: +Data: jsonl with a ``conversations`` field, rendered with +``tokenizer.apply_chat_template`` and a per-assistant-token loss mask +(``StreamingSFTDataset``; the common chat-SFT jsonl layout). On top of CE: -1. The model returns ``(outputs, lookahead_probs)``, which minimind's trainer - does not know about. We forward it explicitly. +1. The model returns ``(outputs, lookahead_probs)``; the lookahead output is + forwarded explicitly. 2. ``chronos_loss_term`` mixes in λ_balance·aux + λ_temporal·temporal + λ_lookahead·lookahead on top of the base CE. 3. Optional ``router_kl_anchor`` pulls the current router distribution back @@ -25,9 +24,8 @@ from torch import optim from torch.utils.data import DataLoader -import chronos.deps # ensure minimind on sys.path -from trainer.trainer_utils import Logger, is_main_process # type: ignore +from chronos.model.kernel import Logger, is_main_process from chronos.data.flexible_dataset import ( StreamingSFTDataset, MultimodalStreamingSFTDataset, multimodal_collate, ) @@ -126,7 +124,7 @@ def train_step(self, input_ids, labels, step, total_steps, *, modality_inputs=No loss = chronos_loss_term( self.model, ce_loss, lookahead_probs, self.config, - aux_loss=aux_loss, + aux_loss=aux_loss, input_ids=input_ids, labels=labels, ) # Router KL anchor diff --git a/chronos/trainer/stage_utils.py b/chronos/trainer/stage_utils.py index d4305e0..2ca6551 100644 --- a/chronos/trainer/stage_utils.py +++ b/chronos/trainer/stage_utils.py @@ -12,6 +12,7 @@ resolve_checkpoint_tokenizer, ) from chronos.model.config import ChronosConfig +from chronos.expert_clusters import DEFAULT_LAMBDA, DEFAULT_WINDOW from chronos.config_schema import MODEL_FIELDS @@ -67,7 +68,7 @@ def add_topology_args(parser, *, defaults: bool = False): parser.add_argument("--vocab_size", type=int, default=(6400 if defaults else None)) parser.add_argument("--tokenizer_path", default=None, help="Tokenizer directory (tokenizer.json). Default: the checkpoint's own tokenizer " - "(/tokenizer or its config metadata), else minimind.") + "(/tokenizer or its config metadata), else the bundled legacy 6400 tokenizer.") parser.add_argument("--recurrent_groups", type=int, default=(2 if defaults else None)) parser.add_argument("--recurrent_depth", type=int, default=(4 if defaults else None)) parser.add_argument("--min_recurrent_depth", type=int, default=(2 if defaults else None)) @@ -138,6 +139,9 @@ def build_pretrain_config(args) -> ChronosConfig: "lambda_lookahead_topk": getattr(args, "lambda_lookahead_topk", 0.15), "lambda_lookahead_union": getattr(args, "lambda_lookahead_union", 0.05), "lambda_router_locality": getattr(args, "lambda_router_locality", 0.02), + "lambda_cluster_locality": getattr(args, "lambda_cluster_locality", DEFAULT_LAMBDA), + "cluster_locality_clusters": getattr(args, "cluster_locality_clusters", 0), + "cluster_locality_window": getattr(args, "cluster_locality_window", DEFAULT_WINDOW), "vram_budget_gb": getattr(args, "vram_budget_gb", 4.0), "use_moe": True, "architecture_version": 2, @@ -192,6 +196,8 @@ def build_config_from_upstream( "lambda_lookahead_topk", "lambda_lookahead_union", "lambda_router_locality", + "lambda_cluster_locality", + "cluster_locality_window", "fallback_mask_prob", ): value = getattr(args, key, None) @@ -219,8 +225,8 @@ def load_stage_tokenizer(args, config, checkpoint_path: str | None = None): """Load the tokenizer that matches ``checkpoint_path`` (or ``--tokenizer_path``). Raises an error when the tokenizer has more entries than ``config.vocab_size``. - A larger tokenizer would emit ids the embedding cannot hold. The minimind - tokenizer (6400 entries) used on a 16k-vocabulary checkpoint fails the other + A larger tokenizer would emit ids the embedding cannot hold. The legacy + 6400-entry tokenizer used on a 16k-vocabulary checkpoint fails the other way: it trains silently on the wrong ids. """ from transformers import AutoTokenizer diff --git a/chronos/tuning/chronos_auto_tuner.py b/chronos/tuning/chronos_auto_tuner.py index efa4ad5..24c2c3a 100644 --- a/chronos/tuning/chronos_auto_tuner.py +++ b/chronos/tuning/chronos_auto_tuner.py @@ -10,7 +10,10 @@ from dataclasses import dataclass, field from typing import List -import chronos.deps # ensure minimind on sys.path + +# Knobs that only change a looped model: searching any of them makes the probe loop. +LOOP_KEYS = ("recurrent_order", "recurrent_dt_param", "recurrent_dt_min", "recurrent_dt_max", "recurrent_dt_init", + "recurrent_later_topk", "recurrent_later_groups", "lambda_iteration_cluster", "lookahead_teacher_scope") from chronos.tuning._base_tuner import ( AutoTuner, SearchSpaceConfig, AutoTuneResult, _gc_collect, @@ -55,6 +58,46 @@ class ChronosSearchSpaceConfig(SearchSpaceConfig): lambda_lookahead_min: float = 1e-3 lambda_lookahead_max: float = 1.0 + # Loop knobs. They only matter for a looped model, so searching any of them makes the probe model run + # `probe_recurrent_depth` iterations over `probe_recurrent_layers` block layers (other probes stay at depth 1). + # The probe score comes from a few steps and cannot resolve differences as small as dt 0.2-0.5 at depth 4: + # treat the loop knobs as a coarse screen. + tune_recurrent_order: bool = False + recurrent_order_choices: List[str] = field(default_factory=lambda: ["layer", "block"]) + + tune_recurrent_dt_init: bool = False + recurrent_dt_init_min: float = 0.1 + recurrent_dt_init_max: float = 1.0 + + tune_recurrent_dt_param: bool = False + recurrent_dt_param_choices: List[str] = field(default_factory=lambda: ["clamp", "sigmoid"]) + + tune_recurrent_dt_min: bool = False + recurrent_dt_min_min: float = 0.01 + recurrent_dt_min_max: float = 0.2 + + tune_recurrent_dt_max: bool = False + recurrent_dt_max_min: float = 0.5 + recurrent_dt_max_max: float = 1.0 + + # Cost knobs: they remove expert routes or layer calls from later iterations, so the cross-entropy score + # alone favours "off"; each trial also logs its median step time. later_groups never offers 1: a single + # layer looping alone is no longer a block loop. + tune_recurrent_later_topk: bool = False + recurrent_later_topk_choices: List[int] = field(default_factory=lambda: [0, 1]) + + tune_recurrent_later_groups: bool = False + recurrent_later_groups_choices: List[int] = field(default_factory=lambda: [0, 2]) + + tune_lambda_iteration_cluster: bool = False + lambda_iteration_cluster_choices: List[float] = field(default_factory=lambda: [0.0, 0.1, 0.3, 1.0]) + + tune_lookahead_teacher_scope: bool = False + lookahead_teacher_scope_choices: List[str] = field(default_factory=lambda: ["first", "iterations"]) + + probe_recurrent_depth: int = 4 + probe_recurrent_layers: int = 4 + class ChronosAutoTuner(AutoTuner): """ @@ -111,6 +154,40 @@ def _sample_params(self, trial, ss) -> dict: if ss.tune_lambda_lookahead: params["lambda_lookahead"] = trial.suggest_float( "lambda_lookahead", ss.lambda_lookahead_min, ss.lambda_lookahead_max, log=True) + + # Loop knobs: the probe model needs more than one iteration for them to change anything. + if ss.tune_recurrent_order: + params["recurrent_order"] = trial.suggest_categorical( + "recurrent_order", ss.recurrent_order_choices) + if ss.tune_recurrent_dt_param: + params["recurrent_dt_param"] = trial.suggest_categorical( + "recurrent_dt_param", ss.recurrent_dt_param_choices) + if ss.tune_recurrent_dt_min: + params["recurrent_dt_min"] = trial.suggest_float( + "recurrent_dt_min", ss.recurrent_dt_min_min, ss.recurrent_dt_min_max, log=True) + if ss.tune_recurrent_dt_max: + params["recurrent_dt_max"] = trial.suggest_float( + "recurrent_dt_max", ss.recurrent_dt_max_min, ss.recurrent_dt_max_max) + if ss.tune_recurrent_dt_init: + params["recurrent_dt_init"] = trial.suggest_float( + "recurrent_dt_init", ss.recurrent_dt_init_min, ss.recurrent_dt_init_max, log=True) + if ss.tune_recurrent_later_topk: + params["recurrent_later_topk"] = trial.suggest_categorical( + "recurrent_later_topk", ss.recurrent_later_topk_choices) + if ss.tune_recurrent_later_groups and params.get("recurrent_order", "block") == "block": + # Prefix blocks exist only in block order; a trial that drew layer order skips this knob. + params["recurrent_order"] = "block" + params["recurrent_later_groups"] = trial.suggest_categorical( + "recurrent_later_groups", ss.recurrent_later_groups_choices) + if ss.tune_lambda_iteration_cluster: + params["lambda_iteration_cluster"] = trial.suggest_categorical( + "lambda_iteration_cluster", ss.lambda_iteration_cluster_choices) + if ss.tune_lookahead_teacher_scope: + params["lookahead_teacher_scope"] = trial.suggest_categorical( + "lookahead_teacher_scope", ss.lookahead_teacher_scope_choices) + if any(key in params for key in LOOP_KEYS): + params["recurrent_depth"] = max(2, int(ss.probe_recurrent_depth)) + params["num_hidden_layers"] = 2 + max(1, int(ss.probe_recurrent_layers)) else: params["lambda_balance"] = 5e-4 params["lambda_temporal"] = 1e-3 @@ -118,6 +195,20 @@ def _sample_params(self, trial, ss) -> dict: return params + def _probe_tokens(self, dataset_path, tokenizer_dir): + """Real tokens of the user's dataset for the probe, read once per run; ``None`` means random ids.""" + cache = self.__dict__.setdefault("_probe_cache", {}) + key = (dataset_path, tokenizer_dir) + if key not in cache: + from chronos.tuning.probe_data import load_probe_tokens + cache[key] = load_probe_tokens(dataset_path, tokenizer_dir) + if cache[key] is None: + line = "[probe] no text could be read from the dataset; trials use random token ids" + else: + line = f"[probe] {cache[key][0].size} real tokens from the dataset (vocab {cache[key][1]})" + self._put({"type": "log", "line": line}) + return cache[key] + def _run_probe_trial( self, trial, model_id, dataset_path, train_ratio, probe_steps, output_dir, seed, params, **kwargs @@ -131,10 +222,12 @@ def _run_probe_trial( load_checkpoint_state_dict, load_state_dict_controlled, ) - from chronos.model.temporal_loss import total_loss - from chronos.model.moe_chronos import ChronosMOEFeedForward + from chronos.trainer.loss_mixin import chronos_loss_term _, device = resolve_training_device("auto") + if device == "mlx": + # The probe trains a torch model and "mlx" is not a torch device: use the best torch device instead. + device = "mps" if torch.backends.mps.is_available() else ("cuda" if torch.cuda.is_available() else "cpu") lr = params.get("learning_rate", 2e-4) lb = params.get("lambda_balance", 5e-4) lt = params.get("lambda_temporal", 1e-3) @@ -143,6 +236,18 @@ def _run_probe_trial( ne = int(params.get("num_experts", 4)) ns = int(params.get("num_shared_experts", 1)) kv = int(params.get("kv_latent_dim", 64)) + real = self._probe_tokens(dataset_path, kwargs.get("tokenizer_dir")) + vocab_kw = {"vocab_size": real[1]} if real else {} + layers = int(params.get("num_hidden_layers", 4)) + # The searched objective weights reach the model config, so the probe trains on the objective they set. + loop = {key: params[key] for key in ("lambda_lookahead",) if key in params} + if params.get("recurrent_depth"): + depth = int(params["recurrent_depth"]) + loop.update(recurrent_enabled=True, recurrent_depth=depth, min_recurrent_depth=max(1, depth // 2), + max_inference_depth=depth, prelude_layers=1, coda_layers=1) + for key in LOOP_KEYS: + if key in params: + loop[key] = params[key] if os.path.exists(model_id): try: @@ -156,21 +261,22 @@ def _run_probe_trial( "lookahead_steps": la, "lambda_balance": lb, "lambda_temporal": lt, + **loop, }, require_unsniffable=True, ) except Exception: cfg = ChronosConfig( - hidden_size=hs, num_hidden_layers=4, num_experts=ne, + hidden_size=hs, num_hidden_layers=layers, num_experts=ne, num_experts_per_tok=2, num_shared_experts=ns, kv_latent_dim=kv, lookahead_steps=la, lambda_balance=lb, lambda_temporal=lt, - use_hybrid_attention=True, use_moe=True, + use_hybrid_attention=True, use_moe=True, **vocab_kw, **loop, ) else: cfg = ChronosConfig( hidden_size=hs, - num_hidden_layers=4, + num_hidden_layers=layers, num_experts=ne, num_experts_per_tok=2, num_shared_experts=ns, @@ -180,7 +286,16 @@ def _run_probe_trial( lambda_temporal=lt, use_hybrid_attention=True, use_moe=True, + **vocab_kw, + **loop, ) + if real and real[1] > int(cfg.vocab_size): + # A checkpoint's smaller vocabulary cannot embed this tokenizer's ids. + self._put({"type": "log", "line": f"[probe] model vocab {cfg.vocab_size} < tokenizer vocab {real[1]}; trials use random token ids"}) + real = None + if any(key in loop for key in ("recurrent_dt_init", "recurrent_dt_min", "recurrent_dt_max")): + # Independently drawn bounds can exclude the drawn init; start inside the range instead. + cfg.recurrent_dt_init = min(max(float(cfg.recurrent_dt_init), float(cfg.recurrent_dt_min)), float(cfg.recurrent_dt_max)) model = ChronosForCausalLM(cfg).to(device) if os.path.exists(model_id): try: @@ -194,31 +309,36 @@ def _run_probe_trial( seq_len = 64 batch = 2 model.train() - losses = [] + losses, step_times = [], [] for step in range(probe_steps): - ids = torch.randint(0, vocab_size, (batch, seq_len), device=device) - out, _ = model(ids, labels=ids, legacy_output=True) - moe_layers = [l.mlp for l in model.model.layers - if isinstance(l.mlp, ChronosMOEFeedForward)] - if moe_layers and moe_layers[0].last_router_probs is not None: - probs = torch.stack( - [l.last_router_probs for l in moe_layers], dim=2 - ).mean(dim=2) - loss = total_loss(out.loss, out.aux_loss, probs, lb, lt) + if real: + from chronos.tuning.probe_data import probe_batch + ids = torch.from_numpy(probe_batch(real[0], step, batch, seq_len)).to(device) else: - loss = out.loss + out.aux_loss - + ids = torch.randint(0, vocab_size, (batch, seq_len), device=device) + t0 = time.perf_counter() + out, lookahead_probs = model(ids, labels=ids, legacy_output=True) + # Train on the same objective the trainers use (every weighted term of the config), but score the + # trial by cross-entropy: a score that includes the weighted terms rewards small weights for their own sake. + loss = chronos_loss_term(model, out.loss, lookahead_probs, cfg, aux_loss=out.aux_loss, + input_ids=ids, labels=ids) loss.backward() optimizer.step() optimizer.zero_grad(set_to_none=True) - losses.append(loss.item()) - trial.report(loss.item(), step=step) + ce = float(out.loss.item()) + step_times.append(time.perf_counter() - t0) + losses.append(ce) + trial.report(ce, step=step) if trial.should_prune(): del model _gc_collect() raise optuna.exceptions.TrialPruned() final_loss = sum(losses[-max(1, probe_steps // 5):]) / max(1, probe_steps // 5) + step_s = sorted(step_times)[len(step_times) // 2] + if hasattr(trial, "set_user_attr"): + trial.set_user_attr("step_time_s", step_s) + self._put({"type": "log", "line": f" probe cross-entropy {final_loss:.4f}, median step {step_s * 1000:.0f} ms"}) del model _gc_collect() return final_loss @@ -231,6 +351,7 @@ def get_best_chronos_config_patch(self) -> dict: "lambda_balance", "lambda_temporal", "lambda_lookahead", "lookahead_steps", "hidden_size", "num_experts", "num_shared_experts", "kv_latent_dim", + *LOOP_KEYS, ): if key in p: patch[key] = p[key] diff --git a/chronos/tuning/probe_data.py b/chronos/tuning/probe_data.py new file mode 100644 index 0000000..d7cfbf2 --- /dev/null +++ b/chronos/tuning/probe_data.py @@ -0,0 +1,47 @@ +"""Real-token batches for the auto-tune probe. + +The probe used to train on random token ids, so no hyperparameter could change its loss in a way that +carries over to real data. ``load_probe_tokens`` encodes a bounded sample of the user's dataset with the +model's tokenizer; the tuner falls back to random ids only when the data cannot be read. +""" +from __future__ import annotations + +import os + +import numpy as np + + +def load_probe_tokens(dataset_path: str, tokenizer_dir: str | None, *, max_tokens: int = 400_000, + max_records: int = 20_000) -> tuple[np.ndarray, int] | None: + """``(token ids int64, tokenizer vocab size)`` or ``None`` when nothing could be read or encoded.""" + try: + from chronos.deps import get_general_tokenizer_path + from chronos.tokenizer.extract import _texts_from_record, expand, iter_records + from chronos.tokenizer.model import ChronosTokenizer + directory = tokenizer_dir if tokenizer_dir and os.path.isfile(os.path.join(tokenizer_dir, 'chronos_tokenizer.json')) \ + else get_general_tokenizer_path() + tokenizer = ChronosTokenizer.load(directory) + ids: list[int] = [] + seen = 0 + for path in expand([dataset_path]): + for record in iter_records(path): + seen += 1 + for text in _texts_from_record(record, None): + ids.extend(tokenizer.encode(text, allow_special=False)) + ids.append(tokenizer.vocab['<|endoftext|>']) + if len(ids) >= max_tokens or seen >= max_records: + break + if len(ids) >= max_tokens or seen >= max_records: + break + if len(ids) < 512: + return None + return np.asarray(ids[:max_tokens], dtype=np.int64), int(tokenizer.vocab_size) + except Exception: + return None + + +def probe_batch(tokens: np.ndarray, step: int, batch: int, seq_len: int) -> np.ndarray: + """``[batch, seq_len]`` windows at deterministic offsets that advance with ``step`` (same data in every trial).""" + span = max(1, tokens.size - seq_len - 1) + starts = [((step * batch + row) * seq_len * 7919) % span for row in range(batch)] + return np.stack([tokens[s:s + seq_len] for s in starts]) diff --git a/chronos/verify.py b/chronos/verify.py index 418b00f..0f5e2c2 100644 --- a/chronos/verify.py +++ b/chronos/verify.py @@ -8,7 +8,6 @@ import torch import torch.nn.functional as F -import chronos.deps # noqa: F401 from chronos.backend import available as available_backends from chronos.model.checkpoint import load_checkpoint_state_dict, load_state_dict_controlled from chronos.model.model_chronos import ChronosForCausalLM diff --git a/chronos/webui/i18n/en.json b/chronos/webui/i18n/en.json new file mode 100644 index 0000000..e204153 --- /dev/null +++ b/chronos/webui/i18n/en.json @@ -0,0 +1,943 @@ +{ + "app.subtitle": "Recurrent-depth MoE · lazy experts · speculative decoding", + "app.title": "Chronos Workbench", + "bench.better": "Better", + "bench.higher": "Higher is better", + "bench.intro": "Measure Chronos parameters, memory and decode speed with benchmark_compare.py; an external dense baseline is optional.", + "bench.lower": "Lower is better", + "bench.measured_note": "Measured by benchmark_compare.py on this machine.", + "bench.metric": "Metric", + "bench.none": "No results yet. Run the benchmark to create them.", + "bench.params": "Parameters", + "bench.ram_infer": "Inference RAM", + "bench.ram_model": "Model RAM", + "bench.ram_train": "Training RAM", + "bench.run": "Run benchmark", + "bench.title": "Benchmark: Chronos vs a dense baseline", + "bench.tps": "Decode tokens/s", + "bench.unavailable": "benchmark_compare.py is not in this installation.", + "choice.absorbed": "Absorbed", + "choice.adaptive": "Adaptive", + "choice.aggressive": "Aggressive", + "choice.all": "All blocks", + "choice.alternate": "Every second block", + "choice.auto": "Auto", + "choice.balanced": "Balanced", + "choice.block": "Whole block", + "choice.cluster": "By cluster", + "choice.cluster_locality_mode.segment": "Documents (segment)", + "choice.cluster_locality_mode.window": "Fixed windows (window)", + "choice.compare": "Compare lazy vs full", + "choice.expanded": "Expanded (reference)", + "choice.expert": "By expert", + "choice.experts": "Active experts", + "choice.extreme": "Extreme", + "choice.fallback_diagnostic": "Never load, diagnostic (fallback_diagnostic)", + "choice.false": "Off", + "choice.fixed": "Fixed", + "choice.fixed_then_adaptive": "Fixed, then adaptive", + "choice.fullload": "Full memory only", + "choice.lookahead_teacher_scope.first": "Iteration 0 only", + "choice.lookahead_teacher_scope.iterations": "All iterations averaged", + "choice.mla": "Global (MLA) blocks", + "choice.mlp": "MoE/FFN only", + "choice.none": "None", + "choice.offload": "Lazy experts only", + "choice.on_demand": "Load, may skip late experts (on_demand)", + "choice.params": "Active parameters", + "choice.planned": "Next-use planner", + "choice.recurrent_attention_mode.first_only": "First iteration only, v2 (first_only)", + "choice.recurrent_attention_mode.per_iteration": "Every iteration, own KV each (per_iteration)", + "choice.recurrent_attention_mode.shared_first": "Every iteration, shared first KV (shared_first)", + "choice.recurrent_dt_param.clamp": "Clamp (legacy)", + "choice.recurrent_dt_param.sigmoid": "Sigmoid (no dead zone)", + "choice.recurrent_order.block": "Whole block (A B A B)", + "choice.recurrent_order.layer": "Layer by layer (A A B B)", + "choice.router_scope.per_iteration": "Route every iteration (per_iteration)", + "choice.router_scope.shared": "Reuse iteration 0 routing (shared)", + "choice.scheduled": "Scheduled", + "choice.segment": "By document", + "choice.shared": "Shared", + "choice.swa": "Sliding-window blocks", + "choice.sync_on_demand": "Load and wait (sync_on_demand)", + "choice.true": "On", + "choice.tune.search.lr": "Learning rate", + "choice.window": "Recent-use window", + "config.active": "Active per token", + "config.compute": "Weight uses per token (with recurrence)", + "config.estimate": "Size and memory estimate", + "config.estimate_note": "Estimated from the configuration, not measured.", + "config.file": "Config file", + "config.ignored": "Ignored unknown or invalid keys", + "config.intro": "Every model setting in one place. Hover any option for its meaning, default and recommended value.", + "config.kv": "KV cache", + "config.loaded": "Configuration loaded", + "config.path_help": "A JSON config file. Load reads it into the form; Save writes the form there. Relative paths start at the workbench folder.", + "config.preset": "Preset", + "config.preset_help": "A starting configuration. Applying it replaces every field on this page; the estimate updates at once.", + "config.ram": "Warm expert cache", + "config.ssd": "Expert storage on disk", + "config.total": "Total parameters", + "config.tps": "Rough decode speed (estimated)", + "config.train_peak": "Training peak memory", + "config.train_state": "Training state (weights, gradients, optimizer)", + "config.virtual_layers": "Virtual layers", + "config.vram": "Resident weights + KV", + "data.chars": "Characters per record", + "data.dups": "Duplicate share", + "data.fields": "Fields", + "data.files": "Files", + "data.full_scan": "full scan", + "data.hist": "Record length distribution", + "data.intro": "Scan a file or folder to see its format, fields, scripts and record lengths before training.", + "data.max_help": "Upper bound on records read for the summary (100 to 500,000).", + "data.max_records": "Records to scan", + "data.median": "Median", + "data.p95": "95th percentile", + "data.path_help": "Files or folders (jsonl, json, parquet, csv, tsv, txt), one per line. Several are scanned as one dataset, as training sees them after merging. Relative paths start at the workbench folder.", + "data.present": "Present in", + "data.records": "Records", + "data.sampled": "first {n} records", + "data.samples": "Sample records", + "data.scanned": "Scanned", + "data.schema": "Detected format", + "data.script": "Script", + "data.scripts": "Writing systems", + "data.share": "Share", + "data.title": "Dataset inspector", + "data.type": "Type", + "err.active_experts": "Active experts cannot exceed the expert count", + "err.dialog_open": "A file dialog is already open; finish or cancel it in the system window first", + "err.models_dir": "Models folder not found", + "err.native_local_only": "The system file dialog works only on the server's own machine", + "err.native_unavailable": "This machine cannot open a system file dialog", + "err.no_files": "No readable files under those paths", + "err.no_out": "Choose an output folder", + "err.no_paths": "Add at least one path", + "err.not_found": "Not found", + "err.paging": "Choose auto, cluster or expert paging", + "err.port": "Invalid port", + "err.probe_invalid": "The lazy-loading check settings are invalid", + "err.remote_needs_key": "Remote binding needs Allow remote and CHRONOS_API_KEY", + "err.target": "Enter a target size", + "err.upload_batch": "Invalid upload batch id; reload the page and try again", + "err.upload_disk_full": "Not enough free disk space on the server's machine; upload stopped", + "err.upload_failed": "Upload interrupted; check the connection and try again", + "err.upload_kind": "This field does not take uploads", + "err.upload_name": "File name or folder depth not allowed (hidden item, \"..\" or too deep)", + "err.upload_too_large": "File exceeds the upload limit (--max-upload-mb)", + "err.upload_type": "Nothing to upload: the file type does not fit this field, or it is a blocked executable", + "event.final": "Final", + "event.lazy_probe": "Lazy-expert probe", + "event.phase_end": "Stage end", + "event.phase_start": "Stage start", + "event.resume": "Resumed", + "event.rollback": "Rollback", + "event.validation": "Validation", + "export.done": "Exported", + "export.format": "Format", + "export.intro": "Write a checkpoint as safetensors or GGUF files plus the expert cache layout chronos serve loads.", + "export.note": "Ollama clients run Chronos models through chronos serve (set OLLAMA_HOST to its address); stock Ollama cannot execute the recurrent MoE.", + "export.run": "Export", + "export.size": "Size (MB)", + "export.tensors": "Tensors", + "export.title": "Export", + "field.accumulation_steps.help": "Micro-batches per optimizer update. Effective batch = batch size × accumulation.", + "field.accumulation_steps.label": "Gradient accumulation", + "field.activation_checkpointing.help": "Recompute activations in the backward pass to cut peak memory at the cost of speed.", + "field.activation_checkpointing.label": "Activation checkpointing", + "field.adaptive_halting.help": "Let each token stop looping once its halting probability passes the threshold. Saves compute on easy tokens.", + "field.adaptive_halting.label": "Adaptive halting (ACT)", + "field.alpha.help": "Distillation mix: α × teacher KL + (1 − α) × CE.", + "field.alpha.label": "α (distill)", + "field.attention_block_size.help": "Run long attention in query blocks of this many tokens, each reading only the keys it can see. 0 = one call. Exact; 1024 was fastest across the global and sliding-window layers.", + "field.attention_block_size.label": "Attention block size", + "field.batch_size.help": "Sequences per micro-batch. Limited by memory.", + "field.batch_size.label": "Batch size", + "field.beta.help": "Strength of the KL tie to the reference policy in preference training.", + "field.beta.label": "β (DPO/GRPO)", + "field.ce_chunk_size.help": "Compute the language-model loss in row chunks from the last hidden state, so the [batch, length, vocabulary] logits never exist. 0 = full logits. Exact.", + "field.ce_chunk_size.label": "Loss chunk size", + "field.cluster_locality_clusters.help": "Number of expert clusters for the locality term. 0 chooses it from the expert count.", + "field.cluster_locality_clusters.label": "Clusters", + "field.cluster_locality_mode.help": "What one stream is for the cluster constraint. window: fixed windows of the length above. segment: each document of the batch (split at the data's own separators, long ones cut to the window), so similar documents learn to share a cluster without labels or task tags.", + "field.cluster_locality_mode.label": "Locality unit", + "field.cluster_locality_window.help": "Segment length (tokens) the cluster constraint applies to. Best results matched the typical record length.", + "field.cluster_locality_window.label": "Locality window", + "field.coda_layers.help": "Layers that run once after the loop, before the output head.", + "field.coda_layers.label": "Coda layers", + "field.cpu_budget_percent.help": "Share of physical cores auto may use, in percent.", + "field.cpu_budget_percent.label": "CPU budget", + "field.cpu_threads.help": "Threads for PyTorch/BLAS. auto uses the physical-core budget.", + "field.cpu_threads.label": "CPU threads", + "field.depth_schedule.help": "How training chooses the depth per batch: fixed, adaptive, or fixed for a warm-up and then adaptive.", + "field.depth_schedule.label": "Depth schedule", + "field.depth_schedule_warmup_fraction.help": "Fraction of training that runs at fixed full depth before the schedule becomes adaptive.", + "field.depth_schedule_warmup_fraction.label": "Schedule warm-up", + "field.document_masking.help": "Packed rows: attention stays inside each document, cut at the separator token.", + "field.document_masking.label": "Document masking", + "field.draft_exit_depth.help": "Recurrent depth whose exit is trained as the speculative draft.", + "field.draft_exit_depth.label": "Draft depth (training)", + "field.draft_exit_kl_coef.help": "Extra KL between the draft-depth exit and the full-depth output, for self-speculative decoding. 0 disables it.", + "field.draft_exit_kl_coef.label": "Draft-exit KL", + "field.dropout.help": "Random activation dropout during training. Lower it for large datasets; raise it for tiny ones.", + "field.dropout.label": "Dropout", + "field.dtype.help": "Numeric precision for training and inference. Auto picks bfloat16 where the backend supports it, otherwise float32.", + "field.dtype.label": "Compute dtype", + "field.epochs.help": "Passes over the dataset. Max steps, when set, stops earlier.", + "field.epochs.label": "Epochs", + "field.export.auto_cluster.help": "Group co-used experts into pages from calibration data, so lazy loading reads fewer files.", + "field.export.auto_cluster.label": "Build clusters", + "field.export.calibration_data_path.help": "Text used to measure which experts are used together, one path per line; several are merged. Empty skips automatic clustering.", + "field.export.calibration_data_path.label": "Calibration data", + "field.export.cluster_batch_size.help": "Sequences per calibration batch.", + "field.export.cluster_batch_size.label": "Calibration batch size", + "field.export.cluster_device.help": "Device for the calibration pass.", + "field.export.cluster_device.label": "Calibration device", + "field.export.cluster_max_batches.help": "Number of batches observed for clustering.", + "field.export.cluster_max_batches.label": "Calibration batches", + "field.export.cluster_max_seq_len.help": "Tokens per calibration sequence.", + "field.export.cluster_max_seq_len.label": "Calibration length", + "field.export.config_path.help": "Override the sidecar config. Usually empty.", + "field.export.config_path.label": "Config file", + "field.export.copy_cache.help": "Include the lazy-expert pages in the export so serving starts without rebuilding.", + "field.export.copy_cache.label": "Copy expert cache", + "field.export.expert_cache_dir.help": "Existing lazy-expert cache to package. Empty builds one.", + "field.export.expert_cache_dir.label": "Expert cache", + "field.export.formats.help": "Containers to write. Safetensors and GGUF keep the Chronos metadata; run them with chronos serve. Ollama clients connect to chronos serve, not stock Ollama.", + "field.export.formats.label": "Formats", + "field.export.model_path.help": "Checkpoint to export.", + "field.export.model_path.label": "Checkpoint", + "field.export.output_dir.help": "Where the export files are written.", + "field.export.output_dir.label": "Output folder", + "field.fallback_mask_prob.help": "During training, randomly hide experts so the model tolerates a cache miss. Only matters for lazy inference with fallback.", + "field.fallback_mask_prob.label": "Miss simulation", + "field.grad_clip.help": "Clip the global gradient norm to this value. 0 disables clipping.", + "field.grad_clip.label": "Gradient clip", + "field.halting_threshold.help": "Cumulative halting probability at which a token stops iterating. Closer to 1 runs deeper.", + "field.halting_threshold.label": "Halting threshold", + "field.hidden_size.help": "Width of every token vector. Larger is more capable but grows parameters roughly quadratically. Must be divisible by the number of attention heads.", + "field.hidden_size.label": "Hidden size", + "field.infer.backend.help": "Runtime for inference. Auto chooses from the checkpoint and the machine.", + "field.infer.backend.label": "Backend", + "field.infer.decode_wait_s.help": "Wait for a prefetched expert before loading it on demand.", + "field.infer.decode_wait_s.label": "Decode wait (s)", + "field.infer.draft_depth.help": "Recurrent depth used for drafting.", + "field.infer.draft_depth.label": "Draft depth", + "field.infer.gamma.help": "Tokens drafted per verify pass.", + "field.infer.gamma.label": "Draft length γ", + "field.infer.max_tokens.help": "Upper bound on generated tokens.", + "field.infer.max_tokens.label": "Max new tokens", + "field.infer.miss_policy.help": "What a cache miss does. sync_on_demand gives output identical to full memory.", + "field.infer.miss_policy.label": "Miss policy", + "field.infer.mode.help": "compare runs lazy and full memory side by side; offload runs lazy experts only; fullload loads everything.", + "field.infer.mode.label": "Mode", + "field.infer.model_path.help": "The .pth checkpoint to run. Its sidecar config decides the architecture.", + "field.infer.model_path.label": "Checkpoint", + "field.infer.paging.help": "auto follows the checkpoint: cluster pages when trained with cluster locality, otherwise per expert.", + "field.infer.paging.label": "Paging layout", + "field.infer.ram_load_ratio.help": "Fraction of experts kept in RAM. Above 1.0 adds slack for prefetching.", + "field.infer.ram_load_ratio.label": "RAM ratio", + "field.infer.raw_prompt.help": "Send the text as is, without the chat template.", + "field.infer.raw_prompt.label": "Raw prompt", + "field.infer.residency_decay.help": "How fast the planner forgets older routing evidence.", + "field.infer.residency_decay.label": "Planner decay", + "field.infer.residency_planner.help": "Evict the expert needed furthest in the future instead of the least recently used one.", + "field.infer.residency_planner.label": "Next-use planner", + "field.infer.speculative.help": "Draft tokens at shallow depth and verify them at full depth. Output is unchanged; at 50M it was measured slower, so it is off by default.", + "field.infer.speculative.label": "Self-speculative decoding", + "field.infer.sweep_ram_ratios.help": "Run every standard ratio and chart speed and hit rate against memory.", + "field.infer.sweep_ram_ratios.label": "Sweep RAM ratios", + "field.infer.temperature.help": "Sampling randomness. 0 is greedy and reproducible.", + "field.infer.temperature.label": "Temperature", + "field.infer.verify_wait_s.help": "Same wait for the speculative verify pass.", + "field.infer.verify_wait_s.label": "Verify wait (s)", + "field.kv_cache_dtype.help": "auto keeps the compute dtype; int8 quantizes the inference KV cache per token (about half the memory, small error). Training is never quantized.", + "field.kv_cache_dtype.label": "KV cache dtype", + "field.kv_latent_dim.help": "Width of the compressed key/value latent cached by MLA layers. Smaller saves KV memory.", + "field.kv_latent_dim.label": "MLA latent size", + "field.kv_quant_group_size.help": "Channels that share one int8 scale. Smaller groups are more accurate and slightly larger.", + "field.kv_quant_group_size.label": "KV quant group", + "field.lambda_balance.help": "Pushes the router to spread tokens evenly across experts.", + "field.lambda_balance.label": "Load balance", + "field.lambda_cluster_locality.help": "Trains tokens in a segment to stay inside one expert cluster, so lazy inference can page whole clusters. 0 disables it.", + "field.lambda_cluster_locality.label": "Cluster locality", + "field.lambda_iteration_cluster.help": "Weight on keeping every loop iteration of a token inside the same expert clusters (experts inside a cluster may still differ per iteration). 0 disables it. Recommended 0: with cluster locality on, 99.5-100% of the clusters that later iterations use are already used at iteration 0, so the term has almost nothing to act on.", + "field.lambda_iteration_cluster.label": "Iteration cluster locality", + "field.lambda_lookahead.help": "Trains the lookahead router to predict the experts future tokens will use.", + "field.lambda_lookahead.label": "Lookahead loss", + "field.lambda_lookahead_topk.help": "Extra weight on getting the exact top-k future experts right.", + "field.lambda_lookahead_topk.label": "Lookahead top-k", + "field.lambda_lookahead_union.help": "Weight on covering the union of experts over the lookahead window.", + "field.lambda_lookahead_union.label": "Lookahead union", + "field.lambda_or.help": "Weight of the odds-ratio term in ORPO.", + "field.lambda_or.label": "λ (ORPO)", + "field.lambda_router_anchor.help": "Keeps routing close to the upstream checkpoint during fine-tuning. 0 for pretraining.", + "field.lambda_router_anchor.label": "Router anchor", + "field.lambda_router_locality.help": "Mild penalty on routing changes between neighbouring tokens.", + "field.lambda_router_locality.label": "Router locality", + "field.lambda_temporal.help": "Rewards consecutive tokens for choosing the same experts, so fewer experts are loaded per stretch of text.", + "field.lambda_temporal.label": "Temporal locality", + "field.layer_aware_cache.help": "Track resident experts per virtual layer instead of per physical layer.", + "field.layer_aware_cache.label": "Layer-aware cache", + "field.learning_rate.help": "Peak optimizer step size. The planner suggests one from the model size; lower it for fine-tuning.", + "field.learning_rate.label": "Learning rate", + "field.log_interval.help": "Write a metrics row every N steps.", + "field.log_interval.label": "Log interval", + "field.lookahead_input_detach.help": "The lookahead router reads a gradient-free copy of the hidden state, so its losses train only the router. Measured neutral on the en-zh data.", + "field.lookahead_input_detach.label": "Detach lookahead input", + "field.lookahead_steps.help": "How many future tokens the lookahead router predicts experts for, so they can be prefetched before they are needed.", + "field.lookahead_steps.label": "Lookahead steps", + "field.lookahead_teacher_scope.help": "Which routing the LookaheadRouter learns to predict. first: loop iteration 0 only. iterations: the average over every iteration of the layer, so prefetch also covers the experts deeper iterations need. Recommended first: the lookahead head already picks the right cluster for 0.97 of tokens at every iteration.", + "field.lookahead_teacher_scope.label": "Lookahead teacher", + "field.max_gen_len.help": "Tokens generated per GRPO rollout.", + "field.max_gen_len.label": "Rollout length", + "field.max_inference_depth.help": "Maximum iterations at inference. Usually equal to the training depth; more than trained is not validated.", + "field.max_inference_depth.label": "Inference depth", + "field.max_position_embeddings.help": "Longest sequence the rotary embedding is prepared for. Only change it for very long contexts.", + "field.max_position_embeddings.label": "Max positions", + "field.max_resident_experts.help": "Hard cap on experts kept in memory per layer. Empty lets the planner decide.", + "field.max_resident_experts.label": "Max resident experts", + "field.max_seq_len.help": "Tokens per training sequence. Longer costs memory roughly linearly with hybrid attention.", + "field.max_seq_len.label": "Sequence length", + "field.max_steps.help": "Stop after this many optimizer steps. 0 means no cap (run all epochs).", + "field.max_steps.label": "Max steps", + "field.min_recurrent_depth.help": "Lowest depth the schedule or early exit may use. 1 lets easy tokens exit after one pass.", + "field.min_recurrent_depth.label": "Minimum depth", + "field.mla_cache_rope.help": "Also cache the rotary key part, trading KV memory for decode speed.", + "field.mla_cache_rope.label": "Cache RoPE keys", + "field.mla_decode.help": "expanded: reference path. absorbed: folds projections into the query (less compute per step). auto mixes paths and showed a small logit gap, so it stays opt-in.", + "field.mla_decode.label": "MLA decode path", + "field.mla_upproj_recompute.help": "Keep only the latent and rebuild K and V per attention block. Exact, but measured no memory gain at 64k, so it stays off.", + "field.mla_upproj_recompute.label": "MLA up-projection recompute", + "field.modalities.help": "Extra input encoders, comma-separated (image, audio). Leave empty for text-only models; datasets are auto-detected.", + "field.modalities.label": "Modalities", + "field.moe_chunk_tokens.help": "Dispatch tokens to the experts in chunks of this size, each recomputed in the backward pass. 0 = one dispatch. Exact.", + "field.moe_chunk_tokens.label": "MoE chunk tokens", + "field.moe_intermediate_size.help": "Hidden width of each expert's feed-forward network. 0 derives it from the hidden size.", + "field.moe_intermediate_size.label": "Expert FFN width", + "field.num_attention_heads.help": "Query heads. Hidden size must divide evenly by this number.", + "field.num_attention_heads.label": "Attention heads", + "field.num_experts.help": "Routed experts per MoE layer. More experts add capacity without adding per-token compute; they are the unit of lazy loading.", + "field.num_experts.label": "Experts", + "field.num_experts_per_tok.help": "Experts each token uses. Top-2 lets the router learn from the loss; top-1 needs norm_topk_prob off.", + "field.num_experts_per_tok.label": "Active experts (top-k)", + "field.num_generations.help": "Samples per prompt that GRPO compares.", + "field.num_generations.label": "Rollouts per prompt", + "field.num_hidden_layers.help": "Distinct transformer layers stored in the checkpoint (prelude + recurrent groups + coda). Recurrence reuses them, so virtual depth can be larger.", + "field.num_hidden_layers.label": "Physical layers", + "field.num_key_value_heads.help": "Key/value heads for grouped-query attention on sliding-window layers. Fewer heads shrink the KV cache.", + "field.num_key_value_heads.label": "KV heads", + "field.num_shared_experts.help": "Always-on experts every token passes through. They stay resident in memory.", + "field.num_shared_experts.label": "Shared experts", + "field.num_workers.help": "Data-loader worker processes. auto picks a safe number for the platform.", + "field.num_workers.label": "Data workers", + "field.optimizer_page_dir.help": "Folder for paged optimizer state. Use a fast local SSD.", + "field.optimizer_page_dir.label": "Optimizer page dir", + "field.optimizer_paging.help": "Store optimizer state for inactive experts on disk.", + "field.optimizer_paging.label": "Paged optimizer", + "field.page_size_mb.help": "Size of one optimizer page file, in MB.", + "field.page_size_mb.label": "Page size", + "field.pinned_memory_max_fraction.help": "Largest fraction of system RAM used for pinned expert buffers.", + "field.pinned_memory_max_fraction.label": "Pinned RAM share", + "field.plan.active_mode.help": "Set the per-token budget as a number of experts or as active parameters.", + "field.plan.active_mode.label": "Active budget by", + "field.plan.active_value.help": "Active experts per token, or active parameters in millions.", + "field.plan.active_value.label": "Active budget", + "field.plan.data_paths.help": "Files or folders the planner measures to size tokens, sequence length and windows, one per line.", + "field.plan.data_paths.label": "Datasets", + "field.plan.depth.help": "Loop iterations per recurrent group.", + "field.plan.depth.label": "Recurrent depth", + "field.plan.memory_saving.help": "How hard to trade speed for memory (int8 KV, shared routing, checkpointing).", + "field.plan.memory_saving.label": "Memory saving", + "field.plan.num_experts.help": "Routed experts per MoE layer.", + "field.plan.num_experts.label": "Experts", + "field.plan.ram_gb.help": "Memory to plan for. Empty detects this machine.", + "field.plan.ram_gb.label": "RAM (GB)", + "field.plan.seq_len.help": "Empty derives it from the dataset profile.", + "field.plan.seq_len.label": "Sequence length", + "field.plan.target_m.help": "Total parameters in millions.", + "field.plan.target_m.label": "Target size (M)", + "field.plan.token_budget_b.help": "Pretraining tokens in billions. Empty: one pass over the data.", + "field.plan.token_budget_b.label": "Token budget (B)", + "field.plan.use_moe.help": "Plan an MoE model; off plans a dense one.", + "field.plan.use_moe.label": "Mixture of experts", + "field.plan.vocab_size.help": "Empty reads it from the tokenizer report; with no report it uses 32768 and the bundled general 32k tokenizer.", + "field.plan.vocab_size.label": "Vocabulary", + "field.ponder_loss_coef.help": "Penalty on the expected number of iterations. Higher pushes the model to stop earlier.", + "field.ponder_loss_coef.label": "Ponder loss", + "field.prefetch_depth.help": "How far ahead the prefetcher loads predicted experts. 0 disables prefetching.", + "field.prefetch_depth.label": "Prefetch depth", + "field.prelude_layers.help": "Layers that run once before the loop. Lookahead routing reads their output.", + "field.prelude_layers.label": "Prelude layers", + "field.probe.backends.help": "Runtimes to test. Each backend gets its own full-memory reference.", + "field.probe.backends.label": "Probe backends", + "field.probe.decode_wait_s.help": "How long a decode step waits for a prefetched expert before loading it on demand.", + "field.probe.decode_wait_s.label": "Decode wait (s)", + "field.probe.draft_depth.help": "Recurrent depth used to draft tokens in speculative variants.", + "field.probe.draft_depth.label": "Draft depth", + "field.probe.enabled.help": "After every validation, decode the fresh checkpoint with lazy experts and compare it with full memory: speed, hit rates and token agreement. Runs in a low-priority child process on a copy of the checkpoint.", + "field.probe.enabled.label": "Lazy-expert probe", + "field.probe.gamma.help": "Tokens drafted per verify pass in speculative variants.", + "field.probe.gamma.label": "Draft length γ", + "field.probe.max_new_tokens.help": "Greedy tokens decoded per prompt. More gives steadier rates but a longer probe.", + "field.probe.max_new_tokens.label": "Tokens per prompt", + "field.probe.max_variants.help": "Upper bound on tested combinations; extra ones are reported as truncated.", + "field.probe.max_variants.label": "Variant cap", + "field.probe.miss_policies.help": "Torch behaviour on a cache miss. sync_on_demand loads and waits (identical output); on_demand may skip late experts; fallback_diagnostic never loads (worst case).", + "field.probe.miss_policies.label": "Miss policies", + "field.probe.paging.help": "auto follows how the model was trained (cluster pages when the cluster-locality loss was on). Add expert to compare per-expert paging.", + "field.probe.paging.label": "Paging layouts", + "field.probe.ram_ratios.help": "Fraction of all experts allowed in RAM at once. Lower saves memory and raises misses.", + "field.probe.ram_ratios.label": "RAM ratios", + "field.probe.residency.help": "MLX eviction: planned uses the next-use planner, window is the plain recent-use window.", + "field.probe.residency.label": "Residency policies", + "field.probe.residency_decay.help": "How fast the next-use planner forgets older routing evidence.", + "field.probe.residency_decay.label": "Planner decay", + "field.probe.speculative.help": "Also test self-speculative decoding with lazy experts.", + "field.probe.speculative.label": "Speculative variants", + "field.probe.verify_wait_s.help": "Same wait for the speculative verify pass.", + "field.probe.verify_wait_s.label": "Verify wait (s)", + "field.ram_budget_mb.help": "RAM the lazy expert cache may use, in MB. Empty uses the RAM ratio instead.", + "field.ram_budget_mb.label": "RAM budget", + "field.recompute_policy.help": "Which blocks are recomputed when checkpointing is on: all, only global (MLA) blocks, only sliding-window blocks, or every second block.", + "field.recompute_policy.label": "Recompute blocks", + "field.recompute_scope.help": "block: recompute whole blocks (most memory saved). mlp: recompute only each block's MoE/FFN, which keeps the attention results and costs less time.", + "field.recompute_scope.label": "Recompute scope", + "field.recurrent_attention_mode.help": "How attention runs inside the loop. shared_first: every iteration attends, K/V from iteration 0 (exact cache, KV does not grow with depth). per_iteration: one KV per iteration (D× KV). first_only: v2 behaviour.", + "field.recurrent_attention_mode.label": "Recurrent attention", + "field.recurrent_depth.help": "Iterations of each recurrent group during training. Virtual layers = prelude + groups × depth + coda.", + "field.recurrent_depth.label": "Training depth", + "field.recurrent_depth_jitter.help": "Random spread around the scheduled depth, so the model learns to exit at several depths.", + "field.recurrent_depth_jitter.label": "Depth jitter", + "field.recurrent_distill_coef.help": "Teaches shallow exits to match full-depth predictions. Raises speculative acceptance and early-exit quality.", + "field.recurrent_distill_coef.label": "Depth distillation", + "field.recurrent_dt_init.help": "Starting value of the learned loop step size dt, the same for every recurrent group. One iteration is an Euler step, so depth x dt is the integration horizon T. The planner sets dt = min(0.5, 2 / depth), which holds T = 2: 0.5 at depth 4, 0.25 at depth 8. Measured at 15M (one seed per arm): the loss is flat for dt from 0.2 to 0.5 at depth 4; at depth 8, dt 0.25 beat 0.5 and a start of 0.0625 was far worse. T = 2 is a safe start, not a fitted optimum: a sigmoid run that started there settled at T of about 1.2. The kernel default stays 0.25.", + "field.recurrent_dt_init.label": "Initial step size", + "field.recurrent_dt_max.help": "Upper bound of dt. 1.0 applies the whole block update to the residual stream in one iteration. Recommended 1.0 as the bound; a dt fixed at 1.0 was worse than 0.5 at depths 4 and 8.", + "field.recurrent_dt_max.label": "Largest step size", + "field.recurrent_dt_min.help": "Lower bound of dt. With the clamp parameterisation a dt that reaches it stops learning; at the default 0.05, dt collapsed onto this bound in our depth-4 and depth-8 runs. Recommended 0.05 together with the sigmoid parameterisation, which keeps dt trainable inside [dt_min, dt_max]; learned dt stayed between 0.14 and 0.30 in the 15M runs.", + "field.recurrent_dt_min.label": "Smallest step size", + "field.recurrent_dt_param.help": "How the learned loop step size dt is stored. clamp: dt = clamp(w, dt_min, dt_max); the gradient is zero once w leaves the range, so a dt that falls below dt_min can never come back. sigmoid: dt = dt_min + (dt_max - dt_min) * sigmoid(w); the gradient never vanishes, so dt can still move. Both start at the configured initial dt. Measured in a 15M model (one seed per arm): the clamp default let dt collapse onto its floor of 0.05, which was worse at equal step than a healthy dt; a sigmoid dt kept moving and settled where the loss was flat. The planner recommends sigmoid.", + "field.recurrent_dt_param.label": "Step-size parameterisation", + "field.recurrent_enabled.help": "Run the shared middle groups several times per token, so a small set of weights acts like a deeper network.", + "field.recurrent_enabled.label": "Recurrent depth", + "field.recurrent_groups.help": "How many layers between prelude and coda form looping groups. Empty derives it from layers − prelude − coda.", + "field.recurrent_groups.label": "Recurrent groups", + "field.recurrent_later_groups.help": "Block order only: loop iterations after the first run only the first N layers of the block (0 = all layers). Fewer layer calls make deeper iterations cheaper and touch fewer expert pages. Needs shared_first or first_only attention. Recommended 0 (the full block). At 15M, 2 of 4 layers gave about 1.3x steps per second for up to 0.055 more training loss per step. Do not use 1: one layer looping alone is no longer a block loop.", + "field.recurrent_later_groups.label": "Later-iteration layers", + "field.recurrent_later_topk.help": "Experts per token in loop iterations after the first (0 = same as the first iteration). The shared expert always runs. A smaller value makes deeper iterations cheaper and loads fewer expert pages. Recommended 0: at 15M, 1 expert raised validation CE from 4.543 to 4.600 with no speed gain.", + "field.recurrent_later_topk.label": "Later-iteration top-k", + "field.recurrent_order.help": "Order of the loop. layer: each recurrent layer repeats depth times in a row. block: the whole group of recurrent layers repeats, so iteration 0 is a normal depth-1 pass and the loop refines it. Changes the computation: not interchangeable with a layer-order checkpoint. Measured at 15M (one seed per arm): with a trainable step size block had the lower loss at equal step; with step sizes fixed at 1.0 layer won late. The planner recommends block.", + "field.recurrent_order.label": "Loop order", + "field.recurrent_stability_coef.help": "Keeps the recurrent update contractive so repeated iterations do not drift or explode.", + "field.recurrent_stability_coef.label": "Stability loss", + "field.recurrent_strategy.help": "Sampling strategy for the recurrent depth bucket during training.", + "field.recurrent_strategy.label": "Depth strategy", + "field.reset_lookahead_at_documents.help": "Empty follows the router switch above; true or false sets the lookahead terms on their own.", + "field.reset_lookahead_at_documents.label": "Reset lookahead at documents", + "field.reset_router_at_documents.help": "Packed rows: the temporal and locality losses skip token pairs that straddle a document boundary.", + "field.reset_router_at_documents.label": "Reset router at documents", + "field.reward_spec.help": "toy for the built-in reward, or lm:/path/to/reward-model[,device=cuda].", + "field.reward_spec.label": "Reward (GRPO)", + "field.rope_dim.help": "Dimensions per head that carry rotary position information in MLA layers.", + "field.rope_dim.label": "RoPE dims", + "field.rope_theta.help": "Rotary position base frequency. Larger values stretch positional resolution for longer contexts.", + "field.rope_theta.label": "RoPE base", + "field.router_scope.help": "per_iteration: route again on every loop iteration. shared: reuse iteration 0's routing, which touches fewer experts and suits lazy loading.", + "field.router_scope.label": "Router scope", + "field.save_dir.help": "Where checkpoints and their .config.json sidecars are written.", + "field.save_dir.label": "Checkpoint folder", + "field.save_interval.help": "Save (and validate) every N steps.", + "field.save_interval.label": "Save interval", + "field.serve.allow_remote.help": "Listen on a non-loopback address. Requires CHRONOS_API_KEY in the server's environment; clients must send it.", + "field.serve.allow_remote.label": "Allow remote access", + "field.serve.device.help": "Runtime for serving.", + "field.serve.device.label": "Device", + "field.serve.dtype.help": "Serving precision.", + "field.serve.dtype.label": "Dtype", + "field.serve.host.help": "Address to listen on. 127.0.0.1 is reachable from this machine only.", + "field.serve.host.label": "Host", + "field.serve.kv_cache_dtype.help": "Override the KV storage. int8 roughly halves KV memory; empty keeps the model setting.", + "field.serve.kv_cache_dtype.label": "KV cache dtype", + "field.serve.lazy_experts.help": "Keep experts on SSD and page them in on demand, so memory stays low through the Ollama protocol too.", + "field.serve.lazy_experts.label": "Lazy experts", + "field.serve.max_resident_experts.help": "Hard cap on experts in RAM per layer. Empty: derived from the RAM share.", + "field.serve.max_resident_experts.label": "Max resident experts", + "field.serve.mla_cache_rope.help": "Cache rotated keys: more memory, less recomputation.", + "field.serve.mla_cache_rope.label": "Cache RoPE keys", + "field.serve.mla_decode.help": "Override the MLA decode path. Empty keeps the model setting.", + "field.serve.mla_decode.label": "MLA decode", + "field.serve.models_dir.help": "Folder with exported models; each one appears as an Ollama model name.", + "field.serve.models_dir.label": "Models folder", + "field.serve.paging.help": "auto follows the checkpoint's training (cluster or expert pages).", + "field.serve.paging.label": "Paging layout", + "field.serve.port.help": "TCP port. 11435 avoids clashing with a stock Ollama on 11434.", + "field.serve.port.label": "Port", + "field.serve.ram_budget_mb.help": "Hard cap on expert RAM. Empty: no cap.", + "field.serve.ram_budget_mb.label": "RAM budget (MB)", + "field.serve.ram_expert_fraction.help": "Fraction of experts allowed in RAM.", + "field.serve.ram_expert_fraction.label": "RAM expert share", + "field.serve.router_scope.help": "Override routing reuse across iterations. Empty keeps the model setting.", + "field.serve.router_scope.label": "Router scope", + "field.sliding_window_size.help": "Tokens each sliding-window layer can see. Short windows suit sentence-level tasks and cap KV memory.", + "field.sliding_window_size.label": "Sliding window", + "field.storage_format.help": "File format of the on-disk expert store.", + "field.storage_format.label": "Expert storage", + "field.temperature.help": "Sampling temperature for GRPO rollouts.", + "field.temperature.label": "Rollout temperature", + "field.temporal_grad_span.help": "Cut the temporal-locality gradient chain every this many positions. 0 = full chain. Measured neutral on the en-zh data.", + "field.temporal_grad_span.label": "Temporal gradient span", + "field.tie_word_embeddings.help": "Share the input embedding with the output head. Saves vocab × hidden parameters with little quality cost at small sizes.", + "field.tie_word_embeddings.label": "Tie embeddings", + "field.tok.fields.help": "JSON fields to read. Empty auto-detects text, conversations and pairs.", + "field.tok.fields.label": "Text fields", + "field.tok.out_dir.help": "Where tokenizer.json, the chat template and the report are written.", + "field.tok.out_dir.label": "Output folder", + "field.tok.paths.help": "Files or folders to sample text from, one per line. Each source is sampled on its own quota, not merged.", + "field.tok.paths.label": "Source files", + "field.tok.per_source.help": "Reservoir sample size per source file.", + "field.tok.per_source.label": "Texts per source", + "field.tok.temperature.help": "Balances languages by byte share. Lower evens them out, so English does not crowd out Chinese.", + "field.tok.temperature.label": "Language temperature", + "field.tok.vocab_size.help": "Number of tokens to learn. Set the model's vocabulary to the same value.", + "field.tok.vocab_size.label": "Vocabulary size", + "field.tokenizer_path.help": "Tokenizer folder (tokenizer.json) the model is trained with. Empty uses the checkpoint's own tokenizer, else the bundled fallback. The vocabulary size must match.", + "field.tokenizer_path.label": "Tokenizer", + "field.train.backend.help": "Device to train on. Auto picks MLX on Apple silicon, then CUDA, XPU, MPS, CPU.", + "field.train.backend.label": "Training backend", + "field.train.data_distill.help": "Text or chat data scored by the teacher model. Files or folders, one per line; several are merged. Empty reuses the first stage's dataset.", + "field.train.data_distill.label": "Distillation data", + "field.train.data_dpo.help": "Preference pairs with chosen and rejected replies. Files or folders, one per line; several are merged. Empty reuses the first stage's dataset.", + "field.train.data_dpo.label": "DPO data", + "field.train.data_grpo.help": "Prompts for reward rollouts. Files or folders, one per line; several are merged. Empty reuses the first stage's dataset.", + "field.train.data_grpo.label": "GRPO data", + "field.train.data_orpo.help": "Preference pairs with chosen and rejected replies, as for DPO. Files or folders, one per line; several are merged. Empty reuses the first stage's dataset.", + "field.train.data_orpo.label": "ORPO data", + "field.train.data_path.help": "Datasets for the first stage: JSONL, JSON, Parquet, CSV, TSV or TXT files, or folders of them, one per line. Several are merged into one JSONL file in the run folder. Empty runs a synthetic smoke test.", + "field.train.data_path.label": "Dataset", + "field.train.data_sft.help": "Chat data with conversations (user / assistant turns). Files or folders, one per line; several are merged. Empty reuses the first stage's dataset.", + "field.train.data_sft.label": "Supervised fine-tuning data", + "field.train.init_weight.help": "Checkpoint to start from. Empty: pretrain starts from random init, later stages from the previous stage.", + "field.train.init_weight.label": "Start from", + "field.train.max_steps.help": "Stop after this many optimizer steps. 0 runs the configured epochs.", + "field.train.max_steps.label": "Max steps", + "field.train.sample_prompt.help": "Prompt the trainer completes at intervals so you can read progress. Empty uses the stage default.", + "field.train.sample_prompt.label": "Sample prompt", + "field.train.stages.help": "Stages run in order; each starts from the previous stage's checkpoint. Pretrain → SFT is the usual path.", + "field.train.stages.label": "Stages", + "field.train.teacher_path.help": "Distillation only: the model whose outputs the student learns to match.", + "field.train.teacher_path.label": "Teacher checkpoint", + "field.train.val_ratio.help": "Share of records held out for validation. Each validation also triggers the lazy-expert probe.", + "field.train.val_ratio.label": "Validation split", + "field.training_paging.help": "Keep inactive experts out of memory during training. Slower, but trains models larger than RAM.", + "field.training_paging.label": "Paged training", + "field.tune.data_path.help": "Datasets checked before auto-tune starts, one per line. The current probe trials train on random tokens, so this data does not change the trial losses.", + "field.tune.data_path.label": "Dataset", + "field.tune.n_trials.help": "Number of configurations Optuna tries.", + "field.tune.n_trials.label": "Trials", + "field.tune.probe_steps.help": "Training steps per trial; poor trials are pruned early.", + "field.tune.probe_steps.label": "Steps per trial", + "field.tune.search.help": "Parameters the search may change. The score is the probe's cross-entropy. Any loop knob makes the probe a looped model (the configured depth, 4 block layers); treat loop knobs as a coarse screen. recurrent_later_topk and recurrent_later_groups save time, not loss: compare each trial's step time in the log.", + "field.tune.search.label": "Search over", + "field.use_hybrid_attention.help": "Alternate MLA (compressed latent KV) and sliding-window layers. Keeps the KV cache small at long context.", + "field.use_hybrid_attention.label": "Hybrid attention", + "field.vocab_size.help": "Number of token ids. It must equal the tokenizer's vocabulary, otherwise ids fall outside the embedding table.", + "field.vocab_size.label": "Vocabulary size", + "field.vram_budget_gb.help": "Accelerator memory the expert cache may use, in GB.", + "field.vram_budget_gb.label": "VRAM budget", + "field.weight_decay.help": "AdamW decoupled weight decay.", + "field.weight_decay.label": "Weight decay", + "group.attention": "Attention and KV cache", + "group.autotune": "Auto-tune", + "group.benchmark": "Benchmark", + "group.export": "Export", + "group.inference": "Generation", + "group.lazy": "Lazy experts", + "group.memory": "Memory and lazy experts", + "group.model": "Model shape", + "group.moe": "Mixture of experts", + "group.objectives": "Training objectives", + "group.optimizer": "Optimizer", + "group.planner": "Auto plan", + "group.probe": "Lazy-expert probe at validation", + "group.recurrent": "Recurrent depth", + "group.rl": "Preference and RL stages", + "group.runtime": "Runtime", + "group.serve": "Ollama / OpenAI server", + "group.speculative": "Speculative decoding", + "group.stage_data": "Data for later stages", + "group.tokenizer": "Tokenizer builder", + "group.train": "Training job", + "infer.arch_note": "The architecture is read from the checkpoint's config file; the Model page fills only what the file lacks.", + "infer.col.cache_hit_rate": "Cache hit rate", + "infer.col.cold_miss_predict_hit_rate": "Cold-miss predicted", + "infer.col.decode_time_s": "Decode (s)", + "infer.col.fallback_weight_rate": "Fallback weight", + "infer.col.prediction_hit_rate": "Prediction hit rate", + "infer.col.prefill_time_s": "Prefill (s)", + "infer.col.response_time_s": "Response (s)", + "infer.col.rss_after_decode_gb": "RSS after decode (GB)", + "infer.col.rss_delta_gb": "RSS change (GB)", + "infer.col.spec_acceptance_rate": "Draft acceptance", + "infer.col.tokens": "Tokens", + "infer.col.tokens_per_sec": "Tokens/s", + "infer.common_prefix": "first {n} characters identical", + "infer.diff": "Outputs differ", + "infer.full_output": "Full memory", + "infer.generate": "Generate", + "infer.hit_rates": "Hit rates", + "infer.intro": "Run one prompt with lazy experts and with full memory, then compare outputs, speed, hit rates and memory.", + "infer.lazy_output": "Lazy experts", + "infer.measured_note": "Measured on this machine for this prompt; a single run, not an average.", + "infer.mode": "Mode", + "infer.mode.full_dram": "Full memory", + "infer.mode.lazy_offload": "Lazy experts", + "infer.output": "Output", + "infer.prompt": "Prompt", + "infer.prompt_help": "Text sent to the model. The SFT chat template is applied unless Raw prompt is on.", + "infer.ram_ratio": "RAM load ratio", + "infer.same": "Outputs identical", + "infer.similarity": "similarity", + "infer.stats": "Run statistics", + "infer.sweep": "RAM ratio sweep", + "infer.title": "Inference", + "io.empty": "No metrics yet. They appear while inference or serving runs in this process.", + "io.intro": "Expert cache and IO counters recorded by inference and serving in this server process.", + "io.latest": "Latest", + "io.metric": "Metric", + "io.samples": "Samples", + "io.seconds": "Seconds", + "io.title": "IO and cache metrics", + "label.estimated": "estimated", + "label.measured": "measured", + "label.measured_meta": "measured (meta-device count)", + "metric.active_mem_gb": "Active", + "metric.balance_loss": "Expert balance", + "metric.chrf": "chrF", + "metric.error": "Error", + "metric.eval_s": "Eval time (s)", + "metric.grad_norm": "Gradient norm", + "metric.load_cv": "Load imbalance (CV)", + "metric.locality_loss": "Cluster locality", + "metric.lookahead_loss": "Lookahead router", + "metric.loss": "Total loss", + "metric.lr": "Learning rate", + "metric.peak_mem_gb": "Peak", + "metric.primary_loss": "Cross-entropy", + "metric.rec_contraction": "Contraction", + "metric.rec_depth_mean": "Mean depth", + "metric.rec_early_exit_ratio": "Early-exit share", + "metric.route_entropy": "Routing entropy", + "metric.state": "State", + "metric.temporal_loss": "Temporal locality", + "metric.tokens_per_s": "Tokens/s", + "metric.valid_ce": "Validation CE", + "metric.valid_ppl": "Validation perplexity", + "mon.best": "Best", + "mon.chart.aux": "Auxiliary losses", + "mon.chart.loss": "Training loss", + "mon.chart.lr": "Learning rate", + "mon.chart.memory": "Memory (GB)", + "mon.chart.optimizer": "Gradient norm", + "mon.chart.recurrent": "Recurrent depth", + "mon.chart.routing": "Expert routing", + "mon.chart.throughput": "Tokens per second", + "mon.checkpoints": "Checkpoints", + "mon.eta": "Time left", + "mon.eta_basis.deadline": "by time budget", + "mon.eta_basis.steps": "by step progress", + "mon.eta_basis.target_passes": "by data-pass progress", + "mon.event": "Event", + "mon.events": "Events", + "mon.grad_norm": "Gradient norm", + "mon.input": "Input", + "mon.intro": "Live view of any run folder, including long runs started from the command line. Read-only.", + "mon.log": "Training log", + "mon.loss": "Loss", + "mon.lr": "Learning rate", + "mon.memory": "Memory", + "mon.no_runs": "No runs yet. Start one on the Train page.", + "mon.phase_eta": "ends ~{t}", + "mon.phase_note": "Steps restart in every stage, so charts show one stage at a time.", + "mon.progress": "Progress", + "mon.reference": "Reference", + "mon.run": "Run", + "mon.samples": "Samples", + "mon.size": "Size", + "mon.stale": "No update for a while", + "mon.throughput": "Tokens per second", + "mon.title": "Run monitor", + "mon.tokens_seen": "tokens seen", + "mon.updated": "Updated {s} s ago", + "mon.valid_ce": "Validation CE", + "mon.validation": "Validation", + "nav.autotune": "Auto-tune", + "nav.benchmark": "Benchmark", + "nav.config": "Model", + "nav.data": "Data", + "nav.export": "Export", + "nav.inference": "Inference", + "nav.io": "IO metrics", + "nav.monitor": "Monitor", + "nav.serve": "Serve", + "nav.tokenizer": "Tokenizer", + "nav.train": "Train", + "phase.active": "running", + "phase.complete": "complete", + "phase.pending": "waiting", + "picker.add": "Add selected", + "picker.add_button": "Add…", + "picker.browse_tip": "Browse folders on the server's machine inside the page and pick a path.", + "picker.empty": "No matching files or folders here", + "picker.entries": "Folder contents", + "picker.go": "Go", + "picker.hidden": "Show hidden", + "picker.multi_hint": "You can add several files or folders; they are merged before training.", + "picker.n_selected": "{n} selected", + "picker.native_fallback": "This machine cannot open a system file dialog, so the files will be uploaded instead.", + "picker.native_tip": "Open the system file manager. Nothing is copied; the chosen path is used as it is.", + "picker.pick_file": "Select a file", + "picker.place.desktop": "Desktop", + "picker.place.documents": "Documents", + "picker.place.downloads": "Downloads", + "picker.place.home": "Home", + "picker.place.root": "Root (/)", + "picker.place.volumes": "All volumes", + "picker.placeholder_multi": "One path per line, or use Add…", + "picker.places": "Places", + "picker.select": "Select", + "picker.this_folder": "Nothing selected: this folder will be used ({path})", + "picker.title.any": "Choose a file or folder", + "picker.title.checkpoint": "Choose a checkpoint", + "picker.title.config": "Choose a config file", + "picker.title.data": "Choose datasets (files or folders)", + "picker.title.dir": "Choose a folder", + "picker.truncated": "Showing the first {n} entries; type a path to go deeper", + "picker.up": "Up one folder", + "picker.upload_files": "Upload files…", + "picker.upload_folder": "Upload folder…", + "picker.upload_tip": "Pick files with this device's file manager. They are uploaded to the uploads folder on the server's machine, and that path is filled in.", + "picker.uploaded": "Uploaded {n} files.", + "picker.uploaded_skipped": "Uploaded {n} files; skipped {skipped} hidden or wrong-type files.", + "picker.uploading": "Uploading {done} / {total}…", + "picker.will_merge": "{n} paths will be merged into one JSONL file before use.", + "plan.apply": "Use this plan", + "plan.note": "The planner searches a configuration for the target size, data and memory; review it before training.", + "plan.run": "Plan", + "plan.stages": "Per-stage settings", + "plan.summary": "Plan", + "plan.title": "Auto plan", + "plan.tokens": "Training tokens", + "preset.b1": "1B (64 GB)", + "preset.b1.summary": "1B MoE with 64 fine-grained experts and aggressive memory saving.", + "preset.m200": "200M (32 GB)", + "preset.m200.summary": "General 200M MoE with balanced memory saving and the legacy 6400-token vocabulary.", + "preset.m50": "50M (16k vocabulary)", + "preset.m50.summary": "50M MoE with 36 experts (top-2) for a 16k Chronos tokenizer; no memory saving.", + "preset.m500": "500M (32 GB)", + "preset.m500.summary": "500M MoE with aggressive memory saving: int8 KV, shared routing, activation checkpointing.", + "preset.tiny": "Tiny (smoke test / CI)", + "preset.tiny.summary": "1.5M smoke test; trains in minutes on CPU.", + "probe.accept": "Draft acceptance", + "probe.agree": "Token agreement", + "probe.auto_paging": "Auto paging", + "probe.budget": "Expert budget", + "probe.c_loads": "Loads", + "probe.c_rss": "Peak RSS (GB)", + "probe.c_speed": "Decode speed (tokens/s)", + "probe.cluster_loads": "Cluster loads", + "probe.cold_hit": "Cold-miss predicted", + "probe.cold_n": "Cold-miss predicted / total", + "probe.conditions": "Greedy decoding, {n} prompts, {t} tokens each; measured.", + "probe.decode": "Decode (s)", + "probe.dtps": "Decode tokens/s", + "probe.evict": "Eviction", + "probe.exact": "Exact match", + "probe.group.eff": "Efficiency", + "probe.group.fid": "Fidelity (vs the full-memory reference)", + "probe.group.hit": "Hit rates", + "probe.group.paging": "Paging and loads", + "probe.history": "Hit rate and agreement over training", + "probe.history_note": "One probe after each validation; steps restart in every phase, so only the newest phase is plotted.", + "probe.hit": "Resident hit rate", + "probe.hits": "Hits / misses", + "probe.ideal": "Ideal active experts", + "probe.load_s": "Load time (s)", + "probe.loads": "On-demand loads", + "probe.none": "No probe yet. One runs after each validation.", + "probe.pages": "Paging · pages", + "probe.pred_hit": "Prediction hit rate", + "probe.pred_n": "Predicted hits / total", + "probe.prefill": "Prefill (s)", + "probe.prefix": "Shortest matching prefix", + "probe.ref_row": "Full-memory reference · {backend}", + "probe.ref_tokens": "Reference tokens", + "probe.reference": "Full-memory reference", + "probe.rss": "Peak RSS (GB)", + "probe.skip.busy": "the previous probe is still running", + "probe.skip.dense": "dense model, no routed experts to page", + "probe.skip.no_checkpoint": "no checkpoint on disk yet", + "probe.skip.superseded": "replaced by the newer validation at step {step}", + "probe.skip.writing": "the checkpoint is still being written", + "probe.skipped": "Skipped: {reason}", + "probe.sync": "Sync SSD reads", + "probe.title": "Lazy-expert probe", + "probe.tps": "Tokens/s", + "probe.trained_clusters": "Trained with cluster locality", + "probe.variant": "Variant", + "probe.vs_full": "Speed vs full memory", + "probe.wait": "Prefetch wait (s)", + "rule.clusters_auto": "0 = derived from the expert count", + "rule.equals_recurrent_depth": "equal to the training depth", + "rule.loopback": "127.0.0.1 (this machine only)", + "rule.sync_is_exact": "sync_on_demand: output identical to full memory", + "rule.vocab_matches_tokenizer": "equal to the tokenizer vocabulary", + "rule.window_median_record": "power of two nearest the median record length (32 when unknown)", + "serve.auth_off": "No key: reachable from this machine only.", + "serve.auth_on": "Clients must send the API key.", + "serve.hint": "Connect with: OLLAMA_HOST={addr} ollama run ", + "serve.intro": "Start chronos serve: Ollama and OpenAI clients connect to it while experts stay lazy-loaded.", + "serve.remote_warning": "Binding beyond this machine needs Allow remote and a key in CHRONOS_API_KEY; without a key the server refuses to start.", + "serve.running": "Serving at {url}", + "serve.start": "Start server", + "serve.stop": "Stop server", + "serve.stopped": "Server stopped", + "serve.title": "Ollama / OpenAI-compatible server", + "source.code": "Default", + "source.measured": "Measured", + "source.planner": "Adaptive planner", + "source.rule": "Rule", + "stage.distill": "Distillation", + "stage.dpo": "DPO", + "stage.grpo": "GRPO", + "stage.orpo": "ORPO", + "stage.pretrain": "Pretraining", + "stage.sft": "Supervised fine-tuning", + "state.checkpointing": "Saving checkpoint", + "state.done": "Done", + "state.error": "Error", + "state.evaluating": "Evaluating", + "state.failed": "Failed", + "state.finished": "Finished", + "state.idle": "Idle", + "state.loading": "Loading", + "state.paused": "Paused", + "state.pending": "Pending", + "state.running": "Running", + "state.stale": "No recent update", + "state.starting": "Starting", + "state.stopped": "Stopped", + "state.stopping": "Stopping", + "tip.auto_empty": "Empty = automatic", + "tip.default": "Default", + "tip.range": "Range", + "tip.recommended": "Recommended", + "tip.source": "Source", + "tok.algorithm": "Algorithm", + "tok.bucket": "Bucket", + "tok.byte_fallback": "Byte fallback rate", + "tok.chars_per_token": "Characters per token", + "tok.compression": "Bytes per token", + "tok.elapsed": "Build time", + "tok.fertility": "Tokens per word", + "tok.fingerprint": "Fingerprint", + "tok.intro": "Train a Chronos tokenizer from your own data: sampling, normalisation, byte-fallback BPE and a held-out report.", + "tok.out_dir_now": "Output folder", + "tok.progress": "Build progress", + "tok.report": "Evaluation report", + "tok.report_note": "Measured on held-out text that was not used to train the tokenizer.", + "tok.roundtrip": "Lossless round trip", + "tok.texts": "Texts", + "tok.title": "Chronos tokenizer builder", + "tok.vocab_use": "Vocabulary used", + "train.config_note": "The architecture comes from the Model page; per-stage learning rates come from the plan when one was applied.", + "train.intro": "Start a training job with the model settings from the Model page. Progress appears in the monitor.", + "train.jobs": "Training jobs", + "train.open_monitor": "Open in monitor", + "train.probe_note": "Each validation decodes the newly saved checkpoint with lazy experts and with full memory. The probe runs as a low-priority child on a copy, so training continues.", + "train.probe_off": "The lazy-expert check is off for this job.", + "train.probe_title": "Lazy-expert check at every validation", + "train.run_dir": "Run folder", + "train.stage_data_note": "Each stage after the first reads its own data format. Leave a row empty to reuse the first stage's dataset.", + "train.stage_n": "Stage {n}", + "train.start": "Start training", + "train.started": "Training started", + "train.stop": "Stop training", + "train.title": "Train", + "train.variants": "{n} combinations will be tested", + "train.variants_capped": "{n} combinations requested, the first {cap} are tested", + "trial.complete": "complete", + "trial.failed": "failed", + "trial.pruned": "pruned", + "tune.apply": "Apply to model config", + "tune.best": "Best parameters", + "tune.duration": "Duration", + "tune.intro": "Search training settings with Optuna TPE: each trial trains a few steps and reports its loss.", + "tune.loss": "Probe loss", + "tune.note": "Probe loss after a short run; a ranking signal, not a final quality measure.", + "tune.start": "Start search", + "tune.stop": "Stop search", + "tune.title": "Auto-tune (Optuna TPE)", + "tune.trial": "Trial", + "tune.trials": "Trials", + "ui.access_tip.lan": "You are connected over the LAN. \"Upload…\" sends files to the uploads folder on the server's machine and uses that path. \"Browse…\" lists files on the server's machine.", + "ui.access_tip.lan_local": "You opened the UI on the server's own machine, so no sign-in is needed. \"Upload…\" opens the system file manager and uses the original path. Other devices on the LAN need the access key.", + "ui.access_tip.local_only": "The UI listens on this machine only (127.0.0.1); other devices cannot open it and no sign-in is needed. Start with --lan to allow LAN access.", + "ui.apply": "Apply", + "ui.backend": "Backend", + "ui.browse": "Browse…", + "ui.busy": "Another job of this kind is running", + "ui.cancel": "Cancel", + "ui.chart_view": "Chart", + "ui.clear": "Clear", + "ui.close": "Close", + "ui.copy": "Copy", + "ui.empty": "Nothing yet", + "ui.error": "Error", + "ui.from_model": "From the model file", + "ui.hide_advanced": "Hide advanced", + "ui.invalid": "Check the highlighted fields", + "ui.key": "Access key", + "ui.lan_local": "This machine · LAN open", + "ui.language": "Language", + "ui.load": "Load", + "ui.loading": "Loading…", + "ui.local_only": "Local only, no login", + "ui.log": "Log", + "ui.login": "Sign in", + "ui.login_blocked": "Too many failed attempts. Wait 5 minutes.", + "ui.login_failed": "Wrong key", + "ui.login_needed": "This workbench needs the access key set on the server.", + "ui.logout": "Sign out", + "ui.no": "No", + "ui.none": "None", + "ui.path": "Path", + "ui.phase": "Stage", + "ui.raw_json": "Raw JSON", + "ui.refresh": "Refresh", + "ui.remote_auth": "Remote access, signed in", + "ui.reset": "Reset to defaults", + "ui.result": "Result", + "ui.run": "Run", + "ui.save": "Save", + "ui.saved": "Saved", + "ui.scan": "Scan", + "ui.sections": "Sections", + "ui.show_advanced": "Show advanced", + "ui.skip": "Skip to content", + "ui.start": "Start", + "ui.started": "Started", + "ui.state": "State", + "ui.step": "Step", + "ui.stop": "Stop", + "ui.table_view": "Table", + "ui.theme": "Theme", + "ui.theme.dark": "Dark", + "ui.theme.light": "Light", + "ui.theme.system": "System", + "ui.time": "Time", + "ui.upload": "Upload…", + "ui.value": "Value", + "ui.yes": "Yes" +} diff --git a/chronos/webui/i18n/ja.json b/chronos/webui/i18n/ja.json new file mode 100644 index 0000000..539da2f --- /dev/null +++ b/chronos/webui/i18n/ja.json @@ -0,0 +1,943 @@ +{ + "app.subtitle": "再帰深さ MoE · 遅延エキスパート · 投機的デコード", + "app.title": "Chronos ワークベンチ", + "bench.better": "優位", + "bench.higher": "高いほど良い", + "bench.intro": "benchmark_compare.py で Chronos のパラメータ数・メモリ・デコード速度を測定します。外部の dense ベースラインとの比較は任意です。", + "bench.lower": "低いほど良い", + "bench.measured_note": "benchmark_compare.py がこのマシンで実測。", + "bench.metric": "指標", + "bench.none": "結果はまだありません。ベンチマークを実行すると作成されます。", + "bench.params": "パラメータ数", + "bench.ram_infer": "推論時の RAM", + "bench.ram_model": "モデルの RAM", + "bench.ram_train": "学習時の RAM", + "bench.run": "ベンチマークを実行", + "bench.title": "ベンチマーク:Chronos と dense ベースライン", + "bench.tps": "デコード トークン/秒", + "bench.unavailable": "このインストールには benchmark_compare.py がありません。", + "choice.absorbed": "吸収", + "choice.adaptive": "適応", + "choice.aggressive": "積極的", + "choice.all": "すべてのブロック", + "choice.alternate": "1つおきのブロック", + "choice.auto": "自動", + "choice.balanced": "バランス", + "choice.block": "ブロック全体", + "choice.cluster": "クラスタ単位", + "choice.cluster_locality_mode.segment": "文書単位(segment)", + "choice.cluster_locality_mode.window": "固定ウィンドウ(window)", + "choice.compare": "遅延ロードと全メモリを比較", + "choice.expanded": "展開(参照)", + "choice.expert": "エキスパート単位", + "choice.experts": "アクティブエキスパート数", + "choice.extreme": "最大限", + "choice.fallback_diagnostic": "読み込まない・診断用(fallback_diagnostic)", + "choice.false": "オフ", + "choice.fixed": "固定", + "choice.fixed_then_adaptive": "固定の後に適応", + "choice.fullload": "全メモリのみ", + "choice.lookahead_teacher_scope.first": "反復 0 のみ", + "choice.lookahead_teacher_scope.iterations": "全反復の平均", + "choice.mla": "グローバル(MLA)ブロック", + "choice.mlp": "MoE/FFN のみ", + "choice.none": "なし", + "choice.offload": "遅延エキスパートのみ", + "choice.on_demand": "読み込み、遅延したエキスパートは省略(on_demand)", + "choice.params": "アクティブパラメータ数", + "choice.planned": "次回使用プランナー", + "choice.recurrent_attention_mode.first_only": "初回のみ注意、v2 動作(first_only)", + "choice.recurrent_attention_mode.per_iteration": "毎反復で注意、反復ごとに KV(per_iteration)", + "choice.recurrent_attention_mode.shared_first": "毎反復で注意、初回 KV を共有(shared_first)", + "choice.recurrent_dt_param.clamp": "クランプ(従来)", + "choice.recurrent_dt_param.sigmoid": "シグモイド(デッドゾーンなし)", + "choice.recurrent_order.block": "ブロック全体で反復(A B A B)", + "choice.recurrent_order.layer": "層ごとに反復(A A B B)", + "choice.router_scope.per_iteration": "反復ごとにルーティング(per_iteration)", + "choice.router_scope.shared": "初回のルーティングを再利用(shared)", + "choice.scheduled": "スケジュール", + "choice.segment": "文書単位", + "choice.shared": "共有", + "choice.swa": "スライディングウィンドウブロック", + "choice.sync_on_demand": "読み込んで待機(sync_on_demand)", + "choice.true": "オン", + "choice.tune.search.lr": "学習率", + "choice.window": "最近使用ウィンドウ", + "config.active": "トークンあたりのアクティブパラメータ", + "config.compute": "トークンあたりの重み使用量(再帰込み)", + "config.estimate": "規模とメモリの見積もり", + "config.estimate_note": "設定から求めた推定値で、実測ではありません。", + "config.file": "設定ファイル", + "config.ignored": "不明または無効なキーを無視しました", + "config.intro": "モデルの設定はすべてここにあります。項目にカーソルを合わせると、意味・既定値・推奨値が表示されます。", + "config.kv": "KV キャッシュ", + "config.loaded": "設定を読み込みました", + "config.path_help": "JSON の設定ファイル。「読み込み」でフォームに読み込み、「保存」でフォームをここに書き出します。相対パスはワークベンチのフォルダが起点です。", + "config.preset": "プリセット", + "config.preset_help": "出発点となる設定。適用するとこのページの全項目が置き換わり、推定値もすぐ更新されます。", + "config.ram": "エキスパートのホットキャッシュ", + "config.ssd": "ディスク上のエキスパート", + "config.total": "総パラメータ数", + "config.tps": "デコード速度の概算(推定)", + "config.train_peak": "学習時のピークメモリ", + "config.train_state": "学習状態(重み・勾配・オプティマイザ)", + "config.virtual_layers": "仮想層数", + "config.vram": "常駐重み + KV", + "data.chars": "レコードあたりの文字数", + "data.dups": "重複率", + "data.fields": "フィールド", + "data.files": "ファイル数", + "data.full_scan": "全件走査", + "data.hist": "レコード長の分布", + "data.intro": "学習前にファイルやフォルダを走査し、形式・フィールド・文字体系・レコード長を確認します。", + "data.max_help": "集計時に読み込む最大レコード数(100〜500,000)。", + "data.max_records": "走査件数", + "data.median": "中央値", + "data.p95": "95 パーセンタイル", + "data.path_help": "ファイルまたはフォルダ(jsonl・json・parquet・csv・tsv・txt)を 1 行に 1 つ。複数指定は、結合後に学習が読むのと同じ 1 つのデータセットとしてスキャンします。相対パスはワークベンチのフォルダが起点です。", + "data.present": "出現率", + "data.records": "レコード数", + "data.sampled": "先頭 {n} 件", + "data.samples": "サンプルレコード", + "data.scanned": "スキャン済み", + "data.schema": "検出された形式", + "data.script": "文字", + "data.scripts": "文字体系", + "data.share": "割合", + "data.title": "データセットの確認", + "data.type": "型", + "err.active_experts": "アクティブエキスパート数はエキスパート総数を超えられません", + "err.dialog_open": "ファイルダイアログがすでに開いています。先にシステムのウィンドウで完了またはキャンセルしてください", + "err.models_dir": "モデルフォルダが見つかりません", + "err.native_local_only": "システムのファイルダイアログはサーバーと同じマシンでのみ使えます", + "err.native_unavailable": "このマシンではシステムのファイルダイアログを開けません", + "err.no_files": "指定したパスに読み込めるファイルがありません", + "err.no_out": "出力フォルダを選んでください", + "err.no_paths": "パスを 1 つ以上追加してください", + "err.not_found": "見つかりません", + "err.paging": "ページングは auto・cluster・expert から選んでください", + "err.port": "ポートが無効です", + "err.probe_invalid": "遅延読み込みチェックの設定が無効です", + "err.remote_needs_key": "リモートバインドには「リモートアクセスを許可」と CHRONOS_API_KEY が必要です", + "err.target": "目標サイズを入力してください", + "err.upload_batch": "アップロードのバッチ ID が無効です。ページを再読み込みしてやり直してください", + "err.upload_disk_full": "サーバー側のディスク空き容量が不足しているため、アップロードを中止しました", + "err.upload_failed": "アップロードが中断されました。接続を確認してやり直してください", + "err.upload_kind": "この項目はアップロードに対応していません", + "err.upload_name": "ファイル名またはフォルダー階層が許可されていません(隠し項目、「..」、階層が深すぎる)", + "err.upload_too_large": "ファイルがアップロード上限(--max-upload-mb)を超えています", + "err.upload_type": "アップロードできるファイルがありません。この項目に合わない種類か、許可されていない実行ファイルです", + "event.final": "終了", + "event.lazy_probe": "遅延読み込みプローブ", + "event.phase_end": "段階終了", + "event.phase_start": "段階開始", + "event.resume": "再開", + "event.rollback": "ロールバック", + "event.validation": "検証", + "export.done": "エクスポートしました", + "export.format": "形式", + "export.intro": "チェックポイントを safetensors または GGUF ファイルとして書き出し、chronos serve が読み込むエキスパートキャッシュ配置を添えます。", + "export.note": "Ollama クライアントは chronos serve を通じて Chronos モデルを実行します(OLLAMA_HOST をそのアドレスに設定)。標準の Ollama は再帰 MoE を実行できません。", + "export.run": "エクスポート", + "export.size": "サイズ(MB)", + "export.tensors": "テンソル数", + "export.title": "エクスポート", + "field.accumulation_steps.help": "オプティマイザ更新 1 回あたりのマイクロバッチ数。実効バッチ = バッチサイズ × 累積数。", + "field.accumulation_steps.label": "勾配累積", + "field.activation_checkpointing.help": "逆伝播で活性化を再計算し、速度と引き換えにピークメモリを減らします。", + "field.activation_checkpointing.label": "活性化チェックポイント", + "field.adaptive_halting.help": "停止確率がしきい値を超えたトークンは反復をやめます。簡単なトークンの計算を節約します。", + "field.adaptive_halting.label": "適応的停止(ACT)", + "field.alpha.help": "蒸留の混合比:α × 教師 KL + (1 − α) × CE。", + "field.alpha.label": "α(蒸留)", + "field.attention_block_size.help": "長いアテンションをこのトークン数のクエリブロックで計算し、各ブロックは見えるキーだけを読みます。0 で分割なし。結果は厳密で、1024 がグローバル層とウィンドウ層の合計で最速でした。", + "field.attention_block_size.label": "アテンションのブロックサイズ", + "field.batch_size.help": "マイクロバッチあたりの系列数。メモリで制限されます。", + "field.batch_size.label": "バッチサイズ", + "field.beta.help": "選好学習で参照方策への KL の結びつきの強さ。", + "field.beta.label": "β(DPO/GRPO)", + "field.ce_chunk_size.help": "最後の隠れ状態から行チャンクごとに言語モデルの損失を計算し、[バッチ, 長さ, 語彙] の logits を作りません。0 で全 logits。結果は厳密です。", + "field.ce_chunk_size.label": "損失のチャンクサイズ", + "field.cluster_locality_clusters.help": "局所性項で使うエキスパートクラスタの数。0 ならエキスパート数から決めます。", + "field.cluster_locality_clusters.label": "クラスタ数", + "field.cluster_locality_mode.help": "クラスタ制約で一続きの入力とみなす単位。window: 上の長さの固定ウィンドウ。segment: バッチ内の各文書(データ自身の区切りで分割し、長い文書はウィンドウ長で再分割)。ラベルやタスクタグなしで、似た文書が同じクラスタを使うよう自発的に学習します。", + "field.cluster_locality_mode.label": "局所性の単位", + "field.cluster_locality_window.help": "クラスタ制約をかける区間の長さ(トークン)。典型的なレコード長に合わせたときに最良の結果が出ました。", + "field.cluster_locality_window.label": "局所性ウィンドウ", + "field.coda_layers.help": "ループの後、出力ヘッドの前に 1 回だけ実行する層。", + "field.coda_layers.label": "コーダ層", + "field.cpu_budget_percent.help": "auto が使える物理コアの割合(%)。", + "field.cpu_budget_percent.label": "CPU 予算", + "field.cpu_threads.help": "PyTorch/BLAS のスレッド数。auto は物理コアの予算を使います。", + "field.cpu_threads.label": "CPU スレッド", + "field.depth_schedule.help": "学習時にバッチごとの深さを決める方法:固定、適応、またはウォームアップ中は固定でその後に適応。", + "field.depth_schedule.label": "深さスケジュール", + "field.depth_schedule_warmup_fraction.help": "スケジュールが適応に切り替わる前に、固定の最大深さで学習する割合。", + "field.depth_schedule_warmup_fraction.label": "スケジュールのウォームアップ", + "field.document_masking.help": "パックした行で、アテンションを区切りトークンで分けた各ドキュメント内に限定します。", + "field.document_masking.label": "ドキュメントマスク", + "field.draft_exit_depth.help": "投機的ドラフトとして出口を学習させる再帰深さ。", + "field.draft_exit_depth.label": "ドラフト深さ(学習)", + "field.draft_exit_kl_coef.help": "自己投機的デコード用に、ドラフト深さの出口と最大深さの出力の間に追加する KL。0 で無効。", + "field.draft_exit_kl_coef.label": "ドラフト出口 KL", + "field.dropout.help": "学習中に活性化をランダムに無効化します。大規模データでは下げ、ごく小さなデータでは上げてください。", + "field.dropout.label": "ドロップアウト", + "field.dtype.help": "学習と推論の数値精度。auto はバックエンドが対応していれば bfloat16、そうでなければ float32 を選びます。", + "field.dtype.label": "計算精度", + "field.epochs.help": "データセットを通す回数。最大ステップを設定すると、そちらで早めに止まります。", + "field.epochs.label": "エポック数", + "field.export.auto_cluster.help": "キャリブレーションデータから同時に使われるエキスパートをページにまとめ、遅延ロードで読むファイルを減らします。", + "field.export.auto_cluster.label": "クラスタを構築", + "field.export.calibration_data_path.help": "どのエキスパートが一緒に使われるかを測定するテキスト。1 行に 1 つのパス。複数指定は自動で結合します。空欄なら自動クラスタリングを行いません。", + "field.export.calibration_data_path.label": "キャリブレーションデータ", + "field.export.cluster_batch_size.help": "キャリブレーションバッチあたりの系列数。", + "field.export.cluster_batch_size.label": "キャリブレーションのバッチサイズ", + "field.export.cluster_device.help": "キャリブレーションパスに使うデバイス。", + "field.export.cluster_device.label": "キャリブレーションのデバイス", + "field.export.cluster_max_batches.help": "クラスタリングのために観測するバッチの数。", + "field.export.cluster_max_batches.label": "キャリブレーションのバッチ数", + "field.export.cluster_max_seq_len.help": "キャリブレーション系列あたりのトークン数。", + "field.export.cluster_max_seq_len.label": "キャリブレーションの長さ", + "field.export.config_path.help": "サイドカーの設定を上書きします。通常は空欄です。", + "field.export.config_path.label": "設定ファイル", + "field.export.copy_cache.help": "遅延エキスパートのページをエクスポートに含め、サービス起動時に再構築しなくて済むようにします。", + "field.export.copy_cache.label": "エキスパートキャッシュをコピー", + "field.export.expert_cache_dir.help": "同梱する既存の遅延エキスパートキャッシュ。空欄なら新しく作成します。", + "field.export.expert_cache_dir.label": "エキスパートキャッシュ", + "field.export.formats.help": "書き出すコンテナ。Safetensors と GGUF は Chronos のメタデータを保持し、chronos serve で実行します。Ollama クライアントは標準の Ollama ではなく chronos serve に接続します。", + "field.export.formats.label": "形式", + "field.export.model_path.help": "エクスポートするチェックポイント。", + "field.export.model_path.label": "チェックポイント", + "field.export.output_dir.help": "エクスポートファイルの書き込み先。", + "field.export.output_dir.label": "出力フォルダ", + "field.fallback_mask_prob.help": "学習中にランダムにエキスパートを隠し、キャッシュミスに耐えられるようにします。フォールバック付きの遅延推論でのみ意味があります。", + "field.fallback_mask_prob.label": "ミスのシミュレーション", + "field.grad_clip.help": "全体の勾配ノルムをこの値でクリップします。0 で無効。", + "field.grad_clip.label": "勾配クリップ", + "field.halting_threshold.help": "トークンが反復をやめる累積停止確率。1 に近いほど深く実行します。", + "field.halting_threshold.label": "停止しきい値", + "field.hidden_size.help": "各トークンベクトルの幅。大きいほど表現力は上がりますが、パラメータ数はおおよそ二乗で増えます。アテンションヘッド数で割り切れる必要があります。", + "field.hidden_size.label": "隠れ層サイズ", + "field.infer.backend.help": "推論のランタイム。auto はチェックポイントとマシンから選びます。", + "field.infer.backend.label": "バックエンド", + "field.infer.decode_wait_s.help": "プリフェッチ中のエキスパートをオンデマンドでロードする前に待つ時間。", + "field.infer.decode_wait_s.label": "デコード待機(秒)", + "field.infer.draft_depth.help": "下書きに使う再帰深さ。", + "field.infer.draft_depth.label": "ドラフト深さ", + "field.infer.gamma.help": "検証 1 回あたりに下書きするトークン数。", + "field.infer.gamma.label": "ドラフト長 γ", + "field.infer.max_tokens.help": "生成するトークン数の上限。", + "field.infer.max_tokens.label": "最大生成トークン数", + "field.infer.miss_policy.help": "キャッシュミス時の動作。sync_on_demand なら出力は全メモリと同一です。", + "field.infer.miss_policy.label": "ミス時のポリシー", + "field.infer.mode.help": "compare は遅延ロードと全メモリを並べて実行。offload は遅延エキスパートのみ。fullload はすべてをロードします。", + "field.infer.mode.label": "モード", + "field.infer.model_path.help": "実行する .pth チェックポイント。アーキテクチャはサイドカーの設定で決まります。", + "field.infer.model_path.label": "チェックポイント", + "field.infer.paging.help": "auto はチェックポイントに従います。クラスタ局所性で学習していればクラスタ単位、そうでなければエキスパート単位。", + "field.infer.paging.label": "ページング方式", + "field.infer.ram_load_ratio.help": "RAM に保持するエキスパートの割合。1.0 を超えるとプリフェッチ用の余裕が加わります。", + "field.infer.ram_load_ratio.label": "RAM 比率", + "field.infer.raw_prompt.help": "チャットテンプレートを使わず、テキストをそのまま送ります。", + "field.infer.raw_prompt.label": "生のプロンプト", + "field.infer.residency_decay.help": "プランナーが古いルーティング情報を忘れる速さ。", + "field.infer.residency_decay.label": "プランナーの減衰", + "field.infer.residency_planner.help": "最も長く使われていないエキスパートではなく、次に必要になるのが最も遠いエキスパートを追い出します。", + "field.infer.residency_planner.label": "次回使用プランナー", + "field.infer.speculative.help": "浅い深さでトークンを下書きし、最大深さで検証します。出力は変わりません。50M では遅くなることが実測されたため、既定ではオフです。", + "field.infer.speculative.label": "自己投機的デコード", + "field.infer.sweep_ram_ratios.help": "標準の比率をすべて実行し、メモリに対する速度とヒット率をグラフにします。", + "field.infer.sweep_ram_ratios.label": "RAM 比率をスイープ", + "field.infer.temperature.help": "サンプリングのランダムさ。0 は貪欲デコードで再現可能です。", + "field.infer.temperature.label": "温度", + "field.infer.verify_wait_s.help": "投機的デコードの検証パスでの同様の待機時間。", + "field.infer.verify_wait_s.label": "検証待機(秒)", + "field.kv_cache_dtype.help": "auto は計算精度のまま。int8 は推論時の KV キャッシュをトークン単位で量子化します(メモリ約半分、誤差は小さい)。学習は量子化されません。", + "field.kv_cache_dtype.label": "KV キャッシュ精度", + "field.kv_latent_dim.help": "MLA 層がキャッシュする圧縮キー/バリュー潜在の幅。小さいほど KV メモリを節約します。", + "field.kv_latent_dim.label": "MLA 潜在サイズ", + "field.kv_quant_group_size.help": "1 つの int8 スケールを共有するチャネル数。小さいほど精度が上がり、サイズはわずかに増えます。", + "field.kv_quant_group_size.label": "KV 量子化グループ", + "field.lambda_balance.help": "トークンをエキスパートに均等に振り分けるようルーターを促します。", + "field.lambda_balance.label": "負荷分散", + "field.lambda_cluster_locality.help": "区間内のトークンを 1 つのエキスパートクラスタ内にとどめるよう学習させ、遅延推論でクラスタ単位のページングを可能にします。0 で無効。", + "field.lambda_cluster_locality.label": "クラスタ局所性", + "field.lambda_iteration_cluster.help": "同じトークンのすべてのループ反復を同じエキスパートクラスタ内に収める重み(クラスタ内のエキスパートは反復ごとに異なってよい)。0 で無効。推奨は 0:クラスタ局所性が有効なとき、後の反復が使うクラスタの 99.5-100% は反復 0 ですでに使われており、この項が働く余地はほとんどない。", + "field.lambda_iteration_cluster.label": "反復クラスタ局所性", + "field.lambda_lookahead.help": "将来のトークンが使うエキスパートを予測するよう先読みルーターを学習させます。", + "field.lambda_lookahead.label": "先読み損失", + "field.lambda_lookahead_topk.help": "将来の top-k エキスパートを正確に当てることへの追加の重み。", + "field.lambda_lookahead_topk.label": "先読み top-k", + "field.lambda_lookahead_union.help": "先読みウィンドウ内のエキスパートの和集合をカバーすることへの重み。", + "field.lambda_lookahead_union.label": "先読み和集合", + "field.lambda_or.help": "ORPO のオッズ比項の重み。", + "field.lambda_or.label": "λ(ORPO)", + "field.lambda_router_anchor.help": "ファインチューニング中にルーティングを上流チェックポイントに近く保ちます。事前学習では 0。", + "field.lambda_router_anchor.label": "ルーターアンカー", + "field.lambda_router_locality.help": "隣接トークン間でルーティングが変わることへの弱いペナルティ。", + "field.lambda_router_locality.label": "ルーター局所性", + "field.lambda_temporal.help": "連続するトークンが同じエキスパートを選ぶと報酬を与え、テキストの区間ごとにロードするエキスパートを減らします。", + "field.lambda_temporal.label": "時間的局所性", + "field.layer_aware_cache.help": "常駐エキスパートを物理層ではなく仮想層ごとに管理します。", + "field.layer_aware_cache.label": "層別キャッシュ", + "field.learning_rate.help": "オプティマイザの最大ステップ幅。プランナーがモデルサイズから提案します。ファインチューニングでは下げてください。", + "field.learning_rate.label": "学習率", + "field.log_interval.help": "N ステップごとにメトリクスを 1 行書き出します。", + "field.log_interval.label": "ログ間隔", + "field.lookahead_input_detach.help": "ルックアヘッドルーターは勾配を持たない隠れ状態のコピーを読み、その損失はルーターだけを学習します。中英データでは影響は測定されませんでした。", + "field.lookahead_input_detach.label": "ルックアヘッド入力の勾配遮断", + "field.lookahead_steps.help": "先読みルーターが何トークン先までエキスパートを予測するか。必要になる前にプリフェッチできます。", + "field.lookahead_steps.label": "先読みステップ", + "field.lookahead_teacher_scope.help": "LookaheadRouter が予測を学ぶルーティング。first:反復 0 のみ。iterations:その層の全反復の平均で、先読みがより深い反復に必要なエキスパートも対象にする。推奨は first:先読みヘッドはどの反復でもトークンの 0.97 で正しいクラスタを選んでいる。", + "field.lookahead_teacher_scope.label": "先読み教師", + "field.max_gen_len.help": "GRPO のロールアウトごとに生成するトークン数。", + "field.max_gen_len.label": "ロールアウト長", + "field.max_inference_depth.help": "推論時の最大反復回数。通常は学習時の深さと同じです。学習時より深くした場合の挙動は検証されていません。", + "field.max_inference_depth.label": "推論時の深さ", + "field.max_position_embeddings.help": "回転位置埋め込みが対応する最長の系列長。非常に長いコンテキストを使う場合のみ変更してください。", + "field.max_position_embeddings.label": "最大位置数", + "field.max_resident_experts.help": "層ごとにメモリに保持するエキスパート数の上限。空欄ならプランナーが決めます。", + "field.max_resident_experts.label": "最大常駐エキスパート数", + "field.max_seq_len.help": "学習系列あたりのトークン数。ハイブリッドアテンションではメモリはおおよそ線形に増えます。", + "field.max_seq_len.label": "系列長", + "field.max_steps.help": "オプティマイザがこのステップ数に達したら停止します。0 は上限なし(全エポック実行)。", + "field.max_steps.label": "最大ステップ", + "field.min_recurrent_depth.help": "スケジュールや早期終了が使える最小の深さ。1 なら簡単なトークンは 1 回で終了できます。", + "field.min_recurrent_depth.label": "最小深さ", + "field.mla_cache_rope.help": "回転キー部分もキャッシュし、KV メモリと引き換えにデコードを速くします。", + "field.mla_cache_rope.label": "RoPE キーをキャッシュ", + "field.mla_decode.help": "expanded:参照経路。absorbed:射影をクエリに畳み込みます(1 ステップあたりの計算が少ない)。auto は経路を混在させ、わずかなロジット差が出たため、明示的に選んだ場合のみ使います。", + "field.mla_decode.label": "MLA デコード経路", + "field.mla_upproj_recompute.help": "潜在ベクトルだけを保持し、アテンションブロックごとに K と V を再構築します。厳密ですが 64k ではメモリ削減が測定されなかったため既定はオフです。", + "field.mla_upproj_recompute.label": "MLA 上位射影の再計算", + "field.modalities.help": "追加の入力エンコーダ(image、audio をカンマ区切り)。テキストのみのモデルでは空欄にします。データセットは自動判定されます。", + "field.modalities.label": "モダリティ", + "field.moe_chunk_tokens.help": "このサイズのチャンクでトークンをエキスパートに振り分け、各チャンクは逆伝播で再計算します。0 で一括。結果は厳密です。", + "field.moe_chunk_tokens.label": "MoE チャンクのトークン数", + "field.moe_intermediate_size.help": "各エキスパートのフィードフォワードネットワークの隠れ幅。0 なら隠れ層サイズから求めます。", + "field.moe_intermediate_size.label": "エキスパート FFN 幅", + "field.num_attention_heads.help": "クエリヘッドの数。隠れ層サイズはこの数で割り切れる必要があります。", + "field.num_attention_heads.label": "アテンションヘッド数", + "field.num_experts.help": "MoE 層ごとのルーティング対象エキスパート数。トークンあたりの計算を増やさずに容量を増やせます。遅延ロードの単位でもあります。", + "field.num_experts.label": "エキスパート数", + "field.num_experts_per_tok.help": "各トークンが使うエキスパートの数。top-2 ならルーターが損失から学習できます。top-1 では norm_topk_prob をオフにする必要があります。", + "field.num_experts_per_tok.label": "アクティブエキスパート数(top-k)", + "field.num_generations.help": "GRPO がプロンプトごとに比較するサンプル数。", + "field.num_generations.label": "プロンプトあたりのロールアウト数", + "field.num_hidden_layers.help": "チェックポイントに保存される独立した Transformer 層の数(プレリュード+再帰グループ+コーダ)。再帰で再利用されるため、仮想的な深さはこれより大きくなります。", + "field.num_hidden_layers.label": "物理層数", + "field.num_key_value_heads.help": "スライディングウィンドウ層のグループ化クエリアテンションで使うキー/バリューヘッドの数。少ないほど KV キャッシュが小さくなります。", + "field.num_key_value_heads.label": "KV ヘッド数", + "field.num_shared_experts.help": "すべてのトークンが常に通るエキスパート。常にメモリに常駐します。", + "field.num_shared_experts.label": "共有エキスパート", + "field.num_workers.help": "データローダーのワーカープロセス数。auto はプラットフォームに合った安全な数を選びます。", + "field.num_workers.label": "データワーカー", + "field.optimizer_page_dir.help": "ページングしたオプティマイザ状態を置くフォルダ。高速なローカル SSD を使ってください。", + "field.optimizer_page_dir.label": "オプティマイザのページフォルダ", + "field.optimizer_paging.help": "非アクティブなエキスパートのオプティマイザ状態をディスクに保存します。", + "field.optimizer_paging.label": "オプティマイザのページング", + "field.page_size_mb.help": "オプティマイザのページファイル 1 つの大きさ(MB)。", + "field.page_size_mb.label": "ページサイズ", + "field.pinned_memory_max_fraction.help": "ピン留めエキスパートバッファに使うシステム RAM の最大割合。", + "field.pinned_memory_max_fraction.label": "ピン留め RAM の割合", + "field.plan.active_mode.help": "トークンあたりの予算をエキスパート数で指定するか、アクティブパラメータ数で指定するか。", + "field.plan.active_mode.label": "アクティブ予算の指定方法", + "field.plan.active_value.help": "トークンあたりのアクティブエキスパート数、またはアクティブパラメータ数(百万単位)。", + "field.plan.active_value.label": "アクティブ予算", + "field.plan.data_paths.help": "トークン数、系列長、ウィンドウを決めるためにプランナーが測定するファイルまたはフォルダ(1 行に 1 つ)。", + "field.plan.data_paths.label": "データセット", + "field.plan.depth.help": "再帰グループあたりのループ反復回数。", + "field.plan.depth.label": "再帰的な深さ", + "field.plan.memory_saving.help": "速度と引き換えにどこまでメモリを節約するか(int8 KV、共有ルーティング、チェックポイント)。", + "field.plan.memory_saving.label": "メモリ節約", + "field.plan.num_experts.help": "MoE 層ごとのルーティング対象エキスパート数。", + "field.plan.num_experts.label": "エキスパート数", + "field.plan.ram_gb.help": "計画の前提とするメモリ。空欄ならこのマシンを検出します。", + "field.plan.ram_gb.label": "RAM(GB)", + "field.plan.seq_len.help": "空欄ならデータセットのプロファイルから求めます。", + "field.plan.seq_len.label": "系列長", + "field.plan.target_m.help": "総パラメータ数(百万単位)。", + "field.plan.target_m.label": "目標サイズ(M)", + "field.plan.token_budget_b.help": "事前学習のトークン数(十億単位)。空欄ならデータを 1 周します。", + "field.plan.token_budget_b.label": "トークン予算(B)", + "field.plan.use_moe.help": "MoE モデルを計画します。オフなら密なモデルを計画します。", + "field.plan.use_moe.label": "混合エキスパート", + "field.plan.vocab_size.help": "空欄ならトークナイザーのレポートから読みます。レポートがなければ 32768 と同梱の汎用 32k トークナイザーを使います。", + "field.plan.vocab_size.label": "語彙", + "field.ponder_loss_coef.help": "期待反復回数へのペナルティ。大きいほど早く停止するよう促します。", + "field.ponder_loss_coef.label": "思考コスト損失", + "field.prefetch_depth.help": "予測したエキスパートをどこまで先読みしてロードするか。0 でプリフェッチ無効。", + "field.prefetch_depth.label": "プリフェッチ深さ", + "field.prelude_layers.help": "ループの前に 1 回だけ実行する層。先読みルーティングはこの出力を読みます。", + "field.prelude_layers.label": "プレリュード層", + "field.probe.backends.help": "テストするランタイム。バックエンドごとに全メモリの参照を取ります。", + "field.probe.backends.label": "プローブのバックエンド", + "field.probe.decode_wait_s.help": "デコードの各ステップで、プリフェッチ中のエキスパートをオンデマンドでロードする前に待つ時間。", + "field.probe.decode_wait_s.label": "デコード待機(秒)", + "field.probe.draft_depth.help": "投機的デコードの組み合わせでトークンを下書きする再帰深さ。", + "field.probe.draft_depth.label": "ドラフト深さ", + "field.probe.enabled.help": "検証のたびに、保存したばかりのチェックポイントを遅延エキスパートと全メモリでデコードして比較します(速度、ヒット率、トークン一致率)。チェックポイントのコピー上で、低優先度の子プロセスとして実行します。", + "field.probe.enabled.label": "遅延エキスパートのプローブ", + "field.probe.gamma.help": "投機的デコードの組み合わせで、検証 1 回あたりに下書きするトークン数。", + "field.probe.gamma.label": "ドラフト長 γ", + "field.probe.max_new_tokens.help": "プロンプトごとに貪欲デコードするトークン数。多いほど測定値は安定しますが、プローブに時間がかかります。", + "field.probe.max_new_tokens.label": "プロンプトあたりのトークン数", + "field.probe.max_variants.help": "テストする組み合わせ数の上限。超えた分は打ち切りとして報告されます。", + "field.probe.max_variants.label": "組み合わせの上限", + "field.probe.miss_policies.help": "キャッシュミス時の Torch の動作。sync_on_demand はロードして待つ(出力は同一)。on_demand は間に合わないエキスパートを飛ばすことがある。fallback_diagnostic はロードしない(最悪ケース)。", + "field.probe.miss_policies.label": "ミス時のポリシー", + "field.probe.paging.help": "auto はモデルの学習方法に従います(クラスタ局所性損失を使っていればクラスタ単位)。expert を加えるとエキスパート単位のページングと比較できます。", + "field.probe.paging.label": "ページング方式", + "field.probe.ram_ratios.help": "同時に RAM に置けるエキスパートの割合。低いほどメモリを節約し、ミスが増えます。", + "field.probe.ram_ratios.label": "RAM 比率", + "field.probe.residency.help": "MLX の追い出し方式:planned は次回使用プランナー、window は単純な最近使用ウィンドウ。", + "field.probe.residency.label": "常駐ポリシー", + "field.probe.residency_decay.help": "次回使用プランナーが古いルーティング情報を忘れる速さ。", + "field.probe.residency_decay.label": "プランナーの減衰", + "field.probe.speculative.help": "遅延エキスパートでの自己投機的デコードもテストします。", + "field.probe.speculative.label": "投機的デコードも測定", + "field.probe.verify_wait_s.help": "投機的デコードの検証パスでの同様の待機時間。", + "field.probe.verify_wait_s.label": "検証待機(秒)", + "field.ram_budget_mb.help": "遅延エキスパートキャッシュが使える RAM(MB)。空欄なら RAM 比率を使います。", + "field.ram_budget_mb.label": "RAM 予算", + "field.recompute_policy.help": "チェックポイント有効時に再計算するブロック: すべて、グローバル(MLA)のみ、スライディングウィンドウのみ、または1つおき。", + "field.recompute_policy.label": "再計算するブロック", + "field.recompute_scope.help": "block: ブロック全体を再計算(メモリ削減が最大)。mlp: 各ブロックの MoE/FFN のみ再計算し、アテンション結果を保持して時間を抑えます。", + "field.recompute_scope.label": "再計算の範囲", + "field.recurrent_attention_mode.help": "ループ内でのアテンションの実行方法。shared_first:毎反復でアテンションし、K/V は反復 0 のもの(キャッシュは厳密で、KV は深さで増えない)。per_iteration:反復ごとに KV を持つ(KV が D 倍)。first_only:v2 の挙動。", + "field.recurrent_attention_mode.label": "再帰内アテンション", + "field.recurrent_depth.help": "学習中に各再帰グループを反復する回数。仮想層数 = プレリュード + グループ数 × 深さ + コーダ。", + "field.recurrent_depth.label": "学習時の深さ", + "field.recurrent_depth_jitter.help": "スケジュールされた深さの周りにランダムな幅を持たせ、複数の深さで終了できるよう学習させます。", + "field.recurrent_depth_jitter.label": "深さのゆらぎ", + "field.recurrent_distill_coef.help": "浅い出口の予測を最大深さの予測に合わせるよう学習させます。投機的デコードの受理率と早期終了の品質が上がります。", + "field.recurrent_distill_coef.label": "深さ蒸留", + "field.recurrent_dt_init.help": "学習するループのステップ幅 dt の開始値。すべてのループグループで共通。1 回の反復はオイラー法の 1 ステップなので、深さ × dt が積分区間 T になる。プランナーは dt = min(0.5, 2 / 深さ) とし、T = 2 に固定する:深さ 4 で 0.5、深さ 8 で 0.25。15M モデルの実測(各条件シード 1 つ):深さ 4 では dt が 0.2〜0.5 の間で損失は同じ。深さ 8 では dt 0.25 が 0.5 に勝ち、0.0625 からの開始は大きく悪化した。T = 2 は安全な出発点であり、当てはめた最適値ではない:そこから始めた sigmoid の実験は T が約 1.2 に落ち着いた。カーネルの既定値は 0.25 のまま。", + "field.recurrent_dt_init.label": "初期ステップ幅", + "field.recurrent_dt_max.help": "dt の上限。1.0 は 1 回の反復でブロックの更新をそのまま残差ストリームに加える。上限としては 1.0 を推奨する。深さ 4 と 8 の両方で、dt を 1.0 に固定すると 0.5 より悪かった。", + "field.recurrent_dt_max.label": "最大ステップ幅", + "field.recurrent_dt_min.help": "dt の下限。clamp では下限に達した dt は学習しなくなる。既定の 0.05 では、深さ 4 と深さ 8 の実測で dt がこの下限に落ち込んだ。推奨は 0.05 で、sigmoid パラメータ化と組み合わせると dt は [dt_min, dt_max] の中で学習し続ける。15M の実測で学習された dt は 0.14 から 0.30 の間だった。", + "field.recurrent_dt_min.label": "最小ステップ幅", + "field.recurrent_dt_param.help": "学習するループのステップ幅 dt の保持方法。clamp:dt = clamp(w, dt_min, dt_max)。w が範囲外に出ると勾配がゼロになり、dt_min を下回った dt は戻れない。sigmoid:dt = dt_min + (dt_max - dt_min) * sigmoid(w)。勾配が消えないため dt は動き続けられる。どちらも設定した初期 dt から始まる。15M モデルの実測(各条件シード 1 つ):clamp の既定では dt が下限 0.05 に張り付き、同じステップ数で健全な dt より悪かった。sigmoid の dt は動き続け、損失が変わらない位置に落ち着いた。プランナーは sigmoid を推奨する。", + "field.recurrent_dt_param.label": "ステップ幅のパラメータ化", + "field.recurrent_enabled.help": "中間の共有グループをトークンごとに複数回実行し、少ない重みでより深いネットワークのように働かせます。", + "field.recurrent_enabled.label": "再帰的な深さ", + "field.recurrent_groups.help": "プレリュードとコーダの間で反復するグループを構成する層の数。空欄なら 層数 − プレリュード − コーダ から求めます。", + "field.recurrent_groups.label": "再帰グループ数", + "field.recurrent_later_groups.help": "ブロック順序のみ:最初の反復より後のループ反復では、ブロックの先頭 N 層だけを実行する(0 で全層)。レイヤー呼び出しが減り、深い反復が安くなり、触れるエキスパートページも減る。shared_first または first_only の注意モードが必要。推奨は 0(ブロック全体)。15M の実測では 4 層中 2 層にすると毎秒のステップ数が約 1.3 倍になり、ステップあたりの訓練損失は最大 0.055 高かった。1 は使わない:1 層だけの自己ループはもうブロックループではない。", + "field.recurrent_later_groups.label": "後続反復のレイヤー数", + "field.recurrent_later_topk.help": "最初の反復より後のループ反復でトークンごとに使うエキスパート数(0 で最初の反復と同じ)。共有エキスパートは常に動作する。小さくすると深い反復が安くなり、読み込むエキスパートページも減る。推奨は 0:15M の実測では 1 エキスパートにすると検証 CE が 4.543 から 4.600 に上がり、速度は変わらなかった。", + "field.recurrent_later_topk.label": "後続反復の top-k", + "field.recurrent_order.help": "ループの実行順序。layer:各再帰層を depth 回連続で反復。block:再帰層のグループ全体を反復し、反復 0 は通常の深さ 1 の順伝播になり、以降がそれを精緻化する。計算が異なるため、layer 順序のチェックポイントとは互換性がない。15M モデルの実測(各条件シード 1 つ):ステップ幅を学習できるとき、同じステップ数で block の損失が低かった。ステップ幅を 1.0 に固定すると後半は layer が良かった。プランナーは block を推奨する。", + "field.recurrent_order.label": "ループ順序", + "field.recurrent_stability_coef.help": "再帰更新を縮小写像に保ち、反復を重ねても発散やドリフトが起きないようにします。", + "field.recurrent_stability_coef.label": "安定化損失", + "field.recurrent_strategy.help": "学習時に再帰深さのバケットをサンプリングする戦略。", + "field.recurrent_strategy.label": "深さの戦略", + "field.reset_lookahead_at_documents.help": "空欄は上のルーター設定に従い、true / false でルックアヘッド項だけを個別に設定します。", + "field.reset_lookahead_at_documents.label": "文書境界でルックアヘッドをリセット", + "field.reset_router_at_documents.help": "パックした行で、時間的局所性と局所性の損失が文書境界をまたぐトークン対を除外します。", + "field.reset_router_at_documents.label": "文書境界でルーターをリセット", + "field.reward_spec.help": "組み込み報酬なら toy、または lm:/path/to/reward-model[,device=cuda]。", + "field.reward_spec.label": "報酬(GRPO)", + "field.rope_dim.help": "MLA 層で回転位置情報を持つヘッドあたりの次元数。", + "field.rope_dim.label": "RoPE 次元", + "field.rope_theta.help": "回転位置埋め込みの基底周波数。大きいほど位置分解能が引き伸ばされ、長いコンテキストに向きます。", + "field.rope_theta.label": "RoPE 基数", + "field.router_scope.help": "per_iteration:ループの反復ごとにルーティングし直す。shared:反復 0 のルーティングを再利用し、触れるエキスパートが少なく遅延ロードに向きます。", + "field.router_scope.label": "ルーター範囲", + "field.save_dir.help": "チェックポイントとその .config.json サイドカーの書き込み先。", + "field.save_dir.label": "チェックポイントフォルダ", + "field.save_interval.help": "N ステップごとに保存(と検証)を行います。", + "field.save_interval.label": "保存間隔", + "field.serve.allow_remote.help": "ループバック以外のアドレスで待ち受けます。サーバーの環境変数に CHRONOS_API_KEY が必要で、クライアントはそのキーを送る必要があります。", + "field.serve.allow_remote.label": "リモートアクセスを許可", + "field.serve.device.help": "サービスのランタイム。", + "field.serve.device.label": "デバイス", + "field.serve.dtype.help": "サービス時の数値精度。", + "field.serve.dtype.label": "精度", + "field.serve.host.help": "待ち受けるアドレス。127.0.0.1 はこのマシンからのみ接続できます。", + "field.serve.host.label": "ホスト", + "field.serve.kv_cache_dtype.help": "KV の保存形式を上書きします。int8 なら KV メモリはおよそ半分。空欄ならモデルの設定のまま。", + "field.serve.kv_cache_dtype.label": "KV キャッシュ精度", + "field.serve.lazy_experts.help": "エキスパートを SSD に置き、必要に応じてページインします。Ollama プロトコル経由でもメモリを低く保てます。", + "field.serve.lazy_experts.label": "遅延エキスパート", + "field.serve.max_resident_experts.help": "層ごとに RAM に置くエキスパート数の上限。空欄なら RAM 割合から求めます。", + "field.serve.max_resident_experts.label": "最大常駐エキスパート数", + "field.serve.mla_cache_rope.help": "回転済みキーをキャッシュします。メモリは増え、再計算は減ります。", + "field.serve.mla_cache_rope.label": "RoPE キーをキャッシュ", + "field.serve.mla_decode.help": "MLA デコード経路を上書きします。空欄ならモデルの設定のまま。", + "field.serve.mla_decode.label": "MLA デコード", + "field.serve.models_dir.help": "エクスポート済みモデルのフォルダ。各モデルが Ollama のモデル名として表示されます。", + "field.serve.models_dir.label": "モデルフォルダ", + "field.serve.paging.help": "auto はチェックポイントの学習方法に従います(クラスタ単位またはエキスパート単位)。", + "field.serve.paging.label": "ページング方式", + "field.serve.port.help": "TCP ポート。11435 なら 11434 の標準 Ollama と衝突しません。", + "field.serve.port.label": "ポート", + "field.serve.ram_budget_mb.help": "エキスパート用 RAM の上限。空欄なら上限なし。", + "field.serve.ram_budget_mb.label": "RAM 予算(MB)", + "field.serve.ram_expert_fraction.help": "RAM に置けるエキスパートの割合。", + "field.serve.ram_expert_fraction.label": "RAM 上のエキスパート割合", + "field.serve.router_scope.help": "反復間のルーティング再利用を上書きします。空欄ならモデルの設定のまま。", + "field.serve.router_scope.label": "ルーター範囲", + "field.sliding_window_size.help": "スライディングウィンドウ層が参照できるトークン数。短いウィンドウは文単位のタスクに向き、KV メモリを抑えます。", + "field.sliding_window_size.label": "スライディングウィンドウ", + "field.storage_format.help": "ディスク上のエキスパートストアのファイル形式。", + "field.storage_format.label": "エキスパート保存形式", + "field.temperature.help": "GRPO ロールアウトのサンプリング温度。", + "field.temperature.label": "ロールアウト温度", + "field.temporal_grad_span.help": "この位置数ごとに時間的局所性損失の勾配の連鎖を切ります。0 で連鎖を切りません。中英データでは影響は測定されませんでした。", + "field.temporal_grad_span.label": "時間勾配のスパン", + "field.tie_word_embeddings.help": "入力埋め込みを出力ヘッドと共有します。語彙×隠れ層サイズ分のパラメータを節約でき、小規模モデルでは品質低下はわずかです。", + "field.tie_word_embeddings.label": "埋め込みの共有", + "field.tok.fields.help": "読み込む JSON フィールド。空欄なら text、conversations、pairs を自動検出します。", + "field.tok.fields.label": "テキストフィールド", + "field.tok.out_dir.help": "tokenizer.json、チャットテンプレート、レポートの書き込み先。", + "field.tok.out_dir.label": "出力フォルダ", + "field.tok.paths.help": "テキストをサンプリングするファイルまたはフォルダを 1 行に 1 つ。各ソースはそれぞれの割り当てでサンプリングし、結合しません。", + "field.tok.paths.label": "ソースファイル", + "field.tok.per_source.help": "ソースファイルごとのリザーバサンプリングの件数。", + "field.tok.per_source.label": "ソースあたりのテキスト数", + "field.tok.temperature.help": "バイト比率で言語のバランスを取ります。低いほど均等になり、英語が中国語を押し出しません。", + "field.tok.temperature.label": "言語温度", + "field.tok.vocab_size.help": "学習するトークン数。モデルの語彙サイズも同じ値にしてください。", + "field.tok.vocab_size.label": "語彙サイズ", + "field.tokenizer_path.help": "モデルの学習に使うトークナイザーのフォルダ(tokenizer.json を含む)。空欄ならチェックポイント付属のもの、なければ同梱の代替を使います。語彙サイズは一致させてください。", + "field.tokenizer_path.label": "トークナイザー", + "field.train.backend.help": "学習に使うデバイス。auto は Apple シリコンなら MLX、次に CUDA、XPU、MPS、CPU の順で選びます。", + "field.train.backend.label": "学習バックエンド", + "field.train.data_distill.help": "教師モデルが採点するテキストまたは対話データ。ファイルまたはフォルダを 1 行に 1 つ。複数指定は自動で結合します。空欄なら最初のステージのデータセットを使います。", + "field.train.data_distill.label": "蒸留のデータ", + "field.train.data_dpo.help": "chosen と rejected の応答を含む選好ペア。ファイルまたはフォルダを 1 行に 1 つ。複数指定は自動で結合します。空欄なら最初のステージのデータセットを使います。", + "field.train.data_dpo.label": "DPOのデータ", + "field.train.data_grpo.help": "報酬 rollout 用のプロンプト。ファイルまたはフォルダを 1 行に 1 つ。複数指定は自動で結合します。空欄なら最初のステージのデータセットを使います。", + "field.train.data_grpo.label": "GRPOのデータ", + "field.train.data_orpo.help": "chosen と rejected の応答を含む選好ペア(DPO と同じ形式)。ファイルまたはフォルダを 1 行に 1 つ。複数指定は自動で結合します。空欄なら最初のステージのデータセットを使います。", + "field.train.data_orpo.label": "ORPOのデータ", + "field.train.data_path.help": "最初のステージのデータセット。JSONL・JSON・Parquet・CSV・TSV・TXT ファイル、またはそれらを含むフォルダを 1 行に 1 つ。複数指定すると実行フォルダ内で 1 つの JSONL ファイルに結合します。空欄なら合成データでスモークテストを行います。", + "field.train.data_path.label": "データセット", + "field.train.data_sft.help": "conversations(user / assistant のターン)を含む対話データ。ファイルまたはフォルダを 1 行に 1 つ。複数指定は自動で結合します。空欄なら最初のステージのデータセットを使います。", + "field.train.data_sft.label": "教師ありファインチューニングのデータ", + "field.train.init_weight.help": "学習を始めるチェックポイント。空欄の場合、事前学習はランダム初期化から、以降のステージは前のステージから始めます。", + "field.train.init_weight.label": "開始チェックポイント", + "field.train.max_steps.help": "オプティマイザがこのステップ数に達したら停止します。0 なら設定したエポック数を実行します。", + "field.train.max_steps.label": "最大ステップ", + "field.train.sample_prompt.help": "学習の進み具合を読めるよう、一定間隔で補完させるプロンプト。空欄ならステージの既定値を使います。", + "field.train.sample_prompt.label": "サンプルプロンプト", + "field.train.stages.help": "順番に実行するステージ。各ステージは前のステージのチェックポイントから始まります。通常は 事前学習 → SFT です。", + "field.train.stages.label": "ステージ", + "field.train.teacher_path.help": "蒸留専用:生徒モデルが出力を合わせる対象のモデル。", + "field.train.teacher_path.label": "教師チェックポイント", + "field.train.val_ratio.help": "検証用に取り分けるレコードの割合。検証のたびに遅延エキスパートのプローブも実行されます。", + "field.train.val_ratio.label": "検証用の割合", + "field.training_paging.help": "学習中、非アクティブなエキスパートをメモリから外します。遅くなりますが、RAM より大きいモデルを学習できます。", + "field.training_paging.label": "ページング学習", + "field.tune.data_path.help": "自動チューニングの開始前に確認するデータセット(1 行に 1 つ)。現在の試験学習はランダムなトークンで行うため、このデータは試験の損失に影響しません。", + "field.tune.data_path.label": "データセット", + "field.tune.n_trials.help": "Optuna が試す設定の数。", + "field.tune.n_trials.label": "試行回数", + "field.tune.probe_steps.help": "試行ごとの学習ステップ数。成績の悪い試行は早めに打ち切られます。", + "field.tune.probe_steps.label": "試行あたりのステップ数", + "field.tune.search.help": "探索で変更してよいパラメータ。評価値はプローブモデルの交差エントロピー。ループ系のパラメータを選ぶとプローブはループモデルになる(設定した深さ、ブロック 4 層)。ループ系の結果は粗い選別として扱う。recurrent_later_topk と recurrent_later_groups が減らすのは損失ではなく時間なので、ログにある各試行のステップ時間と比べる。", + "field.tune.search.label": "探索対象", + "field.use_hybrid_attention.help": "MLA(圧縮潜在 KV)層とスライディングウィンドウ層を交互に配置します。長いコンテキストでも KV キャッシュを小さく保てます。", + "field.use_hybrid_attention.label": "ハイブリッドアテンション", + "field.vocab_size.help": "トークン ID の数。トークナイザーの語彙と一致させる必要があります。一致しないと ID が埋め込み表の範囲外になります。", + "field.vocab_size.label": "語彙サイズ", + "field.vram_budget_gb.help": "エキスパートキャッシュが使えるアクセラレータメモリ(GB)。", + "field.vram_budget_gb.label": "VRAM 予算", + "field.weight_decay.help": "AdamW の分離型重み減衰。", + "field.weight_decay.label": "重み減衰", + "group.attention": "アテンションと KV キャッシュ", + "group.autotune": "自動チューニング", + "group.benchmark": "ベンチマーク", + "group.export": "エクスポート", + "group.inference": "生成", + "group.lazy": "遅延エキスパート", + "group.memory": "メモリと遅延エキスパート", + "group.model": "モデル形状", + "group.moe": "混合エキスパート", + "group.objectives": "学習目標", + "group.optimizer": "オプティマイザ", + "group.planner": "自動プラン", + "group.probe": "検証時の遅延エキスパートプローブ", + "group.recurrent": "再帰的な深さ", + "group.rl": "選好学習と強化学習のステージ", + "group.runtime": "ランタイム", + "group.serve": "Ollama / OpenAI サーバー", + "group.speculative": "投機的デコード", + "group.stage_data": "後続ステージのデータ", + "group.tokenizer": "トークナイザー構築", + "group.train": "学習ジョブ", + "infer.arch_note": "アーキテクチャはチェックポイントの設定ファイルから読み込みます。「モデル」ページはファイルにない項目だけを補います。", + "infer.col.cache_hit_rate": "キャッシュヒット率", + "infer.col.cold_miss_predict_hit_rate": "コールドミス予測済み", + "infer.col.decode_time_s": "デコード(秒)", + "infer.col.fallback_weight_rate": "フォールバック重み", + "infer.col.prediction_hit_rate": "予測ヒット率", + "infer.col.prefill_time_s": "プリフィル(秒)", + "infer.col.response_time_s": "応答(秒)", + "infer.col.rss_after_decode_gb": "デコード後 RSS(GB)", + "infer.col.rss_delta_gb": "RSS 変化(GB)", + "infer.col.spec_acceptance_rate": "ドラフト受理率", + "infer.col.tokens": "トークン数", + "infer.col.tokens_per_sec": "トークン/秒", + "infer.common_prefix": "先頭 {n} 文字が一致", + "infer.diff": "出力が異なります", + "infer.full_output": "全メモリ", + "infer.generate": "生成", + "infer.hit_rates": "ヒット率", + "infer.intro": "同じプロンプトを遅延読み込みエキスパートとフルメモリで実行し、出力・速度・ヒット率・メモリを比較します。", + "infer.lazy_output": "遅延エキスパート", + "infer.measured_note": "このマシンでこのプロンプトについて実測。1 回の実行で、平均値ではありません。", + "infer.mode": "モード", + "infer.mode.full_dram": "フルメモリ", + "infer.mode.lazy_offload": "遅延読み込みエキスパート", + "infer.output": "出力", + "infer.prompt": "プロンプト", + "infer.prompt_help": "モデルに送るテキスト。「生のプロンプト」がオフのときは SFT のチャットテンプレートを適用します。", + "infer.ram_ratio": "RAM 読み込み比率", + "infer.same": "出力は同一です", + "infer.similarity": "類似度", + "infer.stats": "実行統計", + "infer.sweep": "RAM 比率スイープ", + "infer.title": "推論", + "io.empty": "まだメトリクスがありません。このプロセスで推論やサーバーを実行すると表示されます。", + "io.intro": "このサーバープロセスで推論とサービングが記録したエキスパートキャッシュと IO のカウンター。", + "io.latest": "最新値", + "io.metric": "指標", + "io.samples": "サンプル数", + "io.seconds": "秒", + "io.title": "IO とキャッシュのメトリクス", + "label.estimated": "推定", + "label.measured": "実測", + "label.measured_meta": "実測(meta デバイスで計数)", + "metric.active_mem_gb": "使用中", + "metric.balance_loss": "エキスパート均衡", + "metric.chrf": "chrF", + "metric.error": "エラー", + "metric.eval_s": "評価時間(秒)", + "metric.grad_norm": "勾配ノルム", + "metric.load_cv": "負荷の偏り(変動係数)", + "metric.locality_loss": "クラスタ局所性", + "metric.lookahead_loss": "先読みルーター", + "metric.loss": "総損失", + "metric.lr": "学習率", + "metric.peak_mem_gb": "ピーク", + "metric.primary_loss": "交差エントロピー", + "metric.rec_contraction": "収縮率", + "metric.rec_depth_mean": "平均深さ", + "metric.rec_early_exit_ratio": "早期終了の割合", + "metric.route_entropy": "ルーティングエントロピー", + "metric.state": "状態", + "metric.temporal_loss": "時間局所性", + "metric.tokens_per_s": "トークン/秒", + "metric.valid_ce": "検証交差エントロピー", + "metric.valid_ppl": "検証パープレキシティ", + "mon.best": "最良", + "mon.chart.aux": "補助損失", + "mon.chart.loss": "学習損失", + "mon.chart.lr": "学習率", + "mon.chart.memory": "メモリ(GB)", + "mon.chart.optimizer": "勾配ノルム", + "mon.chart.recurrent": "再帰深さ", + "mon.chart.routing": "エキスパートルーティング", + "mon.chart.throughput": "毎秒トークン数", + "mon.checkpoints": "チェックポイント", + "mon.eta": "残り時間", + "mon.eta_basis.deadline": "時間予算から", + "mon.eta_basis.steps": "ステップ進捗から", + "mon.eta_basis.target_passes": "データ周回の進捗から", + "mon.event": "イベント", + "mon.events": "イベント", + "mon.grad_norm": "勾配ノルム", + "mon.input": "入力", + "mon.intro": "コマンドラインから起動した長時間学習を含め、任意の実行フォルダをライブ表示します。読み取り専用です。", + "mon.log": "学習ログ", + "mon.loss": "損失", + "mon.lr": "学習率", + "mon.memory": "メモリ", + "mon.no_runs": "まだ実行がありません。「学習」ページから開始してください。", + "mon.phase_eta": "{t} 頃に完了", + "mon.phase_note": "ステップは段階ごとに数え直すため、グラフは一度に 1 つの段階だけを表示します。", + "mon.progress": "進捗", + "mon.reference": "参照訳", + "mon.run": "実行", + "mon.samples": "サンプル出力", + "mon.size": "サイズ", + "mon.stale": "しばらく更新がありません", + "mon.throughput": "毎秒トークン数", + "mon.title": "実行モニター", + "mon.tokens_seen": "学習済みトークン", + "mon.updated": "{s} 秒前に更新", + "mon.valid_ce": "検証 CE", + "mon.validation": "検証", + "nav.autotune": "自動チューニング", + "nav.benchmark": "ベンチマーク", + "nav.config": "モデル", + "nav.data": "データ", + "nav.export": "エクスポート", + "nav.inference": "推論", + "nav.io": "IO メトリクス", + "nav.monitor": "モニター", + "nav.serve": "サーバー", + "nav.tokenizer": "トークナイザー", + "nav.train": "学習", + "phase.active": "実行中", + "phase.complete": "完了", + "phase.pending": "待機中", + "picker.add": "選択項目を追加", + "picker.add_button": "追加…", + "picker.browse_tip": "サーバー側のフォルダーをページ内で参照してパスを選びます。", + "picker.empty": "該当するファイルやフォルダはありません", + "picker.entries": "フォルダの内容", + "picker.go": "移動", + "picker.hidden": "隠し項目を表示", + "picker.multi_hint": "複数のファイルやフォルダを追加できます。学習前に自動で結合されます。", + "picker.n_selected": "{n} 件を選択", + "picker.native_fallback": "このマシンではシステムのファイルダイアログを開けないため、アップロードに切り替えます。", + "picker.native_tip": "システムのファイルマネージャーを開きます。コピーはせず、選んだ元のパスをそのまま使います。", + "picker.pick_file": "ファイルを選択してください", + "picker.place.desktop": "デスクトップ", + "picker.place.documents": "書類", + "picker.place.downloads": "ダウンロード", + "picker.place.home": "ホーム", + "picker.place.root": "ルート(/)", + "picker.place.volumes": "すべてのボリューム", + "picker.placeholder_multi": "1 行に 1 つのパス。または「追加…」", + "picker.places": "よく使う場所", + "picker.select": "選択", + "picker.this_folder": "未選択:このフォルダを使います({path})", + "picker.title.any": "ファイルまたはフォルダを選択", + "picker.title.checkpoint": "checkpoint を選択", + "picker.title.config": "設定ファイルを選択", + "picker.title.data": "データセットを選択(ファイルまたはフォルダ)", + "picker.title.dir": "フォルダを選択", + "picker.truncated": "先頭の {n} 件のみ表示しています。パスを入力すると直接移動できます", + "picker.up": "1 つ上のフォルダ", + "picker.upload_files": "ファイルをアップロード…", + "picker.upload_folder": "フォルダーをアップロード…", + "picker.upload_tip": "この端末のファイルマネージャーで選んだファイルをサーバー側の uploads フォルダーにアップロードし、そのパスを入力します。", + "picker.uploaded": "{n} 個のファイルをアップロードしました。", + "picker.uploaded_skipped": "{n} 個のファイルをアップロードしました。種類が合わないか隠しファイルの {skipped} 個はスキップしました。", + "picker.uploading": "アップロード中 {done} / {total}…", + "picker.will_merge": "{n} 個のパスを使用前に 1 つの JSONL ファイルへ結合します。", + "plan.apply": "このプランを使う", + "plan.note": "プランナーは目標サイズ、データ、メモリから設定を探索します。学習の前に確認してください。", + "plan.run": "プランを作成", + "plan.stages": "ステージごとの設定", + "plan.summary": "プラン", + "plan.title": "自動プラン", + "plan.tokens": "学習トークン数", + "preset.b1": "1B(64 GB)", + "preset.b1.summary": "1B MoE。64 個の細粒度エキスパート、積極的なメモリ節約。", + "preset.m200": "200M(32 GB)", + "preset.m200.summary": "汎用 200M MoE。メモリ節約はバランス型で、旧 6400 語彙を使用。", + "preset.m50": "50M(16k 語彙)", + "preset.m50.summary": "36 エキスパート(top-2)の 50M MoE、16k Chronos トークナイザー向け。メモリ節約なし。", + "preset.m500": "500M(32 GB)", + "preset.m500.summary": "500M MoE。積極的なメモリ節約:int8 KV、共有ルーティング、活性化チェックポイント。", + "preset.tiny": "Tiny(スモークテスト / CI)", + "preset.tiny.summary": "1.5M のスモークテスト。CPU で数分で学習できます。", + "probe.accept": "ドラフト受理率", + "probe.agree": "トークン一致率", + "probe.auto_paging": "自動ページング", + "probe.budget": "エキスパート予算", + "probe.c_loads": "読み込み回数", + "probe.c_rss": "ピーク RSS(GB)", + "probe.c_speed": "デコード速度(トークン/秒)", + "probe.cluster_loads": "クラスタ読み込み", + "probe.cold_hit": "予測済みのコールドミス", + "probe.cold_n": "コールドミス予測 / 総数", + "probe.conditions": "貪欲デコード、プロンプト {n} 件、各 {t} トークン、実測。", + "probe.decode": "デコード(秒)", + "probe.dtps": "デコード トークン/秒", + "probe.evict": "退避方式", + "probe.exact": "完全一致", + "probe.group.eff": "効率", + "probe.group.fid": "忠実度(フルメモリ参照との比較)", + "probe.group.hit": "ヒット率", + "probe.group.paging": "ページングと読み込み", + "probe.history": "学習の進行に伴うヒット率と一致率", + "probe.history_note": "検証ごとに 1 回実行します。ステップは段階ごとに数え直すため、最新の段階だけを描きます。", + "probe.hit": "常駐ヒット率", + "probe.hits": "ヒット / ミス", + "probe.ideal": "理想アクティブエキスパート数", + "probe.load_s": "読み込み時間(秒)", + "probe.loads": "オンデマンドロード回数", + "probe.none": "まだプローブ結果がありません。検証のたびに 1 回実行されます。", + "probe.pages": "ページング · ページ数", + "probe.pred_hit": "予測ヒット率", + "probe.pred_n": "予測ヒット / 総数", + "probe.prefill": "プリフィル(秒)", + "probe.prefix": "最短の一致プレフィックス", + "probe.ref_row": "フルメモリ参照 · {backend}", + "probe.ref_tokens": "参照トークン数", + "probe.reference": "全メモリの参照", + "probe.rss": "ピーク RSS(GB)", + "probe.skip.busy": "前回のプローブがまだ実行中です", + "probe.skip.dense": "密モデルのため、ページングするルーティングエキスパートがありません", + "probe.skip.no_checkpoint": "ディスク上にチェックポイントがまだありません", + "probe.skip.superseded": "ステップ {step} の新しい検証に置き換えられました", + "probe.skip.writing": "チェックポイントを書き込み中です", + "probe.skipped": "スキップ:{reason}", + "probe.sync": "同期 SSD 読み込み", + "probe.title": "遅延エキスパートのプローブ", + "probe.tps": "トークン/秒", + "probe.trained_clusters": "クラスタ局所性で学習済み", + "probe.variant": "組み合わせ", + "probe.vs_full": "全メモリ比の速度", + "probe.wait": "プリフェッチ待ち(秒)", + "rule.clusters_auto": "0 = エキスパート数から決定", + "rule.equals_recurrent_depth": "学習時の深さと同じ", + "rule.loopback": "127.0.0.1(このマシンのみ)", + "rule.sync_is_exact": "sync_on_demand:出力は全メモリと同一", + "rule.vocab_matches_tokenizer": "トークナイザーの語彙サイズと同じ", + "rule.window_median_record": "レコード長の中央値に最も近い 2 のべき乗(不明なら 32)", + "serve.auth_off": "キーなし:このマシンからのみ接続できます。", + "serve.auth_on": "クライアントは API キーを送る必要があります。", + "serve.hint": "接続方法:OLLAMA_HOST={addr} ollama run ", + "serve.intro": "chronos serve を起動します。Ollama と OpenAI のクライアントが接続し、エキスパートは遅延読み込みのままです。", + "serve.remote_warning": "このマシン以外のアドレスにバインドするには「リモートアクセスを許可」と CHRONOS_API_KEY のキーが必要です。キーがないとサーバーは起動しません。", + "serve.running": "{url} で稼働中", + "serve.start": "サーバーを起動", + "serve.stop": "サーバーを停止", + "serve.stopped": "サーバーは停止しました", + "serve.title": "Ollama / OpenAI 互換サーバー", + "source.code": "既定値", + "source.measured": "実測", + "source.planner": "適応プランナー", + "source.rule": "ルール", + "stage.distill": "蒸留", + "stage.dpo": "DPO", + "stage.grpo": "GRPO", + "stage.orpo": "ORPO", + "stage.pretrain": "事前学習", + "stage.sft": "教師ありファインチューニング", + "state.checkpointing": "チェックポイント保存中", + "state.done": "完了", + "state.error": "エラー", + "state.evaluating": "評価中", + "state.failed": "失敗", + "state.finished": "完了", + "state.idle": "待機中", + "state.loading": "読み込み中", + "state.paused": "一時停止", + "state.pending": "保留中", + "state.running": "実行中", + "state.stale": "最近の更新なし", + "state.starting": "起動中", + "state.stopped": "停止済み", + "state.stopping": "停止中", + "tip.auto_empty": "空欄 = 自動", + "tip.default": "既定値", + "tip.range": "範囲", + "tip.recommended": "推奨値", + "tip.source": "根拠", + "tok.algorithm": "アルゴリズム", + "tok.bucket": "バケット", + "tok.byte_fallback": "バイトフォールバック率", + "tok.chars_per_token": "トークンあたり文字数", + "tok.compression": "トークンあたりのバイト数", + "tok.elapsed": "構築時間", + "tok.fertility": "単語あたりのトークン数", + "tok.fingerprint": "フィンガープリント", + "tok.intro": "自分のデータで Chronos トークナイザーを学習します:サンプリング、正規化、バイトフォールバック BPE、保留データでの評価レポート。", + "tok.out_dir_now": "出力フォルダ", + "tok.progress": "構築の進捗", + "tok.report": "評価レポート", + "tok.report_note": "トークナイザーの学習に使っていない保留テキストで実測。", + "tok.roundtrip": "ロスレス往復", + "tok.texts": "テキスト数", + "tok.title": "Chronos トークナイザー構築", + "tok.vocab_use": "語彙の使用率", + "train.config_note": "アーキテクチャは「モデル」ページから取得します。自動計画を適用した場合、各段階の学習率は計画の値です。", + "train.intro": "「モデル」ページの設定で学習ジョブを開始します。進捗はモニターページに表示されます。", + "train.jobs": "学習ジョブ", + "train.open_monitor": "モニターで開く", + "train.probe_note": "検証のたびに、保存したばかりのチェックポイントを遅延エキスパートと全メモリでそれぞれデコードします。プローブはコピー上で低優先度の子プロセスとして動くため、学習は止まりません。", + "train.probe_off": "このジョブでは遅延読み込みチェックがオフです。", + "train.probe_title": "検証のたびに遅延エキスパートを確認", + "train.run_dir": "実行フォルダ", + "train.stage_data_note": "最初より後のステージは、それぞれ専用の形式のデータを読み込みます。空欄の行は最初のステージのデータセットを使います。", + "train.stage_n": "ステージ {n}", + "train.start": "学習を開始", + "train.started": "学習を開始しました", + "train.stop": "学習を停止", + "train.title": "学習", + "train.variants": "{n} 通りの組み合わせをテストします", + "train.variants_capped": "{n} 通りが指定されました。最初の {cap} 通りをテストします", + "trial.complete": "完了", + "trial.failed": "失敗", + "trial.pruned": "枝刈り", + "tune.apply": "モデル設定に適用", + "tune.best": "最良のパラメータ", + "tune.duration": "所要時間", + "tune.intro": "Optuna TPE で学習設定を探索します。各試行は数ステップだけ学習して損失を報告します。", + "tune.loss": "プローブ損失", + "tune.note": "短い学習後のプローブ損失です。順位付けの目安で、最終品質の指標ではありません。", + "tune.start": "探索を開始", + "tune.stop": "探索を停止", + "tune.title": "自動チューニング(Optuna TPE)", + "tune.trial": "試行", + "tune.trials": "試行", + "ui.access_tip.lan": "LAN 経由で接続しています。「アップロード…」はファイルをサーバー側の uploads フォルダーに送り、そのパスを使います。「参照…」はサーバー側のファイルを表示します。", + "ui.access_tip.lan_local": "サーバーと同じマシンで開いているため、ログインは不要です。「アップロード…」はシステムのファイルマネージャーを開き、元のパスをそのまま使います。LAN 上の他の端末にはアクセスキーが必要です。", + "ui.access_tip.local_only": "UI はこのマシン(127.0.0.1)だけで待ち受けています。他の端末からは開けず、ログインも不要です。--lan を付けて起動すると LAN からアクセスできます。", + "ui.apply": "適用", + "ui.backend": "バックエンド", + "ui.browse": "参照…", + "ui.busy": "同じ種類のジョブが実行中です", + "ui.cancel": "キャンセル", + "ui.chart_view": "グラフ", + "ui.clear": "クリア", + "ui.close": "閉じる", + "ui.copy": "コピー", + "ui.empty": "まだありません", + "ui.error": "エラー", + "ui.from_model": "モデルファイルに従う", + "ui.hide_advanced": "詳細オプションを隠す", + "ui.invalid": "マークされた項目を確認してください", + "ui.key": "アクセスキー", + "ui.lan_local": "このマシン · LAN 公開中", + "ui.language": "言語", + "ui.load": "読み込み", + "ui.loading": "読み込み中…", + "ui.local_only": "ローカル接続のみ、ログイン不要", + "ui.log": "ログ", + "ui.login": "ログイン", + "ui.login_blocked": "失敗が多すぎます。5 分後にもう一度お試しください。", + "ui.login_failed": "キーが正しくありません", + "ui.login_needed": "このワークベンチにはサーバーで設定したアクセスキーが必要です。", + "ui.logout": "ログアウト", + "ui.no": "いいえ", + "ui.none": "なし", + "ui.path": "パス", + "ui.phase": "フェーズ", + "ui.raw_json": "生の JSON", + "ui.refresh": "更新", + "ui.remote_auth": "リモート接続、ログイン済み", + "ui.reset": "既定値に戻す", + "ui.result": "結果", + "ui.run": "実行", + "ui.save": "保存", + "ui.saved": "保存しました", + "ui.scan": "スキャン", + "ui.sections": "セクション", + "ui.show_advanced": "詳細オプションを表示", + "ui.skip": "本文へ移動", + "ui.start": "開始", + "ui.started": "開始時刻", + "ui.state": "状態", + "ui.step": "ステップ", + "ui.stop": "停止", + "ui.table_view": "表", + "ui.theme": "テーマ", + "ui.theme.dark": "ダーク", + "ui.theme.light": "ライト", + "ui.theme.system": "システムに合わせる", + "ui.time": "時刻", + "ui.upload": "アップロード…", + "ui.value": "値", + "ui.yes": "はい" +} diff --git a/chronos/webui/i18n/zh-Hans.json b/chronos/webui/i18n/zh-Hans.json new file mode 100644 index 0000000..554cebd --- /dev/null +++ b/chronos/webui/i18n/zh-Hans.json @@ -0,0 +1,943 @@ +{ + "app.subtitle": "循环深度 MoE · 懒加载专家 · 推测解码", + "app.title": "Chronos 工作台", + "bench.better": "更优", + "bench.higher": "越高越好", + "bench.intro": "用 benchmark_compare.py 测量 Chronos 的参数量、内存和解码速度;外部 dense 基线的对比是可选的。", + "bench.lower": "越低越好", + "bench.measured_note": "由 benchmark_compare.py 在本机实测。", + "bench.metric": "指标", + "bench.none": "还没有结果。运行基准测试后生成。", + "bench.params": "参数量", + "bench.ram_infer": "推理内存", + "bench.ram_model": "模型内存", + "bench.ram_train": "训练内存", + "bench.run": "运行基准测试", + "bench.title": "基准测试:Chronos 与 dense 基线", + "bench.tps": "解码 token/秒", + "bench.unavailable": "当前安装中没有 benchmark_compare.py。", + "choice.absorbed": "吸收", + "choice.adaptive": "自适应", + "choice.aggressive": "激进", + "choice.all": "全部块", + "choice.alternate": "隔块", + "choice.auto": "自动", + "choice.balanced": "均衡", + "choice.block": "整个块", + "choice.cluster": "按簇", + "choice.cluster_locality_mode.segment": "按文档(segment)", + "choice.cluster_locality_mode.window": "固定窗口(window)", + "choice.compare": "懒加载与全内存对比", + "choice.expanded": "展开(参考)", + "choice.expert": "按专家", + "choice.experts": "激活专家数", + "choice.extreme": "极限", + "choice.fallback_diagnostic": "不加载,仅诊断(fallback_diagnostic)", + "choice.false": "关", + "choice.fixed": "固定", + "choice.fixed_then_adaptive": "先固定,后自适应", + "choice.fullload": "仅全内存", + "choice.lookahead_teacher_scope.first": "仅第 0 轮", + "choice.lookahead_teacher_scope.iterations": "所有迭代取平均", + "choice.mla": "全局(MLA)块", + "choice.mlp": "仅 MoE/FFN", + "choice.none": "无", + "choice.offload": "仅懒加载专家", + "choice.on_demand": "按需加载,可跳过迟到专家(on_demand)", + "choice.params": "激活参数量", + "choice.planned": "下次使用规划器", + "choice.recurrent_attention_mode.first_only": "仅首轮注意力,v2 行为(first_only)", + "choice.recurrent_attention_mode.per_iteration": "每轮注意力,每轮独立 KV(per_iteration)", + "choice.recurrent_attention_mode.shared_first": "每轮注意力,共享首轮 KV(shared_first)", + "choice.recurrent_dt_param.clamp": "截断(旧版)", + "choice.recurrent_dt_param.sigmoid": "Sigmoid(无死区)", + "choice.recurrent_order.block": "整块重复(A B A B)", + "choice.recurrent_order.layer": "逐层重复(A A B B)", + "choice.router_scope.per_iteration": "每轮重新路由(per_iteration)", + "choice.router_scope.shared": "复用首轮路由(shared)", + "choice.scheduled": "按调度", + "choice.segment": "按文档", + "choice.shared": "共享", + "choice.swa": "滑动窗口块", + "choice.sync_on_demand": "同步按需加载(sync_on_demand)", + "choice.true": "开", + "choice.tune.search.lr": "学习率", + "choice.window": "最近使用窗口", + "config.active": "每 token 激活参数", + "config.compute": "每 token 权重使用量(含循环)", + "config.estimate": "规模与内存估算", + "config.estimate_note": "根据配置估算,并非实测。", + "config.file": "配置文件", + "config.ignored": "已忽略未知或无效的键", + "config.intro": "所有模型设置集中在这里。光标悬停在任一选项上,可查看含义、默认值和推荐值。", + "config.kv": "KV 缓存", + "config.loaded": "配置已加载", + "config.path_help": "JSON 配置文件。“加载”把它读入表单,“保存”把表单写到这里。相对路径从工作台文件夹起算。", + "config.preset": "预设", + "config.preset_help": "起始配置。应用后会替换本页所有字段,估算随即更新。", + "config.ram": "专家热缓存", + "config.ssd": "磁盘专家存储", + "config.total": "总参数量", + "config.tps": "解码速度粗估(估算)", + "config.train_peak": "训练峰值内存", + "config.train_state": "训练状态(权重、梯度、优化器)", + "config.virtual_layers": "虚拟层数", + "config.vram": "常驻权重 + KV", + "data.chars": "每条记录字符数", + "data.dups": "重复占比", + "data.fields": "字段", + "data.files": "文件数", + "data.full_scan": "全量扫描", + "data.hist": "记录长度分布", + "data.intro": "训练前扫描文件或文件夹,查看格式、字段、文字系统和记录长度。", + "data.max_help": "汇总时最多读取的记录数(100 到 500,000)。", + "data.max_records": "扫描记录数", + "data.median": "中位数", + "data.p95": "95 分位", + "data.path_help": "文件或文件夹(jsonl、json、parquet、csv、tsv、txt),每行一个。多个路径按合并后训练看到的样子作为一个数据集扫描。相对路径从工作台目录算起。", + "data.present": "出现比例", + "data.records": "记录数", + "data.sampled": "前 {n} 条记录", + "data.samples": "样例记录", + "data.scanned": "已扫描", + "data.schema": "识别出的格式", + "data.script": "文字", + "data.scripts": "文字系统", + "data.share": "占比", + "data.title": "数据集检查", + "data.type": "类型", + "err.active_experts": "激活专家数不能超过专家总数", + "err.dialog_open": "已有一个文件对话框打开,请先在系统窗口中完成或取消", + "err.models_dir": "找不到模型目录", + "err.native_local_only": "系统文件对话框只能在服务所在的电脑上使用", + "err.native_unavailable": "这台电脑无法打开系统文件对话框", + "err.no_files": "这些路径下没有可读取的文件", + "err.no_out": "请选择输出目录", + "err.no_paths": "请至少添加一个路径", + "err.not_found": "未找到", + "err.paging": "分页方式请选择 auto、cluster 或 expert", + "err.port": "端口无效", + "err.probe_invalid": "懒加载检查的设置无效", + "err.remote_needs_key": "远程绑定需要允许远程访问并设置 CHRONOS_API_KEY", + "err.target": "请输入目标规模", + "err.upload_batch": "上传批次标识无效,请刷新页面后重试", + "err.upload_disk_full": "服务所在电脑的磁盘剩余空间不足,已停止上传", + "err.upload_failed": "上传中断,请检查网络连接后重试", + "err.upload_kind": "该字段不支持上传", + "err.upload_name": "文件名或文件夹层级不允许(隐藏项、“..”或层级过深)", + "err.upload_too_large": "文件超过上传上限(--max-upload-mb)", + "err.upload_type": "没有可上传的文件:类型与该字段不符,或为不允许的可执行文件", + "event.final": "结束", + "event.lazy_probe": "懒加载探测", + "event.phase_end": "阶段结束", + "event.phase_start": "阶段开始", + "event.resume": "已恢复", + "event.rollback": "回滚", + "event.validation": "验证", + "export.done": "已导出", + "export.format": "格式", + "export.intro": "把检查点写成 safetensors 或 GGUF 文件,并附带 chronos serve 加载所需的专家缓存布局。", + "export.note": "Ollama 客户端通过 chronos serve 运行 Chronos 模型(把 OLLAMA_HOST 设为其地址);原版 Ollama 无法执行循环 MoE。", + "export.run": "导出", + "export.size": "大小(MB)", + "export.tensors": "张量数", + "export.title": "导出", + "field.accumulation_steps.help": "每次优化器更新累积的微批数。有效批大小 = 批大小 × 累积步数。", + "field.accumulation_steps.label": "梯度累积", + "field.activation_checkpointing.help": "反向传播时重算激活,以速度换取更低的峰值内存。", + "field.activation_checkpointing.label": "激活检查点", + "field.adaptive_halting.help": "每个 token 的停止概率超过阈值后就不再循环,为简单 token 节省计算。", + "field.adaptive_halting.label": "自适应停止(ACT)", + "field.alpha.help": "蒸馏混合比例:α × 教师 KL + (1 − α) × CE。", + "field.alpha.label": "α(蒸馏)", + "field.attention_block_size.help": "把长注意力按这么多个 token 的查询块计算,每块只读取可见的键。0 表示不分块。结果精确;1024 在全局层和滑动窗口层上整体最快。", + "field.attention_block_size.label": "注意力分块大小", + "field.batch_size.help": "每个微批的序列数,受内存限制。", + "field.batch_size.label": "批大小", + "field.beta.help": "偏好训练中与参考策略 KL 约束的强度。", + "field.beta.label": "β(DPO/GRPO)", + "field.ce_chunk_size.help": "按行分块、从最后的隐状态计算语言模型损失,不再生成 [批, 长度, 词表] 的 logits。0 表示完整 logits。结果精确。", + "field.ce_chunk_size.label": "损失分块大小", + "field.cluster_locality_clusters.help": "局部性约束使用的专家簇数。0 表示按专家数自动选择。", + "field.cluster_locality_clusters.label": "簇数", + "field.cluster_locality_mode.help": "簇约束以什么作为一段连续输入。window:按上面的长度切固定窗口。segment:批次中的每篇文档(按数据自身的分隔符切分,过长的按窗口再切),相似文档会自发学到同一个簇,不依赖标签或任务标记。", + "field.cluster_locality_mode.label": "局部性单元", + "field.cluster_locality_window.help": "簇约束作用的片段长度(token)。与典型记录长度一致时效果最好。", + "field.cluster_locality_window.label": "局部性窗口", + "field.coda_layers.help": "循环之后、输出头之前只运行一次的层。", + "field.coda_layers.label": "收尾层", + "field.cpu_budget_percent.help": "自动模式可使用的物理核心比例(百分比)。", + "field.cpu_budget_percent.label": "CPU 预算", + "field.cpu_threads.help": "PyTorch/BLAS 线程数。自动按物理核心预算设置。", + "field.cpu_threads.label": "CPU 线程", + "field.depth_schedule.help": "训练时每个 batch 的深度选法:固定、自适应,或先固定预热再自适应。", + "field.depth_schedule.label": "深度调度", + "field.depth_schedule_warmup_fraction.help": "训练中先以固定全深度运行的比例,之后才切换为自适应。", + "field.depth_schedule_warmup_fraction.label": "调度预热比例", + "field.document_masking.help": "打包行:注意力只在每篇文档内部,以分隔 token 为界。", + "field.document_masking.label": "文档掩码", + "field.draft_exit_depth.help": "作为推测草稿来训练的循环深度。", + "field.draft_exit_depth.label": "草稿深度(训练)", + "field.draft_exit_kl_coef.help": "草稿深度出口与全深度输出之间的额外 KL,用于自推测解码。0 表示关闭。", + "field.draft_exit_kl_coef.label": "草稿出口 KL", + "field.dropout.help": "训练时随机丢弃激活。数据量大时调低,数据很少时调高。", + "field.dropout.label": "Dropout", + "field.dtype.help": "训练与推理的数值精度。自动:后端支持时用 bfloat16,否则 float32。", + "field.dtype.label": "计算精度", + "field.epochs.help": "遍历数据集的次数。设置了最大步数时会更早停止。", + "field.epochs.label": "轮数", + "field.export.auto_cluster.help": "用校准数据把常一起使用的专家分到同一页,懒加载时读取的文件更少。", + "field.export.auto_cluster.label": "构建专家簇", + "field.export.calibration_data_path.help": "用于统计哪些专家会一起使用的文本,每行一个路径;多个会自动合并。留空则跳过自动聚类。", + "field.export.calibration_data_path.label": "校准数据", + "field.export.cluster_batch_size.help": "每个校准批的序列数。", + "field.export.cluster_batch_size.label": "校准批大小", + "field.export.cluster_device.help": "校准运行使用的设备。", + "field.export.cluster_device.label": "校准设备", + "field.export.cluster_max_batches.help": "聚类时观察的批次数。", + "field.export.cluster_max_batches.label": "校准批数", + "field.export.cluster_max_seq_len.help": "每条校准序列的 token 数。", + "field.export.cluster_max_seq_len.label": "校准长度", + "field.export.config_path.help": "覆盖附属配置。通常留空。", + "field.export.config_path.label": "配置文件", + "field.export.copy_cache.help": "把懒加载专家页一并导出,部署时无需重建。", + "field.export.copy_cache.label": "复制专家缓存", + "field.export.expert_cache_dir.help": "要打包的现有懒加载专家缓存。留空则重新构建。", + "field.export.expert_cache_dir.label": "专家缓存", + "field.export.formats.help": "要写出的容器格式。safetensors 和 GGUF 保留 Chronos 元数据,需用 chronos serve 运行。Ollama 客户端连接 chronos serve,而不是原版 Ollama。", + "field.export.formats.label": "格式", + "field.export.model_path.help": "要导出的 checkpoint。", + "field.export.model_path.label": "Checkpoint", + "field.export.output_dir.help": "导出文件的写入位置。", + "field.export.output_dir.label": "输出目录", + "field.fallback_mask_prob.help": "训练时随机屏蔽专家,让模型能容忍缓存未命中。只影响带回退的懒加载推理。", + "field.fallback_mask_prob.label": "缺失模拟", + "field.grad_clip.help": "把全局梯度范数裁剪到该值。0 表示不裁剪。", + "field.grad_clip.label": "梯度裁剪", + "field.halting_threshold.help": "累计停止概率达到该值时 token 停止迭代。越接近 1 跑得越深。", + "field.halting_threshold.label": "停止阈值", + "field.hidden_size.help": "每个 token 向量的宽度。越大能力越强,参数量约按平方增长。必须能被注意力头数整除。", + "field.hidden_size.label": "隐藏维度", + "field.infer.backend.help": "推理运行时。自动按 checkpoint 和本机选择。", + "field.infer.backend.label": "后端", + "field.infer.decode_wait_s.help": "等待预取专家的时长,超时则按需加载。", + "field.infer.decode_wait_s.label": "解码等待(秒)", + "field.infer.draft_depth.help": "起草使用的循环深度。", + "field.infer.draft_depth.label": "草稿深度", + "field.infer.gamma.help": "每次校验前起草的 token 数。", + "field.infer.gamma.label": "草稿长度 γ", + "field.infer.max_tokens.help": "生成 token 数的上限。", + "field.infer.max_tokens.label": "最大新 token 数", + "field.infer.miss_policy.help": "缓存未命中时的处理方式。sync_on_demand 的输出与全内存完全一致。", + "field.infer.miss_policy.label": "未命中策略", + "field.infer.mode.help": "对比:懒加载与全内存并排运行;懒加载:只运行懒加载专家;全内存:全部加载。", + "field.infer.mode.label": "模式", + "field.infer.model_path.help": "要运行的 .pth checkpoint,其附属配置决定架构。", + "field.infer.model_path.label": "Checkpoint", + "field.infer.paging.help": "自动跟随 checkpoint:用簇局部性训练过则按簇分页,否则按专家分页。", + "field.infer.paging.label": "分页布局", + "field.infer.ram_load_ratio.help": "保留在内存中的专家比例。大于 1.0 时为预取留出余量。", + "field.infer.ram_load_ratio.label": "内存比例", + "field.infer.raw_prompt.help": "按原样发送文本,不套用对话模板。", + "field.infer.raw_prompt.label": "原始提示", + "field.infer.residency_decay.help": "规划器遗忘旧路由证据的速度。", + "field.infer.residency_decay.label": "规划器衰减", + "field.infer.residency_planner.help": "淘汰未来最晚才会用到的专家,而不是最久未用的专家。", + "field.infer.residency_planner.label": "下次使用规划器", + "field.infer.speculative.help": "以浅深度起草 token,再用全深度校验,输出不变。50M 模型实测更慢,因此默认关闭。", + "field.infer.speculative.label": "自推测解码", + "field.infer.sweep_ram_ratios.help": "依次运行各标准比例,绘制速度、命中率与内存的关系。", + "field.infer.sweep_ram_ratios.label": "扫描内存比例", + "field.infer.temperature.help": "采样随机度。0 为贪心解码,结果可复现。", + "field.infer.temperature.label": "温度", + "field.infer.verify_wait_s.help": "推测校验阶段的同类等待时长。", + "field.infer.verify_wait_s.label": "校验等待(秒)", + "field.kv_cache_dtype.help": "自动:沿用计算精度;int8:推理 KV 缓存按 token 量化(内存约减半,误差很小)。训练从不量化。", + "field.kv_cache_dtype.label": "KV 缓存精度", + "field.kv_latent_dim.help": "MLA 层缓存的压缩键值潜在向量宽度。越小越省 KV 内存。", + "field.kv_latent_dim.label": "MLA 潜在维度", + "field.kv_quant_group_size.help": "共用一个 int8 缩放系数的通道数。分组越小越精确,体积略大。", + "field.kv_quant_group_size.label": "KV 量化分组", + "field.lambda_balance.help": "促使路由器把 token 均匀分配到各专家。", + "field.lambda_balance.label": "负载均衡", + "field.lambda_cluster_locality.help": "训练同一片段内的 token 留在同一个专家簇里,懒加载推理就能整簇分页。0 表示关闭。", + "field.lambda_cluster_locality.label": "簇局部性", + "field.lambda_iteration_cluster.help": "让同一 token 的每个循环迭代都落在相同的专家簇内的权重(簇内专家仍可逐迭代不同)。0 表示关闭。推荐 0:开启簇局部性时,后续迭代用到的簇有 99.5-100% 在第 0 轮已经用过,这一项几乎无事可做。", + "field.lambda_iteration_cluster.label": "迭代簇局部性", + "field.lambda_lookahead.help": "训练前瞻路由器预测未来 token 会用到的专家。", + "field.lambda_lookahead.label": "前瞻损失", + "field.lambda_lookahead_topk.help": "额外加权,要求准确预测未来的 top-k 专家。", + "field.lambda_lookahead_topk.label": "前瞻 top-k", + "field.lambda_lookahead_union.help": "要求覆盖前瞻窗口内专家并集的权重。", + "field.lambda_lookahead_union.label": "前瞻并集", + "field.lambda_or.help": "ORPO 中优势比项的权重。", + "field.lambda_or.label": "λ(ORPO)", + "field.lambda_router_anchor.help": "微调时让路由保持接近上游 checkpoint。预训练设为 0。", + "field.lambda_router_anchor.label": "路由锚定", + "field.lambda_router_locality.help": "对相邻 token 之间路由变化的轻微惩罚。", + "field.lambda_router_locality.label": "路由局部性", + "field.lambda_temporal.help": "奖励相邻 token 选择相同专家,一段文本需要加载的专家更少。", + "field.lambda_temporal.label": "时间局部性", + "field.layer_aware_cache.help": "按虚拟层而不是物理层跟踪常驻专家。", + "field.layer_aware_cache.label": "按层缓存", + "field.learning_rate.help": "优化器的峰值步长。规划器会按模型规模给出建议;微调时调低。", + "field.learning_rate.label": "学习率", + "field.log_interval.help": "每 N 步写一行指标。", + "field.log_interval.label": "日志间隔", + "field.lookahead_input_detach.help": "前瞻路由读取不带梯度的隐状态副本,其损失只训练路由本身。在中英数据上实测影响不大。", + "field.lookahead_input_detach.label": "前瞻输入断梯度", + "field.lookahead_steps.help": "前瞻路由为未来多少个 token 预测专家,以便在用到之前预取。", + "field.lookahead_steps.label": "前瞻步数", + "field.lookahead_teacher_scope.help": "前瞻路由器学习预测哪一种路由。first:只取第 0 轮迭代。iterations:取该层所有迭代的平均,预取因此也覆盖更深迭代需要的专家。推荐 first:前瞻头在每一轮迭代上都已为 0.97 的 token 选对了簇。", + "field.lookahead_teacher_scope.label": "前瞻教师", + "field.max_gen_len.help": "每次 GRPO 采样生成的 token 数。", + "field.max_gen_len.label": "采样长度", + "field.max_inference_depth.help": "推理时的最大迭代次数。通常等于训练深度;超过训练深度未经验证。", + "field.max_inference_depth.label": "推理深度", + "field.max_position_embeddings.help": "旋转位置编码预备的最长序列。只有超长上下文才需要修改。", + "field.max_position_embeddings.label": "最大位置数", + "field.max_resident_experts.help": "每层内存中保留专家数的硬上限。留空由规划器决定。", + "field.max_resident_experts.label": "最大常驻专家", + "field.max_seq_len.help": "每条训练序列的 token 数。在混合注意力下内存约线性增长。", + "field.max_seq_len.label": "序列长度", + "field.max_steps.help": "达到该优化器步数后停止。0 表示不设上限(跑完所有轮数)。", + "field.max_steps.label": "最大步数", + "field.min_recurrent_depth.help": "深度调度或提前退出允许的最低深度。设为 1 时简单 token 一轮即可退出。", + "field.min_recurrent_depth.label": "最小深度", + "field.mla_cache_rope.help": "额外缓存旋转键部分,用 KV 内存换解码速度。", + "field.mla_cache_rope.label": "缓存 RoPE 键", + "field.mla_decode.help": "展开:参考路径。吸收:把投影折叠进查询(每步计算更少)。自动会混用两条路径,实测有微小 logit 偏差,因此需手动开启。", + "field.mla_decode.label": "MLA 解码路径", + "field.mla_upproj_recompute.help": "只保留潜向量,按注意力块重建 K 和 V。结果精确,但在 64k 实测没有省内存,所以默认关闭。", + "field.mla_upproj_recompute.label": "MLA 上投影重算", + "field.modalities.help": "额外的输入编码器,用逗号分隔(image、audio)。纯文本模型留空,数据集会自动检测。", + "field.modalities.label": "模态", + "field.moe_chunk_tokens.help": "按这个大小分块把 token 分发给专家,每块在反向传播时重算。0 表示一次性分发。结果精确。", + "field.moe_chunk_tokens.label": "MoE 分块 token 数", + "field.moe_intermediate_size.help": "每个专家前馈网络的隐藏宽度。0 表示按隐藏维度推导。", + "field.moe_intermediate_size.label": "专家 FFN 宽度", + "field.num_attention_heads.help": "查询头数。隐藏维度必须能被它整除。", + "field.num_attention_heads.label": "注意力头数", + "field.num_experts.help": "每个 MoE 层的路由专家数。增加专家能扩容而不增加每 token 计算量;专家也是懒加载的单位。", + "field.num_experts.label": "专家数", + "field.num_experts_per_tok.help": "每个 token 使用的专家数。top-2 让路由器能从损失中学习;top-1 需关闭 norm_topk_prob。", + "field.num_experts_per_tok.label": "激活专家数(top-k)", + "field.num_generations.help": "GRPO 对每个提示比较的样本数。", + "field.num_generations.label": "每题采样数", + "field.num_hidden_layers.help": "checkpoint 中实际存储的层数(前置层 + 循环组 + 收尾层)。循环会复用这些层,所以虚拟深度可以更大。", + "field.num_hidden_layers.label": "物理层数", + "field.num_key_value_heads.help": "滑动窗口层分组查询注意力的键值头数。越少 KV 缓存越小。", + "field.num_key_value_heads.label": "KV 头数", + "field.num_shared_experts.help": "每个 token 都会经过的常开专家,始终常驻内存。", + "field.num_shared_experts.label": "共享专家", + "field.num_workers.help": "数据加载器的工作进程数。自动按平台选择安全的数量。", + "field.num_workers.label": "数据加载进程", + "field.optimizer_page_dir.help": "分页优化器状态的存放目录。请使用本地高速 SSD。", + "field.optimizer_page_dir.label": "优化器页目录", + "field.optimizer_paging.help": "不活跃专家的优化器状态存到磁盘。", + "field.optimizer_paging.label": "分页优化器", + "field.page_size_mb.help": "单个优化器页文件的大小,单位 MB。", + "field.page_size_mb.label": "页大小", + "field.pinned_memory_max_fraction.help": "用于锁页专家缓冲区的系统内存最大比例。", + "field.pinned_memory_max_fraction.label": "锁页内存占比", + "field.plan.active_mode.help": "按激活专家数或按激活参数量设定每 token 预算。", + "field.plan.active_mode.label": "激活预算方式", + "field.plan.active_value.help": "每 token 激活专家数,或激活参数量(百万)。", + "field.plan.active_value.label": "激活预算", + "field.plan.data_paths.help": "规划器测量这些文件或文件夹,以确定 token 数、序列长度和窗口,每行一个。", + "field.plan.data_paths.label": "数据集", + "field.plan.depth.help": "每个循环组的迭代次数。", + "field.plan.depth.label": "循环深度", + "field.plan.memory_saving.help": "以速度换内存的力度(int8 KV、共享路由、检查点)。", + "field.plan.memory_saving.label": "省内存程度", + "field.plan.num_experts.help": "每个 MoE 层的路由专家数。", + "field.plan.num_experts.label": "专家数", + "field.plan.ram_gb.help": "规划时假定的内存。留空则检测本机。", + "field.plan.ram_gb.label": "内存(GB)", + "field.plan.seq_len.help": "留空则从数据集分析结果推导。", + "field.plan.seq_len.label": "序列长度", + "field.plan.target_m.help": "总参数量,单位百万。", + "field.plan.target_m.label": "目标规模(M)", + "field.plan.token_budget_b.help": "预训练 token 数,单位十亿。留空:遍历一遍数据。", + "field.plan.token_budget_b.label": "Token 预算(B)", + "field.plan.use_moe.help": "规划 MoE 模型;关闭则规划稠密模型。", + "field.plan.use_moe.label": "混合专家", + "field.plan.vocab_size.help": "留空则从分词器报告读取;没有报告时使用 32768 和内置的通用 32k 分词器。", + "field.plan.vocab_size.label": "词表", + "field.ponder_loss_coef.help": "对期望迭代次数的惩罚。越高越促使模型提前停止。", + "field.ponder_loss_coef.label": "思考损失", + "field.prefetch_depth.help": "预取器提前加载预测专家的距离。0 表示不预取。", + "field.prefetch_depth.label": "预取深度", + "field.prelude_layers.help": "循环之前只运行一次的层。前瞻路由读取它们的输出。", + "field.prelude_layers.label": "前置层", + "field.probe.backends.help": "要测试的运行时。每个后端各有一份全内存参考。", + "field.probe.backends.label": "探针后端", + "field.probe.decode_wait_s.help": "解码步骤等待预取专家的时长,超时则按需加载。", + "field.probe.decode_wait_s.label": "解码等待(秒)", + "field.probe.draft_depth.help": "推测变体中起草 token 使用的循环深度。", + "field.probe.draft_depth.label": "草稿深度", + "field.probe.enabled.help": "每次验证后,用懒加载专家解码刚保存的 checkpoint,并与全内存对比:速度、命中率和 token 一致性。探针在低优先级子进程中对 checkpoint 副本运行。", + "field.probe.enabled.label": "懒加载探针", + "field.probe.gamma.help": "推测变体中每次校验前起草的 token 数。", + "field.probe.gamma.label": "草稿长度 γ", + "field.probe.max_new_tokens.help": "每条提示贪心解码的 token 数。越多速率越稳定,探针耗时也越长。", + "field.probe.max_new_tokens.label": "每条提示 token 数", + "field.probe.max_variants.help": "测试组合数的上限,超出部分标记为已截断。", + "field.probe.max_variants.label": "组合上限", + "field.probe.miss_policies.help": "Torch 缓存未命中时的行为。sync_on_demand 加载并等待(输出完全一致);on_demand 可能跳过迟到的专家;fallback_diagnostic 从不加载(最差情况)。", + "field.probe.miss_policies.label": "未命中策略", + "field.probe.paging.help": "自动跟随模型的训练方式(开启簇局部性损失时按簇分页)。加入按专家可对比逐专家分页。", + "field.probe.paging.label": "分页布局", + "field.probe.ram_ratios.help": "同时允许驻留内存的专家占比。越低越省内存,未命中越多。", + "field.probe.ram_ratios.label": "内存比例", + "field.probe.residency.help": "MLX 淘汰策略:下次使用规划器,或普通的最近使用窗口。", + "field.probe.residency.label": "常驻策略", + "field.probe.residency_decay.help": "下次使用规划器遗忘旧路由证据的速度。", + "field.probe.residency_decay.label": "规划器衰减", + "field.probe.speculative.help": "同时测试带懒加载专家的自推测解码。", + "field.probe.speculative.label": "推测变体", + "field.probe.verify_wait_s.help": "推测校验阶段的同类等待时长。", + "field.probe.verify_wait_s.label": "校验等待(秒)", + "field.ram_budget_mb.help": "懒加载专家缓存可用的内存,单位 MB。留空则改用内存比例。", + "field.ram_budget_mb.label": "内存预算", + "field.recompute_policy.help": "开启检查点时重算哪些块:全部、仅全局(MLA)块、仅滑动窗口块,或隔块重算。", + "field.recompute_policy.label": "重算的块", + "field.recompute_scope.help": "block:重算整个块(最省内存)。mlp:只重算每块的 MoE/FFN,保留注意力结果,耗时更少。", + "field.recompute_scope.label": "重算范围", + "field.recurrent_attention_mode.help": "循环内注意力的运行方式。shared_first:每轮都做注意力,K/V 取第 0 轮(缓存精确,KV 不随深度增长)。per_iteration:每轮一份 KV(D 倍 KV)。first_only:v2 行为。", + "field.recurrent_attention_mode.label": "循环注意力", + "field.recurrent_depth.help": "训练时每个循环组的迭代次数。虚拟层数 = 前置 + 组数 × 深度 + 收尾。", + "field.recurrent_depth.label": "训练深度", + "field.recurrent_depth_jitter.help": "在调度深度附近随机波动,让模型学会在多个深度退出。", + "field.recurrent_depth_jitter.label": "深度抖动", + "field.recurrent_distill_coef.help": "让浅层出口学习全深度的预测,提高推测接受率和提前退出质量。", + "field.recurrent_distill_coef.label": "深度蒸馏", + "field.recurrent_dt_init.help": "学习到的循环步长 dt 的起始值,所有循环组相同。一次迭代是一个欧拉步,所以 深度 × dt 就是积分时程 T。规划器取 dt = min(0.5, 2 / 深度),即固定 T = 2:深度 4 为 0.5,深度 8 为 0.25。15M 模型实测(每组一个种子):深度 4 时 dt 在 0.2 到 0.5 之间损失持平;深度 8 时 dt 0.25 优于 0.5,而从 0.0625 起步则差得多。T = 2 是安全的起点,不是拟合出的最优:从这里起步的 sigmoid 实验最终停在 T 约 1.2。内核默认值仍为 0.25。", + "field.recurrent_dt_init.label": "初始步长", + "field.recurrent_dt_max.help": "dt 的上界。1.0 表示一次迭代把整个块的更新量加到残差流上。推荐以 1.0 作为上界;深度 4 和深度 8 下,dt 固定为 1.0 都比 0.5 差。", + "field.recurrent_dt_max.label": "最大步长", + "field.recurrent_dt_min.help": "dt 的下界。使用 clamp 时,dt 到达下界就不再学习;默认 0.05 下,深度 4 和深度 8 的实测中 dt 都塌缩到了这个下界。推荐 0.05,并配合 sigmoid 参数化,使 dt 在 [dt_min, dt_max] 内始终可学习;15M 实测中学到的 dt 在 0.14 到 0.30 之间。", + "field.recurrent_dt_min.label": "最小步长", + "field.recurrent_dt_param.help": "循环步长 dt 的存储方式。clamp:dt = clamp(w, dt_min, dt_max);w 越出范围后梯度为零,掉到 dt_min 以下的 dt 再也回不来。sigmoid:dt = dt_min + (dt_max - dt_min) * sigmoid(w);梯度不会消失,dt 仍可调整。两者都从设定的初始 dt 开始。15M 模型实测(每组一个种子):clamp 默认值会让 dt 塌缩到 0.05 的下界,同一步数下比健康的 dt 更差;sigmoid 的 dt 能继续移动,停在损失持平的位置。规划器推荐 sigmoid。", + "field.recurrent_dt_param.label": "步长参数化", + "field.recurrent_enabled.help": "让中间的共享层组每个 token 运行多次,用少量权重获得更深网络的效果。", + "field.recurrent_enabled.label": "循环深度", + "field.recurrent_groups.help": "前置层与收尾层之间组成循环组的层数。留空则按 层数 − 前置 − 收尾 推导。", + "field.recurrent_groups.label": "循环组数", + "field.recurrent_later_groups.help": "仅块顺序有效:第一轮之后的循环迭代只运行块内前 N 层(0 表示全部)。层调用更少,更深的迭代更便宜,也会访问更少的专家页。需要 shared_first 或 first_only 注意力模式。推荐 0(完整块)。15M 实测中 4 层只跑 2 层时,每秒步数约为 1.3 倍,每步训练损失最多高 0.055。不要设为 1:只剩一层自循环就不再是块循环。", + "field.recurrent_later_groups.label": "后续迭代层数", + "field.recurrent_later_topk.help": "第一轮之后的循环迭代中每个 token 使用的专家数(0 表示与第一轮相同)。共享专家始终运行。较小的值让更深的迭代更便宜,也会加载更少的专家页。推荐 0:15M 实测中改为 1 个专家使验证 CE 从 4.543 升到 4.600,速度没有提升。", + "field.recurrent_later_topk.label": "后续迭代 top-k", + "field.recurrent_order.help": "循环的执行顺序。layer:每个循环层连续重复 depth 次。block:整组循环层一起重复,第 0 轮就是普通的单深度前向,后续轮次在其上精炼。计算方式不同,不能与 layer 顺序的检查点互换。15M 模型实测(每组一个种子):步长可训练时,同一步数下 block 的损失更低;步长固定为 1.0 时,layer 在后期更好。规划器推荐 block。", + "field.recurrent_order.label": "循环顺序", + "field.recurrent_stability_coef.help": "保持循环更新收缩,避免多次迭代后漂移或发散。", + "field.recurrent_stability_coef.label": "稳定性损失", + "field.recurrent_strategy.help": "训练时循环深度分桶的采样策略。", + "field.recurrent_strategy.label": "深度策略", + "field.reset_lookahead_at_documents.help": "留空则跟随上面的路由开关;true 或 false 单独设置前瞻项。", + "field.reset_lookahead_at_documents.label": "文档边界重置前瞻", + "field.reset_router_at_documents.help": "打包行:时间局部性与局部性损失跳过跨文档边界的 token 对。", + "field.reset_router_at_documents.label": "文档边界重置路由", + "field.reward_spec.help": "toy 使用内置奖励,或 lm:/path/to/reward-model[,device=cuda]。", + "field.reward_spec.label": "奖励(GRPO)", + "field.rope_dim.help": "MLA 层每个头中携带旋转位置信息的维度数。", + "field.rope_dim.label": "RoPE 维度", + "field.rope_theta.help": "旋转位置编码的基础频率。值越大,长上下文的位置分辨率越好。", + "field.rope_theta.label": "RoPE 基数", + "field.router_scope.help": "per_iteration:每轮循环重新路由。共享:复用第 0 轮的路由,用到的专家更少,更适合懒加载。", + "field.router_scope.label": "路由范围", + "field.save_dir.help": "checkpoint 及其 .config.json 附属文件的写入位置。", + "field.save_dir.label": "Checkpoint 目录", + "field.save_interval.help": "每 N 步保存(并验证)一次。", + "field.save_interval.label": "保存间隔", + "field.serve.allow_remote.help": "监听非回环地址。服务器环境中必须设置 CHRONOS_API_KEY,客户端须携带该密钥。", + "field.serve.allow_remote.label": "允许远程访问", + "field.serve.device.help": "服务使用的运行时。", + "field.serve.device.label": "设备", + "field.serve.dtype.help": "服务使用的精度。", + "field.serve.dtype.label": "精度", + "field.serve.host.help": "监听的地址。127.0.0.1 只允许本机访问。", + "field.serve.host.label": "监听地址", + "field.serve.kv_cache_dtype.help": "覆盖 KV 存储方式。int8 约减半 KV 内存;留空保持模型设置。", + "field.serve.kv_cache_dtype.label": "KV 缓存精度", + "field.serve.lazy_experts.help": "专家保存在 SSD 上并按需换入,通过 Ollama 协议调用时内存同样保持较低。", + "field.serve.lazy_experts.label": "懒加载专家", + "field.serve.max_resident_experts.help": "每层内存专家数的硬上限。留空:按内存占比推导。", + "field.serve.max_resident_experts.label": "最大常驻专家", + "field.serve.mla_cache_rope.help": "缓存旋转后的键:内存更多,重算更少。", + "field.serve.mla_cache_rope.label": "缓存 RoPE 键", + "field.serve.mla_decode.help": "覆盖 MLA 解码路径。留空保持模型设置。", + "field.serve.mla_decode.label": "MLA 解码", + "field.serve.models_dir.help": "存放导出模型的目录,每个模型显示为一个 Ollama 模型名。", + "field.serve.models_dir.label": "模型目录", + "field.serve.paging.help": "自动跟随 checkpoint 的训练方式(按簇或按专家分页)。", + "field.serve.paging.label": "分页布局", + "field.serve.port.help": "TCP 端口。11435 可避免与原版 Ollama 的 11434 冲突。", + "field.serve.port.label": "端口", + "field.serve.ram_budget_mb.help": "专家内存的硬上限。留空:不设上限。", + "field.serve.ram_budget_mb.label": "内存预算(MB)", + "field.serve.ram_expert_fraction.help": "允许驻留内存的专家比例。", + "field.serve.ram_expert_fraction.label": "内存专家占比", + "field.serve.router_scope.help": "覆盖跨迭代的路由复用方式。留空保持模型设置。", + "field.serve.router_scope.label": "路由范围", + "field.sliding_window_size.help": "每个滑动窗口层能看到的 token 数。短窗口适合句级任务,并限制 KV 内存。", + "field.sliding_window_size.label": "滑动窗口", + "field.storage_format.help": "磁盘专家存储的文件格式。", + "field.storage_format.label": "专家存储格式", + "field.temperature.help": "GRPO 采样的温度。", + "field.temperature.label": "采样温度", + "field.temporal_grad_span.help": "每隔这么多个位置截断时间局部性损失的梯度链。0 表示完整链。在中英数据上实测影响不大。", + "field.temporal_grad_span.label": "时间梯度跨度", + "field.tie_word_embeddings.help": "输入嵌入与输出头共用权重。可省下 词表 × 隐藏维度 个参数,小模型几乎不损失质量。", + "field.tie_word_embeddings.label": "共享嵌入", + "field.tok.fields.help": "要读取的 JSON 字段。留空自动识别 text、conversations 和 pairs。", + "field.tok.fields.label": "文本字段", + "field.tok.out_dir.help": "tokenizer.json、对话模板和报告的写入位置。", + "field.tok.out_dir.label": "输出目录", + "field.tok.paths.help": "抽样文本的文件或文件夹,每行一个。每个来源按各自配额抽样,不做合并。", + "field.tok.paths.label": "源文件", + "field.tok.per_source.help": "每个源文件的水库抽样数量。", + "field.tok.per_source.label": "每源文本数", + "field.tok.temperature.help": "按字节占比平衡各语言。越低越均衡,避免英文挤占中文。", + "field.tok.temperature.label": "语言温度", + "field.tok.vocab_size.help": "要学习的 token 数。模型词表需设为相同的值。", + "field.tok.vocab_size.label": "词表大小", + "field.tokenizer_path.help": "模型训练所用的分词器文件夹(含 tokenizer.json)。留空时使用 checkpoint 自带的分词器,否则用内置兜底分词器。词表大小必须一致。", + "field.tokenizer_path.label": "分词器", + "field.train.backend.help": "训练使用的设备。自动:Apple 芯片优先 MLX,其次 CUDA、XPU、MPS、CPU。", + "field.train.backend.label": "训练后端", + "field.train.data_distill.help": "由教师模型评分的文本或对话数据。文件或文件夹,每行一个;多个会自动合并。留空则沿用第一阶段的数据集。", + "field.train.data_distill.label": "蒸馏数据", + "field.train.data_dpo.help": "偏好对数据,含 chosen 与 rejected 回复。文件或文件夹,每行一个;多个会自动合并。留空则沿用第一阶段的数据集。", + "field.train.data_dpo.label": "DPO数据", + "field.train.data_grpo.help": "用于奖励 rollout 的 prompt 数据。文件或文件夹,每行一个;多个会自动合并。留空则沿用第一阶段的数据集。", + "field.train.data_grpo.label": "GRPO数据", + "field.train.data_orpo.help": "偏好对数据,含 chosen 与 rejected 回复,格式同 DPO。文件或文件夹,每行一个;多个会自动合并。留空则沿用第一阶段的数据集。", + "field.train.data_orpo.label": "ORPO数据", + "field.train.data_path.help": "第一阶段的数据集:JSONL、JSON、Parquet、CSV、TSV 或 TXT 文件,或包含这些文件的文件夹,每行一个。多个数据集会在运行目录中合并为一个 JSONL 文件。留空则运行合成冒烟测试。", + "field.train.data_path.label": "数据集", + "field.train.data_sft.help": "对话数据,含 conversations(user / assistant 轮次)。文件或文件夹,每行一个;多个会自动合并。留空则沿用第一阶段的数据集。", + "field.train.data_sft.label": "监督微调数据", + "field.train.init_weight.help": "起始 checkpoint。留空:预训练随机初始化,后续阶段接上一阶段。", + "field.train.init_weight.label": "起始权重", + "field.train.max_steps.help": "达到该优化器步数后停止。0 表示跑完配置的轮数。", + "field.train.max_steps.label": "最大步数", + "field.train.sample_prompt.help": "训练过程中定期续写的提示词,方便查看进展。留空使用阶段默认值。", + "field.train.sample_prompt.label": "采样提示词", + "field.train.stages.help": "按顺序运行,每个阶段从上一阶段的 checkpoint 开始。常用路径是 预训练 → SFT。", + "field.train.stages.label": "阶段", + "field.train.teacher_path.help": "仅用于蒸馏:学生模型要拟合其输出的模型。", + "field.train.teacher_path.label": "教师 checkpoint", + "field.train.val_ratio.help": "留作验证的记录比例。每次验证还会触发懒加载探针。", + "field.train.val_ratio.label": "验证集比例", + "field.training_paging.help": "训练时把不活跃的专家移出内存。更慢,但能训练超过内存容量的模型。", + "field.training_paging.label": "分页训练", + "field.tune.data_path.help": "自动调参启动前会检查这些数据集,每行一个。当前的试训使用随机 token,所以这些数据不影响试训损失。", + "field.tune.data_path.label": "数据集", + "field.tune.n_trials.help": "Optuna 尝试的配置数量。", + "field.tune.n_trials.label": "试验次数", + "field.tune.probe_steps.help": "每次试验的训练步数;表现差的试验会被提前剪枝。", + "field.tune.probe_steps.label": "每次试验步数", + "field.tune.search.help": "搜索可以调整的参数。评分是探针模型的交叉熵。选中任一循环参数时,探针改为循环模型(使用配置的深度,块内 4 层);循环参数的结果只作粗筛。recurrent_later_topk 和 recurrent_later_groups 节省的是时间而不是损失,请对照日志里每次试验的步时。", + "field.tune.search.label": "搜索参数", + "field.use_hybrid_attention.help": "MLA(压缩潜在 KV)与滑动窗口层交替,长上下文时 KV 缓存仍然很小。", + "field.use_hybrid_attention.label": "混合注意力", + "field.vocab_size.help": "token id 的数量,必须等于分词器词表大小,否则 id 会超出嵌入表。", + "field.vocab_size.label": "词表大小", + "field.vram_budget_gb.help": "专家缓存可用的加速器内存,单位 GB。", + "field.vram_budget_gb.label": "显存预算", + "field.weight_decay.help": "AdamW 解耦权重衰减。", + "field.weight_decay.label": "权重衰减", + "group.attention": "注意力与 KV 缓存", + "group.autotune": "自动调参", + "group.benchmark": "基准测试", + "group.export": "导出", + "group.inference": "生成", + "group.lazy": "懒加载专家", + "group.memory": "内存与懒加载专家", + "group.model": "模型形状", + "group.moe": "混合专家", + "group.objectives": "训练目标", + "group.optimizer": "优化器", + "group.planner": "自动规划", + "group.probe": "验证时的懒加载探针", + "group.recurrent": "循环深度", + "group.rl": "偏好与强化学习阶段", + "group.runtime": "运行时", + "group.serve": "Ollama / OpenAI 服务", + "group.speculative": "推测解码", + "group.stage_data": "后续阶段的数据", + "group.tokenizer": "分词器构建", + "group.train": "训练任务", + "infer.arch_note": "架构读取自检查点的配置文件;“模型”页只补充文件中缺少的项。", + "infer.col.cache_hit_rate": "缓存命中率", + "infer.col.cold_miss_predict_hit_rate": "冷未命中已预测", + "infer.col.decode_time_s": "解码(秒)", + "infer.col.fallback_weight_rate": "回退权重", + "infer.col.prediction_hit_rate": "预测命中率", + "infer.col.prefill_time_s": "预填充(秒)", + "infer.col.response_time_s": "响应(秒)", + "infer.col.rss_after_decode_gb": "解码后 RSS(GB)", + "infer.col.rss_delta_gb": "RSS 变化(GB)", + "infer.col.spec_acceptance_rate": "草稿接受率", + "infer.col.tokens": "token 数", + "infer.col.tokens_per_sec": "token/秒", + "infer.common_prefix": "前 {n} 个字符相同", + "infer.diff": "输出不同", + "infer.full_output": "全内存", + "infer.generate": "生成", + "infer.hit_rates": "命中率", + "infer.intro": "同一个提示分别用懒加载专家和全内存运行,比较输出、速度、命中率和内存。", + "infer.lazy_output": "懒加载专家", + "infer.measured_note": "在本机针对此提示实测,单次运行,不是平均值。", + "infer.mode": "模式", + "infer.mode.full_dram": "全内存", + "infer.mode.lazy_offload": "懒加载专家", + "infer.output": "输出", + "infer.prompt": "提示词", + "infer.prompt_help": "发送给模型的文本。未开启“原始提示”时会套用 SFT 对话模板。", + "infer.ram_ratio": "内存加载比例", + "infer.same": "输出完全一致", + "infer.similarity": "相似度", + "infer.stats": "运行统计", + "infer.sweep": "内存比例扫描", + "infer.title": "推理", + "io.empty": "暂无指标。本进程运行推理或服务时会出现。", + "io.intro": "本服务进程中推理和服务记录的专家缓存与 IO 计数。", + "io.latest": "最新值", + "io.metric": "指标", + "io.samples": "样本数", + "io.seconds": "秒", + "io.title": "IO 与缓存指标", + "label.estimated": "估算", + "label.measured": "实测", + "label.measured_meta": "实测(meta 设备计数)", + "metric.active_mem_gb": "活跃", + "metric.balance_loss": "专家均衡", + "metric.chrf": "chrF", + "metric.error": "错误", + "metric.eval_s": "评测用时(秒)", + "metric.grad_norm": "梯度范数", + "metric.load_cv": "负载不均(变异系数)", + "metric.locality_loss": "簇局部性", + "metric.lookahead_loss": "前瞻路由", + "metric.loss": "总损失", + "metric.lr": "学习率", + "metric.peak_mem_gb": "峰值", + "metric.primary_loss": "交叉熵", + "metric.rec_contraction": "收缩率", + "metric.rec_depth_mean": "平均深度", + "metric.rec_early_exit_ratio": "提前退出占比", + "metric.route_entropy": "路由熵", + "metric.state": "状态", + "metric.temporal_loss": "时间局部性", + "metric.tokens_per_s": "token/秒", + "metric.valid_ce": "验证交叉熵", + "metric.valid_ppl": "验证困惑度", + "mon.best": "最佳", + "mon.chart.aux": "辅助损失", + "mon.chart.loss": "训练损失", + "mon.chart.lr": "学习率", + "mon.chart.memory": "内存(GB)", + "mon.chart.optimizer": "梯度范数", + "mon.chart.recurrent": "循环深度", + "mon.chart.routing": "专家路由", + "mon.chart.throughput": "每秒 token 数", + "mon.checkpoints": "Checkpoint", + "mon.eta": "剩余时间", + "mon.eta_basis.deadline": "按时间预算", + "mon.eta_basis.steps": "按步数进度", + "mon.eta_basis.target_passes": "按数据轮次进度", + "mon.event": "事件", + "mon.events": "事件", + "mon.grad_norm": "梯度范数", + "mon.input": "输入", + "mon.intro": "实时查看任意运行目录,包括命令行启动的长时间训练。只读。", + "mon.log": "训练日志", + "mon.loss": "损失", + "mon.lr": "学习率", + "mon.memory": "内存", + "mon.no_runs": "还没有运行记录。请在训练页面启动。", + "mon.phase_eta": "预计 {t} 完成", + "mon.phase_note": "每个阶段的步数从头计数,因此图表一次只显示一个阶段。", + "mon.progress": "进度", + "mon.reference": "参考译文", + "mon.run": "运行", + "mon.samples": "样例", + "mon.size": "大小", + "mon.stale": "已有一段时间没有更新", + "mon.throughput": "每秒 token 数", + "mon.title": "运行监控", + "mon.tokens_seen": "已训练 token", + "mon.updated": "{s} 秒前更新", + "mon.valid_ce": "验证 CE", + "mon.validation": "验证", + "nav.autotune": "自动调参", + "nav.benchmark": "基准测试", + "nav.config": "模型", + "nav.data": "数据", + "nav.export": "导出", + "nav.inference": "推理", + "nav.io": "IO 指标", + "nav.monitor": "监控", + "nav.serve": "服务", + "nav.tokenizer": "分词器", + "nav.train": "训练", + "phase.active": "进行中", + "phase.complete": "已完成", + "phase.pending": "等待中", + "picker.add": "添加所选", + "picker.add_button": "添加…", + "picker.browse_tip": "在页面内浏览服务所在电脑上的文件夹并选取路径。", + "picker.empty": "这里没有符合类型的文件或文件夹", + "picker.entries": "文件夹内容", + "picker.go": "前往", + "picker.hidden": "显示隐藏项", + "picker.multi_hint": "可以添加多个文件或文件夹,训练前会自动合并。", + "picker.n_selected": "已选 {n} 项", + "picker.native_fallback": "这台电脑无法打开系统文件对话框,已改为上传方式。", + "picker.native_tip": "打开系统文件管理器。文件不会被复制,直接使用所选的原路径。", + "picker.pick_file": "请选择一个文件", + "picker.place.desktop": "桌面", + "picker.place.documents": "文稿", + "picker.place.downloads": "下载", + "picker.place.home": "主目录", + "picker.place.root": "根目录(/)", + "picker.place.volumes": "所有磁盘", + "picker.placeholder_multi": "每行一个路径,或点“添加…”", + "picker.places": "常用位置", + "picker.select": "选择", + "picker.this_folder": "未选择条目:将使用当前文件夹({path})", + "picker.title.any": "选择文件或文件夹", + "picker.title.checkpoint": "选择 checkpoint", + "picker.title.config": "选择配置文件", + "picker.title.data": "选择数据集(文件或文件夹)", + "picker.title.dir": "选择文件夹", + "picker.truncated": "只显示前 {n} 项;输入路径可直接进入更深的目录", + "picker.up": "上一级文件夹", + "picker.upload_files": "上传文件…", + "picker.upload_folder": "上传文件夹…", + "picker.upload_tip": "用本机的文件管理器选择文件,上传到服务所在电脑的 uploads 文件夹,并填入上传后的路径。", + "picker.uploaded": "已上传 {n} 个文件。", + "picker.uploaded_skipped": "已上传 {n} 个文件;{skipped} 个类型不符或为隐藏文件,已跳过。", + "picker.uploading": "正在上传 {done} / {total}…", + "picker.will_merge": "{n} 个路径将在使用前合并为一个 JSONL 文件。", + "plan.apply": "使用此方案", + "plan.note": "规划器会按目标规模、数据和内存搜索配置;训练前请先检查。", + "plan.run": "规划", + "plan.stages": "各阶段设置", + "plan.summary": "方案", + "plan.title": "自动规划", + "plan.tokens": "训练 token 数", + "preset.b1": "1B(64 GB)", + "preset.b1.summary": "1B MoE,64 个细粒度专家,激进省内存。", + "preset.m200": "200M(32 GB)", + "preset.m200.summary": "通用 200M MoE,均衡省内存,使用旧版 6400 词表。", + "preset.m50": "50M(16k 词表)", + "preset.m50.summary": "50M MoE,36 个专家(top-2),配 16k Chronos 分词器;不启用省内存选项。", + "preset.m500": "500M(32 GB)", + "preset.m500.summary": "500M MoE,激进省内存:int8 KV、共享路由、激活检查点。", + "preset.tiny": "Tiny(冒烟测试 / CI)", + "preset.tiny.summary": "1.5M 冒烟测试,CPU 上几分钟即可训练完。", + "probe.accept": "草稿接受率", + "probe.agree": "token 一致率", + "probe.auto_paging": "自动分页", + "probe.budget": "专家预算", + "probe.c_loads": "加载次数", + "probe.c_rss": "峰值 RSS(GB)", + "probe.c_speed": "解码速度(token/秒)", + "probe.cluster_loads": "簇加载次数", + "probe.cold_hit": "冷未命中预测率", + "probe.cold_n": "冷未命中预测 / 总数", + "probe.conditions": "贪心解码,{n} 条提示,每条 {t} 个 token;实测。", + "probe.decode": "解码(秒)", + "probe.dtps": "解码 token/秒", + "probe.evict": "淘汰策略", + "probe.exact": "完全一致", + "probe.group.eff": "效率", + "probe.group.fid": "保真度(对照全内存参考)", + "probe.group.hit": "命中率", + "probe.group.paging": "分页与加载", + "probe.history": "训练过程中的命中率与一致率", + "probe.history_note": "每次验证后运行一次;步数在每个阶段重新计数,所以只画最新阶段。", + "probe.hit": "常驻命中率", + "probe.hits": "命中 / 未命中", + "probe.ideal": "理想激活专家数", + "probe.load_s": "加载耗时(秒)", + "probe.loads": "按需加载次数", + "probe.none": "还没有探针结果。每次验证后会运行一次。", + "probe.pages": "分页 · 页数", + "probe.pred_hit": "预测命中率", + "probe.pred_n": "预测命中 / 总数", + "probe.prefill": "预填充(秒)", + "probe.prefix": "最短一致前缀", + "probe.ref_row": "全内存参考 · {backend}", + "probe.ref_tokens": "参考 token 数", + "probe.reference": "全内存参考", + "probe.rss": "峰值 RSS(GB)", + "probe.skip.busy": "上一次探测仍在运行", + "probe.skip.dense": "稠密模型,没有可分页的路由专家", + "probe.skip.no_checkpoint": "磁盘上还没有检查点", + "probe.skip.superseded": "已被第 {step} 步的新验证取代", + "probe.skip.writing": "检查点仍在写入", + "probe.skipped": "已跳过:{reason}", + "probe.sync": "同步 SSD 读取", + "probe.title": "懒加载探针", + "probe.tps": "token/秒", + "probe.trained_clusters": "使用簇局部性训练", + "probe.variant": "组合", + "probe.vs_full": "相对全内存速度", + "probe.wait": "预取等待(秒)", + "rule.clusters_auto": "0 = 按专家数推导", + "rule.equals_recurrent_depth": "等于训练深度", + "rule.loopback": "127.0.0.1(仅本机)", + "rule.sync_is_exact": "sync_on_demand:输出与全内存完全一致", + "rule.vocab_matches_tokenizer": "等于分词器词表大小", + "rule.window_median_record": "最接近记录长度中位数的 2 的幂(未知时为 32)", + "serve.auth_off": "未设密钥:仅本机可访问。", + "serve.auth_on": "客户端必须携带 API 密钥。", + "serve.hint": "连接方式:OLLAMA_HOST={addr} ollama run <模型>", + "serve.intro": "启动 chronos serve:Ollama 和 OpenAI 客户端连接到它,专家保持懒加载。", + "serve.remote_warning": "绑定到本机以外的地址需要勾选允许远程访问,并在 CHRONOS_API_KEY 中设置密钥;没有密钥时服务拒绝启动。", + "serve.running": "服务地址 {url}", + "serve.start": "启动服务", + "serve.stop": "停止服务", + "serve.stopped": "服务已停止", + "serve.title": "Ollama / OpenAI 兼容服务", + "source.code": "默认值", + "source.measured": "实测", + "source.planner": "自适应规划器", + "source.rule": "规则", + "stage.distill": "蒸馏", + "stage.dpo": "DPO", + "stage.grpo": "GRPO", + "stage.orpo": "ORPO", + "stage.pretrain": "预训练", + "stage.sft": "监督微调", + "state.checkpointing": "正在保存 checkpoint", + "state.done": "完成", + "state.error": "出错", + "state.evaluating": "评估中", + "state.failed": "失败", + "state.finished": "已完成", + "state.idle": "空闲", + "state.loading": "加载中", + "state.paused": "已暂停", + "state.pending": "等待中", + "state.running": "运行中", + "state.stale": "近期无更新", + "state.starting": "启动中", + "state.stopped": "已停止", + "state.stopping": "正在停止", + "tip.auto_empty": "留空 = 自动", + "tip.default": "默认值", + "tip.range": "范围", + "tip.recommended": "推荐值", + "tip.source": "来源", + "tok.algorithm": "算法", + "tok.bucket": "分桶", + "tok.byte_fallback": "字节回退率", + "tok.chars_per_token": "每 token 字符数", + "tok.compression": "每 token 字节数", + "tok.elapsed": "构建用时", + "tok.fertility": "每词 token 数", + "tok.fingerprint": "指纹", + "tok.intro": "用你自己的数据训练 Chronos 分词器:抽样、规范化、字节回退 BPE,并输出留出集评估报告。", + "tok.out_dir_now": "输出文件夹", + "tok.progress": "构建进度", + "tok.report": "评估报告", + "tok.report_note": "在未参与分词器训练的留出文本上实测。", + "tok.roundtrip": "无损往返", + "tok.texts": "文本数", + "tok.title": "Chronos 分词器构建", + "tok.vocab_use": "词表利用率", + "train.config_note": "架构来自“模型”页;应用过自动规划时,各阶段学习率来自规划结果。", + "train.intro": "使用“模型”页的设置启动训练任务,进度显示在监控页。", + "train.jobs": "训练任务", + "train.open_monitor": "在监控中打开", + "train.probe_note": "每次验证都会用懒加载专家和全内存分别解码刚保存的 checkpoint。探针以低优先级子进程在副本上运行,不会中断训练。", + "train.probe_off": "此任务已关闭懒加载检查。", + "train.probe_title": "每次验证时检查懒加载", + "train.run_dir": "运行目录", + "train.stage_data_note": "第一阶段之后的每个阶段读取各自格式的数据。某一行留空时沿用第一阶段的数据集。", + "train.stage_n": "阶段 {n}", + "train.start": "开始训练", + "train.started": "训练已开始", + "train.stop": "停止训练", + "train.title": "训练", + "train.variants": "将测试 {n} 种组合", + "train.variants_capped": "请求了 {n} 种组合,将测试前 {cap} 种", + "trial.complete": "完成", + "trial.failed": "失败", + "trial.pruned": "已剪枝", + "tune.apply": "应用到模型配置", + "tune.best": "最佳参数", + "tune.duration": "用时", + "tune.intro": "用 Optuna TPE 搜索训练设置:每次试验只训练几步并报告损失。", + "tune.loss": "探测损失", + "tune.note": "短程训练后的探测损失,只用于排序,不代表最终质量。", + "tune.start": "开始搜索", + "tune.stop": "停止搜索", + "tune.title": "自动调参(Optuna TPE)", + "tune.trial": "试验", + "tune.trials": "试验", + "ui.access_tip.lan": "你通过局域网访问。“上传…”会把文件传到服务所在电脑的 uploads 文件夹,再使用那里的路径;“浏览…”列出的是服务所在电脑上的文件。", + "ui.access_tip.lan_local": "你在服务所在的电脑上打开,无需登录;“上传…”会打开系统文件管理器并直接使用原路径。局域网内其他设备需要访问密钥才能登录。", + "ui.access_tip.local_only": "界面只监听本机(127.0.0.1),其他设备无法打开,也无需登录。启动时加 --lan 可开放局域网访问。", + "ui.apply": "应用", + "ui.backend": "后端", + "ui.browse": "浏览…", + "ui.busy": "同类任务正在运行", + "ui.cancel": "取消", + "ui.chart_view": "图表", + "ui.clear": "清空", + "ui.close": "关闭", + "ui.copy": "复制", + "ui.empty": "暂无内容", + "ui.error": "错误", + "ui.from_model": "沿用模型文件", + "ui.hide_advanced": "隐藏高级选项", + "ui.invalid": "请检查标出的字段", + "ui.key": "访问密钥", + "ui.lan_local": "本机访问 · 局域网已开放", + "ui.language": "语言", + "ui.load": "加载", + "ui.loading": "加载中…", + "ui.local_only": "仅本机访问,无需登录", + "ui.log": "日志", + "ui.login": "登录", + "ui.login_blocked": "失败次数过多,请 5 分钟后再试。", + "ui.login_failed": "密钥错误", + "ui.login_needed": "此工作台需要服务器上设置的访问密钥。", + "ui.logout": "退出登录", + "ui.no": "否", + "ui.none": "无", + "ui.path": "路径", + "ui.phase": "阶段", + "ui.raw_json": "原始 JSON", + "ui.refresh": "刷新", + "ui.remote_auth": "远程访问,已登录", + "ui.reset": "恢复默认", + "ui.result": "结果", + "ui.run": "运行", + "ui.save": "保存", + "ui.saved": "已保存", + "ui.scan": "扫描", + "ui.sections": "功能分区", + "ui.show_advanced": "显示高级选项", + "ui.skip": "跳到正文", + "ui.start": "开始", + "ui.started": "开始时间", + "ui.state": "状态", + "ui.step": "步", + "ui.stop": "停止", + "ui.table_view": "表格", + "ui.theme": "主题", + "ui.theme.dark": "深色", + "ui.theme.light": "浅色", + "ui.theme.system": "跟随系统", + "ui.time": "时间", + "ui.upload": "上传…", + "ui.value": "数值", + "ui.yes": "是" +} diff --git a/chronos/webui/i18n/zh-Hant.json b/chronos/webui/i18n/zh-Hant.json new file mode 100644 index 0000000..cc80fe3 --- /dev/null +++ b/chronos/webui/i18n/zh-Hant.json @@ -0,0 +1,943 @@ +{ + "app.subtitle": "循環深度 MoE · 延遲載入專家 · 推測解碼", + "app.title": "Chronos 工作台", + "bench.better": "較佳者", + "bench.higher": "越高越好", + "bench.intro": "以 benchmark_compare.py 量測 Chronos 的參數量、記憶體與解碼速度;外部 dense 基線的比較為可選。", + "bench.lower": "越低越好", + "bench.measured_note": "由 benchmark_compare.py 在本機實測。", + "bench.metric": "指標", + "bench.none": "尚無結果。執行基準測試後產生。", + "bench.params": "參數量", + "bench.ram_infer": "推論記憶體", + "bench.ram_model": "模型記憶體", + "bench.ram_train": "訓練記憶體", + "bench.run": "執行基準測試", + "bench.title": "基準測試:Chronos 與 dense 基線", + "bench.tps": "解碼 token/秒", + "bench.unavailable": "目前安裝中沒有 benchmark_compare.py。", + "choice.absorbed": "吸收", + "choice.adaptive": "自適應", + "choice.aggressive": "積極", + "choice.all": "全部區塊", + "choice.alternate": "隔塊", + "choice.auto": "自動", + "choice.balanced": "平衡", + "choice.block": "整個區塊", + "choice.cluster": "按叢集", + "choice.cluster_locality_mode.segment": "按文件(segment)", + "choice.cluster_locality_mode.window": "固定窗口(window)", + "choice.compare": "延遲載入與全記憶體比較", + "choice.expanded": "展開(參考)", + "choice.expert": "按專家", + "choice.experts": "啟用專家數", + "choice.extreme": "極限", + "choice.fallback_diagnostic": "不載入,僅診斷(fallback_diagnostic)", + "choice.false": "關", + "choice.fixed": "固定", + "choice.fixed_then_adaptive": "先固定,後自適應", + "choice.fullload": "僅全記憶體", + "choice.lookahead_teacher_scope.first": "僅第 0 輪", + "choice.lookahead_teacher_scope.iterations": "所有迭代取平均", + "choice.mla": "全域(MLA)區塊", + "choice.mlp": "僅 MoE/FFN", + "choice.none": "無", + "choice.offload": "僅延遲載入專家", + "choice.on_demand": "按需載入,可略過遲到專家(on_demand)", + "choice.params": "啟用參數量", + "choice.planned": "下次使用規劃器", + "choice.recurrent_attention_mode.first_only": "僅首輪注意力,v2 行為(first_only)", + "choice.recurrent_attention_mode.per_iteration": "每輪注意力,每輪獨立 KV(per_iteration)", + "choice.recurrent_attention_mode.shared_first": "每輪注意力,共用首輪 KV(shared_first)", + "choice.recurrent_dt_param.clamp": "截斷(舊版)", + "choice.recurrent_dt_param.sigmoid": "Sigmoid(無死區)", + "choice.recurrent_order.block": "整塊重複(A B A B)", + "choice.recurrent_order.layer": "逐層重複(A A B B)", + "choice.router_scope.per_iteration": "每輪重新路由(per_iteration)", + "choice.router_scope.shared": "沿用首輪路由(shared)", + "choice.scheduled": "依排程", + "choice.segment": "按文件", + "choice.shared": "共用", + "choice.swa": "滑動視窗區塊", + "choice.sync_on_demand": "同步按需載入(sync_on_demand)", + "choice.true": "開", + "choice.tune.search.lr": "學習率", + "choice.window": "最近使用視窗", + "config.active": "每 token 啟用參數", + "config.compute": "每 token 權重使用量(含循環)", + "config.estimate": "規模與記憶體估算", + "config.estimate_note": "依設定估算,並非實測。", + "config.file": "設定檔", + "config.ignored": "已忽略未知或無效的鍵", + "config.intro": "所有模型設定集中於此。游標停在任一選項上,可查看含義、預設值與建議值。", + "config.kv": "KV 快取", + "config.loaded": "設定已載入", + "config.path_help": "JSON 設定檔。「載入」把它讀入表單,「儲存」把表單寫到這裡。相對路徑從工作台資料夾起算。", + "config.preset": "預設組合", + "config.preset_help": "起始設定。套用後會取代本頁所有欄位,估算隨即更新。", + "config.ram": "專家熱快取", + "config.ssd": "磁碟專家儲存", + "config.total": "總參數量", + "config.tps": "解碼速度粗估(估算)", + "config.train_peak": "訓練峰值記憶體", + "config.train_state": "訓練狀態(權重、梯度、最佳化器)", + "config.virtual_layers": "虛擬層數", + "config.vram": "常駐權重 + KV", + "data.chars": "每條記錄字元數", + "data.dups": "重複比例", + "data.fields": "欄位", + "data.files": "檔案數", + "data.full_scan": "完整掃描", + "data.hist": "記錄長度分布", + "data.intro": "訓練前掃描檔案或資料夾,查看格式、欄位、文字系統與記錄長度。", + "data.max_help": "彙總時最多讀取的記錄數(100 至 500,000)。", + "data.max_records": "掃描記錄數", + "data.median": "中位數", + "data.p95": "95 百分位", + "data.path_help": "檔案或資料夾(jsonl、json、parquet、csv、tsv、txt),每行一個。多個路徑按合併後訓練看到的樣子作為一個資料集掃描。相對路徑從工作台資料夾起算。", + "data.present": "出現比例", + "data.records": "記錄數", + "data.sampled": "前 {n} 筆記錄", + "data.samples": "範例記錄", + "data.scanned": "已掃描", + "data.schema": "辨識出的格式", + "data.script": "文字", + "data.scripts": "文字系統", + "data.share": "比例", + "data.title": "資料集檢查", + "data.type": "類型", + "err.active_experts": "啟用專家數不能超過專家總數", + "err.dialog_open": "已有一個檔案對話框開啟,請先在系統視窗中完成或取消", + "err.models_dir": "找不到模型資料夾", + "err.native_local_only": "系統檔案對話框只能在服務所在的電腦上使用", + "err.native_unavailable": "這台電腦無法開啟系統檔案對話框", + "err.no_files": "這些路徑下沒有可讀取的檔案", + "err.no_out": "請選擇輸出資料夾", + "err.no_paths": "請至少新增一個路徑", + "err.not_found": "找不到", + "err.paging": "分頁方式請選擇 auto、cluster 或 expert", + "err.port": "連接埠無效", + "err.probe_invalid": "懶載入檢查的設定無效", + "err.remote_needs_key": "遠端綁定需要「允許遠端」與 CHRONOS_API_KEY", + "err.target": "請輸入目標規模", + "err.upload_batch": "上傳批次識別碼無效,請重新整理頁面後再試", + "err.upload_disk_full": "服務所在電腦的磁碟剩餘空間不足,已停止上傳", + "err.upload_failed": "上傳中斷,請檢查網路連線後再試", + "err.upload_kind": "此欄位不支援上傳", + "err.upload_name": "檔名或資料夾層級不允許(隱藏項目、「..」或層級過深)", + "err.upload_too_large": "檔案超過上傳上限(--max-upload-mb)", + "err.upload_type": "沒有可上傳的檔案:類型與此欄位不符,或為不允許的可執行檔", + "event.final": "結束", + "event.lazy_probe": "懶載入探測", + "event.phase_end": "階段結束", + "event.phase_start": "階段開始", + "event.resume": "已恢復", + "event.rollback": "回滾", + "event.validation": "驗證", + "export.done": "已匯出", + "export.format": "格式", + "export.intro": "將檢查點寫成 safetensors 或 GGUF 檔案,並附上 chronos serve 載入所需的專家快取配置。", + "export.note": "Ollama 用戶端透過 chronos serve 執行 Chronos 模型(將 OLLAMA_HOST 設為其位址);原版 Ollama 無法執行循環 MoE。", + "export.run": "匯出", + "export.size": "大小(MB)", + "export.tensors": "張量數", + "export.title": "匯出", + "field.accumulation_steps.help": "每次最佳化器更新累積的微批次數。有效批次 = 批次大小 × 累積步數。", + "field.accumulation_steps.label": "梯度累積", + "field.activation_checkpointing.help": "反向傳播時重新計算激活值,以速度換取較低的峰值記憶體。", + "field.activation_checkpointing.label": "激活檢查點", + "field.adaptive_halting.help": "每個 token 的停止機率超過門檻後就不再循環,為簡單 token 節省運算。", + "field.adaptive_halting.label": "自適應停止(ACT)", + "field.alpha.help": "蒸餾混合比例:α × 教師 KL + (1 − α) × CE。", + "field.alpha.label": "α(蒸餾)", + "field.attention_block_size.help": "把長注意力按這麼多個 token 的查詢塊計算,每塊只讀取可見的鍵。0 表示不分塊。結果精確;1024 在全域層與滑動視窗層上整體最快。", + "field.attention_block_size.label": "注意力分塊大小", + "field.batch_size.help": "每個微批次的序列數,受記憶體限制。", + "field.batch_size.label": "批次大小", + "field.beta.help": "偏好訓練中與參考策略 KL 約束的強度。", + "field.beta.label": "β(DPO/GRPO)", + "field.ce_chunk_size.help": "按列分塊、從最後的隱狀態計算語言模型損失,不再產生 [批, 長度, 詞表] 的 logits。0 表示完整 logits。結果精確。", + "field.ce_chunk_size.label": "損失分塊大小", + "field.cluster_locality_clusters.help": "區域性約束使用的專家叢集數。0 表示按專家數自動選擇。", + "field.cluster_locality_clusters.label": "叢集數", + "field.cluster_locality_mode.help": "簇約束以什麼作為一段連續輸入。window:按上面的長度切固定窗口。segment:批次中的每篇文件(按資料自身的分隔符切分,過長的按窗口再切),相似文件會自發學到同一個簇,不依賴標籤或任務標記。", + "field.cluster_locality_mode.label": "局部性單元", + "field.cluster_locality_window.help": "叢集約束作用的片段長度(token)。與典型記錄長度一致時效果最好。", + "field.cluster_locality_window.label": "區域性視窗", + "field.coda_layers.help": "循環之後、輸出頭之前只執行一次的層。", + "field.coda_layers.label": "收尾層", + "field.cpu_budget_percent.help": "自動模式可使用的實體核心比例(百分比)。", + "field.cpu_budget_percent.label": "CPU 預算", + "field.cpu_threads.help": "PyTorch/BLAS 執行緒數。自動按實體核心預算設定。", + "field.cpu_threads.label": "CPU 執行緒", + "field.depth_schedule.help": "訓練時每個 batch 的深度選法:固定、自適應,或先固定暖機再自適應。", + "field.depth_schedule.label": "深度排程", + "field.depth_schedule_warmup_fraction.help": "訓練中先以固定全深度執行的比例,之後才切換為自適應。", + "field.depth_schedule_warmup_fraction.label": "排程暖機比例", + "field.document_masking.help": "打包列:注意力只在每篇文件內部,以分隔 token 為界。", + "field.document_masking.label": "文件遮罩", + "field.draft_exit_depth.help": "作為推測草稿來訓練的循環深度。", + "field.draft_exit_depth.label": "草稿深度(訓練)", + "field.draft_exit_kl_coef.help": "草稿深度出口與全深度輸出之間的額外 KL,用於自推測解碼。0 表示關閉。", + "field.draft_exit_kl_coef.label": "草稿出口 KL", + "field.dropout.help": "訓練時隨機丟棄激活值。資料量大時調低,資料很少時調高。", + "field.dropout.label": "Dropout", + "field.dtype.help": "訓練與推論的數值精度。自動:後端支援時用 bfloat16,否則用 float32。", + "field.dtype.label": "運算精度", + "field.epochs.help": "走訪資料集的次數。設定最大步數時會更早停止。", + "field.epochs.label": "輪數", + "field.export.auto_cluster.help": "以校準資料把常一起使用的專家分到同一頁,延遲載入時讀取的檔案更少。", + "field.export.auto_cluster.label": "建立專家叢集", + "field.export.calibration_data_path.help": "用於統計哪些專家會一起使用的文字,每行一個路徑;多個會自動合併。留空則跳過自動聚類。", + "field.export.calibration_data_path.label": "校準資料", + "field.export.cluster_batch_size.help": "每個校準批次的序列數。", + "field.export.cluster_batch_size.label": "校準批次大小", + "field.export.cluster_device.help": "校準執行使用的裝置。", + "field.export.cluster_device.label": "校準裝置", + "field.export.cluster_max_batches.help": "叢集分析時觀察的批次數。", + "field.export.cluster_max_batches.label": "校準批次數", + "field.export.cluster_max_seq_len.help": "每條校準序列的 token 數。", + "field.export.cluster_max_seq_len.label": "校準長度", + "field.export.config_path.help": "覆寫附屬設定。通常留空。", + "field.export.config_path.label": "設定檔", + "field.export.copy_cache.help": "把延遲載入專家頁一併匯出,部署時無需重建。", + "field.export.copy_cache.label": "複製專家快取", + "field.export.expert_cache_dir.help": "要打包的現有延遲載入專家快取。留空則重新建置。", + "field.export.expert_cache_dir.label": "專家快取", + "field.export.formats.help": "要寫出的容器格式。safetensors 與 GGUF 保留 Chronos 中繼資料,需以 chronos serve 執行。Ollama 用戶端連線到 chronos serve,而非原版 Ollama。", + "field.export.formats.label": "格式", + "field.export.model_path.help": "要匯出的 checkpoint。", + "field.export.model_path.label": "Checkpoint", + "field.export.output_dir.help": "匯出檔案的寫入位置。", + "field.export.output_dir.label": "輸出資料夾", + "field.fallback_mask_prob.help": "訓練時隨機遮蔽專家,讓模型能容忍快取未命中。只影響帶備援的延遲載入推論。", + "field.fallback_mask_prob.label": "缺失模擬", + "field.grad_clip.help": "把全域梯度範數裁剪到此值。0 表示不裁剪。", + "field.grad_clip.label": "梯度裁剪", + "field.halting_threshold.help": "累計停止機率達到此值時 token 停止迭代。越接近 1 跑得越深。", + "field.halting_threshold.label": "停止門檻", + "field.hidden_size.help": "每個 token 向量的寬度。越大能力越強,參數量約按平方成長。必須能被注意力頭數整除。", + "field.hidden_size.label": "隱藏維度", + "field.infer.backend.help": "推論執行環境。自動依 checkpoint 與本機選擇。", + "field.infer.backend.label": "後端", + "field.infer.decode_wait_s.help": "等待預先擷取專家的時間,逾時則按需載入。", + "field.infer.decode_wait_s.label": "解碼等待(秒)", + "field.infer.draft_depth.help": "起草使用的循環深度。", + "field.infer.draft_depth.label": "草稿深度", + "field.infer.gamma.help": "每次驗證前起草的 token 數。", + "field.infer.gamma.label": "草稿長度 γ", + "field.infer.max_tokens.help": "生成 token 數的上限。", + "field.infer.max_tokens.label": "最大新 token 數", + "field.infer.miss_policy.help": "快取未命中時的處理方式。sync_on_demand 的輸出與全記憶體完全一致。", + "field.infer.miss_policy.label": "未命中策略", + "field.infer.mode.help": "比較:延遲載入與全記憶體並排執行;延遲載入:只執行延遲載入專家;全記憶體:全部載入。", + "field.infer.mode.label": "模式", + "field.infer.model_path.help": "要執行的 .pth checkpoint,其附屬設定決定架構。", + "field.infer.model_path.label": "Checkpoint", + "field.infer.paging.help": "自動依 checkpoint:以叢集區域性訓練過則按叢集分頁,否則按專家分頁。", + "field.infer.paging.label": "分頁配置", + "field.infer.ram_load_ratio.help": "保留在記憶體中的專家比例。大於 1.0 時為預先擷取保留餘裕。", + "field.infer.ram_load_ratio.label": "記憶體比例", + "field.infer.raw_prompt.help": "依原樣送出文字,不套用對話範本。", + "field.infer.raw_prompt.label": "原始提示", + "field.infer.residency_decay.help": "規劃器遺忘舊路由證據的速度。", + "field.infer.residency_decay.label": "規劃器衰減", + "field.infer.residency_planner.help": "淘汰未來最晚才會用到的專家,而非最久未用的專家。", + "field.infer.residency_planner.label": "下次使用規劃器", + "field.infer.speculative.help": "以淺深度起草 token,再以全深度驗證,輸出不變。50M 模型實測較慢,因此預設關閉。", + "field.infer.speculative.label": "自推測解碼", + "field.infer.sweep_ram_ratios.help": "依序執行各標準比例,繪製速度、命中率與記憶體的關係。", + "field.infer.sweep_ram_ratios.label": "掃描記憶體比例", + "field.infer.temperature.help": "取樣隨機度。0 為貪婪解碼,結果可重現。", + "field.infer.temperature.label": "溫度", + "field.infer.verify_wait_s.help": "推測驗證階段的同類等待時間。", + "field.infer.verify_wait_s.label": "驗證等待(秒)", + "field.kv_cache_dtype.help": "自動:沿用運算精度;int8:推論 KV 快取按 token 量化(記憶體約減半,誤差很小)。訓練從不量化。", + "field.kv_cache_dtype.label": "KV 快取精度", + "field.kv_latent_dim.help": "MLA 層快取的壓縮鍵值潛在向量寬度。越小越省 KV 記憶體。", + "field.kv_latent_dim.label": "MLA 潛在維度", + "field.kv_quant_group_size.help": "共用一個 int8 縮放係數的通道數。分組越小越精確,體積略大。", + "field.kv_quant_group_size.label": "KV 量化分組", + "field.lambda_balance.help": "促使路由器把 token 平均分配到各專家。", + "field.lambda_balance.label": "負載平衡", + "field.lambda_cluster_locality.help": "訓練同一片段內的 token 留在同一個專家叢集,延遲載入推論就能整叢分頁。0 表示關閉。", + "field.lambda_cluster_locality.label": "叢集區域性", + "field.lambda_iteration_cluster.help": "讓同一 token 的每個循環迭代都落在相同的專家簇內的權重(簇內專家仍可逐迭代不同)。0 表示關閉。推薦 0:開啟簇局部性時,後續迭代用到的簇有 99.5-100% 在第 0 輪已經用過,這一項幾乎無事可做。", + "field.lambda_iteration_cluster.label": "迭代簇局部性", + "field.lambda_lookahead.help": "訓練前瞻路由器預測未來 token 會用到的專家。", + "field.lambda_lookahead.label": "前瞻損失", + "field.lambda_lookahead_topk.help": "額外加權,要求準確預測未來的 top-k 專家。", + "field.lambda_lookahead_topk.label": "前瞻 top-k", + "field.lambda_lookahead_union.help": "要求涵蓋前瞻視窗內專家聯集的權重。", + "field.lambda_lookahead_union.label": "前瞻聯集", + "field.lambda_or.help": "ORPO 中勝算比項的權重。", + "field.lambda_or.label": "λ(ORPO)", + "field.lambda_router_anchor.help": "微調時讓路由保持接近上游 checkpoint。預訓練設為 0。", + "field.lambda_router_anchor.label": "路由錨定", + "field.lambda_router_locality.help": "對相鄰 token 之間路由變化的輕微懲罰。", + "field.lambda_router_locality.label": "路由區域性", + "field.lambda_temporal.help": "獎勵相鄰 token 選擇相同專家,一段文字需要載入的專家更少。", + "field.lambda_temporal.label": "時間區域性", + "field.layer_aware_cache.help": "按虛擬層而非實體層追蹤常駐專家。", + "field.layer_aware_cache.label": "按層快取", + "field.learning_rate.help": "最佳化器的峰值步長。規劃器會按模型規模給出建議;微調時調低。", + "field.learning_rate.label": "學習率", + "field.log_interval.help": "每 N 步寫一行指標。", + "field.log_interval.label": "日誌間隔", + "field.lookahead_input_detach.help": "前瞻路由讀取不帶梯度的隱狀態副本,其損失只訓練路由本身。在中英資料上實測影響不大。", + "field.lookahead_input_detach.label": "前瞻輸入斷梯度", + "field.lookahead_steps.help": "前瞻路由為未來多少個 token 預測專家,以便在用到之前預先擷取。", + "field.lookahead_steps.label": "前瞻步數", + "field.lookahead_teacher_scope.help": "前瞻路由器學習預測哪一種路由。first:只取第 0 輪迭代。iterations:取該層所有迭代的平均,預取因此也涵蓋更深迭代需要的專家。推薦 first:前瞻頭在每一輪迭代上都已為 0.97 的 token 選對了簇。", + "field.lookahead_teacher_scope.label": "前瞻教師", + "field.max_gen_len.help": "每次 GRPO 取樣生成的 token 數。", + "field.max_gen_len.label": "取樣長度", + "field.max_inference_depth.help": "推論時的最大迭代次數。通常等於訓練深度;超過訓練深度未經驗證。", + "field.max_inference_depth.label": "推論深度", + "field.max_position_embeddings.help": "旋轉位置編碼預備的最長序列。只有超長上下文才需要修改。", + "field.max_position_embeddings.label": "最大位置數", + "field.max_resident_experts.help": "每層記憶體中保留專家數的硬上限。留空由規劃器決定。", + "field.max_resident_experts.label": "最大常駐專家", + "field.max_seq_len.help": "每條訓練序列的 token 數。在混合注意力下記憶體約線性成長。", + "field.max_seq_len.label": "序列長度", + "field.max_steps.help": "達到此最佳化器步數後停止。0 表示不設上限(跑完所有輪數)。", + "field.max_steps.label": "最大步數", + "field.min_recurrent_depth.help": "深度排程或提前退出允許的最低深度。設為 1 時簡單 token 一輪即可退出。", + "field.min_recurrent_depth.label": "最小深度", + "field.mla_cache_rope.help": "額外快取旋轉鍵部分,以 KV 記憶體換取解碼速度。", + "field.mla_cache_rope.label": "快取 RoPE 鍵", + "field.mla_decode.help": "展開:參考路徑。吸收:把投影折入查詢(每步運算更少)。自動會混用兩條路徑,實測有微小 logit 偏差,因此需手動開啟。", + "field.mla_decode.label": "MLA 解碼路徑", + "field.mla_upproj_recompute.help": "只保留潛向量,按注意力塊重建 K 與 V。結果精確,但在 64k 實測沒有省記憶體,所以預設關閉。", + "field.mla_upproj_recompute.label": "MLA 上投影重算", + "field.modalities.help": "額外的輸入編碼器,以逗號分隔(image、audio)。純文字模型留空,資料集會自動偵測。", + "field.modalities.label": "模態", + "field.moe_chunk_tokens.help": "按這個大小分塊把 token 分發給專家,每塊在反向傳播時重算。0 表示一次性分發。結果精確。", + "field.moe_chunk_tokens.label": "MoE 分塊 token 數", + "field.moe_intermediate_size.help": "每個專家前饋網路的隱藏寬度。0 表示按隱藏維度推導。", + "field.moe_intermediate_size.label": "專家 FFN 寬度", + "field.num_attention_heads.help": "查詢頭數。隱藏維度必須能被它整除。", + "field.num_attention_heads.label": "注意力頭數", + "field.num_experts.help": "每個 MoE 層的路由專家數。增加專家能擴充容量而不增加每 token 運算量;專家也是延遲載入的單位。", + "field.num_experts.label": "專家數", + "field.num_experts_per_tok.help": "每個 token 使用的專家數。top-2 讓路由器能從損失中學習;top-1 需關閉 norm_topk_prob。", + "field.num_experts_per_tok.label": "啟用專家數(top-k)", + "field.num_generations.help": "GRPO 對每個提示比較的樣本數。", + "field.num_generations.label": "每題取樣數", + "field.num_hidden_layers.help": "checkpoint 中實際儲存的層數(前置層 + 循環組 + 收尾層)。循環會重複使用這些層,所以虛擬深度可以更大。", + "field.num_hidden_layers.label": "實體層數", + "field.num_key_value_heads.help": "滑動視窗層分組查詢注意力的鍵值頭數。越少 KV 快取越小。", + "field.num_key_value_heads.label": "KV 頭數", + "field.num_shared_experts.help": "每個 token 都會經過的常開專家,始終常駐記憶體。", + "field.num_shared_experts.label": "共用專家", + "field.num_workers.help": "資料載入器的工作程序數。自動按平台選擇安全的數量。", + "field.num_workers.label": "資料載入程序", + "field.optimizer_page_dir.help": "分頁最佳化器狀態的存放資料夾。請使用本機高速 SSD。", + "field.optimizer_page_dir.label": "最佳化器頁面資料夾", + "field.optimizer_paging.help": "不活躍專家的最佳化器狀態存到磁碟。", + "field.optimizer_paging.label": "分頁最佳化器", + "field.page_size_mb.help": "單一最佳化器頁面檔的大小,單位 MB。", + "field.page_size_mb.label": "頁面大小", + "field.pinned_memory_max_fraction.help": "用於鎖頁專家緩衝區的系統記憶體最大比例。", + "field.pinned_memory_max_fraction.label": "鎖頁記憶體占比", + "field.plan.active_mode.help": "以啟用專家數或啟用參數量設定每 token 預算。", + "field.plan.active_mode.label": "啟用預算方式", + "field.plan.active_value.help": "每 token 啟用專家數,或啟用參數量(百萬)。", + "field.plan.active_value.label": "啟用預算", + "field.plan.data_paths.help": "規劃器量測這些檔案或資料夾,以決定 token 數、序列長度與視窗,每行一個。", + "field.plan.data_paths.label": "資料集", + "field.plan.depth.help": "每個循環組的迭代次數。", + "field.plan.depth.label": "循環深度", + "field.plan.memory_saving.help": "以速度換取記憶體的力道(int8 KV、共用路由、檢查點)。", + "field.plan.memory_saving.label": "省記憶體程度", + "field.plan.num_experts.help": "每個 MoE 層的路由專家數。", + "field.plan.num_experts.label": "專家數", + "field.plan.ram_gb.help": "規劃時假定的記憶體。留空則偵測本機。", + "field.plan.ram_gb.label": "記憶體(GB)", + "field.plan.seq_len.help": "留空則從資料集分析結果推導。", + "field.plan.seq_len.label": "序列長度", + "field.plan.target_m.help": "總參數量,單位百萬。", + "field.plan.target_m.label": "目標規模(M)", + "field.plan.token_budget_b.help": "預訓練 token 數,單位十億。留空:走訪一遍資料。", + "field.plan.token_budget_b.label": "Token 預算(B)", + "field.plan.use_moe.help": "規劃 MoE 模型;關閉則規劃稠密模型。", + "field.plan.use_moe.label": "混合專家", + "field.plan.vocab_size.help": "留空則從分詞器報告讀取;沒有報告時使用 32768 和內建的通用 32k 分詞器。", + "field.plan.vocab_size.label": "詞彙表", + "field.ponder_loss_coef.help": "對期望迭代次數的懲罰。越高越促使模型提早停止。", + "field.ponder_loss_coef.label": "思考損失", + "field.prefetch_depth.help": "預先擷取器提前載入預測專家的距離。0 表示不預先擷取。", + "field.prefetch_depth.label": "預先擷取深度", + "field.prelude_layers.help": "循環之前只執行一次的層。前瞻路由讀取它們的輸出。", + "field.prelude_layers.label": "前置層", + "field.probe.backends.help": "要測試的執行環境。每個後端各有一份全記憶體參考。", + "field.probe.backends.label": "探針後端", + "field.probe.decode_wait_s.help": "解碼步驟等待預先擷取專家的時間,逾時則按需載入。", + "field.probe.decode_wait_s.label": "解碼等待(秒)", + "field.probe.draft_depth.help": "推測變體中起草 token 使用的循環深度。", + "field.probe.draft_depth.label": "草稿深度", + "field.probe.enabled.help": "每次驗證後,以延遲載入專家解碼剛儲存的 checkpoint,並與全記憶體比較:速度、命中率與 token 一致性。探針在低優先序子程序中對 checkpoint 副本執行。", + "field.probe.enabled.label": "延遲載入探針", + "field.probe.gamma.help": "推測變體中每次驗證前起草的 token 數。", + "field.probe.gamma.label": "草稿長度 γ", + "field.probe.max_new_tokens.help": "每條提示貪婪解碼的 token 數。越多速率越穩定,探針耗時也越長。", + "field.probe.max_new_tokens.label": "每條提示 token 數", + "field.probe.max_variants.help": "測試組合數的上限,超出部分標記為已截斷。", + "field.probe.max_variants.label": "組合上限", + "field.probe.miss_policies.help": "Torch 快取未命中時的行為。sync_on_demand 載入並等待(輸出完全一致);on_demand 可能略過遲到的專家;fallback_diagnostic 從不載入(最差情況)。", + "field.probe.miss_policies.label": "未命中策略", + "field.probe.paging.help": "自動依模型的訓練方式(啟用叢集區域性損失時按叢集分頁)。加入按專家可比較逐專家分頁。", + "field.probe.paging.label": "分頁配置", + "field.probe.ram_ratios.help": "同時允許常駐記憶體的專家占比。越低越省記憶體,未命中越多。", + "field.probe.ram_ratios.label": "記憶體比例", + "field.probe.residency.help": "MLX 淘汰策略:下次使用規劃器,或一般的最近使用視窗。", + "field.probe.residency.label": "常駐策略", + "field.probe.residency_decay.help": "下次使用規劃器遺忘舊路由證據的速度。", + "field.probe.residency_decay.label": "規劃器衰減", + "field.probe.speculative.help": "同時測試搭配延遲載入專家的自推測解碼。", + "field.probe.speculative.label": "推測變體", + "field.probe.verify_wait_s.help": "推測驗證階段的同類等待時間。", + "field.probe.verify_wait_s.label": "驗證等待(秒)", + "field.ram_budget_mb.help": "延遲載入專家快取可用的記憶體,單位 MB。留空則改用記憶體比例。", + "field.ram_budget_mb.label": "記憶體預算", + "field.recompute_policy.help": "開啟檢查點時重算哪些區塊:全部、僅全域(MLA)區塊、僅滑動視窗區塊,或隔塊重算。", + "field.recompute_policy.label": "重算的區塊", + "field.recompute_scope.help": "block:重算整個區塊(最省記憶體)。mlp:只重算每個區塊的 MoE/FFN,保留注意力結果,耗時較少。", + "field.recompute_scope.label": "重算範圍", + "field.recurrent_attention_mode.help": "循環內注意力的執行方式。shared_first:每輪都做注意力,K/V 取第 0 輪(快取精確,KV 不隨深度成長)。per_iteration:每輪一份 KV(D 倍 KV)。first_only:v2 行為。", + "field.recurrent_attention_mode.label": "循環注意力", + "field.recurrent_depth.help": "訓練時每個循環組的迭代次數。虛擬層數 = 前置 + 組數 × 深度 + 收尾。", + "field.recurrent_depth.label": "訓練深度", + "field.recurrent_depth_jitter.help": "在排程深度附近隨機波動,讓模型學會在多個深度退出。", + "field.recurrent_depth_jitter.label": "深度抖動", + "field.recurrent_distill_coef.help": "讓淺層出口學習全深度的預測,提高推測接受率與提前退出品質。", + "field.recurrent_distill_coef.label": "深度蒸餾", + "field.recurrent_dt_init.help": "學習到的循環步長 dt 的起始值,所有循環組相同。一次迭代是一個歐拉步,所以 深度 × dt 就是積分時程 T。規劃器取 dt = min(0.5, 2 / 深度),即固定 T = 2:深度 4 為 0.5,深度 8 為 0.25。15M 模型實測(每組一個種子):深度 4 時 dt 在 0.2 到 0.5 之間損失持平;深度 8 時 dt 0.25 優於 0.5,而從 0.0625 起步則差得多。T = 2 是安全的起點,不是擬合出的最優:從這裡起步的 sigmoid 實驗最終停在 T 約 1.2。核心預設值仍為 0.25。", + "field.recurrent_dt_init.label": "初始步長", + "field.recurrent_dt_max.help": "dt 的上界。1.0 表示一次迭代把整個區塊的更新量加到殘差流上。推薦以 1.0 作為上界;深度 4 和深度 8 下,dt 固定為 1.0 都比 0.5 差。", + "field.recurrent_dt_max.label": "最大步長", + "field.recurrent_dt_min.help": "dt 的下界。使用 clamp 時,dt 到達下界就不再學習;預設 0.05 下,深度 4 和深度 8 的實測中 dt 都塌縮到了這個下界。推薦 0.05,並搭配 sigmoid 參數化,使 dt 在 [dt_min, dt_max] 內始終可學習;15M 實測中學到的 dt 在 0.14 到 0.30 之間。", + "field.recurrent_dt_min.label": "最小步長", + "field.recurrent_dt_param.help": "循環步長 dt 的儲存方式。clamp:dt = clamp(w, dt_min, dt_max);w 超出範圍後梯度為零,掉到 dt_min 以下的 dt 再也回不來。sigmoid:dt = dt_min + (dt_max - dt_min) * sigmoid(w);梯度不會消失,dt 仍可調整。兩者都從設定的初始 dt 開始。15M 模型實測(每組一個種子):clamp 預設值會讓 dt 塌縮到 0.05 的下界,同一步數下比健康的 dt 更差;sigmoid 的 dt 能繼續移動,停在損失持平的位置。規劃器推薦 sigmoid。", + "field.recurrent_dt_param.label": "步長參數化", + "field.recurrent_enabled.help": "讓中間的共用層組對每個 token 執行多次,用少量權重得到更深網路的效果。", + "field.recurrent_enabled.label": "循環深度", + "field.recurrent_groups.help": "前置層與收尾層之間組成循環組的層數。留空則按 層數 − 前置 − 收尾 推導。", + "field.recurrent_groups.label": "循環組數", + "field.recurrent_later_groups.help": "僅區塊順序有效:第一輪之後的循環迭代只運行區塊內前 N 層(0 表示全部)。層呼叫更少,更深的迭代更便宜,也會存取更少的專家頁。需要 shared_first 或 first_only 注意力模式。推薦 0(完整區塊)。15M 實測中 4 層只跑 2 層時,每秒步數約為 1.3 倍,每步訓練損失最多高 0.055。不要設為 1:只剩一層自循環就不再是區塊循環。", + "field.recurrent_later_groups.label": "後續迭代層數", + "field.recurrent_later_topk.help": "第一輪之後的循環迭代中每個 token 使用的專家數(0 表示與第一輪相同)。共享專家始終運行。較小的值讓更深的迭代更便宜,也會載入更少的專家頁。推薦 0:15M 實測中改為 1 個專家使驗證 CE 從 4.543 升到 4.600,速度沒有提升。", + "field.recurrent_later_topk.label": "後續迭代 top-k", + "field.recurrent_order.help": "循環的執行順序。layer:每個循環層連續重複 depth 次。block:整組循環層一起重複,第 0 輪就是普通的單深度前向,後續輪次在其上精煉。計算方式不同,不能與 layer 順序的檢查點互換。15M 模型實測(每組一個種子):步長可訓練時,同一步數下 block 的損失更低;步長固定為 1.0 時,layer 在後期更好。規劃器推薦 block。", + "field.recurrent_order.label": "循環順序", + "field.recurrent_stability_coef.help": "保持循環更新收縮,避免多次迭代後漂移或發散。", + "field.recurrent_stability_coef.label": "穩定性損失", + "field.recurrent_strategy.help": "訓練時循環深度分桶的取樣策略。", + "field.recurrent_strategy.label": "深度策略", + "field.reset_lookahead_at_documents.help": "留空則跟隨上面的路由開關;true 或 false 單獨設定前瞻項。", + "field.reset_lookahead_at_documents.label": "文件邊界重置前瞻", + "field.reset_router_at_documents.help": "打包列:時間局部性與局部性損失跳過跨文件邊界的 token 對。", + "field.reset_router_at_documents.label": "文件邊界重置路由", + "field.reward_spec.help": "toy 使用內建獎勵,或 lm:/path/to/reward-model[,device=cuda]。", + "field.reward_spec.label": "獎勵(GRPO)", + "field.rope_dim.help": "MLA 層每個頭中攜帶旋轉位置資訊的維度數。", + "field.rope_dim.label": "RoPE 維度", + "field.rope_theta.help": "旋轉位置編碼的基礎頻率。值越大,長上下文的位置解析度越好。", + "field.rope_theta.label": "RoPE 基數", + "field.router_scope.help": "per_iteration:每輪循環重新路由。共用:沿用第 0 輪的路由,用到的專家更少,更適合延遲載入。", + "field.router_scope.label": "路由範圍", + "field.save_dir.help": "checkpoint 及其 .config.json 附屬檔的寫入位置。", + "field.save_dir.label": "Checkpoint 資料夾", + "field.save_interval.help": "每 N 步儲存(並驗證)一次。", + "field.save_interval.label": "儲存間隔", + "field.serve.allow_remote.help": "監聽非迴路位址。伺服器環境中必須設定 CHRONOS_API_KEY,用戶端須附上此金鑰。", + "field.serve.allow_remote.label": "允許遠端存取", + "field.serve.device.help": "服務使用的執行環境。", + "field.serve.device.label": "裝置", + "field.serve.dtype.help": "服務使用的精度。", + "field.serve.dtype.label": "精度", + "field.serve.host.help": "監聽的位址。127.0.0.1 只允許本機存取。", + "field.serve.host.label": "監聽位址", + "field.serve.kv_cache_dtype.help": "覆寫 KV 儲存方式。int8 約減半 KV 記憶體;留空保留模型設定。", + "field.serve.kv_cache_dtype.label": "KV 快取精度", + "field.serve.lazy_experts.help": "專家存放在 SSD 上並按需換入,透過 Ollama 協定呼叫時記憶體同樣維持較低。", + "field.serve.lazy_experts.label": "延遲載入專家", + "field.serve.max_resident_experts.help": "每層記憶體專家數的硬上限。留空:依記憶體占比推導。", + "field.serve.max_resident_experts.label": "最大常駐專家", + "field.serve.mla_cache_rope.help": "快取旋轉後的鍵:記憶體較多,重新計算較少。", + "field.serve.mla_cache_rope.label": "快取 RoPE 鍵", + "field.serve.mla_decode.help": "覆寫 MLA 解碼路徑。留空保留模型設定。", + "field.serve.mla_decode.label": "MLA 解碼", + "field.serve.models_dir.help": "存放匯出模型的資料夾,每個模型顯示為一個 Ollama 模型名稱。", + "field.serve.models_dir.label": "模型資料夾", + "field.serve.paging.help": "自動依 checkpoint 的訓練方式(按叢集或按專家分頁)。", + "field.serve.paging.label": "分頁配置", + "field.serve.port.help": "TCP 連接埠。11435 可避免與原版 Ollama 的 11434 衝突。", + "field.serve.port.label": "連接埠", + "field.serve.ram_budget_mb.help": "專家記憶體的硬上限。留空:不設上限。", + "field.serve.ram_budget_mb.label": "記憶體預算(MB)", + "field.serve.ram_expert_fraction.help": "允許常駐記憶體的專家比例。", + "field.serve.ram_expert_fraction.label": "記憶體專家占比", + "field.serve.router_scope.help": "覆寫跨迭代的路由沿用方式。留空保留模型設定。", + "field.serve.router_scope.label": "路由範圍", + "field.sliding_window_size.help": "每個滑動視窗層能看到的 token 數。短視窗適合句子級任務,並限制 KV 記憶體。", + "field.sliding_window_size.label": "滑動視窗", + "field.storage_format.help": "磁碟專家儲存的檔案格式。", + "field.storage_format.label": "專家儲存格式", + "field.temperature.help": "GRPO 取樣的溫度。", + "field.temperature.label": "取樣溫度", + "field.temporal_grad_span.help": "每隔這麼多個位置截斷時間局部性損失的梯度鏈。0 表示完整鏈。在中英資料上實測影響不大。", + "field.temporal_grad_span.label": "時間梯度跨度", + "field.tie_word_embeddings.help": "輸入嵌入與輸出頭共用權重。可省下 詞彙表 × 隱藏維度 個參數,小模型幾乎不損失品質。", + "field.tie_word_embeddings.label": "共用嵌入", + "field.tok.fields.help": "要讀取的 JSON 欄位。留空自動辨識 text、conversations 與 pairs。", + "field.tok.fields.label": "文字欄位", + "field.tok.out_dir.help": "tokenizer.json、對話範本與報告的寫入位置。", + "field.tok.out_dir.label": "輸出資料夾", + "field.tok.paths.help": "取樣文字的檔案或資料夾,每行一個。每個來源按各自配額取樣,不做合併。", + "field.tok.paths.label": "來源檔案", + "field.tok.per_source.help": "每個來源檔案的蓄水池取樣數量。", + "field.tok.per_source.label": "每個來源文字數", + "field.tok.temperature.help": "依位元組占比平衡各語言。越低越平均,避免英文擠壓中文。", + "field.tok.temperature.label": "語言溫度", + "field.tok.vocab_size.help": "要學習的 token 數。模型詞彙表需設為相同值。", + "field.tok.vocab_size.label": "詞彙表大小", + "field.tokenizer_path.help": "模型訓練所用的分詞器資料夾(含 tokenizer.json)。留空時使用 checkpoint 內建的分詞器,否則用內建備援分詞器。詞彙表大小必須一致。", + "field.tokenizer_path.label": "分詞器", + "field.train.backend.help": "訓練使用的裝置。自動:Apple 晶片優先 MLX,其次 CUDA、XPU、MPS、CPU。", + "field.train.backend.label": "訓練後端", + "field.train.data_distill.help": "由教師模型評分的文字或對話資料。檔案或資料夾,每行一個;多個會自動合併。留空則沿用第一階段的資料集。", + "field.train.data_distill.label": "蒸餾資料", + "field.train.data_dpo.help": "偏好對資料,含 chosen 與 rejected 回覆。檔案或資料夾,每行一個;多個會自動合併。留空則沿用第一階段的資料集。", + "field.train.data_dpo.label": "DPO資料", + "field.train.data_grpo.help": "用於獎勵 rollout 的 prompt 資料。檔案或資料夾,每行一個;多個會自動合併。留空則沿用第一階段的資料集。", + "field.train.data_grpo.label": "GRPO資料", + "field.train.data_orpo.help": "偏好對資料,含 chosen 與 rejected 回覆,格式同 DPO。檔案或資料夾,每行一個;多個會自動合併。留空則沿用第一階段的資料集。", + "field.train.data_orpo.label": "ORPO資料", + "field.train.data_path.help": "第一階段的資料集:JSONL、JSON、Parquet、CSV、TSV 或 TXT 檔案,或包含這些檔案的資料夾,每行一個。多個資料集會在執行目錄中合併為一個 JSONL 檔案。留空則執行合成冒煙測試。", + "field.train.data_path.label": "資料集", + "field.train.data_sft.help": "對話資料,含 conversations(user / assistant 輪次)。檔案或資料夾,每行一個;多個會自動合併。留空則沿用第一階段的資料集。", + "field.train.data_sft.label": "監督微調資料", + "field.train.init_weight.help": "起始 checkpoint。留空:預訓練隨機初始化,後續階段接上一階段。", + "field.train.init_weight.label": "起始權重", + "field.train.max_steps.help": "達到此最佳化器步數後停止。0 表示跑完設定的輪數。", + "field.train.max_steps.label": "最大步數", + "field.train.sample_prompt.help": "訓練過程中定期續寫的提示詞,方便查看進度。留空使用階段預設值。", + "field.train.sample_prompt.label": "取樣提示詞", + "field.train.stages.help": "依序執行,每個階段從上一階段的 checkpoint 開始。常用路徑是 預訓練 → SFT。", + "field.train.stages.label": "階段", + "field.train.teacher_path.help": "僅用於蒸餾:學生模型要擬合其輸出的模型。", + "field.train.teacher_path.label": "教師 checkpoint", + "field.train.val_ratio.help": "保留作驗證的記錄比例。每次驗證也會觸發延遲載入探針。", + "field.train.val_ratio.label": "驗證集比例", + "field.training_paging.help": "訓練時把不活躍的專家移出記憶體。較慢,但能訓練超過記憶體容量的模型。", + "field.training_paging.label": "分頁訓練", + "field.tune.data_path.help": "自動調參啟動前會檢查這些資料集,每行一個。目前的試訓使用隨機 token,所以這些資料不影響試訓損失。", + "field.tune.data_path.label": "資料集", + "field.tune.n_trials.help": "Optuna 嘗試的設定數量。", + "field.tune.n_trials.label": "試驗次數", + "field.tune.probe_steps.help": "每次試驗的訓練步數;表現差的試驗會被提前剪枝。", + "field.tune.probe_steps.label": "每次試驗步數", + "field.tune.search.help": "搜尋可以調整的參數。評分是探針模型的交叉熵。選中任一循環參數時,探針改為循環模型(使用配置的深度,區塊內 4 層);循環參數的結果只作粗篩。recurrent_later_topk 和 recurrent_later_groups 節省的是時間而不是損失,請對照日誌裡每次試驗的步時。", + "field.tune.search.label": "搜尋參數", + "field.use_hybrid_attention.help": "MLA(壓縮潛在 KV)與滑動視窗層交替,長上下文時 KV 快取仍然很小。", + "field.use_hybrid_attention.label": "混合注意力", + "field.vocab_size.help": "token id 的數量,必須等於分詞器詞彙表大小,否則 id 會超出嵌入表。", + "field.vocab_size.label": "詞彙表大小", + "field.vram_budget_gb.help": "專家快取可用的加速器記憶體,單位 GB。", + "field.vram_budget_gb.label": "顯示記憶體預算", + "field.weight_decay.help": "AdamW 解耦權重衰減。", + "field.weight_decay.label": "權重衰減", + "group.attention": "注意力與 KV 快取", + "group.autotune": "自動調參", + "group.benchmark": "基準測試", + "group.export": "匯出", + "group.inference": "生成", + "group.lazy": "延遲載入專家", + "group.memory": "記憶體與延遲載入專家", + "group.model": "模型形狀", + "group.moe": "混合專家", + "group.objectives": "訓練目標", + "group.optimizer": "最佳化器", + "group.planner": "自動規劃", + "group.probe": "驗證時的延遲載入探針", + "group.recurrent": "循環深度", + "group.rl": "偏好與強化學習階段", + "group.runtime": "執行環境", + "group.serve": "Ollama / OpenAI 服務", + "group.speculative": "推測解碼", + "group.stage_data": "後續階段的資料", + "group.tokenizer": "分詞器建置", + "group.train": "訓練任務", + "infer.arch_note": "架構讀取自檢查點的設定檔;「模型」頁只補上檔案中缺少的項目。", + "infer.col.cache_hit_rate": "快取命中率", + "infer.col.cold_miss_predict_hit_rate": "冷未命中已預測", + "infer.col.decode_time_s": "解碼(秒)", + "infer.col.fallback_weight_rate": "回退權重", + "infer.col.prediction_hit_rate": "預測命中率", + "infer.col.prefill_time_s": "預填充(秒)", + "infer.col.response_time_s": "回應(秒)", + "infer.col.rss_after_decode_gb": "解碼後 RSS(GB)", + "infer.col.rss_delta_gb": "RSS 變化(GB)", + "infer.col.spec_acceptance_rate": "草稿接受率", + "infer.col.tokens": "token 數", + "infer.col.tokens_per_sec": "token/秒", + "infer.common_prefix": "前 {n} 個字元相同", + "infer.diff": "輸出不同", + "infer.full_output": "全記憶體", + "infer.generate": "生成", + "infer.hit_rates": "命中率", + "infer.intro": "同一個提示分別以懶載入專家與完整記憶體執行,比較輸出、速度、命中率與記憶體。", + "infer.lazy_output": "延遲載入專家", + "infer.measured_note": "在本機針對此提示實測,單次執行,並非平均值。", + "infer.mode": "模式", + "infer.mode.full_dram": "完整記憶體", + "infer.mode.lazy_offload": "懶載入專家", + "infer.output": "輸出", + "infer.prompt": "提示詞", + "infer.prompt_help": "傳送給模型的文字。未開啟「原始提示」時會套用 SFT 對話範本。", + "infer.ram_ratio": "記憶體載入比例", + "infer.same": "輸出完全相同", + "infer.similarity": "相似度", + "infer.stats": "執行統計", + "infer.sweep": "記憶體比例掃描", + "infer.title": "推論", + "io.empty": "尚無指標。在本程序中執行推論或服務時才會出現。", + "io.intro": "本服務程序中推論與服務記錄的專家快取與 IO 計數。", + "io.latest": "最新值", + "io.metric": "指標", + "io.samples": "樣本數", + "io.seconds": "秒", + "io.title": "IO 與快取指標", + "label.estimated": "估算", + "label.measured": "實測", + "label.measured_meta": "實測(meta 裝置計數)", + "metric.active_mem_gb": "活躍", + "metric.balance_loss": "專家均衡", + "metric.chrf": "chrF", + "metric.error": "錯誤", + "metric.eval_s": "評測用時(秒)", + "metric.grad_norm": "梯度範數", + "metric.load_cv": "負載不均(變異係數)", + "metric.locality_loss": "叢集局部性", + "metric.lookahead_loss": "前瞻路由", + "metric.loss": "總損失", + "metric.lr": "學習率", + "metric.peak_mem_gb": "峰值", + "metric.primary_loss": "交叉熵", + "metric.rec_contraction": "收縮率", + "metric.rec_depth_mean": "平均深度", + "metric.rec_early_exit_ratio": "提前退出比例", + "metric.route_entropy": "路由熵", + "metric.state": "狀態", + "metric.temporal_loss": "時間局部性", + "metric.tokens_per_s": "token/秒", + "metric.valid_ce": "驗證交叉熵", + "metric.valid_ppl": "驗證困惑度", + "mon.best": "最佳", + "mon.chart.aux": "輔助損失", + "mon.chart.loss": "訓練損失", + "mon.chart.lr": "學習率", + "mon.chart.memory": "記憶體(GB)", + "mon.chart.optimizer": "梯度範數", + "mon.chart.recurrent": "循環深度", + "mon.chart.routing": "專家路由", + "mon.chart.throughput": "每秒 token 數", + "mon.checkpoints": "Checkpoint", + "mon.eta": "剩餘時間", + "mon.eta_basis.deadline": "按時間預算", + "mon.eta_basis.steps": "按步數進度", + "mon.eta_basis.target_passes": "按資料輪次進度", + "mon.event": "事件", + "mon.events": "事件", + "mon.grad_norm": "梯度範數", + "mon.input": "輸入", + "mon.intro": "即時檢視任一執行資料夾,包括從命令列啟動的長時間訓練。唯讀。", + "mon.log": "訓練日誌", + "mon.loss": "損失", + "mon.lr": "學習率", + "mon.memory": "記憶體", + "mon.no_runs": "尚無執行記錄。請在「訓練」頁開始一次。", + "mon.phase_eta": "預計 {t} 完成", + "mon.phase_note": "每個階段的步數重新計數,因此圖表一次只顯示一個階段。", + "mon.progress": "進度", + "mon.reference": "參考譯文", + "mon.run": "執行", + "mon.samples": "取樣輸出", + "mon.size": "大小", + "mon.stale": "一段時間沒有更新", + "mon.throughput": "每秒 token 數", + "mon.title": "執行監控", + "mon.tokens_seen": "已訓練 token", + "mon.updated": "{s} 秒前更新", + "mon.valid_ce": "驗證 CE", + "mon.validation": "驗證", + "nav.autotune": "自動調參", + "nav.benchmark": "基準測試", + "nav.config": "模型", + "nav.data": "資料", + "nav.export": "匯出", + "nav.inference": "推論", + "nav.io": "IO 指標", + "nav.monitor": "監控", + "nav.serve": "服務", + "nav.tokenizer": "分詞器", + "nav.train": "訓練", + "phase.active": "進行中", + "phase.complete": "已完成", + "phase.pending": "等待中", + "picker.add": "新增所選", + "picker.add_button": "新增…", + "picker.browse_tip": "在頁面內瀏覽服務所在電腦上的資料夾並選取路徑。", + "picker.empty": "這裡沒有符合類型的檔案或資料夾", + "picker.entries": "資料夾內容", + "picker.go": "前往", + "picker.hidden": "顯示隱藏項目", + "picker.multi_hint": "可以新增多個檔案或資料夾,訓練前會自動合併。", + "picker.n_selected": "已選 {n} 項", + "picker.native_fallback": "這台電腦無法開啟系統檔案對話框,已改為上傳方式。", + "picker.native_tip": "開啟系統檔案管理員。檔案不會被複製,直接使用所選的原路徑。", + "picker.pick_file": "請選擇一個檔案", + "picker.place.desktop": "桌面", + "picker.place.documents": "文件", + "picker.place.downloads": "下載", + "picker.place.home": "主目錄", + "picker.place.root": "根目錄(/)", + "picker.place.volumes": "所有磁碟", + "picker.placeholder_multi": "每行一個路徑,或點「新增…」", + "picker.places": "常用位置", + "picker.select": "選擇", + "picker.this_folder": "未選擇項目:將使用目前資料夾({path})", + "picker.title.any": "選擇檔案或資料夾", + "picker.title.checkpoint": "選擇 checkpoint", + "picker.title.config": "選擇設定檔", + "picker.title.data": "選擇資料集(檔案或資料夾)", + "picker.title.dir": "選擇資料夾", + "picker.truncated": "只顯示前 {n} 項;輸入路徑可直接進入更深的目錄", + "picker.up": "上一層資料夾", + "picker.upload_files": "上傳檔案…", + "picker.upload_folder": "上傳資料夾…", + "picker.upload_tip": "用本機的檔案管理員選擇檔案,上傳到服務所在電腦的 uploads 資料夾,並填入上傳後的路徑。", + "picker.uploaded": "已上傳 {n} 個檔案。", + "picker.uploaded_skipped": "已上傳 {n} 個檔案;{skipped} 個類型不符或為隱藏檔案,已略過。", + "picker.uploading": "正在上傳 {done} / {total}…", + "picker.will_merge": "{n} 個路徑將在使用前合併為一個 JSONL 檔案。", + "plan.apply": "使用此方案", + "plan.note": "規劃器會依目標規模、資料與記憶體搜尋設定;訓練前請先檢查。", + "plan.run": "規劃", + "plan.stages": "各階段設定", + "plan.summary": "方案", + "plan.title": "自動規劃", + "plan.tokens": "訓練 token 數", + "preset.b1": "1B(64 GB)", + "preset.b1.summary": "1B MoE,64 個細粒度專家,積極節省記憶體。", + "preset.m200": "200M(32 GB)", + "preset.m200.summary": "通用 200M MoE,均衡節省記憶體,使用舊版 6400 詞表。", + "preset.m50": "50M(16k 詞表)", + "preset.m50.summary": "50M MoE,36 個專家(top-2),配 16k Chronos 分詞器;不啟用省記憶體選項。", + "preset.m500": "500M(32 GB)", + "preset.m500.summary": "500M MoE,積極節省記憶體:int8 KV、共享路由、激活檢查點。", + "preset.tiny": "Tiny(冒煙測試 / CI)", + "preset.tiny.summary": "1.5M 冒煙測試,CPU 上幾分鐘即可訓練完成。", + "probe.accept": "草稿接受率", + "probe.agree": "逐 token 一致率", + "probe.auto_paging": "自動分頁", + "probe.budget": "專家預算", + "probe.c_loads": "載入次數", + "probe.c_rss": "峰值 RSS(GB)", + "probe.c_speed": "解碼速度(token/秒)", + "probe.cluster_loads": "簇載入次數", + "probe.cold_hit": "冷未命中被預測", + "probe.cold_n": "冷未命中預測 / 總數", + "probe.conditions": "貪婪解碼,{n} 條提示,每條 {t} 個 token;實測。", + "probe.decode": "解碼(秒)", + "probe.dtps": "解碼 token/秒", + "probe.evict": "淘汰策略", + "probe.exact": "完全一致", + "probe.group.eff": "效率", + "probe.group.fid": "保真度(對照全記憶體參考)", + "probe.group.hit": "命中率", + "probe.group.paging": "分頁與載入", + "probe.history": "命中率與一致率隨訓練的變化", + "probe.history_note": "每次驗證後執行一次;步數在每個階段重新計數,因此只繪製最新階段。", + "probe.hit": "常駐命中率", + "probe.hits": "命中 / 未命中", + "probe.ideal": "理想啟用專家數", + "probe.load_s": "載入耗時(秒)", + "probe.loads": "按需載入次數", + "probe.none": "尚無探針結果。每次驗證後會執行一次。", + "probe.pages": "分頁 · 頁數", + "probe.pred_hit": "預測命中率", + "probe.pred_n": "預測命中 / 總數", + "probe.prefill": "預填充(秒)", + "probe.prefix": "最短一致前綴", + "probe.ref_row": "全記憶體參考 · {backend}", + "probe.ref_tokens": "參考 token 數", + "probe.reference": "全記憶體參考", + "probe.rss": "峰值 RSS(GB)", + "probe.skip.busy": "上一次探測仍在執行", + "probe.skip.dense": "稠密模型,沒有可分頁的路由專家", + "probe.skip.no_checkpoint": "磁碟上還沒有檢查點", + "probe.skip.superseded": "已被第 {step} 步的新驗證取代", + "probe.skip.writing": "檢查點仍在寫入", + "probe.skipped": "已略過:{reason}", + "probe.sync": "同步 SSD 讀取", + "probe.title": "延遲載入專家探針", + "probe.tps": "Token/秒", + "probe.trained_clusters": "訓練時啟用叢集局部性", + "probe.variant": "組合", + "probe.vs_full": "相對全記憶體速度", + "probe.wait": "預先擷取等待(秒)", + "rule.clusters_auto": "0 = 依專家數推導", + "rule.equals_recurrent_depth": "等於訓練深度", + "rule.loopback": "127.0.0.1(僅本機)", + "rule.sync_is_exact": "sync_on_demand:輸出與全記憶體完全一致", + "rule.vocab_matches_tokenizer": "等於分詞器詞彙表大小", + "rule.window_median_record": "最接近記錄長度中位數的 2 的冪次(未知時為 32)", + "serve.auth_off": "未設金鑰:僅本機可存取。", + "serve.auth_on": "用戶端必須附帶 API 金鑰。", + "serve.hint": "連線方式:OLLAMA_HOST={addr} ollama run ", + "serve.intro": "啟動 chronos serve:Ollama 與 OpenAI 用戶端連線到它,專家維持懶載入。", + "serve.remote_warning": "綁定到本機以外的位址需要勾選「允許遠端」,並在 CHRONOS_API_KEY 中設定金鑰;沒有金鑰時服務拒絕啟動。", + "serve.running": "服務位址:{url}", + "serve.start": "啟動服務", + "serve.stop": "停止服務", + "serve.stopped": "服務已停止", + "serve.title": "Ollama / OpenAI 相容服務", + "source.code": "預設值", + "source.measured": "實測", + "source.planner": "自適應規劃器", + "source.rule": "規則", + "stage.distill": "蒸餾", + "stage.dpo": "DPO", + "stage.grpo": "GRPO", + "stage.orpo": "ORPO", + "stage.pretrain": "預訓練", + "stage.sft": "監督微調", + "state.checkpointing": "正在儲存 checkpoint", + "state.done": "完成", + "state.error": "錯誤", + "state.evaluating": "評估中", + "state.failed": "失敗", + "state.finished": "已完成", + "state.idle": "閒置", + "state.loading": "載入中", + "state.paused": "已暫停", + "state.pending": "等待中", + "state.running": "執行中", + "state.stale": "近期無更新", + "state.starting": "啟動中", + "state.stopped": "已停止", + "state.stopping": "正在停止", + "tip.auto_empty": "留空 = 自動", + "tip.default": "預設值", + "tip.range": "範圍", + "tip.recommended": "建議值", + "tip.source": "來源", + "tok.algorithm": "演算法", + "tok.bucket": "分桶", + "tok.byte_fallback": "位元組備援率", + "tok.chars_per_token": "每 token 字元數", + "tok.compression": "每 token 位元組數", + "tok.elapsed": "建置用時", + "tok.fertility": "每詞 token 數", + "tok.fingerprint": "指紋", + "tok.intro": "以你自己的資料訓練 Chronos 分詞器:抽樣、正規化、位元組回退 BPE,並產生保留集評估報告。", + "tok.out_dir_now": "輸出資料夾", + "tok.progress": "建置進度", + "tok.report": "評估報告", + "tok.report_note": "在未參與分詞器訓練的保留文本上實測。", + "tok.roundtrip": "無損往返", + "tok.texts": "文本數", + "tok.title": "Chronos 分詞器建置", + "tok.vocab_use": "詞彙表使用率", + "train.config_note": "架構來自「模型」頁;套用過自動規劃時,各階段學習率來自規劃結果。", + "train.intro": "使用「模型」頁的設定啟動訓練工作,進度顯示在監控頁。", + "train.jobs": "訓練任務", + "train.open_monitor": "在監控中開啟", + "train.probe_note": "每次驗證後,用延遲載入專家和全記憶體分別解碼剛儲存的 checkpoint。探針以低優先權子程序在副本上執行,不中斷訓練。", + "train.probe_off": "此工作已關閉懶載入檢查。", + "train.probe_title": "每次驗證時檢查延遲載入專家", + "train.run_dir": "執行資料夾", + "train.stage_data_note": "第一階段之後的每個階段讀取各自格式的資料。某一列留空時沿用第一階段的資料集。", + "train.stage_n": "第 {n} 階段", + "train.start": "開始訓練", + "train.started": "訓練已開始", + "train.stop": "停止訓練", + "train.title": "訓練", + "train.variants": "將測試 {n} 種組合", + "train.variants_capped": "要求 {n} 種組合,只測試前 {cap} 種", + "trial.complete": "完成", + "trial.failed": "失敗", + "trial.pruned": "已剪枝", + "tune.apply": "套用到模型設定", + "tune.best": "最佳參數", + "tune.duration": "用時", + "tune.intro": "以 Optuna TPE 搜尋訓練設定:每次試驗只訓練幾步並回報損失。", + "tune.loss": "探測損失", + "tune.note": "短程訓練後的探測損失,只用於排序,不代表最終品質。", + "tune.start": "開始搜尋", + "tune.stop": "停止搜尋", + "tune.title": "自動調參(Optuna TPE)", + "tune.trial": "試驗", + "tune.trials": "試驗", + "ui.access_tip.lan": "你透過區域網路存取。「上傳…」會把檔案傳到服務所在電腦的 uploads 資料夾,再使用那裡的路徑;「瀏覽…」列出的是服務所在電腦上的檔案。", + "ui.access_tip.lan_local": "你在服務所在的電腦上開啟,無需登入;「上傳…」會開啟系統檔案管理員並直接使用原路徑。區域網路內的其他裝置需要存取金鑰才能登入。", + "ui.access_tip.local_only": "介面只監聽本機(127.0.0.1),其他裝置無法開啟,也無需登入。啟動時加上 --lan 可開放區域網路存取。", + "ui.apply": "套用", + "ui.backend": "後端", + "ui.browse": "瀏覽…", + "ui.busy": "同類任務正在執行", + "ui.cancel": "取消", + "ui.chart_view": "圖表", + "ui.clear": "清除", + "ui.close": "關閉", + "ui.copy": "複製", + "ui.empty": "尚無內容", + "ui.error": "錯誤", + "ui.from_model": "沿用模型檔案", + "ui.hide_advanced": "隱藏進階選項", + "ui.invalid": "請檢查標示的欄位", + "ui.key": "存取金鑰", + "ui.lan_local": "本機存取 · 區域網路已開放", + "ui.language": "語言", + "ui.load": "載入", + "ui.loading": "載入中…", + "ui.local_only": "僅本機存取,無需登入", + "ui.log": "日誌", + "ui.login": "登入", + "ui.login_blocked": "失敗次數過多,請 5 分鐘後再試。", + "ui.login_failed": "金鑰錯誤", + "ui.login_needed": "此工作台需要伺服器上設定的存取金鑰。", + "ui.logout": "登出", + "ui.no": "否", + "ui.none": "無", + "ui.path": "路徑", + "ui.phase": "階段", + "ui.raw_json": "原始 JSON", + "ui.refresh": "重新整理", + "ui.remote_auth": "遠端存取,已登入", + "ui.reset": "還原預設", + "ui.result": "結果", + "ui.run": "執行", + "ui.save": "儲存", + "ui.saved": "已儲存", + "ui.scan": "掃描", + "ui.sections": "功能分區", + "ui.show_advanced": "顯示進階選項", + "ui.skip": "跳至內容", + "ui.start": "開始", + "ui.started": "開始時間", + "ui.state": "狀態", + "ui.step": "步", + "ui.stop": "停止", + "ui.table_view": "表格", + "ui.theme": "主題", + "ui.theme.dark": "深色", + "ui.theme.light": "淺色", + "ui.theme.system": "跟隨系統", + "ui.time": "時間", + "ui.upload": "上傳…", + "ui.value": "數值", + "ui.yes": "是" +} diff --git a/chronos/webui/jobs.py b/chronos/webui/jobs.py new file mode 100644 index 0000000..ce10e74 --- /dev/null +++ b/chronos/webui/jobs.py @@ -0,0 +1,195 @@ +"""Background jobs for the Web UI: one registry, two kinds of work. + +* ``SubprocessJob`` – training, benchmark: a child process whose stdout is + kept in a bounded buffer; ``stop`` sends SIGTERM (the train worker turns + that into a clean stage stop), then SIGKILL after a grace period. +* ``ThreadJob`` – inference, export, data scan, planning: a function run on a + thread so the server stays responsive; the result is kept for polling. + +Only one job of each *exclusive* kind runs at a time (two trainings would +fight for the same accelerator); finished jobs are kept for the session. +""" +from __future__ import annotations + +import itertools +import os +import signal +import subprocess +import threading +import time +from collections import deque + +EXCLUSIVE_KINDS = frozenset({"train", "benchmark", "export", "inference"}) + + +class JobBusy(RuntimeError): + """A job of an exclusive kind is already running.""" + + +class _Job: + def __init__(self, job_id: str, kind: str, title: str = ""): + self.id, self.kind, self.title = job_id, kind, title + self.state = "starting" + self.started = time.time() + self.ended: float | None = None + self.lines: deque[str] = deque(maxlen=2000) + self.result = None + self.error = "" + self.meta: dict = {} + self._lock = threading.Lock() + + def log(self, text: str) -> None: + with self._lock: + for line in str(text).splitlines() or [""]: + self.lines.append(line) + + def running(self) -> bool: + return self.state in ("starting", "running", "stopping") + + def view(self, *, log_lines: int = 200, with_result: bool = True) -> dict: + with self._lock: + tail = list(self.lines)[-log_lines:] if log_lines else [] + out = {"id": self.id, "kind": self.kind, "title": self.title, "state": self.state, + "started": self.started, "ended": self.ended, "error": self.error or None, + "log": tail, "meta": self.meta} + if with_result: + out["result"] = self.result + return out + + +class SubprocessJob(_Job): + def __init__(self, job_id: str, kind: str, argv: list[str], *, cwd: str, env: dict | None = None, + title: str = "", on_exit=None): + super().__init__(job_id, kind, title) + self.argv, self.on_exit = argv, on_exit + full_env = dict(os.environ) + full_env.update(env or {}) + full_env.setdefault("PYTHONUNBUFFERED", "1") + self.proc = subprocess.Popen(argv, cwd=cwd, env=full_env, stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, text=True, bufsize=1, + start_new_session=True) + self.state = "running" + self.meta["pid"] = self.proc.pid + threading.Thread(target=self._pump, name=f"job-{job_id}", daemon=True).start() + + def _pump(self) -> None: + assert self.proc.stdout is not None + for line in self.proc.stdout: + self.log(line.rstrip("\n")) + code = self.proc.wait() + self.meta["returncode"] = code + if self.state == "stopping": + self.state = "stopped" + else: + self.state = "finished" if code == 0 else "failed" + if code != 0: + self.error = f"exit code {code}" + self.ended = time.time() + if self.on_exit is not None: + try: + self.result = self.on_exit(self) + except Exception as exc: # a broken result file must not kill the pump + self.error = self.error or f"{type(exc).__name__}: {exc}" + + def stop(self, grace_s: float = 20.0) -> None: + if self.proc.poll() is not None: + return + self.state = "stopping" + try: + self.proc.send_signal(signal.SIGTERM) + except ProcessLookupError: + return + + def _escalate(): + try: + self.proc.wait(timeout=grace_s) + except subprocess.TimeoutExpired: + try: + os.killpg(self.proc.pid, signal.SIGKILL) + except (ProcessLookupError, PermissionError): + self.proc.kill() + + threading.Thread(target=_escalate, daemon=True).start() + + +class ThreadJob(_Job): + def __init__(self, job_id: str, kind: str, fn, *, title: str = ""): + super().__init__(job_id, kind, title) + self.cancel = threading.Event() + self.state = "running" + threading.Thread(target=self._run, args=(fn,), name=f"job-{job_id}", daemon=True).start() + + def _run(self, fn) -> None: + try: + self.result = fn(self) + self.state = "stopped" if self.cancel.is_set() else "finished" + except Exception as exc: + import traceback + self.error = f"{type(exc).__name__}: {exc}" + self.log(traceback.format_exc()) + self.state = "failed" + self.ended = time.time() + + def stop(self, grace_s: float = 0.0) -> None: + if self.running(): + self.cancel.set() + self.state = "stopping" + + +class JobRegistry: + """Creates, finds and stops jobs; enforces one running job per exclusive kind.""" + + def __init__(self, keep: int = 64): + self._jobs: dict[str, _Job] = {} + self._ids = itertools.count(1) + self._lock = threading.Lock() + self.keep = keep + + def _new_id(self, kind: str) -> str: + return f"{kind}-{next(self._ids)}-{int(time.time())}" + + def _check(self, kind: str) -> None: + if kind in EXCLUSIVE_KINDS and any(j.kind == kind and j.running() for j in self._jobs.values()): + raise JobBusy(kind) + + def _add(self, job: _Job) -> _Job: + self._jobs[job.id] = job + done = [j for j in self._jobs.values() if not j.running()] + for old in sorted(done, key=lambda j: j.started)[:-self.keep] if len(done) > self.keep else []: + self._jobs.pop(old.id, None) + return job + + def spawn(self, kind: str, argv: list[str], *, cwd: str, env: dict | None = None, title: str = "", + on_exit=None, meta: dict | None = None) -> _Job: + with self._lock: + self._check(kind) + job = SubprocessJob(self._new_id(kind), kind, argv, cwd=cwd, env=env, title=title, on_exit=on_exit) + job.meta.update(meta or {}) + return self._add(job) + + def run(self, kind: str, fn, *, title: str = "", meta: dict | None = None) -> _Job: + with self._lock: + self._check(kind) + job = ThreadJob(self._new_id(kind), kind, fn, title=title) + job.meta.update(meta or {}) + return self._add(job) + + def get(self, job_id: str) -> _Job: + job = self._jobs.get(job_id) + if job is None: + raise KeyError(job_id) + return job + + def list(self, kind: str | None = None) -> list[dict]: + jobs = [j for j in self._jobs.values() if kind is None or j.kind == kind] + return [j.view(log_lines=0, with_result=False) for j in sorted(jobs, key=lambda j: j.started, reverse=True)] + + def stop(self, job_id: str) -> dict: + job = self.get(job_id) + job.stop() + return job.view(log_lines=0, with_result=False) + + def stop_all(self) -> None: + for job in list(self._jobs.values()): + if job.running(): + job.stop(grace_s=5.0) diff --git a/chronos/webui/native_dialog.py b/chronos/webui/native_dialog.py new file mode 100644 index 0000000..d8f7ffc --- /dev/null +++ b/chronos/webui/native_dialog.py @@ -0,0 +1,128 @@ +"""The operating system's own file dialog, opened by the Web UI server for a browser on the same machine. + +A browser never reveals the real path of a file the user picks, so when the page is opened on the +server's own machine (loopback), the server opens the native dialog itself and returns the chosen +paths. Nothing is copied. Parameters reach the dialog as process arguments or environment variables, +never spliced into script text. + +macOS uses ``osascript`` (``choose file`` / ``choose folder``); Linux uses ``zenity`` or ``kdialog`` +when a display is set; Windows uses PowerShell with ``System.Windows.Forms``. +""" +from __future__ import annotations + +import os +import shutil +import subprocess +import sys +import threading + +TIMEOUT_S = 900 +_lock = threading.Lock() + +_MAC = r'''on run argv + set promptText to item 1 of argv + set startDir to item 2 of argv + set wantFolder to (item 3 of argv) is "folder" + set multi to (item 4 of argv) is "1" + try + set loc to (POSIX file startDir) as alias + on error + set loc to path to home folder + end try + activate + if wantFolder then + set picked to choose folder with prompt promptText default location loc multiple selections allowed multi + else + set picked to choose file with prompt promptText default location loc multiple selections allowed multi + end if + if class of picked is not list then set picked to {picked} + set out to "" + repeat with f in picked + set out to out & (POSIX path of f) & linefeed + end repeat + return out +end run +''' + +_WIN = r'''Add-Type -AssemblyName System.Windows.Forms +if ($env:CHRONOS_PICK_MODE -eq "folder") { + $d = New-Object System.Windows.Forms.FolderBrowserDialog + $d.Description = $env:CHRONOS_PICK_TITLE + if ($env:CHRONOS_PICK_START) { $d.SelectedPath = $env:CHRONOS_PICK_START } + if ($d.ShowDialog() -eq "OK") { [Console]::Out.WriteLine($d.SelectedPath) } else { exit 1 } +} else { + $d = New-Object System.Windows.Forms.OpenFileDialog + $d.Title = $env:CHRONOS_PICK_TITLE + $d.Multiselect = ($env:CHRONOS_PICK_MULTI -eq "1") + if ($env:CHRONOS_PICK_START) { $d.InitialDirectory = $env:CHRONOS_PICK_START } + if ($d.ShowDialog() -eq "OK") { $d.FileNames | ForEach-Object { [Console]::Out.WriteLine($_) } } else { exit 1 } +} +''' + + +class DialogBusy(RuntimeError): + """Another native dialog is already open.""" + + +def backend() -> str | None: + """Which native dialog this machine can show, or ``None``.""" + if sys.platform == "darwin": + return "osascript" if shutil.which("osascript") else None + if sys.platform.startswith("win"): + return "powershell" if shutil.which("powershell") else None + if not (os.environ.get("DISPLAY") or os.environ.get("WAYLAND_DISPLAY")): + return None + for tool in ("zenity", "kdialog"): + if shutil.which(tool): + return tool + return None + + +def _command(tool: str, folder: bool, multiple: bool, start: str, title: str) -> tuple[list[str], str | None, dict]: + env = dict(os.environ) + if tool == "osascript": + return ["osascript", "-", title, start, "folder" if folder else "file", "1" if multiple else "0"], _MAC, env + if tool == "powershell": + env.update(CHRONOS_PICK_MODE="folder" if folder else "file", CHRONOS_PICK_MULTI="1" if multiple else "0", + CHRONOS_PICK_START=start, CHRONOS_PICK_TITLE=title) + return ["powershell", "-NoProfile", "-STA", "-Command", "-"], _WIN, env + if tool == "zenity": + cmd = ["zenity", "--file-selection", f"--title={title}", f"--filename={start.rstrip('/')}/"] + if folder: + cmd.append("--directory") + if multiple: + cmd += ["--multiple", "--separator=\n"] + return cmd, None, env + if folder: + return ["kdialog", "--title", title, "--getexistingdirectory", start], None, env + cmd = ["kdialog", "--title", title, "--getopenfilename", start] + if multiple: + cmd += ["--multiple", "--separate-output"] + return cmd, None, env + + +def choose(*, folder: bool, multiple: bool, start: str = "", title: str = "", timeout: float = TIMEOUT_S): + """Paths picked in the native dialog; ``None`` when cancelled. + + Raises ``RuntimeError`` when no native dialog is available here and :class:`DialogBusy` when one + is already open (the dialog belongs to the desktop session, so only one at a time). + """ + tool = backend() + if tool is None: + raise RuntimeError("no native file dialog on this machine") + start = start if start and os.path.isdir(start) else os.path.expanduser("~") + if not _lock.acquire(blocking=False): + raise DialogBusy("a file dialog is already open") + try: + cmd, script, env = _command(tool, folder, multiple, start, title[:200] or "Chronos") + try: + done = subprocess.run(cmd, input=script, capture_output=True, text=True, timeout=timeout, env=env, + check=False) + except subprocess.TimeoutExpired: + return None + finally: + _lock.release() + if done.returncode != 0: + return None # cancelled (osascript -128, zenity / kdialog 1) + paths = [line.strip() for line in done.stdout.splitlines() if line.strip()] + return [p.rstrip("/") if len(p) > 1 else p for p in paths] or None diff --git a/chronos/webui/schema.py b/chronos/webui/schema.py new file mode 100644 index 0000000..1e3e7d5 --- /dev/null +++ b/chronos/webui/schema.py @@ -0,0 +1,503 @@ +"""Field schema for the Web UI: every setting the pages render, in one place. + +Each field carries its group, type, bounds / choices, the code default and — +where the project has one — a recommended value with its *source*: + +* ``code`` – the default in ``ChronosConfig`` / the runtime module; +* ``planner`` – chosen by the adaptive planner (``chronos.model.planner``); +* ``measured`` – backed by a measurement in ``reports/`` (named in ``ref``); +* ``rule`` – derived from the model / data (e.g. "= recurrent_depth"). + +Labels, hover help and choice names live in ``chronos/webui/i18n/.json`` +under ``field..label`` / ``field..help`` / ``choice..``; +``tests/test_webui.py`` checks every field here has them in all four +languages. The recommended value is rendered from this schema, never +duplicated in the catalogs, so the two cannot drift. +""" +from __future__ import annotations + +from dataclasses import asdict, dataclass + + +@dataclass(frozen=True) +class Field: + key: str + group: str + type: str # int | float | bool | choice | text | path | multi + default: object = None + min: float | None = None + max: float | None = None + step: float | None = None + choices: tuple = () + recommended: object = None + source: str | None = None # code | planner | measured | rule + ref: str | None = None # report path / rule id for the recommendation + advanced: bool = False + scope: tuple = ("config",) # which forms show it + nullable: bool = False # "auto" / empty allowed + + def as_dict(self) -> dict: + # Drop unset values only. A membership test such as `v not in (None, (), False)` also dropped 0 and 0.0 + # (0 == False), so min=0 and recommended=0 never reached the page. + out = {k: v for k, v in asdict(self).items() if k == "default" or not (v is None or v is False or v == ())} + out["choices"] = list(self.choices) if self.choices else None + out["scope"] = list(self.scope) + return {k: v for k, v in out.items() if v is not None or k == "default"} + + +def _f(key, group, type_, default=None, **kw) -> Field: + for name in ("choices", "scope"): + if name in kw and isinstance(kw[name], list): + kw[name] = tuple(kw[name]) + return Field(key, group, type_, default, **kw) + + +LANGUAGES = ("zh-Hans", "zh-Hant", "en", "ja") +DEFAULT_LANGUAGE = "en" + +# Config-page groups, in page order. +CONFIG_GROUPS = ("model", "recurrent", "moe", "attention", "objectives", "memory", "optimizer", "runtime", "rl") +# Every group id (config + other pages); each needs ``group.`` in the catalogs. +GROUPS = CONFIG_GROUPS + ("train", "stage_data", "probe", "inference", "lazy", "speculative", "export", "serve", + "tokenizer", "benchmark", "autotune", "planner") + +RES = "reports/residency_20261107" +SPEC = "reports/speculative" + +CONFIG_FIELDS: tuple[Field, ...] = ( + # ---- model shape ------------------------------------------------------- + _f("hidden_size", "model", "int", 768, min=8, max=16384, step=8), + _f("num_hidden_layers", "model", "int", 8, min=1, max=128, step=1), + _f("vocab_size", "model", "int", 6400, min=32, max=200000, step=32, + recommended="tokenizer", source="rule", ref="vocab_matches_tokenizer"), + _f("max_position_embeddings", "model", "int", 32768, min=128, max=1048576, step=128, advanced=True), + _f("tie_word_embeddings", "model", "bool", True, recommended=True, source="code"), + _f("dropout", "model", "float", 0.1, min=0.0, max=0.5, step=0.01, advanced=True), + _f("rope_theta", "model", "float", 1e6, min=1e3, max=1e8, advanced=True), + _f("dtype", "model", "choice", "auto", choices=["auto", "float32", "bfloat16", "float16"], + recommended="auto", source="code"), + _f("modalities", "model", "text", "", advanced=True), + # ---- recurrent depth --------------------------------------------------- + _f("recurrent_enabled", "recurrent", "bool", True, recommended=True, source="code"), + _f("recurrent_groups", "recurrent", "int", 8, min=1, max=128, step=1, nullable=True), + _f("prelude_layers", "recurrent", "int", 0, min=0, max=16, step=1, advanced=True), + _f("coda_layers", "recurrent", "int", 0, min=0, max=16, step=1, advanced=True), + _f("recurrent_depth", "recurrent", "int", 1, min=1, max=16, step=1, recommended=4, source="planner"), + _f("min_recurrent_depth", "recurrent", "int", 1, min=1, max=16, step=1), + _f("max_inference_depth", "recurrent", "int", 1, min=1, max=32, step=1, + recommended="recurrent_depth", source="rule", ref="equals_recurrent_depth"), + _f("recurrent_attention_mode", "recurrent", "choice", "shared_first", + choices=["shared_first", "per_iteration", "first_only"], recommended="shared_first", source="code"), + _f("recurrent_order", "recurrent", "choice", "layer", + choices=["layer", "block"], recommended="block", source="planner", advanced=True), + _f("recurrent_later_topk", "recurrent", "int", 0, min=0, max=16, step=1, recommended=0, + source="planner", advanced=True), + _f("recurrent_later_groups", "recurrent", "int", 0, min=0, max=64, step=1, recommended=0, + source="planner", advanced=True), + _f("recurrent_dt_param", "recurrent", "choice", "clamp", + choices=["clamp", "sigmoid"], recommended="sigmoid", source="planner", advanced=True), + _f("recurrent_dt_init", "recurrent", "float", 0.25, min=0.01, max=1.0, step=0.01, + recommended=0.5, source="planner", advanced=True), + _f("recurrent_dt_min", "recurrent", "float", 0.05, min=0.001, max=1.0, step=0.005, + recommended=0.05, source="planner", advanced=True), + _f("recurrent_dt_max", "recurrent", "float", 1.0, min=0.05, max=1.0, step=0.05, + recommended=1.0, source="planner", advanced=True), + _f("adaptive_halting", "recurrent", "bool", False), + _f("halting_threshold", "recurrent", "float", 0.99, min=0.5, max=1.0, step=0.001), + _f("depth_schedule", "recurrent", "choice", "fixed_then_adaptive", + choices=["fixed_then_adaptive", "fixed", "adaptive"], recommended="fixed_then_adaptive", source="code"), + _f("depth_schedule_warmup_fraction", "recurrent", "float", 0.25, min=0.0, max=1.0, step=0.01), + _f("recurrent_strategy", "recurrent", "choice", "scheduled", choices=["fixed", "scheduled", "adaptive"], + advanced=True), + _f("recurrent_depth_jitter", "recurrent", "float", 0.0, min=0.0, max=1.0, step=0.05, advanced=True), + _f("ponder_loss_coef", "recurrent", "float", 0.01, min=0.0, max=1.0, step=0.001), + _f("recurrent_distill_coef", "recurrent", "float", 0.05, min=0.0, max=1.0, step=0.01), + _f("recurrent_stability_coef", "recurrent", "float", 0.001, min=0.0, max=1.0, step=0.001), + _f("draft_exit_kl_coef", "recurrent", "float", 0.0, min=0.0, max=1.0, step=0.01, advanced=True), + _f("draft_exit_depth", "recurrent", "int", 1, min=1, max=16, step=1, advanced=True), + # ---- mixture of experts ------------------------------------------------ + _f("num_experts", "moe", "int", 4, min=1, max=1024, step=1), + _f("num_experts_per_tok", "moe", "int", 1, min=1, max=32, step=1, recommended=2, source="planner"), + _f("num_shared_experts", "moe", "int", 1, min=0, max=32, step=1, recommended=1, source="code"), + _f("moe_intermediate_size", "moe", "int", 0, min=0, max=65536, step=8, nullable=True), + _f("router_scope", "moe", "choice", "per_iteration", choices=["per_iteration", "shared"], + recommended="per_iteration", source="code"), + _f("lookahead_steps", "moe", "int", 2, min=0, max=16, step=1, recommended=2, source="code"), + _f("layer_aware_cache", "moe", "bool", False), + _f("prefetch_depth", "moe", "int", 2, min=0, max=64, step=1, recommended=2, source="code"), + _f("fallback_mask_prob", "moe", "float", 0.08, min=0.0, max=1.0, step=0.01, recommended=0.08, source="code"), + # ---- attention / KV ---------------------------------------------------- + _f("num_attention_heads", "attention", "int", 8, min=1, max=256, step=1), + _f("num_key_value_heads", "attention", "int", 4, min=1, max=256, step=1), + _f("use_hybrid_attention", "attention", "bool", True, recommended=True, source="code"), + _f("kv_latent_dim", "attention", "int", 64, min=4, max=1024, step=4), + _f("rope_dim", "attention", "int", 32, min=2, max=256, step=2), + _f("sliding_window_size", "attention", "int", 2048, min=8, max=65536, step=8), + _f("kv_cache_dtype", "attention", "choice", "auto", choices=["auto", "int8"], recommended="auto", source="code"), + _f("kv_quant_group_size", "attention", "int", 32, min=8, max=256, step=8, advanced=True), + _f("mla_decode", "attention", "choice", "expanded", choices=["expanded", "absorbed", "auto"], + recommended="expanded", source="code", ref="mla_auto_gap"), + _f("mla_cache_rope", "attention", "bool", False, advanced=True), + # ---- training objectives ----------------------------------------------- + _f("lambda_balance", "objectives", "float", 5e-4, min=0.0, max=1.0, step=1e-4, recommended=5e-4, source="code"), + _f("lambda_temporal", "objectives", "float", 3e-3, min=0.0, max=1.0, step=1e-4, recommended=3e-3, source="code"), + _f("lambda_lookahead", "objectives", "float", 0.1, min=0.0, max=10.0, step=0.01, recommended=0.1, source="code"), + _f("lambda_lookahead_topk", "objectives", "float", 0.15, min=0.0, max=10.0, step=0.01, advanced=True), + _f("lambda_lookahead_union", "objectives", "float", 0.05, min=0.0, max=10.0, step=0.01, advanced=True), + _f("lambda_router_locality", "objectives", "float", 0.02, min=0.0, max=10.0, step=0.01, advanced=True), + _f("lambda_router_anchor", "objectives", "float", 0.0, min=0.0, max=10.0, step=0.01), + _f("lambda_cluster_locality", "objectives", "float", 0.3, min=0.0, max=10.0, step=0.01, + recommended=0.3, source="measured", ref=f"{RES}/sweep"), + _f("cluster_locality_clusters", "objectives", "int", 0, min=0, max=1024, step=1, + recommended=0, source="rule", ref="clusters_auto"), + _f("cluster_locality_window", "objectives", "int", 32, min=0, max=65536, step=1, + recommended="data", source="rule", ref="window_median_record"), + _f("cluster_locality_mode", "objectives", "choice", "window", choices=["window", "segment"], + source="code", advanced=True), + _f("lambda_iteration_cluster", "objectives", "float", 0.0, min=0.0, max=10.0, step=0.01, + recommended=0.0, source="planner", advanced=True), + _f("lookahead_teacher_scope", "objectives", "choice", "first", choices=["first", "iterations"], + recommended="first", source="planner", advanced=True), + # ---- memory / lazy experts --------------------------------------------- + _f("vram_budget_gb", "memory", "float", 4.0, min=0.01, max=256.0, step=0.01), + _f("pinned_memory_max_fraction", "memory", "float", 0.25, min=0.01, max=0.95, step=0.01), + _f("max_resident_experts", "memory", "int", None, min=1, max=4096, step=1, nullable=True), + _f("ram_budget_mb", "memory", "float", None, min=1.0, max=1048576.0, step=1.0, nullable=True), + _f("storage_format", "memory", "choice", "safetensors", choices=["safetensors", "pt"], + recommended="safetensors", source="code"), + _f("training_paging", "memory", "bool", False), + _f("optimizer_paging", "memory", "bool", False), + _f("page_size_mb", "memory", "int", 64, min=1, max=4096, step=1, advanced=True), + _f("optimizer_page_dir", "memory", "path", "./optimizer_pages", advanced=True), + _f("activation_checkpointing", "memory", "bool", False), + _f("recompute_scope", "memory", "choice", "block", choices=["block", "mlp"], recommended="block", source="code", + advanced=True), + _f("recompute_policy", "memory", "choice", "all", choices=["all", "mla", "swa", "alternate"], advanced=True), + _f("attention_block_size", "memory", "int", 0, min=0, max=65536, step=256, recommended=1024, source="measured", + ref="reports/long_context_20261109"), + _f("ce_chunk_size", "memory", "int", 0, min=0, max=65536, step=256, recommended=1024, source="measured", + ref="reports/long_context_20261109"), + _f("moe_chunk_tokens", "memory", "int", 0, min=0, max=1048576, step=1024, recommended=8192, source="measured", + ref="reports/long_context_20261109"), + _f("mla_upproj_recompute", "memory", "bool", False, advanced=True), + _f("document_masking", "objectives", "bool", False), + _f("reset_router_at_documents", "objectives", "bool", False), + _f("reset_lookahead_at_documents", "objectives", "choice", "", choices=["", "true", "false"], advanced=True), + _f("lookahead_input_detach", "objectives", "bool", False, advanced=True), + _f("temporal_grad_span", "objectives", "int", 0, min=0, max=1048576, step=256, advanced=True), + # ---- optimizer --------------------------------------------------------- + _f("learning_rate", "optimizer", "float", 5e-4, min=1e-7, max=1.0, step=1e-5, + recommended="planner", source="planner"), + _f("batch_size", "optimizer", "int", 16, min=1, max=512, step=1), + _f("accumulation_steps", "optimizer", "int", 8, min=1, max=256, step=1), + _f("max_seq_len", "optimizer", "int", 512, min=8, max=131072, step=8), + _f("epochs", "optimizer", "int", 2, min=1, max=1000, step=1), + _f("max_steps", "optimizer", "int", 0, min=0, max=10_000_000, step=1, recommended=0, source="code"), + _f("weight_decay", "optimizer", "float", 0.01, min=0.0, max=1.0, step=0.001), + _f("grad_clip", "optimizer", "float", 1.0, min=0.0, max=100.0, step=0.1), + # ---- runtime ----------------------------------------------------------- + _f("save_dir", "runtime", "path", "./out"), + _f("tokenizer_path", "runtime", "path", ""), + _f("save_interval", "runtime", "int", 1000, min=1, max=1_000_000, step=1), + _f("log_interval", "runtime", "int", 10, min=1, max=100000, step=1), + _f("cpu_threads", "runtime", "text", "auto", recommended="auto", source="code"), + _f("cpu_budget_percent", "runtime", "float", 100, min=10, max=100, step=1), + _f("num_workers", "runtime", "text", "auto", recommended="auto", source="code"), + # ---- RL / preference --------------------------------------------------- + _f("beta", "rl", "float", 0.1, min=0.0, max=10.0, step=0.01), + _f("alpha", "rl", "float", 0.7, min=0.0, max=1.0, step=0.01), + _f("lambda_or", "rl", "float", 0.1, min=0.0, max=10.0, step=0.01), + _f("reward_spec", "rl", "text", "toy"), + _f("max_gen_len", "rl", "int", 24, min=1, max=4096, step=1), + _f("num_generations", "rl", "int", 4, min=1, max=64, step=1), + _f("temperature", "rl", "float", 1.0, min=0.0, max=2.0, step=0.05), +) + +TRAIN = ("train",) +PROBE = ("train", "probe") +INFER = ("inference",) + +FORM_FIELDS: tuple[Field, ...] = ( + # ---- training job ------------------------------------------------------ + _f("train.backend", "train", "choice", "auto", choices=["auto", "mlx", "cuda", "xpu", "mps", "cpu"], + recommended="auto", source="code", scope=TRAIN), + _f("train.stages", "train", "multi", ["pretrain"], choices=["pretrain", "sft", "dpo", "orpo", "grpo", "distill"], + scope=TRAIN), + _f("train.data_path", "train", "path", "", scope=TRAIN), + # Later stages need their own data format (conversations, preference pairs, prompts); the Train + # page shows the row of each selected stage after the first. Empty = reuse the first stage's data. + *(_f(f"train.data_{m}", "stage_data", "path", "", scope=TRAIN, nullable=True) + for m in ("sft", "dpo", "orpo", "grpo", "distill")), + _f("train.init_weight", "train", "path", "", scope=TRAIN, nullable=True), + _f("train.teacher_path", "train", "path", "", scope=TRAIN, nullable=True), + _f("train.max_steps", "train", "int", 0, min=0, max=10_000_000, step=1, scope=TRAIN), + _f("train.val_ratio", "train", "float", 0.05, min=0.0, max=0.5, step=0.01, recommended=0.05, + source="code", scope=TRAIN), + _f("train.sample_prompt", "train", "text", "", scope=TRAIN), + # ---- lazy-expert probe after each validation --------------------------- + _f("probe.enabled", "probe", "bool", True, recommended=True, source="code", scope=PROBE), + _f("probe.backends", "probe", "multi", ["auto"], choices=["auto", "mlx", "cuda", "xpu", "mps", "cpu"], + recommended=["auto"], source="code", scope=PROBE), + _f("probe.paging", "probe", "multi", ["auto", "expert"], choices=["auto", "cluster", "expert"], + recommended=["auto", "expert"], source="code", scope=PROBE), + _f("probe.residency", "probe", "multi", ["planned"], choices=["planned", "window"], + recommended=["planned"], source="measured", ref=f"{RES}/bench_residency_50m_s13996_cpu.json", + scope=PROBE), + _f("probe.ram_ratios", "probe", "multi", [0.5, 1.0], + choices=[0.1, 0.2, 0.25, 0.33, 0.5, 0.67, 0.75, 0.9, 1.0], scope=PROBE), + _f("probe.miss_policies", "probe", "multi", ["sync_on_demand"], + choices=["sync_on_demand", "on_demand", "fallback_diagnostic"], recommended=["sync_on_demand"], + source="rule", ref="sync_is_exact", scope=PROBE), + _f("probe.residency_decay", "probe", "float", 0.7, min=0.0, max=0.95, step=0.05, recommended=0.7, + source="code", scope=PROBE, advanced=True), + _f("probe.decode_wait_s", "probe", "float", 0.012, min=0.0, max=1.0, step=0.001, recommended=0.012, + source="code", scope=PROBE, advanced=True), + _f("probe.verify_wait_s", "probe", "float", 0.02, min=0.0, max=1.0, step=0.001, recommended=0.02, + source="code", scope=PROBE, advanced=True), + _f("probe.speculative", "probe", "multi", [False], choices=[False, True], scope=PROBE), + _f("probe.draft_depth", "probe", "int", 1, min=1, max=16, step=1, scope=PROBE, advanced=True), + _f("probe.gamma", "probe", "int", 4, min=1, max=8, step=1, scope=PROBE, advanced=True), + _f("probe.max_new_tokens", "probe", "int", 32, min=1, max=512, step=1, recommended=32, source="code", + scope=PROBE), + _f("probe.max_variants", "probe", "int", 12, min=1, max=256, step=1, recommended=12, source="code", + scope=PROBE), + # ---- inference --------------------------------------------------------- + _f("infer.model_path", "inference", "path", "", scope=INFER), + _f("infer.backend", "inference", "choice", "auto", choices=["auto", "mlx", "cuda", "xpu", "mps", "cpu"], + recommended="auto", source="code", scope=INFER), + _f("infer.mode", "inference", "choice", "compare", choices=["compare", "offload", "fullload"], scope=INFER), + _f("infer.max_tokens", "inference", "int", 128, min=1, max=4096, step=1, scope=INFER), + _f("infer.temperature", "inference", "float", 0.85, min=0.0, max=2.0, step=0.05, scope=INFER), + _f("infer.raw_prompt", "inference", "bool", False, scope=INFER), + _f("infer.ram_load_ratio", "lazy", "float", 1.0, min=0.1, max=1.25, step=0.01, scope=INFER), + _f("infer.sweep_ram_ratios", "lazy", "bool", False, scope=INFER), + _f("infer.miss_policy", "lazy", "choice", "sync_on_demand", + choices=["on_demand", "sync_on_demand", "fallback_diagnostic"], recommended="sync_on_demand", + source="rule", ref="sync_is_exact", scope=INFER), + _f("infer.paging", "lazy", "choice", "auto", choices=["auto", "cluster", "expert"], recommended="auto", + source="code", scope=INFER), + _f("infer.residency_planner", "lazy", "bool", True, recommended=True, source="measured", + ref=f"{RES}/bench_residency_50m_s13996_cpu.json", scope=INFER), + _f("infer.residency_decay", "lazy", "float", 0.7, min=0.0, max=0.95, step=0.05, recommended=0.7, + source="code", scope=INFER, advanced=True), + _f("infer.decode_wait_s", "lazy", "float", 0.012, min=0.0, max=1.0, step=0.001, recommended=0.012, + source="code", scope=INFER, advanced=True), + _f("infer.verify_wait_s", "lazy", "float", 0.02, min=0.0, max=1.0, step=0.001, recommended=0.02, + source="code", scope=INFER, advanced=True), + _f("infer.speculative", "speculative", "bool", False, recommended=False, source="measured", + ref=SPEC, scope=INFER), + _f("infer.draft_depth", "speculative", "int", 1, min=1, max=8, step=1, scope=INFER), + _f("infer.gamma", "speculative", "int", 4, min=1, max=8, step=1, scope=INFER), + # ---- export ------------------------------------------------------------ + _f("export.model_path", "export", "path", "", scope=("export",)), + _f("export.output_dir", "export", "path", "./exports/chronos", scope=("export",)), + _f("export.formats", "export", "multi", ["fp16-safetensors", "q8_0-gguf"], + choices=["fp16-safetensors", "q8_0-safetensors", "fp16-gguf", "q8_0-gguf", "chronos-native-gguf"], + scope=("export",)), + _f("export.config_path", "export", "path", "", scope=("export",), nullable=True, advanced=True), + _f("export.expert_cache_dir", "export", "path", "", scope=("export",), nullable=True, advanced=True), + _f("export.copy_cache", "export", "bool", True, scope=("export",)), + _f("export.auto_cluster", "export", "bool", True, recommended=True, source="code", scope=("export",)), + _f("export.calibration_data_path", "export", "path", "", scope=("export",), nullable=True), + _f("export.cluster_device", "export", "choice", "cpu", choices=["cpu", "mps", "cuda"], scope=("export",), + advanced=True), + _f("export.cluster_max_batches", "export", "int", 50, min=1, max=10000, step=1, scope=("export",), + advanced=True), + _f("export.cluster_batch_size", "export", "int", 4, min=1, max=256, step=1, scope=("export",), advanced=True), + _f("export.cluster_max_seq_len", "export", "int", 256, min=8, max=8192, step=8, scope=("export",), + advanced=True), + # ---- serve (Ollama / OpenAI protocol) ---------------------------------- + _f("serve.models_dir", "serve", "path", "./exports", scope=("serve",)), + _f("serve.host", "serve", "text", "127.0.0.1", recommended="127.0.0.1", source="rule", ref="loopback", + scope=("serve",)), + _f("serve.port", "serve", "int", 11435, min=1024, max=65535, step=1, scope=("serve",)), + _f("serve.device", "serve", "choice", "auto", choices=["auto", "mlx", "cuda", "mps", "cpu"], scope=("serve",)), + _f("serve.dtype", "serve", "choice", "auto", choices=["auto", "float32", "bfloat16", "float16"], + scope=("serve",)), + _f("serve.lazy_experts", "serve", "bool", True, recommended=True, source="code", scope=("serve",)), + _f("serve.ram_expert_fraction", "serve", "float", 0.5, min=0.05, max=1.0, step=0.05, scope=("serve",)), + _f("serve.paging", "serve", "choice", "auto", choices=["auto", "cluster", "expert"], recommended="auto", + source="code", scope=("serve",)), + _f("serve.kv_cache_dtype", "serve", "choice", "", choices=["", "auto", "int8"], scope=("serve",), + advanced=True), + _f("serve.mla_decode", "serve", "choice", "", choices=["", "expanded", "absorbed", "auto"], scope=("serve",), + advanced=True), + _f("serve.router_scope", "serve", "choice", "", choices=["", "per_iteration", "shared"], scope=("serve",), + advanced=True), + _f("serve.mla_cache_rope", "serve", "bool", False, scope=("serve",), advanced=True), + _f("serve.max_resident_experts", "serve", "int", None, min=1, max=4096, step=1, nullable=True, + scope=("serve",), advanced=True), + _f("serve.ram_budget_mb", "serve", "float", None, min=1.0, max=1048576.0, step=1.0, nullable=True, + scope=("serve",), advanced=True), + _f("serve.allow_remote", "serve", "bool", False, recommended=False, source="rule", ref="loopback", + scope=("serve",)), + # ---- tokenizer builder ------------------------------------------------- + _f("tok.paths", "tokenizer", "text", "", scope=("tokenizer",)), + _f("tok.out_dir", "tokenizer", "path", "./out/tokenizer", scope=("tokenizer",)), + _f("tok.vocab_size", "tokenizer", "int", 16384, min=256, max=65535, step=64, scope=("tokenizer",)), + _f("tok.per_source", "tokenizer", "int", 400_000, min=1000, max=100_000_000, step=1000, scope=("tokenizer",)), + _f("tok.temperature", "tokenizer", "float", 0.5, min=0.1, max=1.0, step=0.05, recommended=0.5, source="code", + scope=("tokenizer",)), + _f("tok.fields", "tokenizer", "text", "", scope=("tokenizer",), advanced=True), + # ---- auto-tune --------------------------------------------------------- + _f("tune.data_path", "autotune", "path", "", scope=("autotune",)), + _f("tune.n_trials", "autotune", "int", 20, min=2, max=200, step=1, scope=("autotune",)), + _f("tune.probe_steps", "autotune", "int", 80, min=10, max=1000, step=10, scope=("autotune",)), + _f("tune.search", "autotune", "multi", ["lambda_balance", "lambda_temporal", "lr"], + choices=["lambda_balance", "lambda_temporal", "lambda_lookahead", "lookahead_steps", "lr", "hidden_size", + "num_experts", "num_shared_experts", "kv_latent_dim", "recurrent_order", "recurrent_dt_param", + "recurrent_dt_min", "recurrent_dt_max", "recurrent_dt_init", "recurrent_later_topk", + "recurrent_later_groups", "lambda_iteration_cluster", "lookahead_teacher_scope"], + scope=("autotune",)), + # ---- planner ----------------------------------------------------------- + _f("plan.target_m", "planner", "float", 50.0, min=0.1, max=100000.0, step=0.1, scope=("planner",)), + _f("plan.use_moe", "planner", "bool", True, scope=("planner",)), + _f("plan.num_experts", "planner", "int", 32, min=1, max=1024, step=1, scope=("planner",)), + _f("plan.active_mode", "planner", "choice", "experts", choices=["experts", "params"], scope=("planner",)), + _f("plan.active_value", "planner", "float", 2, min=0, max=100000, step=1, scope=("planner",)), + _f("plan.memory_saving", "planner", "choice", "none", choices=["none", "balanced", "aggressive", "extreme"], + scope=("planner",)), + _f("plan.data_paths", "planner", "text", "", scope=("planner",)), + _f("plan.ram_gb", "planner", "float", None, min=1, max=4096, step=1, nullable=True, scope=("planner",)), + _f("plan.token_budget_b", "planner", "float", None, min=0.001, max=100000, step=0.1, nullable=True, + scope=("planner",)), + _f("plan.depth", "planner", "int", 4, min=1, max=16, step=1, scope=("planner",)), + _f("plan.vocab_size", "planner", "int", None, min=256, max=200000, step=32, nullable=True, scope=("planner",)), + _f("plan.seq_len", "planner", "int", None, min=16, max=131072, step=16, nullable=True, scope=("planner",)), +) + +ALL_FIELDS: tuple[Field, ...] = CONFIG_FIELDS + FORM_FIELDS +FIELDS = {f.key: f for f in ALL_FIELDS} +# Recommendation ids rendered as text (``rule.`` in the catalogs). +RULE_REFS = tuple(sorted({f.ref for f in ALL_FIELDS if f.source == "rule" and f.ref})) +SOURCES = ("code", "planner", "measured", "rule") + + +# Technical identifiers shown verbatim in every language (backend, dtype, file-format and +# stage names); every other choice value needs ``choice..`` in each catalog. +LITERAL_CHOICES = frozenset({ + "mlx", "cuda", "xpu", "mps", "cpu", "float32", "bfloat16", "float16", "int8", "safetensors", "pt", + "fp16-safetensors", "q8_0-safetensors", "fp16-gguf", "q8_0-gguf", "chronos-native-gguf", + "pretrain", "sft", "dpo", "orpo", "grpo", "distill", "shared_first", "per_iteration", "first_only", "layer", "first", "iterations", + "clamp", "sigmoid", "lambda_balance", "lambda_temporal", "lambda_lookahead", "lookahead_steps", "lr", "hidden_size", + "num_experts", "num_shared_experts", "kv_latent_dim", "recurrent_order", "recurrent_dt_init", + "recurrent_dt_param", "recurrent_dt_min", "recurrent_dt_max", "recurrent_later_topk", "recurrent_later_groups", + "lambda_iteration_cluster", "lookahead_teacher_scope", + "sync_on_demand", "on_demand", "fallback_diagnostic", +}) + + +def choice_keys() -> list[str]: + """``choice.`` keys every catalog must define. Values mean the same thing in every + field that offers them (``auto``, ``cluster``, ``fixed`` …), so they are translated once; + booleans, numbers, blanks and :data:`LITERAL_CHOICES` are shown verbatim.""" + out = [] + for f in ALL_FIELDS: + if f.type in ("choice", "multi"): + for value in f.choices: + if (isinstance(value, bool) or value == "" or isinstance(value, (int, float)) + or value in LITERAL_CHOICES): + continue + out.append(f"choice.{value}") + return list(dict.fromkeys(out)) + + +def required_keys() -> set[str]: + keys = {f"group.{g}" for g in GROUPS} | {f"source.{s}" for s in SOURCES} | {f"rule.{r}" for r in RULE_REFS} + for f in ALL_FIELDS: + keys.add(f"field.{f.key}.label") + keys.add(f"field.{f.key}.help") + keys.update(choice_keys()) + return keys + + +# What the browse button next to a path field opens: (kind, multiple). ``kind`` is a filter of +# ``chronos.workbench.files.KINDS``; ``multiple`` fields hold one path per line and several datasets +# are merged into one JSONL before training or calibration reads them. +PICK = { + "optimizer_page_dir": ("dir", False), "save_dir": ("dir", False), "tokenizer_path": ("dir", False), + "train.data_path": ("data", True), + **{f"train.data_{m}": ("data", True) for m in ("sft", "dpo", "orpo", "grpo", "distill")}, + "train.init_weight": ("checkpoint", False), "train.teacher_path": ("checkpoint", False), + "infer.model_path": ("checkpoint", False), + "export.model_path": ("checkpoint", False), "export.output_dir": ("dir", False), + "export.config_path": ("config", False), "export.expert_cache_dir": ("dir", False), + "export.calibration_data_path": ("data", True), + "serve.models_dir": ("dir", False), + "tok.paths": ("data", True), "tok.out_dir": ("dir", False), + "tune.data_path": ("data", True), + "plan.data_paths": ("data", True), +} +MULTI_PATH = frozenset(k for k, (_kind, many) in PICK.items() if many) +# Multi-dataset fields whose selection is merged into one JSONL (training stages, export calibration). +# The tokenizer samples each source on its own and the planner measures each, so they are not merged. +MERGE_PATH = frozenset({"train.data_path", "export.calibration_data_path"} + | {f"train.data_{m}" for m in ("sft", "dpo", "orpo", "grpo", "distill")}) +MAX_TEXT = 4096 +MAX_MULTI_TEXT = 65536 + + +def schema_payload() -> dict: + fields = [] + for f in ALL_FIELDS: + item = f.as_dict() + if f.key in PICK: + item["pick"] = {"kind": PICK[f.key][0], "multiple": PICK[f.key][1], "merge": f.key in MERGE_PATH} + fields.append(item) + return {"version": 1, "languages": list(LANGUAGES), "default_language": DEFAULT_LANGUAGE, + "config_groups": list(CONFIG_GROUPS), "groups": list(GROUPS), "fields": fields} + + +def config_defaults() -> dict: + return {f.key: f.default for f in CONFIG_FIELDS} + + +def coerce(key: str, value): + """Validate one value against its field; raises ``ValueError(key)``.""" + f = FIELDS[key] + if value is None or value == "": + if f.nullable or f.type in ("text", "path") or f.default in (None, ""): + return None if f.type not in ("text", "path") else "" + raise ValueError(key) + if f.type == "bool": + if isinstance(value, bool): + return value + raise ValueError(key) + if f.type in ("int", "float"): + try: + num = float(value) + except (TypeError, ValueError): + raise ValueError(key) from None + if num != num or (f.min is not None and num < f.min) or (f.max is not None and num > f.max): + raise ValueError(key) + if f.type == "int": + if num != int(num): + raise ValueError(key) + return int(num) + return num + if f.type == "choice": + if value not in f.choices: + raise ValueError(key) + return value + if f.type == "multi": + items = value if isinstance(value, list) else [value] + if not items or any(v not in f.choices for v in items): + raise ValueError(key) + return list(dict.fromkeys(items)) + limit = MAX_MULTI_TEXT if key in MULTI_PATH else MAX_TEXT + if not isinstance(value, str) or len(value) > limit or "\x00" in value: + raise ValueError(key) + return value + + +def coerce_config(values: dict) -> tuple[dict, list[str]]: + """Model/runtime config from the Config page: ``(clean, bad_keys)``; unknown keys are dropped.""" + clean, bad = {}, [] + for key, value in (values or {}).items(): + if key not in FIELDS or FIELDS[key] not in CONFIG_FIELDS: + continue + try: + clean[key] = coerce(key, value) + except ValueError: + bad.append(key) + return clean, bad diff --git a/chronos/webui/server.py b/chronos/webui/server.py new file mode 100644 index 0000000..4a0b0d8 --- /dev/null +++ b/chronos/webui/server.py @@ -0,0 +1,1087 @@ +"""Chronos Web UI: FastAPI JSON API + a hand-written single-page front end. + + chronos webui # http://127.0.0.1:7860/ + chronos webui --lan # also reachable from the local network (login for other machines) + chronos webui --legacy # the old Gradio console + +Security +* Default bind is 127.0.0.1 with **no authentication** (local use only); the + page says so. Any other address needs ``--allow-remote`` *and* a key in + ``CHRONOS_UI_KEY`` / ``CHRONOS_API_KEY`` (never on the command line). +* With a key, the browser logs in once and receives an HttpOnly, + SameSite=Strict session cookie; scripts may send ``Authorization: Bearer``. + Failed logins are rate-limited per client; keys are compared in constant time. +* Every request must carry an allowed ``Host`` (DNS-rebinding guard); every + mutating request must carry ``X-Chronos-Request: 1`` and, when present, an + ``Origin`` on the same allow-list (CSRF guard). The page is served with a + strict CSP (``script-src 'self'``, no inline script). +* ``--lan`` (off by default) listens on every interface and accepts this + machine's LAN addresses as Host. Browsers on other machines must log in (the key + comes from ``CHRONOS_UI_KEY`` or is generated and printed at start); a browser + on this machine (loopback peer *and* loopback Host, no proxy headers) needs no + login. Do not put ``--lan`` behind a reverse proxy; use ``--allow-remote``. +* File fields: on this machine the server opens the system file dialog and the + chosen paths are used in place. From another machine files are uploaded + (streamed, size-capped, disk reserve kept) into ``/uploads//``. +* This UI starts training, inference, export and servers and reads and writes + files the server user can access: treat access to it as shell access. +""" +from __future__ import annotations + +import hmac +import json +import os +import re +import shutil +import sys +import time + +try: # module level: FastAPI resolves ``Request`` annotations by name + from fastapi import FastAPI, HTTPException, Request + from fastapi.concurrency import run_in_threadpool + from fastapi.responses import FileResponse, JSONResponse +except ImportError: # pragma: no cover - serving extra not installed + FastAPI = HTTPException = Request = FileResponse = JSONResponse = run_in_threadpool = None + +from chronos.monitor.server import LOOPBACK, SECURITY_HEADERS, _Sessions, check_bind +from chronos.webui import schema +from chronos.webui.jobs import JobBusy, JobRegistry + +HERE = os.path.dirname(os.path.abspath(__file__)) +STATIC_DIR = os.path.join(HERE, "static") +I18N_DIR = os.path.join(HERE, "i18n") +REPO_ROOT = os.path.dirname(os.path.dirname(HERE)) +COOKIE = "chronos_ui_session" +STATIC_TYPES = {".js": "text/javascript; charset=utf-8", ".css": "text/css; charset=utf-8", + ".svg": "image/svg+xml"} +_STATIC_NAME = re.compile(r"^[a-z0-9_\-]+\.(js|css|svg)$") +_LANG_ALIASES = {"zh-tw": "zh-Hant", "zh-hk": "zh-Hant", "zh-mo": "zh-Hant", "zh-hant": "zh-Hant"} +MUTATING = frozenset({"POST", "PUT", "PATCH", "DELETE"}) +STAGE_ORDER = ("pretrain", "sft", "dpo", "orpo", "grpo", "distill") + + +def resolve_language(tag: str | None) -> str: + """Map a BCP-47 tag (or Accept-Language list) to a supported catalog; English otherwise.""" + for part in (tag or "").split(","): + code = part.split(";")[0].strip().lower().replace("_", "-") + if not code: + continue + if code in _LANG_ALIASES or code.startswith("zh-hant"): + return "zh-Hant" + if code == "zh" or code.startswith("zh-"): + return "zh-Hans" + if code == "ja" or code.startswith("ja-"): + return "ja" + if code == "en" or code.startswith("en-"): + return "en" + return schema.DEFAULT_LANGUAGE + + +def load_catalog(lang: str) -> dict: + if lang not in schema.LANGUAGES: + raise KeyError(lang) + with open(os.path.join(I18N_DIR, f"{lang}.json"), encoding="utf-8") as fh: + return json.load(fh) + + +MAX_UPLOAD_MB = 20480 # per file; --max-upload-mb changes it +UPLOAD_DISK_RESERVE = 8 * 2**30 # uploads stop while less than this (or 5 % of the disk) stays free +LOOPBACK_PEERS = frozenset({"127.0.0.1", "::1", "localhost"}) +LOOPBACK_HOSTS = frozenset({"127.0.0.1", "localhost", "::1", "[::1]"}) + + +def lan_addresses() -> list[str]: + """This machine's IPv4 addresses other than loopback (what a LAN browser types).""" + import socket + out = [] + try: + import psutil + for addrs in psutil.net_if_addrs().values(): + out += [a.address for a in addrs if a.family == socket.AF_INET and not a.address.startswith("127.")] + except Exception: # pragma: no cover - psutil is a dependency; keep a fallback anyway + try: + out = [a for a in socket.gethostbyname_ex(socket.gethostname())[2] if not a.startswith("127.")] + except OSError: + out = [] + return sorted(set(out), key=lambda a: (not a.startswith(("192.168.", "10.")), a)) + + +def allowed_hosts(bind_host: str, extra: tuple[str, ...] = ()) -> set[str]: + """Host header values (without port) the server answers to.""" + hosts = {"127.0.0.1", "localhost", "::1", "[::1]"} + if bind_host and bind_host not in ("0.0.0.0", "::"): + hosts.add(bind_host.strip("[]")) + hosts.add(f"[{bind_host.strip('[]')}]" if ":" in bind_host else bind_host) + hosts.update(h.strip().lower() for h in extra if h.strip()) + return hosts + + +def _host_only(value: str) -> str: + value = (value or "").strip().lower() + if value.startswith("["): + return value[: value.find("]") + 1] if "]" in value else value + return value.rsplit(":", 1)[0] if value.count(":") == 1 else value + + +# ── config sanitising ────────────────────────────────────────────────── +def _plain_scalar(value) -> bool: + return value is None or isinstance(value, (bool, int, float)) or (isinstance(value, str) and len(value) <= 4096) + + +def _small_json(value, limit: int = 16_384) -> bool: + try: + return len(json.dumps(value, allow_nan=False)) <= limit + except (TypeError, ValueError): + return False + + +def sanitize_config(values: dict) -> tuple[dict, list[str]]: + """Config sent by the page → ``(clean, bad_keys)``. + + Schema fields are validated by :func:`schema.coerce`; ``modalities`` is a + list (comma text in the form); other canonical Chronos fields (planner or + preset values such as ``use_moe``) pass when they are small JSON values; + ``stage_overrides`` is ``{stage: {key: scalar}}``; anything else is dropped.""" + from chronos.config_schema import CANONICAL_FIELDS + from chronos.model.planner import STAGE_KEYS, STAGES + values = dict(values or {}) + modalities = values.pop("modalities", None) + clean, bad = schema.coerce_config(values) + if modalities is not None: + items = modalities if isinstance(modalities, list) else str(modalities).split(",") + names = sorted({str(m).strip().lower() for m in items if str(m).strip()} - {"text"}) + if all(n in ("image", "audio") for n in names): + clean["modalities"] = names + else: + bad.append("modalities") + for key, value in values.items(): + if key in clean or key in bad: + continue + if key == "stage_overrides" and isinstance(value, dict): + clean[key] = {stage: {k: v for k, v in (row or {}).items() if k in STAGE_KEYS and _plain_scalar(v)} + for stage, row in value.items() if stage in STAGES and isinstance(row, dict)} + elif key in CANONICAL_FIELDS and key not in schema.FIELDS and _small_json(value): + clean[key] = value + return clean, bad + + +def form_values(body: dict, prefix: str) -> tuple[dict, list[str]]: + """``{".": value}`` from a page form → ``({name: value}, bad_keys)``; defaults fill gaps.""" + out, bad = {}, [] + given = body or {} + for f in schema.FORM_FIELDS: + if not f.key.startswith(prefix + "."): + continue + name = f.key[len(prefix) + 1:] + raw = given.get(f.key, given.get(name, f.default)) + try: + out[name] = schema.coerce(f.key, raw) + except ValueError: + bad.append(f.key) + return out, bad + + +def probe_sweep(values: dict) -> dict: + """``probe.*`` form values → a ``ProbeSweep`` dict for the train worker.""" + return { + "backends": values["backends"], "paging": values["paging"], "residency": values["residency"], + "ram_ratios": [float(r) for r in values["ram_ratios"]], "miss_policies": values["miss_policies"], + "residency_decay": [values["residency_decay"]], "decode_wait_s": [values["decode_wait_s"]], + "verify_wait_s": [values["verify_wait_s"]], "speculative": [bool(s) for s in values["speculative"]], + "draft_depth": values["draft_depth"], "gamma": values["gamma"], + "max_new_tokens": values["max_new_tokens"], "max_variants": values["max_variants"], + } + + +def config_estimate(cfg: dict) -> dict: + """Size / memory estimate for the Config page (``ui.estimator``; estimated, not measured).""" + from ui.estimator import ( + ArchConfig, active_param_bounds, compute_params, estimated_decode_tps, memory_footprint, + parameter_breakdown, total_params, + ) + arch = ArchConfig.from_config(cfg) + lo, hi = active_param_bounds(arch) + groups = int(arch.recurrent_groups or 0) + depth = int(arch.executed_depth) if arch.recurrent_enabled else 1 + virtual = (int(arch.prelude_layers) + groups * depth + int(arch.coda_layers) + if arch.recurrent_enabled and groups else int(arch.num_hidden_layers)) + return {"label": "estimated", "total_params": total_params(arch), "active_params": lo, + "active_union_upper": hi, "compute_params": compute_params(arch), + "breakdown": parameter_breakdown(arch), "memory": memory_footprint(arch), + "decode_tps_estimate": round(float(estimated_decode_tps(arch)), 1), "virtual_layers": virtual} + + +def plan_request(values: dict): + """``plan.*`` form values → ``PlanRequest`` (millions / billions in the form); ValueError(err key).""" + from chronos.model.planner import MEMORY_LEVELS, PlanRequest + from chronos.workbench.tokenizer import parse_paths + target = float(values.get("target_m") or 0) * 1e6 + if target <= 0: + raise ValueError("target") + use_moe = bool(values.get("use_moe")) + value = float(values.get("active_value") or 0) + experts = int(values.get("num_experts") or 1) + active_params = value * 1e6 if use_moe and values.get("active_mode") == "params" and value > 0 else None + active_experts = int(value) if use_moe and values.get("active_mode") == "experts" and value >= 1 else None + if active_experts and active_experts > experts: + raise ValueError("active_experts") + return PlanRequest( + target_total=target, use_moe=use_moe, num_experts=experts, active_params=active_params, + active_experts=active_experts, + memory_saving=values.get("memory_saving") if values.get("memory_saving") in MEMORY_LEVELS else "none", + data_paths=tuple(parse_paths(values.get("data_paths") or "")), + ram_gb=float(values["ram_gb"]) if values.get("ram_gb") else None, + token_budget=float(values["token_budget_b"]) * 1e9 if values.get("token_budget_b") else None, + recurrent_depth=int(values.get("depth") or 4), + vocab_size=int(values["vocab_size"]) if values.get("vocab_size") else None, + seq_len=int(values["seq_len"]) if values.get("seq_len") else None, + ) + + +def system_info() -> dict: + import platform + info = {"python": platform.python_version(), "platform": platform.platform(terse=True), + "machine": platform.machine(), "cpu_count": os.cpu_count()} + try: + from chronos import __version__ + info["chronos"] = __version__ + except Exception: # pragma: no cover - partial install + info["chronos"] = "?" + try: + import psutil + info["ram_gb"] = round(psutil.virtual_memory().total / 2**30, 1) + except Exception: + info["ram_gb"] = None + backends = ["cpu"] + try: + import torch + if torch.cuda.is_available(): + backends.append("cuda") + if getattr(torch, "xpu", None) is not None and torch.xpu.is_available(): + backends.append("xpu") + if torch.backends.mps.is_available(): + backends.append("mps") + except Exception: + pass + try: + import mlx.core # noqa: F401 + backends.append("mlx") + except Exception: + pass + info["backends"] = backends + return info + + +def read_presets() -> dict: + """Planner presets as complete config dicts (``ui.presets`` merges each over the base defaults).""" + from ui.presets import DEFAULT_PRESET, V3_PRESET_META, V3_PRESETS + presets = [{"name": name, "config": sanitize_config(cfg)[0], "meta": V3_PRESET_META.get(name, {})} + for name, cfg in V3_PRESETS.items()] + names = [p["name"] for p in presets] + return {"default": DEFAULT_PRESET if DEFAULT_PRESET in names else (names[0] if names else ""), + "presets": presets} + + +def base_config() -> dict: + """What an empty Config page starts from: the default planner preset, else the schema defaults.""" + data = read_presets() + by_name = {p["name"]: p["config"] for p in data["presets"]} + return {**schema.config_defaults(), **by_name.get(data["default"], {})} + + +def _json_safe(value): + """Plain JSON types (unknown objects → str); NaN / inf become None via :func:`_finite`.""" + return _finite(json.loads(json.dumps(value, default=str))) if value is not None else None + + +def _finite(value): + """Replace NaN / inf (not valid JSON) with None, recursively.""" + if isinstance(value, float): + return value if value == value and value not in (float("inf"), float("-inf")) else None + if isinstance(value, dict): + return {k: _finite(v) for k, v in value.items()} + if isinstance(value, (list, tuple)): + return [_finite(v) for v in value] + return value + + +class UIState: + """Everything one server instance owns: jobs, the serve child, the tokenizer job, the tuner.""" + + def __init__(self, workdir: str, runs_dir: str): + from chronos.monitor.snapshot import RunMonitor + from chronos.workbench.serve import ServeProcess + from chronos.workbench.tokenizer import TokenizerJob + self.workdir = os.path.abspath(workdir) + self.runs_dir = os.path.abspath(os.path.join(self.workdir, runs_dir)) + os.makedirs(self.runs_dir, exist_ok=True) + self.jobs = JobRegistry() + self.serve = ServeProcess() + self.tokenizer = TokenizerJob() + self.monitor = RunMonitor(self.runs_dir) + self.tuner = None + self.tune_log: list[str] = [] + + def path(self, value: str) -> str: + """User path relative to the work directory, ``~`` expanded.""" + value = os.path.expanduser((value or "").strip()) + return value if not value or os.path.isabs(value) else os.path.join(self.workdir, value) + + def paths(self, value) -> list[str]: + """Several user paths (one per line, or a list), each resolved like :meth:`path`.""" + from chronos.workbench.files import parse_paths + return [self.path(p) for p in parse_paths(value)] + + def shutdown(self) -> None: + self.jobs.stop_all() + self.serve.stop(timeout=5.0) + if self.tuner is not None and self.tuner.is_running(): + self.tuner.stop() + + +def create_app(workdir: str = ".", *, runs_dir: str = "runs", api_key: str | None = None, + bind_host: str = "127.0.0.1", extra_hosts: tuple[str, ...] = (), session_hours: float = 12.0, + max_upload_mb: int = MAX_UPLOAD_MB, trust_local: bool = False, native_dialog: bool = True): + """The Web UI FastAPI app; ``app.state.ui`` holds the :class:`UIState`.""" + if FastAPI is None: + raise ImportError("chronos webui needs fastapi and uvicorn (pip install 'Project_Chronos[serve]')") + ui = UIState(workdir, runs_dir) + sessions = _Sessions(session_hours * 3600) + hosts = allowed_hosts(bind_host, extra_hosts) + app = FastAPI(title="Chronos Web UI", docs_url=None, redoc_url=None, openapi_url=None) + app.state.ui = ui + app.add_event_handler("shutdown", ui.shutdown) + public = {"/", "/health", "/api/session", "/api/login", "/api/logout", "/api/i18n"} + + def _key_ok(given: str) -> bool: + return bool(api_key) and hmac.compare_digest(given.encode("utf-8"), api_key.encode("utf-8")) + + def _authorized(request) -> bool: + if not api_key or (trust_local and _is_local(request)): + return True + auth = request.headers.get("authorization", "") + if auth.startswith("Bearer ") and _key_ok(auth[7:]): + return True + return sessions.valid(request.cookies.get(COOKIE)) + + def _is_local(request) -> bool: + """The browser runs on this machine: loopback peer *and* a loopback Host (not a LAN URL).""" + peer = request.client.host if request.client else "" + if any(h in request.headers for h in ("forwarded", "x-forwarded-for", "x-real-ip")): + return False # came through a proxy: the real browser is elsewhere + return peer in LOOPBACK_PEERS and _host_only(request.headers.get("host", "")) in LOOPBACK_HOSTS + + def _deny(status: int, detail: str): + response = JSONResponse({"detail": detail}, status_code=status) + for key, value in SECURITY_HEADERS.items(): + response.headers.setdefault(key, value) + return response + + @app.middleware("http") + async def guard(request: Request, call_next): + if _host_only(request.headers.get("host", "")) not in hosts: + return _deny(421, "unexpected Host header") + path = request.url.path + if request.method in MUTATING: + if request.headers.get("x-chronos-request") != "1": + return _deny(403, "missing X-Chronos-Request header") + origin = request.headers.get("origin") + if origin and _host_only(origin.split("://", 1)[-1].split("/", 1)[0]) not in hosts: + return _deny(403, "cross-origin request") + if path.startswith("/api/") and not (path in public or path.startswith("/api/i18n/")) \ + and not _authorized(request): + return _deny(401, "login required") + response = await call_next(request) + for key, value in SECURITY_HEADERS.items(): + response.headers.setdefault(key, value) + return response + + async def _body(request) -> dict: + try: + data = await request.json() + except ValueError: + raise HTTPException(status_code=400, detail="invalid JSON") from None + if not isinstance(data, dict): + raise HTTPException(status_code=400, detail="expected a JSON object") + return data + + def _check_data(paths: list[str], key: str) -> None: + """Every selected dataset path exists and at least one readable data file is behind them.""" + from chronos.workbench.files import data_files + if not paths: + return + missing = [p for p in paths if not os.path.exists(p)] + if missing: + _bad([key], "not_found", missing[0]) + if not data_files(paths): + _bad([key], "no_files") + + def _bad(keys, code: str = "invalid", message: str | None = None): + detail = {"error": code, "fields": list(keys)} + if message: + detail["message"] = message + raise HTTPException(status_code=422, detail=detail) + + # ── page, session, catalogs ──────────────────────────────────────── + @app.get("/") + def index(): + return FileResponse(os.path.join(STATIC_DIR, "index.html"), media_type="text/html; charset=utf-8") + + @app.get("/static/{name}") + def static(name: str): + ext = os.path.splitext(name)[1] + full = os.path.join(STATIC_DIR, name) + if not _STATIC_NAME.match(name) or not os.path.isfile(full): + raise HTTPException(status_code=404, detail="not found") + return FileResponse(full, media_type=STATIC_TYPES[ext]) + + @app.get("/health") + def health(): + return {"ok": True} + + @app.get("/api/session") + def session(request: Request): + from chronos.webui.native_dialog import backend + local = _is_local(request) + return {"auth_required": bool(api_key) and not (trust_local and local), "authenticated": _authorized(request), + "local_only": not api_key, "language": resolve_language(request.headers.get("accept-language")), + "access": "local" if local else "lan", "lan_enabled": bool(api_key) and bind_host not in LOOPBACK, + "native_dialog": bool(local and native_dialog and backend()), "max_upload_mb": max_upload_mb} + + @app.post("/api/login") + async def login(request: Request): + client = request.client.host if request.client else "?" + if not api_key: + return {"authenticated": True, "auth_required": False} + if sessions.blocked(client): + raise HTTPException(status_code=429, detail="too many failed logins; wait 5 minutes") + body = await _body(request) + key = body.get("key") + if not isinstance(key, str) or not _key_ok(key): + sessions.fail(client) + raise HTTPException(status_code=401, detail="invalid key") + response = JSONResponse({"authenticated": True, "auth_required": True}) + response.set_cookie(COOKIE, sessions.issue(), max_age=int(sessions.ttl_s), httponly=True, + samesite="strict", secure=request.url.scheme == "https", path="/") + return response + + @app.post("/api/logout") + def logout(request: Request): + sessions.revoke(request.cookies.get(COOKIE)) + response = JSONResponse({"authenticated": False}) + response.delete_cookie(COOKIE, path="/") + return response + + @app.get("/api/i18n/{lang}") + def i18n(lang: str): + try: + return {"language": lang, "messages": load_catalog(lang)} + except KeyError: + raise HTTPException(status_code=404, detail="unsupported language") from None + + @app.get("/api/schema") + def get_schema(): + return schema.schema_payload() + + @app.get("/api/system") + def system(): + return {**system_info(), "workdir": ui.workdir, "runs_dir": ui.runs_dir, + "auth_required": bool(api_key)} + + @app.get("/api/presets") + def presets(): + return read_presets() + + # ── config, planner, data, tokenizer ─────────────────────────────── + @app.post("/api/config/estimate") + async def estimate(request: Request): + clean, bad = sanitize_config((await _body(request)).get("config") or {}) + if bad: + _bad(bad) + try: + return _finite(config_estimate({**base_config(), **clean})) + except (ValueError, ZeroDivisionError) as exc: + raise HTTPException(status_code=422, detail={"error": "invalid", "message": str(exc)}) from exc + + @app.post("/api/config/save") + async def config_save(request: Request): + body = await _body(request) + clean, bad = sanitize_config(body.get("config") or {}) + if bad: + _bad(bad) + path = ui.path(body.get("path") or "./out/chronos_config.json") + if not path.endswith(".json"): + _bad(["path"]) + os.makedirs(os.path.dirname(path) or ".", exist_ok=True) + with open(path, "w", encoding="utf-8") as fh: + json.dump(clean, fh, indent=2, ensure_ascii=False) + return {"path": path} + + @app.post("/api/config/load") + async def config_load(request: Request): + path = ui.path((await _body(request)).get("path") or "") + if not path.endswith(".json") or not os.path.isfile(path): + raise HTTPException(status_code=404, detail="not_found") + with open(path, encoding="utf-8") as fh: + raw = json.load(fh) + if isinstance(raw, dict) and isinstance(raw.get("config"), dict): # a saved plan + raw = {**raw["config"], "stage_overrides": raw.get("stage_overrides") or raw["config"].get( + "stage_overrides")} + clean, bad = sanitize_config(raw if isinstance(raw, dict) else {}) + return {"config": clean, "ignored": bad, "path": path} + + @app.post("/api/plan") + async def plan(request: Request): + from chronos.model.planner import plan_training + values, bad = form_values(await _body(request), "plan") + if bad: + _bad(bad) + try: + req = plan_request(values) + except ValueError as exc: + _bad([str(exc)], code=str(exc)) + return _finite(_json_safe(plan_training(req))) + + # ── file picker: lists server folders (the UI is local; typed paths reach the same files) ── + @app.get("/api/fs/list") + def fs_list(path: str = "", kind: str = "any", hidden: bool = False): + from chronos.workbench.files import list_dir + if len(path) > schema.MAX_TEXT or "\x00" in path: + _bad(["path"]) + try: + return _json_safe(list_dir(ui.path(path) if path else ui.workdir, kind=kind, show_hidden=hidden)) + except ValueError: + _bad(["kind"]) + except FileNotFoundError: + raise HTTPException(status_code=404, detail={"error": "not_found"}) from None + + # The browser hides real file paths. On this machine the server opens the system dialog and the + # chosen paths are used in place; from another machine the files are uploaded instead. + @app.post("/api/fs/native") + async def fs_native(request: Request): + from chronos.webui.native_dialog import DialogBusy, backend, choose + if not _is_local(request): + raise HTTPException(status_code=403, detail={"error": "native_local_only"}) + if not native_dialog or backend() is None: + raise HTTPException(status_code=501, detail={"error": "native_unavailable"}) + body = await _body(request) + kind = body.get("kind") or "any" + if kind not in ("dir", "data", "checkpoint", "config", "any"): + _bad(["kind"]) + folder = kind == "dir" or bool(body.get("folder")) + start = ui.path(str(body.get("start") or "")) or ui.workdir + start = start if os.path.isdir(start) else os.path.dirname(start) + try: + paths = await run_in_threadpool(choose, folder=folder, multiple=bool(body.get("multiple")) and not + (folder and sys.platform.startswith("win")), start=start, + title=str(body.get("title") or "")[:200]) + except DialogBusy: + raise HTTPException(status_code=409, detail={"error": "dialog_open"}) from None + except RuntimeError: + raise HTTPException(status_code=501, detail={"error": "native_unavailable"}) from None + return {"paths": paths or [], "cancelled": not paths} + + @app.put("/api/fs/upload") + async def fs_upload(request: Request, kind: str, batch: str, name: str): + from chronos.workbench.files import upload_path + try: + dst = upload_path(ui.workdir, kind, batch, name) + except ValueError as exc: + raise HTTPException(status_code=422, detail={"error": f"upload_{exc}", "fields": ["upload"]}) from None + limit = max_upload_mb * 2**20 + declared = request.headers.get("content-length") + if declared and declared.isdigit() and int(declared) > limit: + raise HTTPException(status_code=413, detail={"error": "upload_too_large"}) + os.makedirs(os.path.dirname(dst), exist_ok=True) + free = shutil.disk_usage(os.path.dirname(dst)).free + reserve = max(UPLOAD_DISK_RESERVE, int(0.05 * shutil.disk_usage(os.path.dirname(dst)).total)) + expected = int(declared) if declared and declared.isdigit() else 0 + if free - expected < reserve: # keep room for checkpoints of running jobs + raise HTTPException(status_code=507, detail={"error": "upload_disk_full"}) + tmp = f"{dst}.part-{os.getpid()}-{time.monotonic_ns()}" + size, next_check = 0, 256 * 2**20 + try: + with open(tmp, "wb") as fh: + async for chunk in request.stream(): + size += len(chunk) + if size > limit: + raise HTTPException(status_code=413, detail={"error": "upload_too_large"}) + if size >= next_check: # re-check free space every 256 MiB written + next_check += 256 * 2**20 + if shutil.disk_usage(os.path.dirname(dst)).free < reserve: + raise HTTPException(status_code=507, detail={"error": "upload_disk_full"}) + fh.write(chunk) + os.replace(tmp, dst) + finally: + if os.path.exists(tmp): + os.remove(tmp) + from chronos.workbench.files import upload_root + return {"path": dst, "size": size, "root": upload_root(ui.workdir, kind, batch)} + + @app.post("/api/data/scan") + async def data_scan(request: Request): + from chronos.workbench.data import scan_dataset + body = await _body(request) + raw = body.get("path") or "" + if not isinstance(raw, (str, list)) or len(str(raw)) > schema.MAX_MULTI_TEXT: + _bad(["path"]) + paths = ui.paths(raw) + if not paths: + _bad(["path"], "no_paths") + try: + limit = max(100, min(int(body.get("max_records") or 50_000), 500_000)) + except (TypeError, ValueError): + _bad(["max_records"]) + summary, lengths, samples = await run_in_threadpool(scan_dataset, paths, max_records=limit) + if "error" in summary: + raise HTTPException(status_code=422, detail={"error": "no_files", "message": summary["error"]}) + return _finite(_json_safe({"summary": summary, "histogram": _histogram(lengths), + "samples": samples[:5]})) + + @app.post("/api/tokenizer/start") + async def tokenizer_start(request: Request): + from chronos.workbench.tokenizer import parse_paths + values, bad = form_values(await _body(request), "tok") + if bad: + _bad(bad) + fields = [f.strip() for f in (values["fields"] or "").split(",") if f.strip()] + result = ui.tokenizer.start([ui.path(p) for p in parse_paths(values["paths"])], ui.path(values["out_dir"]), + values["vocab_size"], values["per_source"], fields, values["temperature"]) + if result in ("no_paths", "no_out", "no_files"): + _bad(["tok.paths" if result != "no_out" else "tok.out_dir"], result) + if result == "busy": + raise HTTPException(status_code=409, detail="busy") + return tokenizer_state() + + @app.get("/api/tokenizer/state") + def tokenizer_state(): + from chronos.workbench.tokenizer import read_report, report_rows, report_summary + state, log = ui.tokenizer.snapshot() + report = read_report(ui.tokenizer.out_dir) if ui.tokenizer.out_dir and state == "done" else {} + return _finite(_json_safe({"state": state, "log": log, "error": ui.tokenizer.error or None, + "out_dir": ui.tokenizer.out_dir, "summary": report_summary(report), + "rows": report_rows((report or {}).get("heldout_eval") or {})})) + + # ── training jobs (subprocess worker, run dir read by the monitor) ── + @app.post("/api/train/start") + async def train_start(request: Request): + from chronos.workbench.lazy_probe import ProbeSweep, expand_variants + body = await _body(request) + cfg, bad = sanitize_config(body.get("config") or {}) + train, bad_t = form_values(body.get("train") or {}, "train") + probe, bad_p = form_values(body.get("probe") or {}, "probe") + if bad or bad_t or bad_p: + _bad(bad + bad_t + bad_p) + sweep = probe_sweep(probe) + try: + ProbeSweep.from_dict(sweep) + except ValueError as exc: + _bad(["probe"], "probe_invalid", str(exc)) + stamp = time.strftime("%Y%m%d_%H%M%S") + run_name = f"webui_{stamp}" + run_dir = os.path.join(ui.runs_dir, run_name) + os.makedirs(run_dir, exist_ok=True) + cfg = {**base_config(), **cfg} + cfg["save_dir"] = ui.path(cfg.get("save_dir") or "./out") + stages = [] + modes = [m for m in STAGE_ORDER if m in train["stages"]] # canonical order, not click order + first_data = ui.paths(train["data_path"]) + _check_data(first_data, "train.data_path") + for i, mode in enumerate(modes): + own = ui.paths(train.get(f"data_{mode}") or "") if i else [] + _check_data(own, f"train.data_{mode}") + data = own or first_data + stages.append({"mode": mode, "data_paths": data, "data_path": data[0] if len(data) == 1 else "", + "init_weight": ui.path(train["init_weight"]) if i == 0 else "", + "teacher_path": ui.path(train["teacher_path"]) if mode == "distill" else "", + "max_steps": train["max_steps"], "val_ratio": train["val_ratio"], + "sample_prompt": train["sample_prompt"]}) + job_spec = {"run_dir": run_dir, "config": cfg, "stages": stages, "backend": train["backend"], + "lazy_probe": {"enabled": bool(probe["enabled"]), "sweep": sweep}} + job_path = os.path.join(run_dir, "job.json") + with open(job_path, "w", encoding="utf-8") as fh: + json.dump(job_spec, fh, indent=2, ensure_ascii=False) + variants, total = expand_variants(ProbeSweep.from_dict(sweep), lambda p: p) + try: + job = ui.jobs.spawn("train", [sys.executable, "-m", "chronos.workbench.train_worker", job_path], + cwd=REPO_ROOT, title=" → ".join(modes), + meta={"run": run_name, "run_dir": run_dir, "stages": modes}) + except JobBusy: + raise HTTPException(status_code=409, detail="busy") from None + return {"job": job.view(log_lines=0), "run": run_name, + "probe": {"enabled": bool(probe["enabled"]), "variants": len(variants), "requested": total}} + + @app.post("/api/probe/preview") + async def probe_preview(request: Request): + """How many combinations a probe form expands to (before ``auto`` paging resolves).""" + from chronos.workbench.lazy_probe import ProbeSweep, expand_variants, variant_label + probe, bad = form_values(await _body(request), "probe") + if bad: + _bad(bad) + try: + variants, total = expand_variants(ProbeSweep.from_dict(probe_sweep(probe)), lambda p: p) + except ValueError as exc: + _bad(["probe"], "probe_invalid", str(exc)) + return {"variants": len(variants), "requested": total, "labels": [variant_label(v) for v in variants]} + + @app.get("/api/jobs") + def jobs(kind: str | None = None): + return {"jobs": ui.jobs.list(kind)} + + @app.get("/api/jobs/{job_id}") + def job(job_id: str, log: int = 200): + try: + return _finite(_json_safe(ui.jobs.get(job_id).view(log_lines=max(0, min(int(log), 2000))))) + except KeyError: + raise HTTPException(status_code=404, detail="not_found") from None + + @app.post("/api/jobs/{job_id}/stop") + def job_stop(job_id: str): + try: + return ui.jobs.stop(job_id) + except KeyError: + raise HTTPException(status_code=404, detail="not_found") from None + + # ── run monitor (any run under runs_dir, including the CLI long runs) ── + def _mon(fn, *args, **kwargs): + try: + return _finite(_json_safe(fn(*args, **kwargs))) + except KeyError as exc: + raise HTTPException(status_code=404, detail=str(exc)) from exc + + @app.get("/api/monitor/runs") + def monitor_runs(): + return {"root": ui.monitor.root, "runs": _mon(ui.monitor.runs)} + + @app.get("/api/monitor/state") + def monitor_state(run: str | None = None, history: int = 1): + return _mon(ui.monitor.snapshot, run, history=bool(history)) + + @app.get("/api/monitor/metrics") + def monitor_metrics(run: str | None = None, phase: str | None = None, since: int = 0, limit: int = 5000): + return {"rows": _mon(ui.monitor.metrics, run, phase, since, max(1, min(int(limit), 20000)))} + + @app.get("/api/monitor/log") + def monitor_log(run: str | None = None, bytes: int = 16000): # noqa: A002 - query name + return {"text": _mon(ui.monitor.log_tail, run, max(1000, min(int(bytes), 400_000)))} + + @app.get("/api/monitor/parameters") + def monitor_parameters(run: str | None = None): + return _mon(ui.monitor.training_parameters, run) + + @app.get("/api/monitor/lazy_probes") + def monitor_probes(run: str | None = None, limit: int = 200): + return {"probes": _mon(ui.monitor.lazy_probes, run, max(1, min(int(limit), 1000)))} + + # ── inference (thread job; architecture comes from the checkpoint sidecar) ── + @app.post("/api/infer") + async def infer(request: Request): + from chronos.workbench.inference import generate_api + body = await _body(request) + cfg, bad = sanitize_config(body.get("config") or {}) + values, bad_i = form_values(body.get("infer") or {}, "infer") + prompt = body.get("prompt") + if bad or bad_i: + _bad(bad + bad_i) + if not isinstance(prompt, str) or not prompt.strip() or len(prompt) > 32_000: + _bad(["prompt"]) + model_path = ui.path(values["model_path"]) + if not model_path or not os.path.exists(model_path): + _bad(["infer.model_path"], "not_found") + + def work(job): + job.log(f"{values['mode']} · {values['backend']} · {os.path.basename(model_path)}") + out = generate_api({**base_config(), **cfg}, values["backend"], values["mode"], model_path, + prompt, values["max_tokens"], values["temperature"], values["raw_prompt"], + values["ram_load_ratio"], values["sweep_ram_ratios"], values["miss_policy"], + values["speculative"], values["draft_depth"], values["gamma"], + values["residency_planner"], values["paging"], values["residency_decay"], + values["decode_wait_s"], values["verify_wait_s"]) + if out.get("traceback"): + job.log(out.pop("traceback")) + if out.get("error"): + raise RuntimeError(out["error"]) + return _finite(_json_safe(out)) + + try: + job = ui.jobs.run("inference", work, title=os.path.basename(model_path)) + except JobBusy: + raise HTTPException(status_code=409, detail="busy") from None + return {"job": job.view(log_lines=0)} + + # ── export ────────────────────────────────────────────────────────── + @app.post("/api/export") + async def export(request: Request): + values, bad = form_values(await _body(request), "export") + if bad: + _bad(bad) + model_path = ui.path(values["model_path"]) + if not model_path or not os.path.isfile(model_path): + _bad(["export.model_path"], "not_found") + if not values["output_dir"]: + _bad(["export.output_dir"], "no_out") + + calibration = ui.paths(values["calibration_data_path"]) + if calibration and not all(os.path.exists(p) for p in calibration): + _bad(["export.calibration_data_path"], "not_found") + + def work(job): + from chronos.export import export_checkpoint, format_export_report + from chronos.workbench.files import merge_datasets + calibration_path = (merge_datasets(calibration, os.path.join(ui.workdir, "out", "merged_data"), + log=job.log) if calibration else None) + results = export_checkpoint( + model_path, ui.path(values["output_dir"]), formats=values["formats"], + config_path=ui.path(values["config_path"]) or None, + expert_cache_dir=ui.path(values["expert_cache_dir"]) or None, + copy_expert_cache=values["copy_cache"], auto_cluster=values["auto_cluster"], + calibration_data_path=calibration_path, + cluster_max_batches=values["cluster_max_batches"], cluster_batch_size=values["cluster_batch_size"], + cluster_max_seq_len=values["cluster_max_seq_len"], cluster_device=values["cluster_device"]) + job.log(format_export_report(results)) + return [{"format": r.format, "path": r.path, "size_mb": round(r.bytes / 2**20, 2), + "tensors": r.tensors} for r in results] + + try: + job = ui.jobs.run("export", work, title=os.path.basename(model_path)) + except JobBusy: + raise HTTPException(status_code=409, detail="busy") from None + return {"job": job.view(log_lines=0)} + + # ── Ollama / OpenAI-compatible server child ───────────────────────── + @app.post("/api/serve/start") + async def serve_start(request: Request): + from chronos.workbench.serve import build_serve_command + values, bad = form_values(await _body(request), "serve") + if bad: + _bad(bad) + serve_key = os.environ.get("CHRONOS_API_KEY", "") if values["allow_remote"] else "" + try: + argv, env = build_serve_command( + models_dir=ui.path(values["models_dir"]), host=values["host"], port=values["port"], + device=values["device"], dtype=values["dtype"], lazy_experts=values["lazy_experts"], + ram_expert_fraction=values["ram_expert_fraction"], allow_remote=values["allow_remote"], + api_key=serve_key, kv_cache_dtype=values["kv_cache_dtype"] or "", + mla_decode=values["mla_decode"] or "", router_scope=values["router_scope"] or "", + max_resident_experts=values["max_resident_experts"], ram_budget_mb=values["ram_budget_mb"], + monitor_runs_dir=ui.runs_dir, paging=values["paging"], mla_cache_rope=values["mla_cache_rope"]) + except ValueError as exc: + _bad([f"serve.{exc}" if str(exc) in ("models_dir", "port", "paging") else "serve.host"], str(exc)) + if ui.serve.start(argv, env, values["host"], values["port"]) == "busy": + raise HTTPException(status_code=409, detail="busy") + return serve_state() + + @app.post("/api/serve/stop") + def serve_stop(): + ui.serve.stop() + return serve_state() + + @app.get("/api/serve/state") + def serve_state(): + running, log = ui.serve.snapshot() + url = ui.serve.url if running else "" + addr = url.split("://", 1)[-1] if url else "" + return {"running": running, "url": url, "addr": addr, "auth": ui.serve.auth if running else False, + "log": log} + + # ── benchmark (benchmark_compare.py; external baseline optional) ── + bench_script = os.path.join(REPO_ROOT, "benchmark_compare.py") + bench_results = os.path.join(REPO_ROOT, "benchmark_results.json") + + def _bench_read(_job=None): + if not os.path.isfile(bench_results): + return None + with open(bench_results, encoding="utf-8") as fh: + return _finite(json.load(fh)) + + @app.post("/api/benchmark/start") + def benchmark_start(): + if not os.path.isfile(bench_script): + raise HTTPException(status_code=404, detail="not_found") + try: + job = ui.jobs.spawn("benchmark", [sys.executable, bench_script], cwd=REPO_ROOT, + title="benchmark_compare", on_exit=_bench_read) + except JobBusy: + raise HTTPException(status_code=409, detail="busy") from None + return {"job": job.view(log_lines=0)} + + @app.get("/api/benchmark/results") + def benchmark_results(): + return {"available": os.path.isfile(bench_script), "results": _bench_read(), + "metrics": [{"key": k, "label": label, "lower_is_better": low} for k, label, low in BENCH_METRICS]} + + # ── auto-tune (Optuna TPE; one search per server) ─────────────────── + @app.post("/api/autotune/start") + async def autotune_start(request: Request): + from chronos.tuning.chronos_auto_tuner import ChronosAutoTuner, ChronosSearchSpaceConfig + body = await _body(request) + values, bad = form_values(body.get("tune") or {}, "tune") + cfg, bad_c = sanitize_config(body.get("config") or {}) + if bad or bad_c: + _bad(bad + bad_c) + from chronos.workbench.files import data_files + data = ui.paths(values["data_path"]) + if not data or not all(os.path.exists(p) for p in data): + _bad(["tune.data_path"], "not_found") + if not data_files(data): + _bad(["tune.data_path"], "no_files") + data_path = data[0] + if ui.tuner is not None and ui.tuner.is_running(): + raise HTTPException(status_code=409, detail="busy") + cfg = {**base_config(), **cfg} + # The loop knobs are probed at the depth the user plans to train at: at least 2, at most 8 (the probe is short). + probe_depth = max(2, min(8, int(cfg.get("recurrent_depth") or 1))) + space = ChronosSearchSpaceConfig( + probe_recurrent_depth=probe_depth, + **{f"tune_{name}": name in values["search"] for name in schema.FIELDS["tune.search"].choices}) + out_dir = os.path.join(ui.workdir, "auto_tune_cache") + os.makedirs(out_dir, exist_ok=True) + ui.tuner, ui.tune_log = ChronosAutoTuner(), [] + ui.tuner.start(model_id=os.path.join(ui.path(cfg.get("save_dir") or "./out"), + f"chronos_{cfg.get('hidden_size', 256)}_moe.pth"), + dataset_path=data_path, train_ratio=0.95, prompt_template="alpaca", think_mode="keep", + search_space=space, n_trials=values["n_trials"], probe_steps=values["probe_steps"], + output_dir=out_dir, seed=42, + tokenizer_dir=ui.path(cfg["tokenizer_path"]) if cfg.get("tokenizer_path") else None) + return autotune_state() + + @app.post("/api/autotune/stop") + def autotune_stop(): + if ui.tuner is not None and ui.tuner.is_running(): + ui.tuner.stop() + return autotune_state() + + @app.get("/api/autotune/state") + def autotune_state(): + if ui.tuner is None: + return {"state": "idle", "log": [], "trials": [], "best": {}} + for event in ui.tuner.poll(): + if event.get("type") == "log": + ui.tune_log.append(str(event.get("line", ""))) + del ui.tune_log[:-500] + trials = [{"trial": tr.trial_number + 1, "params": tr.params, "loss": tr.train_loss, + "duration_s": tr.duration_s, "status": tr.status} for tr in list(ui.tuner.trials)[-200:]] + best = dict(ui.tuner.result.best_params) if ui.tuner.result and ui.tuner.result.best_params else {} + return _finite(_json_safe({"state": ui.tuner.status, "log": ui.tune_log[-200:], + "trials": trials, "best": best})) + + # ── live IO / cache metrics of this process ───────────────────────── + @app.get("/api/io") + def io_metrics(samples: int = 120): + from chronos.runtime.metrics import bus + keep = max(1, min(int(samples), 2000)) + return _finite({"series": {name: [[round(t, 3), v] for t, v in points[-keep:]] + for name, points in sorted(bus.snapshot().items())}}) + + return app + + +BENCH_METRICS = (("params_m", "bench.params", False), ("ram_model_gb", "bench.ram_model", True), + ("ram_train_gb", "bench.ram_train", True), ("ram_infer_gb", "bench.ram_infer", True), + ("tokens_per_sec", "bench.tps", False)) + + +def _histogram(lengths, bins: int = 24) -> dict: + """Record-length histogram (characters) for the Data page; log-spaced bins.""" + import math + values = [int(v) for v in lengths or () if v is not None and v >= 0] + if not values: + return {"edges": [], "counts": []} + lo, hi = max(1, min(values)), max(values) + if hi <= lo: + return {"edges": [lo, lo + 1], "counts": [len(values)]} + edges = sorted({int(round(math.exp(math.log(lo) + (math.log(hi + 1) - math.log(lo)) * i / bins))) + for i in range(bins + 1)}) + counts = [0] * (len(edges) - 1) + for v in values: + idx = min(len(counts) - 1, max(0, next((i for i, e in enumerate(edges[1:]) if v < e), len(counts) - 1))) + counts[idx] += 1 + return {"edges": edges, "counts": counts} + + +def main(argv=None) -> int: + import argparse + argv = list(sys.argv[1:] if argv is None else argv) + if "--legacy" in argv: # the Gradio console, unchanged + argv.remove("--legacy") + from chronos.app import main as legacy_main + sys.argv = ["chronos-ui"] + argv + return legacy_main() or 0 + parser = argparse.ArgumentParser(prog="chronos webui", description="Chronos Web UI (FastAPI + single-page app)") + parser.add_argument("--host", default="127.0.0.1") + parser.add_argument("--port", type=int, default=7860) + parser.add_argument("--workdir", default=".", help="base for relative paths (data, out/, runs/)") + parser.add_argument("--runs-dir", default="runs", help="run folders shown in the monitor (relative to --workdir)") + parser.add_argument("--lan", action="store_true", + help="also open the UI to this machine's local network (off by default). Browsers on other " + "machines log in with CHRONOS_UI_KEY, or with a key printed here when none is set; " + "this machine needs no login. Not for use behind a reverse proxy") + parser.add_argument("--allow-remote", action="store_true", + help="listen beyond loopback; needs a key in CHRONOS_UI_KEY or CHRONOS_API_KEY") + parser.add_argument("--max-upload-mb", type=int, default=MAX_UPLOAD_MB, + help="largest single file a LAN browser may upload (MiB)") + parser.add_argument("--no-native-dialog", action="store_true", + help="never open the system file dialog on this machine (e.g. when run over SSH)") + parser.add_argument("--allowed-host", action="append", default=[], + help="extra Host header value to accept (e.g. a reverse-proxy name); repeatable") + parser.add_argument("--session-hours", type=float, default=12.0) + parser.add_argument("--ssl-certfile", default=None) + parser.add_argument("--ssl-keyfile", default=None) + parser.add_argument("--legacy", action="store_true", help="start the old Gradio console instead") + parser.add_argument("--cpu-threads", default="auto", help="PyTorch/BLAS CPU threads for in-process work") + parser.add_argument("--cpu-budget-percent", type=float, default=100, + help="CPU physical-core budget used when --cpu-threads=auto") + parser.add_argument("--share", action="store_true", help=argparse.SUPPRESS) + args = parser.parse_args(argv) + if args.share: + parser.error("--share (a public Gradio tunnel) is not offered by this UI; use --allow-remote with a key " + "and TLS, or --legacy --share for the old Gradio console") + from chronos.trainer.device_utils import configure_cpu_threads + configure_cpu_threads(args.cpu_threads, budget_percent=args.cpu_budget_percent) + api_key = os.environ.get("CHRONOS_UI_KEY") or os.environ.get("CHRONOS_API_KEY") or None + extra, generated, lan = list(args.allowed_host), False, [] + if args.lan: + import secrets + import socket + if args.host in LOOPBACK: + args.host = "0.0.0.0" + args.allow_remote = True + if not api_key: + api_key, generated = secrets.token_urlsafe(18), True + lan = lan_addresses() + name = socket.gethostname().lower() + extra += lan + [name, f"{name.split('.')[0]}.local"] + if args.max_upload_mb < 1: + parser.error("--max-upload-mb must be at least 1") + problem = check_bind(args.host, args.allow_remote, api_key) + if problem: + parser.error("binding a non-loopback host requires --allow-remote and a key in CHRONOS_UI_KEY " + "or CHRONOS_API_KEY") + import uvicorn + app = create_app(args.workdir, runs_dir=args.runs_dir, api_key=api_key, + bind_host=args.host, extra_hosts=tuple(extra), session_hours=args.session_hours, + max_upload_mb=args.max_upload_mb, trust_local=args.lan, native_dialog=not args.no_native_dialog) + scheme = "https" if args.ssl_certfile else "http" + if args.lan: + print(f"[chronos webui] this machine: {scheme}://127.0.0.1:{args.port}/ (no login) " + f"workdir={os.path.abspath(args.workdir)}", flush=True) + for addr in lan or [""]: + print(f"[chronos webui] LAN: {scheme}://{addr}:{args.port}/ (login required)", flush=True) + if generated: + print(f"[chronos webui] LAN login key (generated for this run; set CHRONOS_UI_KEY to choose one): " + f"{api_key}", flush=True) + else: + shown = f"[{args.host}]" if ":" in args.host else args.host + auth = "login required" if api_key else "no auth (loopback only)" + print(f"[chronos webui] {scheme}://{shown}:{args.port}/ workdir={os.path.abspath(args.workdir)} {auth}", + flush=True) + if api_key and scheme == "http" and args.host not in LOOPBACK: + print("[chronos webui] warning: the login key crosses the network in clear text; use --ssl-certfile/" + "--ssl-keyfile or a TLS reverse proxy", flush=True) + uvicorn.run(app, host=args.host, port=args.port, log_level="warning", + ssl_certfile=args.ssl_certfile, ssl_keyfile=args.ssl_keyfile) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/chronos/webui/static/app.css b/chronos/webui/static/app.css new file mode 100644 index 0000000..3e890e8 --- /dev/null +++ b/chronos/webui/static/app.css @@ -0,0 +1,252 @@ +/* Chronos Web UI. Tokens first; light and dark are each selected, not flipped. */ +:root { + color-scheme: light; + --page: #f9f9f7; --surface: #fcfcfb; --surface-2: #f3f2ef; --line: #e1e0d9; --axis: #c3c2b7; + --ink: #0b0b0b; --ink-2: #52514e; --muted: #6f6d68; --accent: #2a78d6; --accent-ink: #ffffff; + --accent-soft: #e4effc; --focus: #2a78d6; + --s1: #2a78d6; --s2: #eb6834; --s3: #1baf7a; --s4: #eda100; --s5: #e87ba4; --s6: #008300; --s7: #6250d6; --s8: #e34948; + --good: #0ca30c; --warning: #fab219; --serious: #ec835a; --critical: #d03b3b; + --seq-lo: #cde2fb; --seq-hi: #104281; + --radius: 10px; --shadow: 0 1px 2px rgb(0 0 0 / 6%), 0 4px 16px rgb(0 0 0 / 5%); + --font: system-ui, -apple-system, "Segoe UI", "PingFang SC", "Hiragino Sans", "Noto Sans CJK SC", "Microsoft YaHei", sans-serif; + --mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace; +} +@media (prefers-color-scheme: dark) { + :root:where(:not([data-theme="light"])) { + color-scheme: dark; + --page: #0d0d0d; --surface: #1a1a19; --surface-2: #222220; --line: #2c2c2a; --axis: #383835; + --ink: #f0efec; --ink-2: #c3c2b7; --muted: #a09e97; --accent: #3987e5; --accent-ink: #ffffff; + --accent-soft: #1b2b40; --focus: #6da7ec; + --s1: #3987e5; --s2: #d95926; --s3: #199e70; --s4: #c98500; --s5: #d55181; --s6: #008300; --s7: #9085e9; --s8: #e66767; + --seq-lo: #1b2b40; --seq-hi: #86b6ef; + --shadow: 0 1px 2px rgb(0 0 0 / 40%), 0 4px 16px rgb(0 0 0 / 30%); + } +} +:root[data-theme="dark"] { + color-scheme: dark; + --page: #0d0d0d; --surface: #1a1a19; --surface-2: #222220; --line: #2c2c2a; --axis: #383835; + --ink: #f0efec; --ink-2: #c3c2b7; --muted: #a09e97; --accent: #3987e5; --accent-ink: #ffffff; + --accent-soft: #1b2b40; --focus: #6da7ec; + --s1: #3987e5; --s2: #d95926; --s3: #199e70; --s4: #c98500; --s5: #d55181; --s6: #008300; --s7: #9085e9; --s8: #e66767; + --seq-lo: #1b2b40; --seq-hi: #86b6ef; + --shadow: 0 1px 2px rgb(0 0 0 / 40%), 0 4px 16px rgb(0 0 0 / 30%); +} + +* { box-sizing: border-box; } +html, body { margin: 0; } +body { font: 14px/1.5 var(--font); color: var(--ink); background: var(--page); min-height: 100vh; } +h1, h2, h3, h4 { margin: 0; line-height: 1.25; font-weight: 600; } +h1 { font-size: 17px; } h2 { font-size: 18px; } h3 { font-size: 15px; } h4 { font-size: 13px; color: var(--ink-2); } +p { margin: 0; } +a { color: var(--accent); } +code, pre, .mono { font-family: var(--mono); font-size: 12.5px; } +:focus-visible { outline: 2px solid var(--focus); outline-offset: 2px; } +.skip { position: absolute; left: -9999px; } +.skip:focus { left: 12px; top: 8px; z-index: 50; background: var(--surface); padding: 6px 10px; border-radius: 6px; } +[hidden] { display: none !important; } + +/* top bar + shell */ +.top { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 10px 20px; + background: var(--surface); border-bottom: 1px solid var(--line); position: sticky; top: 0; z-index: 20; } +.brand { display: flex; align-items: center; gap: 10px; min-width: 0; } +.brand .sub { color: var(--muted); font-size: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } +.top-tools { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; justify-content: flex-end; } +.shell { display: grid; grid-template-columns: 200px minmax(0, 1fr); min-height: calc(100vh - 57px); } +.nav { padding: 14px 10px; border-right: 1px solid var(--line); background: var(--surface); position: sticky; + top: 57px; height: calc(100vh - 57px); overflow-y: auto; } +.nav a { display: flex; align-items: center; gap: 10px; padding: 8px 12px; border-radius: 8px; color: var(--ink-2); + text-decoration: none; font-weight: 500; } +.nav a:hover { background: var(--surface-2); color: var(--ink); } +.nav a[aria-current="page"] { background: var(--accent-soft); color: var(--ink); } +.nav a[aria-current="page"]::before { content: ""; width: 3px; height: 16px; border-radius: 2px; background: var(--accent); margin-left: -6px; } +.nav .dot { width: 7px; height: 7px; border-radius: 50%; background: var(--good); margin-left: auto; } +main { padding: 22px 28px 60px; max-width: 1360px; width: 100%; outline: none; } +@media (max-width: 860px) { + .shell { grid-template-columns: 1fr; } + .nav { position: static; height: auto; display: flex; flex-wrap: wrap; gap: 4px; border-right: 0; border-bottom: 1px solid var(--line); } + main { padding: 16px; } + .brand .sub { display: none; } +} +/* page furniture */ +.page-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 16px; margin-bottom: 18px; flex-wrap: wrap; } +.page-head p { color: var(--ink-2); margin-top: 4px; max-width: 72ch; } +.card { background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); padding: 16px 18px; box-shadow: var(--shadow); } +.card + .card, .stack > * + * { margin-top: 16px; } +.card > h3 { margin-bottom: 12px; display: flex; align-items: center; gap: 8px; } +.grid { display: grid; gap: 16px; } +.grid.two { grid-template-columns: repeat(auto-fit, minmax(380px, 1fr)); } +.grid.three { grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); } +.row { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; } +.row.end { justify-content: flex-end; } +.row.between { justify-content: space-between; } +.mt { margin-top: 12px; } +.note { color: var(--muted); font-size: 12.5px; } +.error { color: var(--critical); } +.badge { display: inline-flex; align-items: center; gap: 6px; padding: 3px 10px; border-radius: 999px; font-size: 12px; + background: var(--surface-2); color: var(--ink-2); border: 1px solid var(--line); white-space: nowrap; } +.badge::before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: var(--muted); } +.badge.good::before, .badge.running::before, .badge.finished::before, .badge.done::before { background: var(--good); } +.badge.warning::before, .badge.paused::before, .badge.stale::before, .badge.stopping::before { background: var(--warning); } +.badge.failed::before, .badge.error::before { background: var(--critical); } +.badge.running::before { animation: pulse 1.6s ease-in-out infinite; } +@keyframes pulse { 50% { opacity: .35; } } +@media (prefers-reduced-motion: reduce) { .badge.running::before { animation: none; } } +.pill { font-size: 11.5px; padding: 1px 8px; border-radius: 999px; background: var(--accent-soft); color: var(--ink); } + +/* controls */ +button, .button { font: inherit; font-weight: 500; border-radius: 8px; padding: 7px 14px; cursor: pointer; + border: 1px solid var(--line); background: var(--surface); color: var(--ink); min-height: 34px; } +button:hover { background: var(--surface-2); } +button.primary { background: var(--accent); color: var(--accent-ink); border-color: var(--accent); } +button.primary:hover { filter: brightness(1.08); } +button.danger { color: var(--critical); } +button.ghost { background: transparent; border-color: transparent; } +button:disabled { opacity: .5; cursor: not-allowed; } +input, select, textarea { font: inherit; color: var(--ink); background: var(--surface); border: 1px solid var(--axis); + border-radius: 7px; padding: 6px 9px; min-height: 34px; width: 100%; } +textarea { min-height: 84px; resize: vertical; font-family: var(--font); } +input[type="checkbox"] { width: 18px; height: 18px; min-height: 0; accent-color: var(--accent); margin: 0; } +input[type="range"] { padding: 0; accent-color: var(--accent); } +input:invalid, .field.bad input, .field.bad select { border-color: var(--critical); } +label.compact { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; color: var(--ink-2); } +label.compact select { width: auto; min-height: 30px; padding: 3px 6px; } + +/* schema-driven forms */ +.fields { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: 12px 16px; } +.field { display: flex; flex-direction: column; gap: 5px; min-width: 0; } +.field > .label { display: flex; align-items: center; gap: 6px; font-size: 12.5px; font-weight: 500; color: var(--ink-2); } +.field > .label .name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } +.field .help-dot { flex: none; width: 16px; height: 16px; border-radius: 50%; border: 1px solid var(--axis); color: var(--muted); + font-size: 10.5px; line-height: 14px; text-align: center; cursor: help; background: transparent; padding: 0; min-height: 0; } +.field .help-dot:hover, .field .help-dot:focus-visible { border-color: var(--accent); color: var(--accent); } +.field .rec { margin-left: auto; font-size: 10.5px; color: var(--muted); white-space: nowrap; } +.field.changed .rec::after { content: " •"; color: var(--accent); } +.field.bool { flex-direction: row; align-items: center; gap: 10px; padding-top: 18px; } +.field.bool > .label { order: 2; } +.field.wide { grid-column: 1 / -1; } +.chips { display: flex; flex-wrap: wrap; gap: 6px; } +.chips label { display: inline-flex; align-items: center; gap: 6px; padding: 4px 10px; border: 1px solid var(--axis); + border-radius: 999px; cursor: pointer; font-size: 12.5px; user-select: none; } +.chips input { position: absolute; opacity: 0; width: 1px; height: 1px; } +.chips label:has(input:checked) { background: var(--accent-soft); border-color: var(--accent); color: var(--ink); } +.chips label:has(input:focus-visible) { outline: 2px solid var(--focus); outline-offset: 2px; } +details.group { border-top: 1px solid var(--line); padding: 12px 0 4px; } +details.group:first-of-type { border-top: 0; padding-top: 0; } +details.group > summary { cursor: pointer; font-weight: 600; font-size: 14px; list-style: none; display: flex; align-items: center; gap: 8px; margin-bottom: 10px; } +details.group > summary::before { content: "▸"; color: var(--muted); transition: transform .15s; } +details.group[open] > summary::before { transform: rotate(90deg); } +.adv-toggle { margin-top: 10px; } +/* path fields: input + browse button; several paths are one per line */ +.path-box { display: flex; flex-direction: column; gap: 4px; min-width: 0; } +.path-row { display: flex; flex-wrap: wrap; gap: 6px; align-items: flex-start; min-width: 0; } +.path-row > input, .path-row > textarea { flex: 1 1 220px; min-width: 0; } +.upload-note { margin: 0; overflow-wrap: anywhere; } +.path-row > .browse, .path-row > .upload { flex: none; white-space: nowrap; } +textarea.paths { min-height: 34px; resize: vertical; font-family: var(--mono); font-size: 12.5px; line-height: 1.5; white-space: pre; overflow-x: auto; } +.path-note { margin: 0; } +.fields { container-type: inline-size; } +@container (min-width: 500px) { .field.path { grid-column: span 2; } } +/* file picker dialog */ +dialog.picker { width: min(760px, 94vw); padding: 0; display: flex; flex-direction: column; max-height: min(640px, 88vh); } +dialog.picker:not([open]) { display: none; } +.picker-head { display: flex; align-items: center; justify-content: space-between; padding: 14px 18px 8px; } +.picker-head button { font-size: 18px; line-height: 1; padding: 4px 10px; } +.picker-bar { display: flex; gap: 6px; padding: 0 18px; align-items: center; } +.picker-bar button { flex: none; white-space: nowrap; } +.picker-bar input { font-family: var(--mono); font-size: 12.5px; } +.picker-roots { display: flex; flex-wrap: wrap; gap: 6px; padding: 10px 18px 8px; } +.picker-roots button { min-height: 28px; padding: 2px 10px; font-size: 12.5px; } +.picker-list { list-style: none; margin: 0 18px; padding: 4px; border: 1px solid var(--line); border-radius: 8px; + overflow-y: auto; flex: 1; min-height: 220px; background: var(--page); } +.picker-list:focus-visible { outline: 2px solid var(--focus); outline-offset: 1px; } +.picker-item { display: grid; grid-template-columns: 18px minmax(0, 1fr) auto auto; align-items: center; gap: 4px 10px; + padding: 5px 8px; border-radius: 6px; cursor: default; user-select: none; } +.picker-item:hover { background: var(--surface-2); } +.picker-item.cursor { box-shadow: inset 0 0 0 1px var(--axis); } +.picker-item[aria-selected="true"] { background: var(--accent-soft); box-shadow: inset 0 0 0 1px var(--accent); } +.picker-item.dir { cursor: pointer; } +.picker-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } +.picker-meta { color: var(--muted); font-size: 11.5px; font-variant-numeric: tabular-nums; white-space: nowrap; } +.picker-icon { fill: none; stroke: var(--muted); stroke-width: 1.2; stroke-linejoin: round; } +.picker-item.dir .picker-icon { stroke: var(--accent); } +.picker-empty { color: var(--muted); padding: 18px; text-align: center; } +.picker-foot { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 12px; padding: 10px 18px 16px; } +.picker-foot .note { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } +dialog.picker label.compact { flex-direction: row; white-space: nowrap; } +@media (max-width: 640px) { .picker-foot { grid-template-columns: 1fr; } .picker-item { grid-template-columns: 18px minmax(0, 1fr) auto; } .picker-item .picker-meta:last-child { display: none; } } + +/* tooltip (one element, positioned by app.js; never gates information) */ +.tooltip { position: fixed; z-index: 60; max-width: 360px; background: var(--surface); color: var(--ink); + border: 1px solid var(--line); border-radius: 8px; box-shadow: var(--shadow); padding: 10px 12px; font-size: 12.5px; pointer-events: none; } +.tooltip .t-title { font-weight: 600; margin-bottom: 4px; } +.tooltip .t-help { color: var(--ink-2); } +.tooltip dl { display: grid; grid-template-columns: auto 1fr; gap: 2px 10px; margin: 8px 0 0; } +.tooltip dt { color: var(--muted); } +.tooltip dd { margin: 0; font-family: var(--mono); font-size: 12px; overflow-wrap: anywhere; } +.tooltip .t-row { display: flex; align-items: center; gap: 8px; } +.tooltip .t-row b { font-variant-numeric: tabular-nums; } +.tooltip .key { width: 12px; height: 2px; border-radius: 1px; flex: none; } + +/* stat tiles */ +.tiles { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 12px; } +.tile { background: var(--surface); border: 1px solid var(--line); border-radius: var(--radius); padding: 12px 14px; } +.tile .k { font-size: 12px; color: var(--muted); } +.tile .v { font-size: 22px; font-weight: 600; font-variant-numeric: tabular-nums; margin-top: 2px; } +.tile .s { font-size: 11.5px; color: var(--muted); margin-top: 2px; } + +/* tables */ +.table-wrap { overflow-x: auto; border: 1px solid var(--line); border-radius: 8px; } +table { border-collapse: collapse; width: 100%; font-size: 12.5px; } +th, td { padding: 6px 10px; text-align: left; border-bottom: 1px solid var(--line); white-space: nowrap; } +th { font-weight: 600; color: var(--ink-2); background: var(--surface-2); position: sticky; top: 0; } +td.num, th.num { text-align: right; font-variant-numeric: tabular-nums; } +tr:last-child td { border-bottom: 0; } +tbody tr:hover { background: var(--surface-2); } + +/* charts */ +.chart { position: relative; } +.chart svg { display: block; width: 100%; height: auto; overflow: visible; } +.chart .grid-line { stroke: var(--line); stroke-width: 1; } +.chart .axis-line { stroke: var(--axis); stroke-width: 1; } +.chart text { fill: var(--muted); font-size: 11px; font-family: var(--font); } +.chart .series { fill: none; stroke-width: 2; stroke-linejoin: round; stroke-linecap: round; } +.chart .end-dot { stroke: var(--surface); stroke-width: 2; } +.chart .crosshair { stroke: var(--axis); stroke-width: 1; } +.chart .bar:hover, .chart .bar:focus { filter: brightness(1.12); outline: none; } +.chart-head { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; margin-bottom: 6px; flex-wrap: wrap; } +.legend { display: flex; flex-wrap: wrap; gap: 4px 14px; font-size: 12px; color: var(--ink-2); } +.legend span { display: inline-flex; align-items: center; gap: 6px; } +.legend i { display: inline-block; width: 14px; height: 2px; border-radius: 1px; } +.legend i.box { width: 10px; height: 10px; border-radius: 2px; } +.empty { color: var(--muted); padding: 24px; text-align: center; border: 1px dashed var(--line); border-radius: 8px; } + +/* logs, outputs */ +pre.log { background: var(--surface-2); border: 1px solid var(--line); border-radius: 8px; padding: 10px 12px; + max-height: 340px; overflow: auto; white-space: pre-wrap; word-break: break-word; margin: 0; } +.output { white-space: pre-wrap; background: var(--surface-2); border-radius: 8px; padding: 12px; min-height: 64px; border: 1px solid var(--line); } +.progress { height: 8px; background: var(--surface-2); border-radius: 4px; overflow: hidden; } +.progress > div { height: 100%; background: var(--accent); border-radius: 4px; transition: width .4s; } +.phase-row { display: grid; grid-template-columns: minmax(96px, 160px) 1fr minmax(120px, auto); align-items: center; gap: 12px; } +.phase-row + .phase-row { margin-top: 8px; } +.phase-name { font-weight: 500; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } +.phase-row .note { text-align: right; font-variant-numeric: tabular-nums; } +@media (max-width: 640px) { .phase-row { grid-template-columns: 1fr; gap: 4px; } .phase-row .note { text-align: left; } } +.chart-block { min-width: 0; } +.sample { padding: 10px 0; display: grid; gap: 4px; overflow-wrap: anywhere; } +.sample + .sample { border-top: 1px solid var(--line); } +.tabs { display: flex; gap: 4px; border-bottom: 1px solid var(--line); margin-bottom: 12px; } +.tabs button { border: 0; border-bottom: 2px solid transparent; border-radius: 0; background: transparent; color: var(--ink-2); } +.tabs button[aria-selected="true"] { border-bottom-color: var(--accent); color: var(--ink); } + +/* toasts, dialog */ +.toasts { position: fixed; right: 18px; bottom: 18px; display: flex; flex-direction: column; gap: 8px; z-index: 70; } +.toast { background: var(--surface); border: 1px solid var(--line); border-left: 3px solid var(--accent); border-radius: 8px; + padding: 10px 14px; box-shadow: var(--shadow); max-width: 420px; } +.toast.error { border-left-color: var(--critical); color: var(--ink); } +dialog { border: 1px solid var(--line); border-radius: 12px; background: var(--surface); color: var(--ink); padding: 20px; width: min(420px, 92vw); } +dialog::backdrop { background: rgb(0 0 0 / 45%); } +dialog form > * + * { margin-top: 12px; } +dialog label { display: flex; flex-direction: column; gap: 6px; } +@media (forced-colors: active) { + .chart .series { stroke: CanvasText; } .badge::before { forced-color-adjust: none; } +} diff --git a/chronos/webui/static/app.js b/chronos/webui/static/app.js new file mode 100644 index 0000000..605de0e --- /dev/null +++ b/chronos/webui/static/app.js @@ -0,0 +1,165 @@ +// Entry point: session, language, theme, navigation, page lifecycle and polling. +import { state, t, h, api, post, loadLanguage, saveLanguage, preferredLanguage, translateStatic, applyTheme, savedTheme, + setUnauthorizedHandler, reportError, hideTip, clear, setTip } from "./core.js"; +import { renderConfig } from "./pages_config.js"; +import { renderData, renderTokenizer } from "./pages_data.js"; +import { renderTrain } from "./pages_train.js"; +import { renderMonitor } from "./pages_monitor.js"; +import { renderInference } from "./pages_infer.js"; +import { renderExport, renderServe, renderBenchmark, renderAutotune, renderIO } from "./pages_ops.js"; + +const PAGES = [ + ["config", renderConfig], ["data", renderData], ["tokenizer", renderTokenizer], ["train", renderTrain], + ["monitor", renderMonitor], ["inference", renderInference], ["export", renderExport], ["serve", renderServe], + ["benchmark", renderBenchmark], ["autotune", renderAutotune], ["io", renderIO], +]; +const ROUTES = new Map(PAGES); +let current = null; // { id, timer, poll, alive } + +function route() { + const id = location.hash.replace(/^#\/?/, ""); + return ROUTES.has(id) ? id : "config"; +} + +function renderNav(active) { + const nav = document.getElementById("nav"); + nav.setAttribute("aria-label", t("ui.sections")); + nav.replaceChildren(...PAGES.map(([id]) => h("a", { href: `#${id}`, "aria-current": id === active ? "page" : null, text: t(`nav.${id}`) }))); +} + +function stopPage() { + if (!current) return; + current.alive = false; + clearTimeout(current.timer); + current = null; +} + +// Each page may register one poller: it returns the delay to the next call (0 = stop). +function makePage(id) { + const page = { id, alive: true, timer: 0, fn: null }; + const tick = async () => { + if (!page.alive || !page.fn) return; + clearTimeout(page.timer); + let delay = 0; + try { delay = await page.fn(); } catch (err) { reportError(err); delay = 10000; } + if (page.alive && delay > 0) page.timer = setTimeout(tick, document.hidden ? Math.max(delay, 15000) : delay); + }; + page.poll = (fn) => { page.fn = fn; tick(); }; + page.refresh = () => { if (page.fn) tick(); }; + return page; +} + +async function show({ focus = false } = {}) { + stopPage(); + hideTip(); + const id = route(); + renderNav(id); + const main = document.getElementById("main"); + clear(main); + current = makePage(id); + const page = current; + try { + await ROUTES.get(id)(main, page); + } catch (err) { + reportError(err); + main.append(h("div", { class: "empty", text: t("ui.error") })); + } + if (focus && page.alive) main.focus({ preventScroll: true }); +} + +document.addEventListener("chronos:refresh", () => { if (current) current.refresh(); }); +document.addEventListener("visibilitychange", () => { if (!document.hidden && current) current.refresh(); }); +window.addEventListener("hashchange", () => show({ focus: true })); +// ── session / login ──────────────────────────────────────────────────── +function paintSession() { + const s = state.session || {}; + const badgeEl = document.getElementById("auth-badge"); + // local_only: loopback, LAN off · lan_local: this machine while LAN is on · lan: another machine, signed in + const mode = s.access === "lan" ? "lan" : (s.lan_enabled ? "lan_local" : "local_only"); + badgeEl.className = `badge ${mode === "lan_local" ? "warning" : (mode === "lan" ? "good" : "")}`; + badgeEl.textContent = t({ local_only: "ui.local_only", lan_local: "ui.lan_local", lan: "ui.remote_auth" }[mode]); + setTip(badgeEl, t(`ui.access_tip.${mode}`)); + document.getElementById("logout").hidden = !(s.auth_required && s.authenticated); +} + +let loginOpen = false; +function askLogin() { + const dialog = document.getElementById("login-dialog"); + if (loginOpen) return; + loginOpen = true; + stopPage(); + document.getElementById("login-error").hidden = true; + dialog.showModal(); + document.getElementById("login-key").focus(); +} + +async function onLogin(event) { + event.preventDefault(); + const input = document.getElementById("login-key"); + const error = document.getElementById("login-error"); + try { + await post("/api/login", { key: input.value }); + input.value = ""; + loginOpen = false; + document.getElementById("login-dialog").close(); + state.session = await api("/api/session"); + paintSession(); + await start(); + } catch (err) { + error.textContent = err.status === 429 ? t("ui.login_blocked") : t("ui.login_failed"); + error.hidden = false; + } +} + +async function onLogout() { + try { await post("/api/logout"); } catch (err) { reportError(err); } + state.session = await api("/api/session"); + paintSession(); + askLogin(); +} + +// ── language / theme ─────────────────────────────────────────────────── +async function setLanguage(lang) { + await loadLanguage(lang); + saveLanguage(state.lang); + document.getElementById("lang-select").value = state.lang; + translateStatic(); + paintSession(); + if (state.schema) await show(); +} + +let started = false; +async function start() { + if (!state.schema) { + state.schema = await api("/api/schema"); + state.fields = Object.fromEntries(state.schema.fields.map((f) => [f.key, f])); + } + started = true; + await show(); +} + +async function boot() { + applyTheme(savedTheme()); + const theme = document.getElementById("theme-select"); + theme.value = savedTheme(); + theme.addEventListener("change", () => applyTheme(theme.value)); + const lang = document.getElementById("lang-select"); + lang.addEventListener("change", () => setLanguage(lang.value).catch(reportError)); + document.getElementById("login-form").addEventListener("submit", onLogin); + document.getElementById("login-dialog").addEventListener("cancel", (e) => e.preventDefault()); + document.getElementById("logout").addEventListener("click", onLogout); + setUnauthorizedHandler(askLogin); + + await loadLanguage(preferredLanguage()); + lang.value = state.lang; + translateStatic(); + state.session = await api("/api/session"); + paintSession(); + if (state.session.auth_required && !state.session.authenticated) { askLogin(); return; } + await start(); +} + +boot().catch((err) => { + reportError(err); + if (!started) document.getElementById("main").append(h("div", { class: "empty", text: String(err.message || err) })); +}); diff --git a/chronos/webui/static/charts.js b/chronos/webui/static/charts.js new file mode 100644 index 0000000..2f10a38 --- /dev/null +++ b/chronos/webui/static/charts.js @@ -0,0 +1,250 @@ +// Inline-SVG charts: line (crosshair + tooltip listing every series), horizontal +// bars, histogram. Each chart has a legend (>= 2 series) and a table view. +// Colors come from CSS custom properties, so light and dark are both selected. +import { h, t, num, clear, showTipAt, hideTip, SERIES } from "./core.js"; + +const NS = "http://www.w3.org/2000/svg"; +export function s(tag, attrs, ...kids) { + const el = document.createElementNS(NS, tag); + for (const [k, v] of Object.entries(attrs || {})) { + if (v === undefined || v === null) continue; + // var() colors go through CSSOM: presentation attributes do not resolve custom properties everywhere, + // and the CSP forbids style attributes. + if ((k === "fill" || k === "stroke") && String(v).startsWith("var(")) el.style[k] = v; + else el.setAttribute(k, String(v)); + } + for (const kid of kids) if (kid !== null && kid !== undefined) el.append(kid instanceof Node ? kid : document.createTextNode(String(kid))); + return el; +} +export const color = (i) => `var(${SERIES[((i % SERIES.length) + SERIES.length) % SERIES.length]})`; + +function niceStep(span, count) { + const raw = span / Math.max(1, count); + const mag = 10 ** Math.floor(Math.log10(raw)); + const n = raw / mag; + return (n <= 1 ? 1 : n <= 2 ? 2 : n <= 5 ? 5 : 10) * mag; +} +export function ticks(lo, hi, count = 4) { + if (!(hi > lo)) { const pad = Math.abs(lo) * 0.1 || 1; lo -= pad; hi += pad; } + const step = niceStep(hi - lo, count); + const a = Math.floor(lo / step) * step; const b = Math.ceil(hi / step) * step; + const values = []; + for (let v = a; v <= b + step * 1e-9; v += step) values.push(Math.abs(v) < step * 1e-9 ? 0 : v); + return { lo: a, hi: b, values }; +} +const extent = (vals) => [Math.min(...vals), Math.max(...vals)]; +const textWidth = (str) => [...String(str)].reduce((w, ch) => w + (ch.charCodeAt(0) > 0x2e7f ? 11 : 6.4), 0); + +// Frame shared by every chart: title, legend, chart/table toggle, resize. +function frame({ title, legend, draw, tableOf, note }) { + const body = h("div", { class: "chart" }); + const head = h("div", { class: "chart-head" }); + const view = { table: false }; + const toggle = h("button", { type: "button", class: "ghost", text: t("ui.table_view"), + onclick: () => { view.table = !view.table; toggle.textContent = t(view.table ? "ui.chart_view" : "ui.table_view"); paint(); } }); + head.append(h("h4", { text: title || "" }), + h("div", { class: "row" }, legend && legend.length >= 2 ? h("div", { class: "legend" }, legend.map((l) => { + const sw = h("i", { class: l.box ? "box" : null }); sw.style.background = l.color; + return h("span", null, sw, l.label); + })) : null, toggle)); + const wrap = h("div", { class: "chart-block" }, head, body, note ? h("p", { class: "note", text: note }) : null); + let lastWidth = 0; + const paint = () => { + clear(body); + if (view.table) { body.append(tableOf()); return; } + const width = Math.max(260, Math.floor(body.clientWidth || wrap.clientWidth || 640)); + lastWidth = width; + body.append(draw(width)); + }; + const ro = new ResizeObserver(() => { + const w = Math.floor(body.clientWidth); + if (!view.table && w && Math.abs(w - lastWidth) > 4) paint(); + }); + ro.observe(body); + requestAnimationFrame(paint); + return wrap; +} + +export function emptyState(text) { return h("div", { class: "empty", text: text || t("ui.empty") }); } +function tipBody(title, rows) { + return h("div", null, h("div", { class: "t-title", text: title }), rows.map((r) => { + const key = h("i", { class: "key" }); key.style.background = r.color; + return h("div", { class: "t-row" }, key, h("span", { text: r.label }), h("b", { text: r.value })); + })); +} + +// series: [{label, color?, points: [[x, y], ...]}]; colors follow the entity (index given by caller). +export function lineChart({ title, series, xLabel, yFmt = (v) => num(v, 3), xFmt = (v) => num(v, 0), height = 220, note, empty }) { + const live = (series || []).map((sr, i) => ({ ...sr, color: sr.color || color(i), + points: (sr.points || []).filter((p) => p && Number.isFinite(p[0]) && Number.isFinite(p[1])).sort((a, b) => a[0] - b[0]) })) + .filter((sr) => sr.points.length); + if (!live.length) return h("div", { class: "chart-block" }, h("h4", { text: title || "" }), emptyState(empty)); + const xs = [...new Set(live.flatMap((sr) => sr.points.map((p) => p[0])))].sort((a, b) => a - b); + const [y0, y1] = extent(live.flatMap((sr) => sr.points.map((p) => p[1]))); + const yt = ticks(y0, y1, 4); + const at = (sr, x) => { // nearest point of one series to x + let lo = 0; let hi = sr.points.length - 1; + while (hi - lo > 1) { const mid = (lo + hi) >> 1; if (sr.points[mid][0] < x) lo = mid; else hi = mid; } + return Math.abs(sr.points[lo][0] - x) <= Math.abs(sr.points[hi][0] - x) ? sr.points[lo] : sr.points[hi]; + }; + const draw = (width) => { + const left = Math.max(...yt.values.map((v) => textWidth(yFmt(v)))) + 12; + const m = { l: left, r: 14, t: 10, b: xLabel ? 40 : 26 }; + const W = width - m.l - m.r; const H = height - m.t - m.b; + const [xa, xb] = xs.length > 1 ? [xs[0], xs[xs.length - 1]] : [xs[0] - 1, xs[0] + 1]; + const X = (x) => m.l + ((x - xa) / (xb - xa)) * W; + const Y = (y) => m.t + H - ((y - yt.lo) / (yt.hi - yt.lo)) * H; + const svg = s("svg", { width, height, viewBox: `0 0 ${width} ${height}`, role: "img", "aria-label": title || "" }); + for (const v of yt.values) { + svg.append(s("line", { class: "grid-line", x1: m.l, x2: m.l + W, y1: Y(v), y2: Y(v) }), + s("text", { x: m.l - 8, y: Y(v) + 4, "text-anchor": "end" }, yFmt(v))); + } + svg.append(s("line", { class: "axis-line", x1: m.l, x2: m.l + W, y1: m.t + H, y2: m.t + H })); + const xt = ticks(xa, xb, Math.max(2, Math.floor(W / 110))).values.filter((v) => v >= xa && v <= xb); + for (const v of xt) svg.append(s("text", { x: X(v), y: m.t + H + 16, "text-anchor": "middle" }, xFmt(v))); + if (xLabel) svg.append(s("text", { x: m.l + W / 2, y: height - 6, "text-anchor": "middle" }, xLabel)); + for (const sr of live) { + const d = sr.points.map((p, i) => `${i ? "L" : "M"}${X(p[0]).toFixed(1)},${Y(p[1]).toFixed(1)}`).join(""); + svg.append(s("path", { class: "series", d, stroke: sr.color })); + const last = sr.points[sr.points.length - 1]; + svg.append(s("circle", { class: "end-dot", cx: X(last[0]), cy: Y(last[1]), r: 4, fill: sr.color })); + } + const cross = s("line", { class: "crosshair", y1: m.t, y2: m.t + H, visibility: "hidden" }); + const dots = live.map((sr) => s("circle", { class: "end-dot", r: 4, fill: sr.color, visibility: "hidden" })); + svg.append(cross, ...dots); + const overlay = s("rect", { x: m.l, y: m.t, width: W, height: H, fill: "transparent", tabindex: 0, + "aria-label": `${title || ""}: ${t("ui.table_view")}` }); + let index = xs.length - 1; + const show = (i, cx, cy) => { + index = Math.max(0, Math.min(xs.length - 1, i)); + const x = xs[index]; + cross.setAttribute("x1", X(x)); cross.setAttribute("x2", X(x)); cross.setAttribute("visibility", "visible"); + const rows = live.map((sr, j) => { + const p = at(sr, x); + dots[j].setAttribute("cx", X(p[0])); dots[j].setAttribute("cy", Y(p[1])); dots[j].setAttribute("visibility", "visible"); + return { color: sr.color, label: sr.label, value: yFmt(p[1]) }; + }); + const box = svg.getBoundingClientRect(); + showTipAt(cx ?? box.left + X(x), cy ?? box.top + m.t, tipBody(`${xLabel ? `${xLabel} ` : ""}${xFmt(x)}`, rows)); + }; + const hide = () => { cross.setAttribute("visibility", "hidden"); dots.forEach((d) => d.setAttribute("visibility", "hidden")); hideTip(); }; + overlay.addEventListener("pointermove", (e) => { + const box = svg.getBoundingClientRect(); + const x = xa + ((e.clientX - box.left - m.l) / W) * (xb - xa); + let best = 0; + for (let i = 1; i < xs.length; i += 1) if (Math.abs(xs[i] - x) < Math.abs(xs[best] - x)) best = i; + show(best, e.clientX, e.clientY); + }); + overlay.addEventListener("pointerleave", hide); + overlay.addEventListener("blur", hide); + overlay.addEventListener("focus", () => show(index)); + overlay.addEventListener("keydown", (e) => { + if (e.key === "ArrowLeft") { show(index - 1); e.preventDefault(); } + if (e.key === "ArrowRight") { show(index + 1); e.preventDefault(); } + }); + svg.append(overlay); + return svg; + }; + const tableOf = () => { + const rows = xs.slice(-500).map((x) => [x, ...live.map((sr) => { const p = at(sr, x); return p[0] === x ? p[1] : null; })]); + return h("div", { class: "table-wrap" }, h("table", null, + h("thead", null, h("tr", null, h("th", { class: "num", text: xLabel || "x" }), live.map((sr) => h("th", { class: "num", text: sr.label })))), + h("tbody", null, rows.map((r) => h("tr", null, h("td", { class: "num", text: xFmt(r[0]) }), + r.slice(1).map((v) => h("td", { class: "num", text: v === null ? "–" : yFmt(v) }))))))); + }; + return frame({ title, legend: live.map((sr) => ({ label: sr.label, color: sr.color })), draw, tableOf, note }); +} +// Bar with a 4px rounded data end; the baseline end stays square. +function barPath(x, y, w, hgt, horizontal) { + const r = Math.min(4, Math.abs(horizontal ? w : hgt) / 2, (horizontal ? hgt : w) / 2); + if (horizontal) { + if (w <= 0) return ""; + return `M${x},${y}h${w - r}a${r},${r} 0 0 1 ${r},${r}v${hgt - 2 * r}a${r},${r} 0 0 1 ${-r},${r}h${-(w - r)}z`; + } + if (hgt <= 0) return ""; + return `M${x},${y + hgt}v${-(hgt - r)}a${r},${r} 0 0 1 ${r},${-r}h${w - 2 * r}a${r},${r} 0 0 1 ${r},${r}v${hgt - r}z`; +} + +function markTip(el, content) { + el.setAttribute("tabindex", "0"); + const show = (e) => { + const box = el.getBoundingClientRect(); + showTipAt(e && e.clientX !== undefined ? e.clientX : box.right, e && e.clientY !== undefined ? e.clientY : box.top, content()); + }; + el.addEventListener("pointermove", show); + el.addEventListener("focus", () => show()); + el.addEventListener("pointerleave", () => hideTip()); + el.addEventListener("blur", () => hideTip()); +} + +// Horizontal grouped bars: categories down the side, one bar per series. +export function barChart({ title, categories, series, fmt = (v) => num(v, 2), note, empty }) { + const live = (series || []).map((sr, i) => ({ ...sr, color: sr.color || color(i) })); + const values = live.flatMap((sr) => sr.values.filter((v) => Number.isFinite(v))); + if (!values.length) return h("div", { class: "chart-block" }, h("h4", { text: title || "" }), emptyState(empty)); + const bar = live.length > 1 ? 14 : 18; const gap = 2; const groupGap = 14; + const groupH = live.length * bar + (live.length - 1) * gap; + const height = categories.length * (groupH + groupGap) + 24; + const max = Math.max(0, ...values); const min = Math.min(0, ...values); + const xt = ticks(min, max, 4); + const draw = (width) => { + const left = Math.min(220, Math.max(...categories.map(textWidth)) + 14); + const right = Math.max(...values.map((v) => textWidth(fmt(v)))) + 14; + const W = width - left - right; + const X = (v) => left + ((v - xt.lo) / (xt.hi - xt.lo)) * W; + const svg = s("svg", { width, height, viewBox: `0 0 ${width} ${height}`, role: "img", "aria-label": title || "" }); + for (const v of xt.values) svg.append(s("line", { class: "grid-line", x1: X(v), x2: X(v), y1: 0, y2: height - 20 }), + s("text", { x: X(v), y: height - 6, "text-anchor": "middle" }, fmt(v))); + categories.forEach((cat, ci) => { + const gy = ci * (groupH + groupGap) + 4; + svg.append(s("text", { x: left - 10, y: gy + groupH / 2 + 4, "text-anchor": "end" }, cat)); + live.forEach((sr, si) => { + const v = sr.values[ci]; + if (!Number.isFinite(v)) return; + const y = gy + si * (bar + gap); + const x0 = X(Math.max(0, xt.lo)); const x1 = X(v); + const el = s("path", { class: "bar", d: barPath(Math.min(x0, x1), y, Math.max(1, Math.abs(x1 - x0)), bar, true), fill: sr.color }); + markTip(el, () => tipBody(cat, [{ color: sr.color, label: sr.label, value: fmt(v) }])); + svg.append(el, s("text", { x: Math.max(x0, x1) + 6, y: y + bar / 2 + 4 }, fmt(v))); + }); + }); + svg.append(s("line", { class: "axis-line", x1: X(Math.max(0, xt.lo)), x2: X(Math.max(0, xt.lo)), y1: 0, y2: height - 20 })); + return svg; + }; + const tableOf = () => h("div", { class: "table-wrap" }, h("table", null, + h("thead", null, h("tr", null, h("th", { text: "" }), live.map((sr) => h("th", { class: "num", text: sr.label })))), + h("tbody", null, categories.map((cat, ci) => h("tr", null, h("td", { text: cat }), + live.map((sr) => h("td", { class: "num", text: Number.isFinite(sr.values[ci]) ? fmt(sr.values[ci]) : "–" }))))))); + return frame({ title, legend: live.map((sr) => ({ label: sr.label, color: sr.color, box: true })), draw, tableOf, note }); +} + +// Histogram over (possibly log-spaced) bin edges; one hue, per-bar tooltip. +export function histogram({ title, edges, counts, xLabel, height = 200, note, empty }) { + if (!counts || !counts.length) return h("div", { class: "chart-block" }, h("h4", { text: title || "" }), emptyState(empty)); + const yt = ticks(0, Math.max(...counts), 4); + const draw = (width) => { + const left = Math.max(...yt.values.map((v) => textWidth(num(v, 0)))) + 12; + const m = { l: left, r: 10, t: 8, b: xLabel ? 40 : 26 }; + const W = width - m.l - m.r; const H = height - m.t - m.b; + const bw = W / counts.length; + const Y = (v) => m.t + H - (v / yt.hi) * H; + const svg = s("svg", { width, height, viewBox: `0 0 ${width} ${height}`, role: "img", "aria-label": title || "" }); + for (const v of yt.values) svg.append(s("line", { class: "grid-line", x1: m.l, x2: m.l + W, y1: Y(v), y2: Y(v) }), + s("text", { x: m.l - 8, y: Y(v) + 4, "text-anchor": "end" }, num(v, 0))); + counts.forEach((c, i) => { + const x = m.l + i * bw + 1; const w = Math.max(1, bw - 2); + const el = s("path", { class: "bar", d: barPath(x, Y(c), w, m.t + H - Y(c), false) || `M${x},${m.t + H}h${w}v-1h${-w}z`, fill: "var(--s1)" }); + markTip(el, () => tipBody(`${num(edges[i], 0)} – ${num(edges[i + 1], 0)}`, [{ color: "var(--s1)", label: t("ui.value"), value: num(c, 0) }])); + svg.append(el); + }); + svg.append(s("line", { class: "axis-line", x1: m.l, x2: m.l + W, y1: m.t + H, y2: m.t + H })); + const every = Math.max(1, Math.ceil(counts.length / Math.max(2, Math.floor(W / 70)))); + edges.forEach((e, i) => { if (i % every === 0 || i === edges.length - 1) svg.append(s("text", { x: m.l + i * bw, y: m.t + H + 16, "text-anchor": "middle" }, num(e, 0))); }); + if (xLabel) svg.append(s("text", { x: m.l + W / 2, y: height - 6, "text-anchor": "middle" }, xLabel)); + return svg; + }; + const tableOf = () => h("div", { class: "table-wrap" }, h("table", null, + h("thead", null, h("tr", null, h("th", { class: "num", text: xLabel || "" }), h("th", { class: "num", text: t("ui.value") }))), + h("tbody", null, counts.map((c, i) => h("tr", null, h("td", { class: "num", text: `${num(edges[i], 0)} – ${num(edges[i + 1], 0)}` }), h("td", { class: "num", text: num(c, 0) })))))); + return frame({ title, legend: null, draw, tableOf, note }); +} diff --git a/chronos/webui/static/core.js b/chronos/webui/static/core.js new file mode 100644 index 0000000..bffe2b6 --- /dev/null +++ b/chronos/webui/static/core.js @@ -0,0 +1,369 @@ +// Shared runtime: API calls, language, translation, DOM helpers, tooltip, toasts. +// All text reaches the page through textContent; no HTML strings are ever parsed. + +export const LANGS = ["zh-Hans", "zh-Hant", "en", "ja"]; +const LANG_KEY = "chronos.ui.lang"; +const THEME_KEY = "chronos.ui.theme"; +const HANT = new Set(["zh-tw", "zh-hk", "zh-mo", "zh-hant"]); + +export const state = { + lang: "en", messages: {}, fallback: {}, schema: null, fields: {}, session: null, + values: {}, // per-form values kept across re-renders (language switch, navigation) + config: null, // the model config shared by Config / Train / Inference / Auto-tune +}; + +// Same mapping as server.resolve_language: first supported tag wins, English otherwise. +export function resolveLanguage(tags) { + for (const raw of tags || []) { + const code = String(raw || "").trim().toLowerCase().replace(/_/g, "-"); + if (!code) continue; + if (HANT.has(code) || code.startsWith("zh-hant")) return "zh-Hant"; + if (code === "zh" || code.startsWith("zh-")) return "zh-Hans"; + if (code === "ja" || code.startsWith("ja-")) return "ja"; + if (code === "en" || code.startsWith("en-")) return "en"; + } + return "en"; +} + +export function preferredLanguage() { + const saved = localStorage.getItem(LANG_KEY); + if (LANGS.includes(saved)) return saved; + return resolveLanguage(navigator.languages && navigator.languages.length ? navigator.languages : [navigator.language]); +} + +export class ApiError extends Error { + constructor(status, detail) { + super(typeof detail === "string" ? detail : (detail && (detail.message || detail.error)) || `HTTP ${status}`); + this.status = status; + this.detail = detail; + this.fields = (detail && Array.isArray(detail.fields)) ? detail.fields : []; + this.code = (detail && typeof detail === "object" && detail.error) || (typeof detail === "string" ? detail : ""); + } +} + +let onUnauthorized = () => {}; +export function setUnauthorizedHandler(fn) { onUnauthorized = fn; } + +export async function api(path, { method = "GET", body, signal } = {}) { + const headers = { "X-Chronos-Request": "1", Accept: "application/json" }; + const init = { method, headers, credentials: "same-origin", signal }; + if (body !== undefined) { + headers["Content-Type"] = "application/json"; + init.body = JSON.stringify(body); + } + const res = await fetch(path, init); + let data = null; + try { data = await res.json(); } catch { data = null; } + if (res.status === 401 && !path.startsWith("/api/login")) onUnauthorized(); + if (!res.ok) throw new ApiError(res.status, data && data.detail !== undefined ? data.detail : data); + return data; +} +export const post = (path, body = {}) => api(path, { method: "POST", body }); + +// ── translation ───────────────────────────────────────────────────────── +export async function loadLanguage(lang) { + const code = LANGS.includes(lang) ? lang : "en"; + const [main, en] = await Promise.all([ + api(`/api/i18n/${code}`), + code === "en" ? null : (Object.keys(state.fallback).length ? { messages: state.fallback } : api("/api/i18n/en")), + ]); + state.lang = code; + state.messages = main.messages || {}; + state.fallback = code === "en" ? state.messages : (en.messages || {}); + document.documentElement.lang = code; + return code; +} + +export function saveLanguage(lang) { localStorage.setItem(LANG_KEY, lang); } + +export function has(key) { return key in state.messages || key in state.fallback; } + +export function t(key, vars) { + let text = state.messages[key]; + if (text === undefined) text = state.fallback[key]; + if (text === undefined) text = key; + if (vars) text = text.replace(/\{(\w+)\}/g, (m, name) => (name in vars ? String(vars[name]) : m)); + return text; +} + +export function translateStatic(root = document) { + for (const node of root.querySelectorAll("[data-i18n]")) node.textContent = t(node.dataset.i18n); + for (const node of root.querySelectorAll("[data-i18n-label]")) node.setAttribute("aria-label", t(node.dataset.i18nLabel)); + document.title = t("app.title"); +} +// ── DOM (text only) ───────────────────────────────────────────────────── +const tips = new WeakMap(); + +export function h(tag, attrs, ...children) { + const el = tag === "svg" || attrs?.svg ? document.createElementNS("http://www.w3.org/2000/svg", tag) + : document.createElement(tag); + for (const [key, value] of Object.entries(attrs || {})) { + if (value === undefined || value === null || value === false || key === "svg") continue; + if (key === "class") el.setAttribute("class", value); + else if (key === "text") el.textContent = value; + else if (key === "tip") setTip(el, value); + else if (key.startsWith("on") && typeof value === "function") el.addEventListener(key.slice(2), value); + else if (key === "dataset") Object.assign(el.dataset, value); + else if (key in el && !(el instanceof SVGElement) && typeof value !== "string") el[key] = value; + else el.setAttribute(key, value === true ? "" : String(value)); + } + append(el, children); + return el; +} + +export function append(el, children) { + for (const child of children.flat(Infinity)) { + if (child === null || child === undefined || child === false) continue; + el.append(child instanceof Node ? child : document.createTextNode(String(child))); + } + return el; +} + +export function clear(el) { while (el.firstChild) el.firstChild.remove(); return el; } + +export function card(title, ...body) { return h("section", { class: "card" }, title ? h("h3", { text: title }) : null, ...body); } + +export function badge(stateName) { + const key = `state.${stateName}`; + return h("span", { class: `badge ${stateName || ""}`, role: "status", text: has(key) ? t(key) : String(stateName ?? "") }); +} + +export function table(columns, rows, { caption } = {}) { + // columns: [{label, num, fmt(row) -> text|Node}] + const head = h("tr", null, columns.map((c) => h("th", { class: c.num ? "num" : null, scope: "col", text: c.label }))); + const body = rows.map((row) => h("tr", null, columns.map((c) => { + const value = c.fmt ? c.fmt(row) : row[c.key]; + return h("td", { class: c.num ? "num" : null }, value === null || value === undefined || value === "" ? "–" : value); + }))); + return h("div", { class: "table-wrap" }, + h("table", null, caption ? h("caption", { class: "skip", text: caption }) : null, h("thead", null, head), h("tbody", null, body))); +} + +// ── number / time formatting in the page language ─────────────────────── +const nf = (opts) => new Intl.NumberFormat(state.lang, opts); +export function num(v, digits = 2) { + if (v === null || v === undefined || v === "" || Number.isNaN(Number(v))) return "–"; + const x = Number(v); + if (x !== 0 && Math.abs(x) < 10 ** -digits) return x.toExponential(1); + return nf({ maximumFractionDigits: digits }).format(x); +} +export const int = (v) => num(v, 0); +export const pct = (v, digits = 1) => (v === null || v === undefined ? "–" : nf({ style: "percent", maximumFractionDigits: digits }).format(Number(v))); +export function params(v) { + if (v === null || v === undefined) return "–"; + const x = Number(v); + if (Math.abs(x) >= 1e9) return `${num(x / 1e9, 2)}B`; + if (Math.abs(x) >= 1e6) return `${num(x / 1e6, 2)}M`; + if (Math.abs(x) >= 1e3) return `${num(x / 1e3, 1)}K`; + return int(x); +} +export function bytes(v) { + if (v === null || v === undefined) return "–"; + const x = Number(v); + const units = ["B", "KB", "MB", "GB", "TB"]; + let i = 0; let y = Math.abs(x); + while (y >= 1024 && i < units.length - 1) { y /= 1024; i += 1; } + return `${num(Math.sign(x) * y, y >= 100 ? 0 : 2)} ${units[i]}`; +} +export function duration(seconds) { + if (seconds === null || seconds === undefined || !Number.isFinite(Number(seconds))) return "–"; + let s = Math.max(0, Math.round(Number(seconds))); + const parts = { hours: Math.floor(s / 3600), minutes: Math.floor((s % 3600) / 60), seconds: s % 60 }; + if (parts.hours) delete parts.seconds; + if (typeof Intl.DurationFormat === "function") { + try { return new Intl.DurationFormat(state.lang, { style: "narrow" }).format(parts); } catch { /* fall through */ } + } + s = parts.hours ? `${parts.hours}h ${parts.minutes}m` : `${parts.minutes}m ${parts.seconds}s`; + return s; +} +export function dateTime(v) { + if (!v) return "–"; + const d = typeof v === "number" ? new Date(v * 1000) : new Date(v); + return Number.isNaN(d.getTime()) ? String(v) : new Intl.DateTimeFormat(state.lang, { dateStyle: "short", timeStyle: "short" }).format(d); +} +// ── tooltip: one element ──────────────────────────────────────────────── +// Hover shows a field's help after the pointer rests on it for HOVER_MS, so moving across a form +// never covers the next fields. The "?" dot is an explicit request and answers after HELP_MS. +// Keyboard focus (Tab) shows it at once; a click, typing, Escape or scrolling hides it. +const HOVER_MS = 2000; +const HELP_MS = 400; +let tipEl = null; +let tipOwner = null; +let tipTimer = 0; +let tipPending = null; +let viaKeyboard = false; +let suppressed = null; + +function cancelTip() { + clearTimeout(tipTimer); + tipTimer = 0; + tipPending = null; +} + +function scheduleTip(el, ms) { + if (tipOwner === el || suppressed === el) return; + if (tipPending === el && ms >= HOVER_MS) return; + cancelTip(); + tipPending = el; + tipTimer = setTimeout(() => { tipPending = null; if (el.isConnected) showTip(el); }, ms); +} + +export function setTip(el, content) { + tips.set(el, content); + if (el.dataset.tipBound) return; + el.dataset.tipBound = "1"; + el.addEventListener("pointerenter", (e) => { if (e.pointerType !== "touch") scheduleTip(el, HOVER_MS); }); + el.addEventListener("pointerover", (e) => { + if (e.pointerType !== "touch" && e.target instanceof Element && e.target.closest(".help-dot")) scheduleTip(el, HELP_MS); + }); + el.addEventListener("pointerleave", () => { + if (tipPending === el) cancelTip(); + if (suppressed === el) suppressed = null; + hideTip(el); + }); + el.addEventListener("pointerdown", (e) => { + cancelTip(); + if (e.target instanceof Element && e.target.closest(".help-dot")) { suppressed = null; showTip(el); return; } + suppressed = el; + hideTip(); + }); + el.addEventListener("focusin", () => { if (viaKeyboard) { cancelTip(); showTip(el); } }); + el.addEventListener("focusout", (e) => { if (!el.contains(e.relatedTarget)) hideTip(el); }); +} + +function fillTip(content) { + clear(tipEl); + const value = typeof content === "function" ? content() : content; + if (value instanceof Node) tipEl.append(value); + else tipEl.textContent = String(value ?? ""); +} + +function showTip(el) { + tipEl = tipEl || document.getElementById("tooltip"); + const content = tips.get(el); + if (!tipEl || content === undefined) return; + tipOwner = el; + fillTip(content); + tipEl.hidden = false; + el.setAttribute("aria-describedby", "tooltip"); + const r = el.getBoundingClientRect(); + const w = tipEl.offsetWidth; const hgt = tipEl.offsetHeight; + let left = Math.min(window.innerWidth - w - 8, Math.max(8, r.left)); + let top = r.bottom + 8; + if (top + hgt > window.innerHeight - 8) top = Math.max(8, r.top - hgt - 8); + if (left < 8) left = 8; + tipEl.style.left = `${left}px`; + tipEl.style.top = `${top}px`; +} + +export function hideTip(el) { + if (!el) cancelTip(); + if (!tipEl || (el && el !== tipOwner)) return; + tipEl.hidden = true; + if (tipOwner) tipOwner.removeAttribute("aria-describedby"); + tipOwner = null; +} + +// Chart crosshair tooltips are positioned at a point instead of an element. +export function showTipAt(x, y, content) { + tipEl = tipEl || document.getElementById("tooltip"); + if (!tipEl) return; + cancelTip(); + tipOwner = null; + fillTip(content); + tipEl.hidden = false; + const w = tipEl.offsetWidth; const hgt = tipEl.offsetHeight; + let left = x + 14; let top = y + 14; + if (left + w > window.innerWidth - 8) left = x - w - 14; + if (top + hgt > window.innerHeight - 8) top = y - hgt - 14; + tipEl.style.left = `${Math.max(8, left)}px`; + tipEl.style.top = `${Math.max(8, top)}px`; +} + +const MODIFIERS = new Set(["Shift", "Control", "Alt", "Meta", "CapsLock"]); +document.addEventListener("keydown", (e) => { + if (MODIFIERS.has(e.key)) return; + viaKeyboard = e.key === "Tab"; + if (!viaKeyboard) hideTip(); +}, true); +document.addEventListener("pointerdown", () => { viaKeyboard = false; }, true); +document.addEventListener("input", () => hideTip(), true); +window.addEventListener("scroll", () => hideTip(), { passive: true, capture: true }); + +// ── toasts and errors ─────────────────────────────────────────────────── +export function toast(message, kind = "info") { + const host = document.getElementById("toasts"); + if (!host) return; + const el = h("div", { class: `toast ${kind}`, role: kind === "error" ? "alert" : "status", text: message }); + host.append(el); + setTimeout(() => el.remove(), kind === "error" ? 9000 : 4500); +} + +export function errorText(err) { + if (err instanceof ApiError) { + // Backend detail messages are machine text (English); they are appended, never used as the only text. + const extra = err.detail && typeof err.detail === "object" && err.detail.message ? ` (${err.detail.message})` : ""; + if (err.code && has(`err.${err.code}`)) return t(`err.${err.code}`) + extra; + if (err.status === 409) return t("ui.busy"); + if (err.status === 422 && err.fields.length) return t("ui.invalid") + extra; + if (err.status === 404) return t("err.not_found"); + } + return `${t("ui.error")}: ${err && err.message ? err.message : String(err)}`; +} + +export function reportError(err) { + if (err instanceof ApiError && err.status === 401) return; + console.error(err); + toast(errorText(err), "error"); +} + +// ── theme ─────────────────────────────────────────────────────────────── +export function savedTheme() { + const v = localStorage.getItem(THEME_KEY); + return ["light", "dark", "system"].includes(v) ? v : "system"; +} +export function applyTheme(value) { + document.documentElement.dataset.theme = value; + localStorage.setItem(THEME_KEY, value); +} + +// CSS custom property in the active theme (charts read series colors this way). +export function cssVar(name) { return getComputedStyle(document.documentElement).getPropertyValue(name).trim(); } +export const SERIES = ["--s1", "--s2", "--s3", "--s4", "--s5", "--s6", "--s7", "--s8"]; + +// ── page furniture ────────────────────────────────────────────────────── +export function pageHead(titleKey, introKey, ...actions) { + return h("div", { class: "page-head" }, + h("div", null, h("h2", { text: t(titleKey) }), introKey ? h("p", { text: t(introKey) }) : null), + actions.length ? h("div", { class: "row" }, actions) : null); +} + +export function tile(label, value, sub, tip) { + return h("div", { class: "tile", tip }, h("div", { class: "k", text: label }), h("div", { class: "v", text: value ?? "–" }), + sub ? h("div", { class: "s", text: sub }) : null); +} + +export function fieldLabel(key) { return has(`field.${key}.label`) ? t(`field.${key}.label`) : key; } + +export function button(labelKey, onclick, { primary = false, danger = false, disabled = false } = {}) { + return h("button", { type: "button", class: primary ? "primary" : danger ? "danger" : null, disabled, text: t(labelKey), onclick }); +} + +// Run an async action with the button disabled; errors become toasts. +export async function busy(btn, fn) { + if (btn) btn.disabled = true; + try { return await fn(); } catch (err) { reportError(err); return undefined; } finally { if (btn) btn.disabled = false; } +} + +export function logBox(lines) { + const text = Array.isArray(lines) ? lines.join("\n") : String(lines || ""); + const pre = h("pre", { class: "log", tabindex: "0", text: text || t("ui.empty") }); + requestAnimationFrame(() => { pre.scrollTop = pre.scrollHeight; }); + return pre; +} + +export function rawJson(value) { + return h("details", null, h("summary", { text: t("ui.raw_json") }), h("pre", { class: "log", text: JSON.stringify(value, null, 2) })); +} + +export const clone = (v) => (v === undefined ? v : JSON.parse(JSON.stringify(v))); diff --git a/chronos/webui/static/forms.js b/chronos/webui/static/forms.js new file mode 100644 index 0000000..c628ab0 --- /dev/null +++ b/chronos/webui/static/forms.js @@ -0,0 +1,219 @@ +// Schema-driven forms. Every field carries a hover / focus tooltip in the page +// language: what it does, its default, the recommended value and where that +// recommendation comes from (code default, adaptive planner, measurement, rule). +import { state, t, has, h, num, setTip, ApiError, reportError } from "./core.js"; +import { pathControl } from "./picker.js"; + +const TEXTAREA = new Set(["tok.paths", "plan.data_paths", "train.sample_prompt", "reward_spec"]); +const WIDE = new Set([...TEXTAREA, "train.stages", "probe.ram_ratios", "export.formats", "tune.search", + "infer.model_path", "train.data_path", "serve.models_dir"]); +const showAdvanced = {}; +// Planner validation codes that name a form field. +const ERROR_ALIASES = { target: "plan.target_m", active_experts: "plan.active_value" }; + +export function fieldsFor(scope, group) { + return state.schema.fields.filter((f) => f.scope.includes(scope) && (!group || f.group === group)); +} + +export function defaultsFor(scope) { + const out = {}; + for (const f of fieldsFor(scope)) out[f.key] = Array.isArray(f.default) ? [...f.default] : f.default; + return out; +} + +// Values of one form, kept in state.values so they survive re-renders. +export function formState(id, scope) { + if (!state.values[id]) state.values[id] = defaultsFor(scope || id); + return state.values[id]; +} + +// Label of a choice value. With the field: its own wording first (the same id can mean different things +// in different fields; "serve.router_scope" shares "router_scope"), stage names for the stage chips and +// field names for the auto-tune search list. Format and device ids (float16, cuda, gguf…) stay as they are. +export function choiceLabel(value, f) { + if (typeof value === "boolean") return t(value ? "ui.yes" : "ui.no"); + if (value === "" || value === null || value === undefined) return t("ui.from_model"); + if (typeof value === "number") return num(value, 4); + const s = String(value); + if (f) { + for (const key of [f.key, f.key.replace(/^[a-z]+\./, "")]) if (has(`choice.${key}.${s}`)) return t(`choice.${key}.${s}`); + if (f.key === "train.stages" && has(`stage.${s}`)) return t(`stage.${s}`); + if (f.key === "tune.search" && has(`field.${s}.label`)) return t(`field.${s}.label`); + } + return has(`choice.${s}`) ? t(`choice.${s}`) : s; +} + +export function valueText(f, value) { + if (value === null || value === undefined || value === "") { + if (f.type === "choice") return choiceLabel(""); + return f.nullable || f.type === "text" || f.type === "path" ? t("tip.auto_empty") : "–"; + } + if (Array.isArray(value)) return value.map((x) => choiceLabel(x, f)).join(", "); + if (f.type === "bool") return t(value ? "ui.yes" : "ui.no"); + if (f.type === "choice") return choiceLabel(value, f); + if (typeof value === "number") return num(value, 6); + return String(value); +} + +export function recommendedText(f) { + if (f.recommended === undefined) return null; + if (f.source === "rule" && f.ref && has(`rule.${f.ref}`)) return t(`rule.${f.ref}`); + return valueText(f, f.recommended); +} + +function sourceText(f) { + if (!f.source) return null; + const base = t(`source.${f.source}`); + return f.source === "measured" && f.ref ? `${base} · ${f.ref.split("/").pop()}` : base; +} + +export function fieldTip(f) { + return () => { + const dl = h("dl"); + const row = (label, value) => { if (value !== null && value !== undefined) dl.append(h("dt", { text: label }), h("dd", { text: value })); }; + row(t("tip.default"), valueText(f, f.default)); + row(t("tip.recommended"), recommendedText(f)); + row(t("tip.source"), sourceText(f)); + if (f.min !== undefined || f.max !== undefined) row(t("tip.range"), `${f.min ?? "−∞"} – ${f.max ?? "∞"}`); + return h("div", null, + h("div", { class: "t-title", text: t(`field.${f.key}.label`) }), + h("div", { class: "t-help", text: t(`field.${f.key}.help`) }), + dl); + }; +} +const same = (a, b) => JSON.stringify(a ?? null) === JSON.stringify(b ?? null); +const domId = (key) => `f-${key.replace(/[^a-zA-Z0-9]/g, "-")}`; + +function control(f, values, set) { + const id = domId(f.key); + const v = values[f.key]; + if (f.type === "bool") { + const el = h("input", { type: "checkbox", id }); + el.checked = !!v; + el.addEventListener("change", () => set(el.checked)); + return el; + } + if (f.type === "choice") { + const el = h("select", { id }, f.choices.map((c, i) => h("option", { value: String(i), text: choiceLabel(c, f) }))); + const index = f.choices.findIndex((c) => same(c, v)); + el.value = String(index >= 0 ? index : 0); + el.addEventListener("change", () => set(f.choices[Number(el.value)])); + return el; + } + if (f.type === "multi") { + const picked = new Set((Array.isArray(v) ? v : []).map((x) => JSON.stringify(x))); + const box = h("div", { class: "chips", role: "group", id }); + const inputs = f.choices.map((c) => { + const input = h("input", { type: "checkbox" }); + input.checked = picked.has(JSON.stringify(c)); + input.addEventListener("change", () => set(f.choices.filter((x, j) => inputs[j].checked))); + box.append(h("label", null, input, choiceLabel(c, f))); + return input; + }); + return box; + } + if (f.type === "int" || f.type === "float") { + const el = h("input", { type: "number", id, inputmode: f.type === "int" ? "numeric" : "decimal", + min: f.min, max: f.max, step: f.step ?? (f.type === "int" ? 1 : "any"), + placeholder: f.nullable || f.default === null ? t("tip.auto_empty") : null }); + el.value = v === null || v === undefined ? "" : String(v); + el.addEventListener("input", () => set(el.value.trim() === "" ? null : Number(el.value))); + return el; + } + const paths = !!(f.pick && f.pick.multiple); + const multiline = TEXTAREA.has(f.key) || paths; + const el = h(multiline ? "textarea" : "input", { id, type: multiline ? null : "text", spellcheck: "false", + autocomplete: "off", class: paths ? "paths" : null, + placeholder: paths ? t("picker.placeholder_multi") : (f.type === "path" ? t("ui.path") : (f.nullable ? t("tip.auto_empty") : null)) }); + el.value = v ?? ""; + const fit = () => { if (paths) el.rows = Math.max(1, Math.min(8, el.value.split("\n").length)); }; + fit(); + el.addEventListener("input", () => { fit(); set(el.value); }); + return el; +} + +export function renderField(f, values, onChange) { + const wide = WIDE.has(f.key) || (f.type === "multi" && f.choices.length > 4) || !!(f.pick && f.pick.multiple); + const single = !!(f.pick && !f.pick.multiple); + const wrap = h("div", { class: `field${f.type === "bool" ? " bool" : ""}${wide ? " wide" : ""}${single && !wide ? " path" : ""}`, + dataset: { key: f.key } }); + const ctl = control(f, values, (x) => { + values[f.key] = x; + wrap.classList.toggle("changed", !same(x, f.default)); + wrap.classList.remove("bad"); + ctl.removeAttribute("aria-invalid"); + if (onChange) onChange(f.key, x); + }); + const rec = recommendedText(f); + const label = h(f.type === "multi" ? "span" : "label", { class: "label", for: f.type === "multi" ? null : domId(f.key) }, + h("span", { class: "name", text: t(`field.${f.key}.label`) }), + h("span", { class: "help-dot", "aria-hidden": "true", text: "?" }), + rec && rec.length <= 18 ? h("span", { class: "rec", text: `✓ ${rec}` }) : null); + if (f.type === "multi") ctl.setAttribute("aria-label", t(`field.${f.key}.label`)); + wrap.classList.toggle("changed", !same(values[f.key], f.default)); + wrap.append(label, f.pick ? pathControl(ctl, f.pick) : ctl); + setTip(wrap, fieldTip(f)); + return wrap; +} + +// One schema group as a collapsible section; advanced fields behind a toggle. +export function renderGroup(scope, group, values, onChange, { open = true, summary = true } = {}) { + const all = fieldsFor(scope, group); + const basic = all.filter((f) => !f.advanced); + const adv = all.filter((f) => f.advanced); + const key = `${scope}:${group}`; + const grid = h("div", { class: "fields" }, basic.map((f) => renderField(f, values, onChange))); + const advGrid = h("div", { class: "fields", hidden: !showAdvanced[key] }, adv.map((f) => renderField(f, values, onChange))); + const toggle = adv.length ? h("button", { type: "button", class: "ghost adv-toggle", "aria-expanded": String(!!showAdvanced[key]), + text: `${t(showAdvanced[key] ? "ui.hide_advanced" : "ui.show_advanced")} (${adv.length})`, + onclick: () => { + showAdvanced[key] = !showAdvanced[key]; + advGrid.hidden = !showAdvanced[key]; + toggle.setAttribute("aria-expanded", String(showAdvanced[key])); + toggle.textContent = `${t(showAdvanced[key] ? "ui.hide_advanced" : "ui.show_advanced")} (${adv.length})`; + } }) : null; + if (adv.length) advGrid.classList.add("mt"); + const body = [grid, toggle, advGrid]; + if (!summary) return h("div", null, body); + return h("details", { class: "group", open }, h("summary", { text: t(`group.${group}`) }), body); +} + +export function markErrors(root, keys, { scroll = true } = {}) { + for (const el of root.querySelectorAll(".field.bad")) el.classList.remove("bad"); + let first = null; + for (const raw of keys || []) { + const key = ERROR_ALIASES[raw] || raw; + const wrap = root.querySelector(`.field[data-key="${CSS.escape(key)}"]`); + if (!wrap) continue; + wrap.classList.add("bad"); + const ctl = wrap.querySelector("input, select, textarea, .chips"); + if (ctl) ctl.setAttribute("aria-invalid", "true"); + first = first || wrap; + } + if (first && scroll) { + const details = first.closest("details"); + if (details) details.open = true; + first.scrollIntoView({ block: "center", behavior: "smooth" }); + } +} + +// Replace a form's values (preset / loaded file / plan) without losing unknown keys. +export function assign(values, patch) { + for (const [key, value] of Object.entries(patch || {})) values[key] = Array.isArray(value) ? [...value] : value; + return values; +} + +// Run a form action: clears old marks, marks the fields a 422 names, reports other errors. +export async function submit(btn, root, fn) { + if (btn) btn.disabled = true; + try { + markErrors(root, [], { scroll: false }); + return await fn(); + } catch (err) { + if (err instanceof ApiError && err.status === 422 && err.fields.length) markErrors(root, err.fields); + reportError(err); + return undefined; + } finally { + if (btn) btn.disabled = false; + } +} diff --git a/chronos/webui/static/icon.svg b/chronos/webui/static/icon.svg new file mode 100644 index 0000000..756744e --- /dev/null +++ b/chronos/webui/static/icon.svg @@ -0,0 +1 @@ + diff --git a/chronos/webui/static/index.html b/chronos/webui/static/index.html new file mode 100644 index 0000000..c40f34b --- /dev/null +++ b/chronos/webui/static/index.html @@ -0,0 +1,58 @@ + + + + + + +Chronos + + + + + + +
+
+ +
+

Chronos

+

+
+
+
+ + + + +
+
+
+ +
+
+ +
+ +
+

Log in

+

+ + +
+
+
+ + diff --git a/chronos/webui/static/pages_config.js b/chronos/webui/static/pages_config.js new file mode 100644 index 0000000..f1f0e48 --- /dev/null +++ b/chronos/webui/static/pages_config.js @@ -0,0 +1,180 @@ +// Model page: presets, every config group, live size / memory estimate, auto plan. +import { state, t, has, h, api, post, card, tile, pageHead, button, busy, params, bytes, num, int, + toast, reportError, ApiError, table, fieldLabel, clone } from "./core.js"; +import { renderGroup, formState, markErrors, assign, submit } from "./forms.js"; +import { pathControl } from "./picker.js"; + +const PRESET_SLUGS = { "Chronos-v3 Tiny (smoke / CI)": "tiny", "Chronos-v3 50M (16k vocab)": "m50", + "Chronos-v3 200M (32 GB)": "m200", "Chronos-v3 500M (32 GB)": "m500", "Chronos-v3 1B (64 GB)": "b1" }; + +let presetCache = null; +export async function presets() { + if (!presetCache) presetCache = await api("/api/presets"); + return presetCache; +} + +function schemaDefaults() { + const out = {}; + for (const f of state.schema.fields) if (f.scope.includes("config")) out[f.key] = clone(f.default); + return out; +} + +// The model config shared by every page; starts from the default preset. +export async function ensureConfig() { + if (state.config) return state.config; + const data = await presets(); + const preset = data.presets.find((p) => p.name === data.default); + state.config = { ...schemaDefaults(), ...clone(preset ? preset.config : {}) }; + state.presetName = preset ? preset.name : ""; + return state.config; +} + +export function presetLabel(p) { + const slug = PRESET_SLUGS[p.name]; + return slug && has(`preset.${slug}`) ? t(`preset.${slug}`) : p.name; +} + +let estimateTimer = 0; +function scheduleEstimate(host, form) { + clearTimeout(estimateTimer); + estimateTimer = setTimeout(() => refreshEstimate(host, form), 350); +} + +async function refreshEstimate(host, form) { + try { + const e = await post("/api/config/estimate", { config: state.config }); + markErrors(form, [], { scroll: false }); + const m = e.memory || {}; + host.replaceChildren(h("div", { class: "tiles" }, + tile(t("config.total"), params(e.total_params)), + tile(t("config.active"), params(e.active_params), `≤ ${params(e.active_union_upper)}`), + tile(t("config.compute"), params(e.compute_params)), + tile(t("config.virtual_layers"), int(e.virtual_layers)), + tile(t("config.vram"), bytes(m.vram_estimate_bytes)), + tile(t("config.ram"), bytes(m.ram_estimate_bytes)), + tile(t("config.ssd"), bytes(m.ssd_estimate_bytes)), + tile(t("config.kv"), bytes(m.kv_cache_bytes)), + tile(t("config.train_state"), bytes(m.training_state_bytes)), + tile(t("config.tps"), num(e.decode_tps_estimate, 0))), + h("p", { class: "note", text: t("config.estimate_note") })); + } catch (err) { + if (err instanceof ApiError && err.status === 422) { + markErrors(form, err.fields, { scroll: false }); + host.replaceChildren(h("p", { class: "error", text: t("ui.invalid") })); + } else reportError(err); + } +} +function presetNote(p) { + const m = (p && p.meta) || {}; + const parts = []; + if (m.total_params) parts.push(`${t("config.total")} ${params(m.total_params)}`); + if (m.active_params) parts.push(`${t("config.active")} ${params(m.active_params)}`); + if (m.training_peak_gb) parts.push(`${t("config.train_peak")} ${num(m.training_peak_gb, 1)} GB (${t("label.estimated")})`); + const slug = p && PRESET_SLUGS[p.name]; + const summary = slug && has(`preset.${slug}.summary`) ? t(`preset.${slug}.summary`) : ""; + return [summary, parts.join(" · ")].filter(Boolean).join(" — "); +} + +export async function renderConfig(main) { + const data = await presets(); + await ensureConfig(); + const estimate = h("div", null, h("p", { class: "note", text: t("ui.loading") })); + const form = h("div"); + const redraw = () => { + form.replaceChildren(...state.schema.config_groups.map((g, i) => + renderGroup("config", g, state.config, () => scheduleEstimate(estimate, form), { open: i < 3 }))); + }; + const apply = (cfg, message) => { + assign(state.config, cfg); + redraw(); + refreshEstimate(estimate, form); + if (message) toast(message); + }; + + // presets + const picker = h("select", { id: "preset" }, data.presets.map((p) => h("option", { value: p.name, text: presetLabel(p) }))); + picker.value = state.presetName || data.default; + const note = h("p", { class: "note" }); + const showNote = () => { note.textContent = presetNote(data.presets.find((p) => p.name === picker.value)); }; + picker.addEventListener("change", showNote); + showNote(); + const usePreset = button("ui.apply", () => { + const p = data.presets.find((x) => x.name === picker.value); + if (!p) return; + state.config = { ...schemaDefaults(), ...clone(p.config) }; + state.presetName = p.name; + apply({}, `${t("config.loaded")}: ${presetLabel(p)}`); + }, { primary: true }); + + // file load / save + const path = h("input", { type: "text", id: "config-path", spellcheck: "false", value: state.values.configPath || "./out/chronos_config.json" }); + path.addEventListener("input", () => { state.values.configPath = path.value; }); + const saveBtn = button("ui.save", () => busy(saveBtn, async () => { + const r = await post("/api/config/save", { config: state.config, path: path.value }); + toast(`${t("ui.saved")}: ${r.path}`); + })); + const loadBtn = button("ui.load", () => busy(loadBtn, async () => { + const r = await post("/api/config/load", { path: path.value }); + apply(r.config, `${t("config.loaded")}: ${r.path}`); + if (r.ignored && r.ignored.length) toast(`${t("config.ignored")}: ${r.ignored.map(fieldLabel).join(", ")}`, "error"); + })); + const resetBtn = button("ui.reset", () => { + state.config = null; + ensureConfig().then(() => { picker.value = state.presetName; showNote(); apply({}); }); + }); + + main.append( + pageHead("nav.config", "config.intro"), + h("div", { class: "grid two" }, + card(t("config.preset"), + h("div", { class: "row", tip: t("config.preset_help") }, h("label", { class: "compact", for: "preset", text: t("config.preset") }), picker, usePreset), + note), + card(t("config.file"), + h("div", { class: "field wide", tip: t("config.path_help") }, h("label", { class: "compact", for: "config-path", text: t("ui.path") }), + pathControl(path, { kind: "config", multiple: false })), + h("div", { class: "row mt" }, loadBtn, saveBtn, resetBtn))), + card(t("config.estimate"), estimate), + card(null, form), + planCard(apply)); + redraw(); + refreshEstimate(estimate, form); +} +// Auto plan: target size + data + memory → config and per-stage settings (adaptive planner). +function planCard(apply) { + const values = formState("plan", "planner"); + const root = h("div"); + const out = h("div", { class: "stack mt" }); + const run = button("plan.run", () => submit(run, root, async () => { + showPlan(out, await post("/api/plan", values), apply); + }), { primary: true }); + root.append(h("p", { class: "note", text: t("plan.note") }), renderGroup("planner", "planner", values, null, { summary: false }), + h("div", { class: "row mt" }, run), out); + return card(t("plan.title"), root); +} + +function showPlan(out, plan, apply) { + const a = (plan.report && plan.report.architecture) || {}; + const sc = (plan.report && plan.report.scaling) || {}; + const mem = (plan.report && plan.report.memory) || {}; + const stages = plan.stage_overrides || {}; + const keys = [...new Set(Object.values(stages).flatMap((row) => Object.keys(row || {})))]; + const use = button("plan.apply", () => apply({ ...plan.config, stage_overrides: plan.stage_overrides }, t("config.loaded")), { primary: true }); + out.replaceChildren( + h("h4", { text: t("plan.summary") }), + h("div", { class: "tiles" }, + tile(t("config.total"), params(a.total_params), t("label.measured_meta")), + tile(t("config.active"), params(a.active_params), `≤ ${params(a.active_union_upper)}`), + tile(t("config.virtual_layers"), int(a.virtual_layers), `${int(a.physical_layers)} × ${int(a.recurrent_depth)}`), + tile(fieldLabel("hidden_size"), int(a.hidden_size)), + tile(fieldLabel("num_experts"), `${int(a.experts)} / top-${int(a.top_k)}`), + tile(t("plan.tokens"), params(sc.tokens), t("label.estimated")), + tile(fieldLabel("learning_rate"), num(sc.chosen_lr, 5), t("label.estimated")), + tile(t("config.train_peak"), mem.training_peak_gb === undefined ? "–" : `${num(mem.training_peak_gb, 1)} GB`, t("label.estimated"))), + h("h4", { text: t("plan.stages") }), + table([{ label: t("ui.phase"), fmt: (r) => r.stage }, ...keys.map((k) => ({ label: fieldLabel(k), num: true, + fmt: (r) => (r[k] === undefined ? "" : (typeof r[k] === "number" ? num(r[k], 6) : String(r[k]))) }))], + Object.entries(stages).map(([stage, row]) => ({ stage, ...row }))), + h("div", { class: "row" }, use), + h("details", null, h("summary", { text: t("ui.raw_json") }), h("pre", { class: "log", text: JSON.stringify(plan, null, 2) }))); +} + diff --git a/chronos/webui/static/pages_data.js b/chronos/webui/static/pages_data.js new file mode 100644 index 0000000..e27af13 --- /dev/null +++ b/chronos/webui/static/pages_data.js @@ -0,0 +1,93 @@ +// Data inspector and Chronos tokenizer builder. +import { state, t, h, post, api, card, tile, pageHead, button, busy, int, num, pct, table, logBox, badge, fieldLabel } from "./core.js"; +import { renderGroup, formState, submit } from "./forms.js"; +import { histogram } from "./charts.js"; +import { pathControl } from "./picker.js"; + +function pathsInput(id, value, onInput) { + const el = h("textarea", { id, class: "paths", spellcheck: "false", autocomplete: "off", placeholder: t("picker.placeholder_multi") }); + el.value = value ?? ""; + const fit = () => { el.rows = Math.max(1, Math.min(8, el.value.split("\n").length)); }; + fit(); + el.addEventListener("input", () => { fit(); onInput(el.value); }); + return el; +} + +export async function renderData(main) { + const v = state.values.data || (state.values.data = { path: "", max: 50000 }); + const out = h("div", { class: "stack" }); + const path = pathsInput("data-path", v.path, (x) => { v.path = x; }); + const max = h("input", { type: "number", id: "data-max", min: 100, max: 500000, step: 100 }); + max.value = String(v.max); + max.addEventListener("input", () => { v.max = Number(max.value) || 50000; }); + const scan = button("ui.scan", () => busy(scan, async () => { + v.result = await post("/api/data/scan", { path: v.path, max_records: v.max }); + show(); + }), { primary: true }); + const show = () => { + const r = v.result; + if (!r) { out.replaceChildren(); return; } + const sm = r.summary || {}; + const fields = Object.entries(sm.fields || {}); + out.replaceChildren( + h("div", { class: "tiles" }, + tile(t("data.files"), int(sm.files), sm.size_mb !== undefined ? `${num(sm.size_mb, 1)} MB` : null), + tile(t("data.scanned"), int(sm.scanned), sm.note === "full scan" ? t("data.full_scan") : t("data.sampled", { n: int(v.max) })), + tile(t("data.median"), int(sm.char_median), t("data.chars")), + tile(t("data.p95"), int(sm.char_p95), t("data.chars")), + tile(t("data.dups"), pct(sm.dup_ratio))), + card(null, histogram({ title: t("data.hist"), edges: r.histogram.edges, counts: r.histogram.counts, xLabel: t("data.chars") })), + h("div", { class: "grid two" }, + card(t("data.schema"), table([{ label: t("data.schema"), key: "k" }, { label: t("data.records"), key: "n", num: true }], + Object.entries(sm.schemas || {}).map(([k, n]) => ({ k, n: int(n) })))), + card(t("data.fields"), table([{ label: t("data.fields"), key: "k" }, { label: t("data.type"), key: "type" }, + { label: t("data.present"), num: true, fmt: (row) => pct(row.present) }], + fields.map(([k, f]) => ({ k, type: f.type, present: f.present }))))), + Object.keys(sm.scripts || {}).length ? card(t("data.scripts"), table([{ label: t("data.script"), key: "k" }, + { label: t("data.share"), num: true, fmt: (row) => pct(row.share) }], Object.entries(sm.scripts).map(([k, share]) => ({ k, share })))) : null, + card(t("data.samples"), ...(r.samples || []).map((x) => h("div", { class: "output mt", text: x }))), + sm.read_errors ? card(t("ui.error"), logBox(sm.read_errors)) : null); + }; + main.append(pageHead("data.title", "data.intro"), + card(null, h("div", { class: "fields" }, + h("div", { class: "field wide", tip: t("data.path_help") }, h("label", { class: "label", for: "data-path", text: t("ui.path") }), + pathControl(path, { kind: "data", multiple: true })), + h("div", { class: "field", tip: t("data.max_help") }, h("label", { class: "label", for: "data-max", text: t("data.max_records") }), max)), + h("div", { class: "row mt" }, scan)), + out); + show(); +} + +// ── tokenizer builder ────────────────────────────────────────────────── +export async function renderTokenizer(main, page) { + const values = formState("tok", "tokenizer"); + const root = h("div"); + const status = h("div", { class: "stack" }); + const start = button("ui.start", () => submit(start, root, async () => { paint(await post("/api/tokenizer/start", values)); }), { primary: true }); + const paint = (s) => { + start.disabled = s.state === "running"; + const sm = s.summary || {}; + status.replaceChildren( + h("div", { class: "row between" }, h("h3", { text: t("tok.progress") }), badge(s.state)), + s.error ? h("p", { class: "error", text: s.error }) : null, + logBox(s.log), + s.state === "done" ? h("div", { class: "tiles" }, + tile(fieldLabel("tok.vocab_size"), int(sm.vocab_size)), + tile(t("tok.vocab_use"), pct(sm.vocab_utilization)), + tile(t("tok.algorithm"), sm.algorithm || "–"), + tile(t("tok.fingerprint"), sm.fingerprint ? String(sm.fingerprint).slice(0, 12) : "–"), + tile(t("tok.elapsed"), sm.elapsed_s === undefined ? "–" : `${num(sm.elapsed_s, 1)} s`)) : null, + s.rows && s.rows.length ? h("div", null, h("h4", { text: t("tok.report") }), table([ + { label: t("tok.bucket"), fmt: (r) => r[0] }, { label: t("tok.texts"), num: true, fmt: (r) => int(r[1]) }, + { label: t("tok.compression"), num: true, fmt: (r) => num(r[2], 2) }, { label: t("tok.chars_per_token"), num: true, fmt: (r) => num(r[3], 2) }, + { label: t("tok.fertility"), num: true, fmt: (r) => num(r[4], 2) }, { label: t("tok.byte_fallback"), num: true, fmt: (r) => pct(r[5], 2) }, + { label: t("tok.roundtrip"), num: true, fmt: (r) => (r[6] === 0 ? t("ui.yes") : `${t("ui.no")} (${int(r[6])})`) }], s.rows), + h("p", { class: "note", text: t("tok.report_note") })) : null, + s.out_dir ? h("p", { class: "note", text: `${t("tok.out_dir_now")}: ${s.out_dir}` }) : null); + }; + root.append(renderGroup("tokenizer", "tokenizer", values, null, { summary: false }), h("div", { class: "row mt" }, start)); + main.append(pageHead("tok.title", "tok.intro"), card(null, root), card(null, status)); + const poll = async () => { const s = await api("/api/tokenizer/state"); paint(s); return s.state === "running" ? 1500 : 6000; }; + page.poll(poll); +} + diff --git a/chronos/webui/static/pages_infer.js b/chronos/webui/static/pages_infer.js new file mode 100644 index 0000000..97c083d --- /dev/null +++ b/chronos/webui/static/pages_infer.js @@ -0,0 +1,94 @@ +// Inference: lazy experts vs full memory on one prompt; architecture comes from the checkpoint. +import { state, t, has, h, api, post, card, pageHead, button, num, int, pct, table, logBox, badge, toast } from "./core.js"; +import { renderGroup, formState, submit } from "./forms.js"; +import { lineChart, barChart } from "./charts.js"; +import { ensureConfig } from "./pages_config.js"; + +const COLS = [ + ["tokens", (v) => int(v)], ["tokens_per_sec", (v) => num(v, 1)], ["response_time_s", (v) => num(v, 2)], + ["prefill_time_s", (v) => num(v, 3)], ["decode_time_s", (v) => num(v, 2)], + ["cache_hit_rate", (v) => pct(v)], ["prediction_hit_rate", (v) => pct(v)], ["cold_miss_predict_hit_rate", (v) => pct(v)], + ["fallback_weight_rate", (v) => pct(v)], ["spec_acceptance_rate", (v) => pct(v)], + ["rss_delta_gb", (v) => num(v, 3)], ["rss_after_decode_gb", (v) => num(v, 2)], +]; +const colLabel = (key) => (has(`infer.col.${key}`) ? t(`infer.col.${key}`) : key); +function modeLabel(mode) { + const m = /^lazy_offload_([\d.]+)x$/.exec(String(mode)); + if (m) return `${t("infer.lazy_output")} · ${m[1]}×`; + return has(`infer.mode.${mode}`) ? t(`infer.mode.${mode}`) : String(mode ?? ""); +} + +export async function renderInference(main, page) { + await ensureConfig(); + const values = formState("infer", "inference"); + const v = state.values.inferPage || (state.values.inferPage = { prompt: "", job: null }); + const root = h("div"); + const out = h("div", { class: "stack" }); + const prompt = h("textarea", { id: "infer-prompt", rows: 4, placeholder: t("infer.prompt") }); + prompt.value = v.prompt; + prompt.addEventListener("input", () => { v.prompt = prompt.value; }); + const go = button("infer.generate", () => submit(go, root, async () => { + const r = await post("/api/infer", { config: state.config, infer: values, prompt: v.prompt }); + v.job = r.job.id; + page.refresh(); + }), { primary: true }); + root.append( + h("div", { class: "field wide", dataset: { key: "prompt" }, tip: t("infer.prompt_help") }, h("label", { class: "label", for: "infer-prompt", text: t("infer.prompt") }), prompt), + h("div", { class: "mt" }, ["inference", "lazy", "speculative"].map((g, i) => renderGroup("inference", g, values, null, { open: i < 2 }))), + h("p", { class: "note", text: t("infer.arch_note") }), + h("div", { class: "row end" }, go)); + main.append(pageHead("infer.title", "infer.intro"), card(null, root), out); + page.poll(async () => { + if (!v.job) return 0; + let job; + try { job = await api(`/api/jobs/${encodeURIComponent(v.job)}?log=200`); } catch (err) { if (err.status === 404) { v.job = null; return 0; } throw err; } + go.disabled = ["running", "starting", "stopping"].includes(job.state); + paint(out, job); + if (job.state === "failed" && !v.reported) { v.reported = true; toast(job.error || t("state.failed"), "error"); } + return go.disabled ? 1500 : 0; + }); +} + +function paint(out, job) { + const r = job.result || {}; + const rows = r.rows || []; + const o = r.outputs || {}; + const diff = r.output_diff; + const blocks = [h("div", { class: "row between" }, h("h3", { text: t("infer.output") }), badge(job.state))]; + if (job.state !== "finished") blocks.push(logBox(job.log)); + if (o.lazy || o.full_dram) { + blocks.push(h("div", { class: "grid two" }, + card(t("infer.lazy_output"), h("div", { class: "output", text: o.lazy || "" })), + card(t("infer.full_output"), h("div", { class: "output", text: o.full_dram || "" })))); + } else if (o.single) blocks.push(h("div", { class: "output", text: o.single })); + if (diff) { + blocks.push(h("p", { class: diff.same ? "note" : "error", + text: `${t(diff.same ? "infer.same" : "infer.diff")} · ${t("infer.similarity")} ${pct(diff.similarity)} · ${t("infer.common_prefix", { n: int(diff.common_prefix_chars) })}` })); + } + if (r.backend) blocks.push(h("p", { class: "note", text: `${t("ui.backend")}: ${r.backend}${r.backend_note ? ` — ${r.backend_note}` : ""}` })); + if (rows.length) { + const used = COLS.filter(([key]) => rows.some((row) => row[key] !== undefined && row[key] !== null)); + blocks.push(card(t("infer.stats"), table([{ label: t("infer.mode"), fmt: (row) => modeLabel(row.mode) }, + ...used.map(([key, fmt]) => ({ label: colLabel(key), num: true, fmt: (row) => (row[key] === undefined || row[key] === null ? "–" : fmt(row[key])) }))], rows), + h("p", { class: "note", text: t("infer.measured_note") }))); + const sweep = rows.filter((row) => row.ram_load_ratio !== undefined && row.ram_load_ratio !== null); + if (sweep.length > 1) { + const pts = (key) => sweep.map((row) => [row.ram_load_ratio, row[key]]).filter((p) => p[1] !== null && p[1] !== undefined); + blocks.push(card(t("infer.sweep"), h("div", { class: "grid two" }, + lineChart({ title: colLabel("tokens_per_sec"), xLabel: t("infer.ram_ratio"), xFmt: (x) => `${num(x, 2)}×`, yFmt: (y) => num(y, 1), + series: [{ label: colLabel("tokens_per_sec"), color: "var(--s1)", points: pts("tokens_per_sec") }] }), + lineChart({ title: t("infer.hit_rates"), xLabel: t("infer.ram_ratio"), xFmt: (x) => `${num(x, 2)}×`, yFmt: (y) => pct(y, 0), + series: [["cache_hit_rate", "var(--s1)"], ["prediction_hit_rate", "var(--s2)"]].map(([key, c]) => ({ label: colLabel(key), color: c, points: pts(key) })) }), + lineChart({ title: colLabel("rss_delta_gb"), xLabel: t("infer.ram_ratio"), xFmt: (x) => `${num(x, 2)}×`, yFmt: (y) => num(y, 2), + series: [{ label: colLabel("rss_delta_gb"), color: "var(--s1)", points: pts("rss_delta_gb") }] })))); + } else if (rows.length > 1) { + blocks.push(card(null, h("div", { class: "grid two" }, + barChart({ title: colLabel("tokens_per_sec"), categories: rows.map((row) => modeLabel(row.mode)), + series: [{ label: colLabel("tokens_per_sec"), values: rows.map((row) => Number(row.tokens_per_sec)) }], fmt: (x) => num(x, 1) }), + barChart({ title: colLabel("rss_delta_gb"), categories: rows.map((row) => modeLabel(row.mode)), + series: [{ label: colLabel("rss_delta_gb"), values: rows.map((row) => Number(row.rss_delta_gb)) }], fmt: (x) => num(x, 3) })))); + } + } + if (job.error) blocks.push(h("p", { class: "error", text: job.error })); + out.replaceChildren(card(null, ...blocks)); +} diff --git a/chronos/webui/static/pages_monitor.js b/chronos/webui/static/pages_monitor.js new file mode 100644 index 0000000..9b881a1 --- /dev/null +++ b/chronos/webui/static/pages_monitor.js @@ -0,0 +1,173 @@ +// Run monitor: any run folder under runs_dir (Web UI jobs and the CLI long runs). +// Reads only; never signals the training process. +import { state, t, has, h, api, card, tile, pageHead, badge, num, int, params, duration, dateTime, logBox, table, toast } from "./core.js"; +import { lineChart } from "./charts.js"; +import { probeSection } from "./pages_probe.js"; + +// Small multiples: one chart per measure family, one y-axis each. +const CHARTS = [ + { id: "loss", keys: ["loss", "primary_loss"] }, + { id: "aux", keys: ["balance_loss", "lookahead_loss", "temporal_loss", "locality_loss"] }, + { id: "throughput", keys: ["tokens_per_s"] }, + { id: "memory", keys: ["peak_mem_gb", "active_mem_gb"] }, + { id: "optimizer", keys: ["grad_norm"] }, + { id: "lr", keys: ["lr"] }, + { id: "recurrent", keys: ["rec_depth_mean", "rec_contraction", "rec_early_exit_ratio"] }, + { id: "routing", keys: ["route_entropy", "load_cv"] }, +]; +const metricLabel = (key) => (has(`metric.${key}`) ? t(`metric.${key}`) : key); +const chartFmt = { lr: (v) => num(v, 6), throughput: (v) => num(v, 0) }; + +function phaseLabel(name) { return has(`stage.${name}`) ? t(`stage.${name}`) : String(name ?? "–"); } + +export async function renderMonitor(main, page) { + const runSel = h("select", { id: "mon-run" }); + const head = h("div", { class: "row" }, h("label", { class: "compact", for: "mon-run", text: t("mon.run") }), runSel); + const body = h("div", { class: "stack" }, h("p", { class: "note", text: t("ui.loading") })); + main.append(pageHead("mon.title", "mon.intro", head), body); + runSel.addEventListener("change", () => { state.values.monitorRun = runSel.value; page.refresh(); }); + page.poll(async () => { + const run = state.values.monitorRun; + let snap; + try { + snap = await api(`/api/monitor/state?history=1${run ? `&run=${encodeURIComponent(run)}` : ""}`); + } catch (err) { + if (err.status === 404 && run) { state.values.monitorRun = ""; toast(t("err.not_found"), "error"); return 100; } + throw err; + } + const names = (snap.runs || []).map((r) => r.name); + if (runSel.options.length !== names.length || [...runSel.options].some((o, i) => o.value !== names[i])) { + runSel.replaceChildren(...names.map((n) => h("option", { value: n, text: n }))); + } + if (snap.run) runSel.value = snap.run; + if (!snap.run) { body.replaceChildren(h("div", { class: "empty", text: t("mon.no_runs") })); return 10000; } + paint(body, snap); + return snap.status && snap.status.state === "running" ? 5000 : 15000; + }); +} + +// How the remaining time was projected (measured progress or the time budget). +function etaBasis(basis) { + const key = `mon.eta_basis.${String(basis).split(" ")[0]}`; + return has(key) ? t(key) : String(basis); +} + +function paint(body, snap) { + const st = snap.status || {}; + const pr = snap.progress || {}; + const latest = snap.latest || {}; + const mem = snap.memory || {}; + const best = snap.best_valid || {}; + const current = pr.current || latest.phase; + const bestNow = best[current]; + const phaseBar = (pr.phases || []).map((p) => h("div", { class: "phase-row" }, + h("span", { class: "phase-name", text: phaseLabel(p.name) }), + h("div", { class: "progress", role: "progressbar", "aria-valuemin": 0, "aria-valuemax": p.total || 0, "aria-valuenow": p.step || 0, + "aria-label": phaseLabel(p.name) }, bar(p.total ? Math.min(1, p.step / p.total) : (p.state === "complete" ? 1 : 0))), + h("span", { class: "note", text: [`${int(p.step)} / ${p.total ? int(p.total) : "–"} · ${t(`phase.${p.state}`)}`, + p.eta && p.state !== "complete" ? t("mon.phase_eta", { t: dateTime(p.eta) }) : null, + p.eta_basis && p.state !== "complete" ? etaBasis(p.eta_basis) : null].filter(Boolean).join(" · ") }))); + // Cards with nothing to show return null; replaceChildren would print it as "null". + body.replaceChildren(...[ + h("div", { class: "row between" }, + h("div", { class: "row" }, badge(st.stale ? "stale" : st.state), st.stale ? h("span", { class: "note", text: t("mon.stale") }) : null, + st.last_update_age_s !== null && st.last_update_age_s !== undefined ? h("span", { class: "note", text: t("mon.updated", { s: int(st.last_update_age_s) }) }) : null, + st.pid ? h("span", { class: "note mono", text: `PID ${st.pid}` }) : null), + st.error ? h("span", { class: "error", text: st.error }) : null), + h("div", { class: "tiles" }, + tile(t("ui.phase"), phaseLabel(current)), + tile(t("ui.step"), int(latest.step), latest.total ? `/ ${int(latest.total)}` : null), + tile(t("mon.loss"), num(latest.loss, 4), latest.primary_loss !== undefined ? `${metricLabel("primary_loss")} ${num(latest.primary_loss, 4)}` : null), + tile(t("mon.valid_ce"), bestNow ? num(bestNow.valid_ce, 4) : "–", bestNow ? `${t("mon.best")} · ${t("ui.step")} ${int(bestNow.step)}` : null), + tile(t("mon.throughput"), num(latest.tokens_per_s, 0), latest.tokens_seen ? `${params(latest.tokens_seen)} ${t("mon.tokens_seen")}` : null), + tile(t("mon.memory"), mem.footprint_gb !== undefined ? `${num(mem.footprint_gb, 1)} GB` : (latest.peak_mem_gb !== undefined ? `${num(latest.peak_mem_gb, 1)} GB` : "–"), + mem.state === "measured" ? t("label.measured") : null), + tile(t("mon.eta"), duration(pr.run_remaining_s), + pr.eta ? [dateTime(pr.eta), pr.eta_basis ? etaBasis(pr.eta_basis) : null].filter(Boolean).join(" · ") + : (pr.eta_paused ? t(`state.${pr.eta_paused}`) : null)), + tile(t("mon.lr"), num(latest.lr, 6), latest.grad_norm !== undefined ? `${t("mon.grad_norm")} ${num(latest.grad_norm, 3)}` : null)), + phaseBar.length ? card(t("mon.progress"), ...phaseBar) : null, + probeSection(snap), + h("div", { class: "grid two" }, CHARTS.map((c) => chart(c, snap))), + evalCharts(snap), + eventsCard(snap), + samplesCard(snap), + checkpointsCard(snap), + logCard(snap)].filter(Boolean)); +} + +function bar(fraction) { + const fill = h("div"); + fill.style.width = `${Math.round(Math.max(0, Math.min(1, fraction)) * 1000) / 10}%`; + return fill; +} +// Steps restart in every phase, so charts show one phase at a time (chosen in the card header). +function viewPhase(snap) { + const phases = Object.keys(snap.history || {}); + const want = state.values.monitorPhase; + return phases.includes(want) ? want : ((snap.progress && snap.progress.current) || phases[phases.length - 1]); +} + +function chart(c, snap) { + const rows = (snap.history || {})[viewPhase(snap)] || []; + const series = c.keys.map((key, i) => ({ label: metricLabel(key), color: `var(--s${i + 1})`, + points: rows.filter((r) => r[key] !== null && r[key] !== undefined).map((r) => [r.step, Number(r[key])]) })); + return card(null, lineChart({ title: t(`mon.chart.${c.id}`), series, xLabel: t("ui.step"), yFmt: chartFmt[c.id] || ((v) => num(v, 3)) })); +} + +function evalCharts(snap) { + const phase = viewPhase(snap); + const vals = (snap.events || []).filter((e) => e.event === "validation" && e.phase === phase); + const keys = (snap.evals && snap.evals.keys) || ["valid_ce"]; + const charts = keys.filter((k) => k !== "valid_ppl" && vals.some((e) => e[k] !== undefined && e[k] !== null)).map((k, i) => + card(null, lineChart({ title: metricLabel(k), xLabel: t("ui.step"), + series: [{ label: metricLabel(k), color: `var(--s${(i % 8) + 1})`, points: vals.filter((e) => e[k] !== null && e[k] !== undefined).map((e) => [e.step, Number(e[k])]) }] }))); + const phases = Object.keys(snap.history || {}); + const picker = h("select", { id: "mon-phase" }, phases.map((p) => h("option", { value: p, text: phaseLabel(p) }))); + picker.value = phase || ""; + picker.addEventListener("change", () => { state.values.monitorPhase = picker.value; document.dispatchEvent(new CustomEvent("chronos:refresh")); }); + return card(t("mon.validation"), h("div", { class: "row" }, h("label", { class: "compact", for: "mon-phase", text: t("ui.phase") }), picker, + h("span", { class: "note", text: t("mon.phase_note") })), + charts.length ? h("div", { class: "grid two mt" }, charts) : h("p", { class: "note mt", text: t("ui.empty") })); +} + +function eventsCard(snap) { + const events = (snap.events || []).slice(-40).reverse(); + if (!events.length) return null; + const known = ["event", "phase", "step", "time"]; + return card(t("mon.events"), table([ + { label: t("ui.time"), fmt: (e) => dateTime(e.time) }, + { label: t("ui.phase"), fmt: (e) => phaseLabel(e.phase) }, + { label: t("ui.step"), num: true, fmt: (e) => int(e.step) }, + { label: t("mon.event"), fmt: (e) => (has(`event.${e.event}`) ? t(`event.${e.event}`) : e.event) }, + { label: t("ui.value"), fmt: (e) => Object.entries(e).filter(([k, v]) => !known.includes(k) && v !== null && typeof v !== "object") + .slice(0, 6).map(([k, v]) => `${metricLabel(k)} ${typeof v === "number" ? num(v, 4) : v}`).join(" · ") }, + ], events)); +} + +function samplesCard(snap) { + const samples = (snap.samples || []).slice(-6).reverse(); + if (!samples.length) return null; + return card(t("mon.samples"), samples.map((x) => h("div", { class: "sample" }, + h("div", { class: "note", text: `${phaseLabel(x.phase)} · ${t("ui.step")} ${int(x.step)}` }), + x.input ? h("div", null, h("b", { text: `${t("mon.input")}: ` }), x.input) : null, + x.reference ? h("div", null, h("b", { text: `${t("mon.reference")}: ` }), x.reference) : null, + h("div", { class: "output" }, x.output || "")))); +} + +function checkpointsCard(snap) { + const rows = snap.checkpoints || []; + if (!rows.length) return null; + return card(t("mon.checkpoints"), table([ + { label: t("ui.path"), fmt: (r) => h("span", { class: "mono", text: r.file }) }, + { label: t("mon.size"), num: true, fmt: (r) => `${num(r.size_gb, 3)} GB` }, + { label: t("ui.time"), fmt: (r) => dateTime(r.modified) }, + ], rows.slice(0, 12))); +} + +function logCard(snap) { + const box = h("div", null, h("p", { class: "note", text: t("ui.loading") })); + api(`/api/monitor/log?run=${encodeURIComponent(snap.run)}&bytes=12000`).then((r) => box.replaceChildren(logBox(r.text))) + .catch(() => box.replaceChildren(h("p", { class: "note", text: t("ui.empty") }))); + return h("details", { class: "card" }, h("summary", { text: t("mon.log") }), box); +} diff --git a/chronos/webui/static/pages_ops.js b/chronos/webui/static/pages_ops.js new file mode 100644 index 0000000..0da89fc --- /dev/null +++ b/chronos/webui/static/pages_ops.js @@ -0,0 +1,144 @@ +// Export, Ollama/OpenAI server, benchmark, auto-tune and IO metrics pages. +import { state, t, h, api, post, card, pageHead, button, num, int, table, logBox, badge, toast, fieldLabel, dateTime } from "./core.js"; +import { renderGroup, formState, submit, assign } from "./forms.js"; +import { lineChart, barChart } from "./charts.js"; +import { ensureConfig } from "./pages_config.js"; + +const active = (s) => ["running", "starting", "stopping", "loading"].includes(s); + +// ── export ───────────────────────────────────────────────────────────── +export async function renderExport(main, page) { + const values = formState("export", "export"); + const v = state.values.exportPage || (state.values.exportPage = { job: null }); + const root = h("div"); + const out = h("div"); + const run = button("export.run", () => submit(run, root, async () => { + v.job = (await post("/api/export", values)).job.id; + page.refresh(); + }), { primary: true }); + root.append(h("p", { class: "note", text: t("export.note") }), renderGroup("export", "export", values, null, { summary: false }), + h("div", { class: "row end mt" }, run)); + main.append(pageHead("export.title", "export.intro"), card(null, root), out); + page.poll(async () => { + if (!v.job) return 0; + const job = await api(`/api/jobs/${encodeURIComponent(v.job)}?log=300`); + run.disabled = active(job.state); + out.replaceChildren(card(null, h("div", { class: "row between" }, h("h3", { text: t("ui.result") }), badge(job.state)), + Array.isArray(job.result) ? table([ + { label: t("export.format"), fmt: (r) => r.format }, { label: t("ui.path"), fmt: (r) => h("span", { class: "mono", text: r.path }) }, + { label: t("export.size"), num: true, fmt: (r) => num(r.size_mb, 2) }, { label: t("export.tensors"), num: true, fmt: (r) => int(r.tensors) }, + ], job.result) : null, + job.error ? h("p", { class: "error", text: job.error }) : null, logBox(job.log))); + return run.disabled ? 1500 : 0; + }); +} + +// ── serve ────────────────────────────────────────────────────────────── +export async function renderServe(main, page) { + const values = formState("serve", "serve"); + const root = h("div"); + const status = h("div"); + const start = button("serve.start", () => submit(start, root, async () => { paint(await post("/api/serve/start", values)); }), { primary: true }); + const stop = button("serve.stop", async () => { paint(await post("/api/serve/stop")); toast(t("serve.stopped")); }, { danger: true }); + const paint = (s) => { + start.disabled = s.running; + stop.disabled = !s.running; + status.replaceChildren(card(null, + h("div", { class: "row between" }, h("h3", { text: s.running ? t("serve.running", { url: s.url }) : t("serve.stopped") }), + badge(s.running ? "running" : "stopped")), + s.running ? h("pre", { class: "log", text: t("serve.hint", { addr: s.addr }) }) : null, + s.running ? h("p", { class: "note", text: s.auth ? t("serve.auth_on") : t("serve.auth_off") }) : null, + logBox(s.log))); + }; + root.append(h("p", { class: "note", text: t("serve.remote_warning") }), renderGroup("serve", "serve", values, null, { summary: false }), + h("div", { class: "row end mt" }, stop, start)); + main.append(pageHead("serve.title", "serve.intro"), card(null, root), status); + page.poll(async () => { const s = await api("/api/serve/state"); paint(s); return s.running ? 3000 : 10000; }); +} + +// ── benchmark ────────────────────────────────────────────────────────── +export async function renderBenchmark(main, page) { + const v = state.values.benchPage || (state.values.benchPage = { job: null }); + const out = h("div", { class: "stack" }); + const run = button("bench.run", async () => { + run.disabled = true; + try { v.job = (await post("/api/benchmark/start")).job.id; page.refresh(); } catch (err) { run.disabled = false; throw err; } + }, { primary: true }); + main.append(pageHead("bench.title", "bench.intro", run), out); + page.poll(async () => { + const res = await api("/api/benchmark/results"); + let job = null; + if (v.job) { try { job = await api(`/api/jobs/${encodeURIComponent(v.job)}?log=200`); } catch { v.job = null; } } + run.disabled = !res.available || (job && active(job.state)); + const results = res.results || {}; + const names = Object.keys(results); + const charts = res.metrics.filter((m) => names.some((n) => Number.isFinite(results[n][m.key]))).map((m) => card(null, barChart({ + title: t(m.label), categories: names.map((n) => results[n].name || n), fmt: (x) => num(x, 2), + series: [{ label: t(m.label), values: names.map((n) => Number(results[n][m.key])) }], + note: t(m.lower_is_better ? "bench.lower" : "bench.higher") }))); + out.replaceChildren( + !res.available ? h("p", { class: "note", text: t("bench.unavailable") }) : null, + names.length ? h("div", { class: "grid two" }, charts) : h("div", { class: "empty", text: t("bench.none") }), + names.length ? h("p", { class: "note", text: t("bench.measured_note") }) : null, + job ? card(null, h("div", { class: "row between" }, h("h3", { text: t("ui.log") }), badge(job.state)), logBox(job.log), + job.error ? h("p", { class: "error", text: job.error }) : null) : null); + return job && active(job.state) ? 2000 : 0; + }); +} +// ── auto-tune ────────────────────────────────────────────────────────── +export async function renderAutotune(main, page) { + await ensureConfig(); + const values = formState("tune", "autotune"); + const root = h("div"); + const out = h("div", { class: "stack" }); + const start = button("tune.start", () => submit(start, root, async () => { paint(await post("/api/autotune/start", { tune: values, config: state.config })); }), { primary: true }); + const stop = button("tune.stop", async () => paint(await post("/api/autotune/stop")), { danger: true }); + const paint = (s) => { + start.disabled = active(s.state); + stop.disabled = !active(s.state); + const trials = s.trials || []; + const best = s.best || {}; + const ok = trials.filter((tr) => tr.status === "complete" && Number.isFinite(tr.loss)); + const keys = [...new Set(trials.flatMap((tr) => Object.keys(tr.params || {})))]; + out.replaceChildren( + card(null, h("div", { class: "row between" }, h("h3", { text: t("tune.trials") }), badge(s.state)), + ok.length ? lineChart({ title: t("tune.loss"), xLabel: t("tune.trial"), yFmt: (y) => num(y, 4), + series: [{ label: t("tune.loss"), color: "var(--s1)", points: ok.map((tr) => [tr.trial, tr.loss]) }] }) : null, + trials.length ? table([{ label: t("tune.trial"), num: true, fmt: (tr) => int(tr.trial) }, + { label: t("tune.loss"), num: true, fmt: (tr) => num(tr.loss, 4) }, + { label: t("ui.state"), fmt: (tr) => (tr.status && t(`trial.${tr.status}`)) || tr.status }, + { label: t("tune.duration"), num: true, fmt: (tr) => `${num(tr.duration_s, 1)} s` }, + ...keys.map((k) => ({ label: fieldLabel(k), num: true, fmt: (tr) => ((tr.params || {})[k] === undefined ? "" : num(tr.params[k], 6)) }))], + trials.slice().reverse()) : null, + h("p", { class: "note", text: t("tune.note") })), + Object.keys(best).length ? card(t("tune.best"), table([{ label: t("ui.value"), fmt: (r) => fieldLabel(r[0]) }, { label: "", num: true, fmt: (r) => num(r[1], 6) }], + Object.entries(best)), h("div", { class: "row end mt" }, button("tune.apply", () => { + assign(state.config, best); + toast(t("config.loaded")); + }, { primary: true }))) : null, + card(t("ui.log"), logBox(s.log))); + }; + root.append(renderGroup("autotune", "autotune", values, null, { summary: false }), h("div", { class: "row end mt" }, stop, start)); + main.append(pageHead("tune.title", "tune.intro"), card(null, root), out); + page.poll(async () => { const s = await api("/api/autotune/state"); paint(s); return active(s.state) ? 2000 : 10000; }); +} + +// ── IO / cache metrics of this server process ────────────────────────── +export async function renderIO(main, page) { + const out = h("div", { class: "stack" }); + main.append(pageHead("io.title", "io.intro"), out); + page.poll(async () => { + const r = await api("/api/io?samples=240"); + const names = Object.keys(r.series || {}); + if (!names.length) { out.replaceChildren(h("div", { class: "empty", text: t("io.empty") })); return 4000; } + const t0 = Math.min(...names.map((n) => (r.series[n][0] || [Infinity])[0])); + out.replaceChildren( + card(t("io.latest"), table([{ label: t("io.metric"), fmt: (n) => h("span", { class: "mono", text: n }) }, + { label: t("io.latest"), num: true, fmt: (n) => num(r.series[n][r.series[n].length - 1][1], 4) }, + { label: t("io.samples"), num: true, fmt: (n) => int(r.series[n].length) }, + { label: t("ui.time"), fmt: (n) => dateTime(r.series[n][r.series[n].length - 1][0]) }], names)), + h("div", { class: "grid two" }, names.slice(0, 12).map((n) => card(null, lineChart({ title: n, xLabel: t("io.seconds"), + series: [{ label: n, color: "var(--s1)", points: r.series[n].map(([ts, val]) => [ts - t0, val]) }], yFmt: (y) => num(y, 3) }))))); + return 3000; + }); +} diff --git a/chronos/webui/static/pages_probe.js b/chronos/webui/static/pages_probe.js new file mode 100644 index 0000000..6168e4e --- /dev/null +++ b/chronos/webui/static/pages_probe.js @@ -0,0 +1,125 @@ +// Lazy-expert probe results in the run monitor: efficiency, hit rates and +// fidelity of every probed variant against the full-memory reference. +import { state, t, has, h, card, num, int, pct, dateTime, table } from "./core.js"; +import { lineChart } from "./charts.js"; + +const SKIPS = [ + [/^dense model/, "probe.skip.dense"], [/^no checkpoint/, "probe.skip.no_checkpoint"], + [/^previous probe/, "probe.skip.busy"], [/^checkpoint still/, "probe.skip.writing"], + [/^superseded by step (\d+)/, "probe.skip.superseded"], +]; +function skipText(reason) { + for (const [re, key] of SKIPS) { + const m = re.exec(String(reason || "")); + if (m) return t(key, { step: m[1] || "" }); + } + return String(reason || ""); +} + +const phaseLabel = (name) => (has(`stage.${name}`) ? t(`stage.${name}`) : String(name ?? "–")); +const yesNo = (v) => (v === null || v === undefined ? "–" : t(v ? "ui.yes" : "ui.no")); + +const secs = (x) => (x === null || x === undefined ? "–" : num(x, Math.abs(Number(x)) >= 10 ? 1 : 3)); +const pair = (a, b) => (a == null && b == null ? "–" : `${int(a)} / ${int(b)}`); +const mOf = (v) => v.measured || {}; +const fOf = (v) => v.fidelity || {}; + +// Columns that no row fills are dropped (e.g. draft acceptance without speculative variants). +function groupTable(title, columns, rows) { + const live = columns.filter((c) => c.keep || rows.some((r) => { const x = c.value(r); return x !== null && x !== undefined && x !== ""; })); + return h("div", { class: "mt" }, h("h4", { text: title }), + table(live.map((c) => ({ label: c.label, num: c.num, fmt: (r) => (r.error && !c.keep && !c.always ? "" : c.fmt(c.value(r), r)) })), rows)); +} +const col = (key, get, fmt) => ({ label: t(key), num: true, value: get, fmt }); +function variantTables(latest) { + const variants = latest.variants || []; + const refs = Object.entries(latest.reference_measured || {}).map(([b, m]) => ({ + label: t("probe.ref_row", { backend: b }), measured: m && !m.error ? m : {}, ...(m && m.error ? { error: m.error } : {}) })); + const name = { label: t("probe.variant"), keep: true, value: (v) => v.label, fmt: (x) => h("span", { class: "mono", text: x }) }; + const errCol = { label: t("ui.error"), always: true, fmt: (x) => (x ? h("span", { class: "error", text: x }) : "") }; + return [ + groupTable(t("probe.group.eff"), [name, + col("probe.tps", (v) => mOf(v).tokens_per_s, (x) => num(x, 1)), col("probe.dtps", (v) => mOf(v).decode_tokens_per_s, (x) => num(x, 1)), + col("probe.vs_full", (v) => mOf(v).speed_vs_full, (x) => (x === null || x === undefined ? "–" : `${num(x, 2)}×`)), + col("probe.prefill", (v) => mOf(v).prefill_time_s, secs), col("probe.decode", (v) => mOf(v).decode_time_s, secs), + col("probe.rss", (v) => mOf(v).peak_rss_gb, (x) => num(x, 2)), col("probe.accept", (v) => mOf(v).spec_acceptance_rate, (x) => pct(x)), + { ...errCol, value: (v) => v.error }], [...variants, ...refs]), + groupTable(t("probe.group.paging"), [name, + col("probe.loads", (v) => mOf(v).on_demand_loads, int), col("probe.load_s", (v) => mOf(v).on_demand_load_time_s, secs), + col("probe.sync", (v) => mOf(v).sync_ssd_loads, int), col("probe.cluster_loads", (v) => mOf(v).cluster_loads, int), + col("probe.wait", (v) => mOf(v).prefetch_wait_time_s, secs), + { label: t("probe.pages"), value: (v) => mOf(v).paging_resolved, fmt: (x, r) => `${x ?? "–"} · ${int(mOf(r).num_pages)}` }, + col("probe.budget", (v) => mOf(v).effective_expert_budget, int), col("probe.ideal", (v) => mOf(v).ideal_active_experts, int), + { label: t("probe.evict"), value: (v) => mOf(v).eviction_policy, fmt: (x) => x ?? "–" }], variants), + groupTable(t("probe.group.hit"), [name, + col("probe.hit", (v) => mOf(v).resident_hit_rate, (x) => pct(x)), + col("probe.hits", (v) => (mOf(v).cache_hits ?? mOf(v).cache_misses ?? null), (_x, r) => pair(mOf(r).cache_hits, mOf(r).cache_misses)), + col("probe.pred_hit", (v) => mOf(v).prediction_hit_rate, (x) => pct(x)), + col("probe.pred_n", (v) => (mOf(v).prediction_total || null), (_x, r) => pair(mOf(r).prediction_hits, mOf(r).prediction_total)), + col("probe.cold_hit", (v) => mOf(v).cold_miss_predict_hit_rate, (x) => pct(x)), + col("probe.cold_n", (v) => (mOf(v).cold_prediction_total || null), (_x, r) => pair(mOf(r).cold_prediction_hits, mOf(r).cold_prediction_total))], + variants), + groupTable(t("probe.group.fid"), [name, + col("probe.exact", (v) => fOf(v).exact_match_rate, (x) => pct(x)), col("probe.agree", (v) => fOf(v).positionwise_agreement, (x) => pct(x)), + col("probe.prefix", (v) => fOf(v).min_matching_prefix, int), col("probe.ref_tokens", (v) => fOf(v).reference_tokens, int), + { ...errCol, value: (v) => v.error }], variants), + ]; +} + +export function probeSection(snap) { + const probes = snap.lazy_probe || []; + if (!probes.length) return card(t("probe.title"), h("p", { class: "note", text: t("probe.none") })); + const done = probes.filter((p) => Array.isArray(p.variants)); + const last = probes[probes.length - 1]; + const latest = done[done.length - 1]; + const parts = []; + if (last !== latest && (last.skipped || last.error)) { + parts.push(h("p", { class: "note", text: `${phaseLabel(last.phase)} · ${t("ui.step")} ${int(last.step)}: ${last.skipped ? t("probe.skipped", { reason: skipText(last.skipped) }) : last.error}` })); + } + if (latest) { + const c = latest.conditions || {}; + parts.push( + h("div", { class: "row" }, + h("span", { class: "pill", text: `${phaseLabel(latest.phase)} · ${t("ui.step")} ${int(latest.step)}` }), + h("span", { class: "note", text: dateTime(latest.time) }), + h("span", { class: "note", text: `${t("probe.trained_clusters")}: ${yesNo(latest.trained_with_clusters)}` }), + h("span", { class: "note", text: `${t("probe.auto_paging")}: ${latest.auto_paging ?? "–"}` }), + latest.truncated ? h("span", { class: "note", text: t("train.variants_capped", { n: int(latest.variants_requested), cap: int(latest.variants.length) }) }) : null), + h("p", { class: "note", text: t("probe.conditions", { n: int(c.prompts), t: int(c.max_new_tokens) }) }), + ...variantTables(latest), + !latest.reference_measured && Object.keys(latest.references || {}).length ? h("p", { class: "note", text: `${t("probe.reference")}: ${Object.entries(latest.references) + .map(([b, tps]) => `${b} ${num(tps, 1)} ${t("probe.tps")}`).join(" · ")}` }) : null, + historyCharts(done)); + } + return card(t("probe.title"), ...parts); +} + +// History of one chosen variant over training (sync_on_demand first by default). +function historyCharts(all) { + // Steps restart in every phase: plot the newest phase only. + const phase = all[all.length - 1].phase; + const done = all.filter((p) => p.phase === phase); + if (done.length < 2) return null; + const labels = [...new Set(done.flatMap((p) => p.variants.filter((v) => !v.error).map((v) => v.label)))]; + if (!labels.length) return null; + const want = state.values.probeVariant; + const pick = labels.includes(want) ? want : (labels.find((l) => l.includes("sync_on_demand")) || labels[0]); + const at = (p) => p.variants.find((x) => x.label === pick && !x.error); + const series = (defs) => defs.map(([key, get], i) => ({ label: t(key), color: `var(--s${i + 1})`, + points: done.map((p) => { const v = at(p); return v ? [p.step, get(v)] : null; }) + .filter((pt) => pt && pt[1] !== null && pt[1] !== undefined) })); + const chart = (title, defs, yFmt) => lineChart({ title: `${title} · ${phaseLabel(phase)}`, series: series(defs), xLabel: t("ui.step"), yFmt }); + const sel = h("select", { id: "probe-variant" }, labels.map((l) => h("option", { value: l, text: l }))); + sel.value = pick; + sel.addEventListener("change", () => { state.values.probeVariant = sel.value; document.dispatchEvent(new CustomEvent("chronos:refresh")); }); + return h("div", { class: "mt" }, + h("div", { class: "row" }, h("label", { class: "compact", for: "probe-variant", text: t("probe.variant") }), sel), + h("p", { class: "note", text: t("probe.history_note") }), + h("div", { class: "grid two mt" }, + chart(t("probe.history"), [["probe.hit", (v) => mOf(v).resident_hit_rate], ["probe.pred_hit", (v) => mOf(v).prediction_hit_rate], + ["probe.agree", (v) => fOf(v).positionwise_agreement], ["probe.exact", (v) => fOf(v).exact_match_rate]], (v) => pct(v, 0)), + chart(t("probe.c_speed"), [["probe.tps", (v) => mOf(v).tokens_per_s], ["probe.dtps", (v) => mOf(v).decode_tokens_per_s]], (v) => num(v, 1)), + chart(t("probe.c_loads"), [["probe.loads", (v) => mOf(v).on_demand_loads], ["probe.sync", (v) => mOf(v).sync_ssd_loads], + ["probe.cluster_loads", (v) => mOf(v).cluster_loads]], (v) => num(v, 0)), + chart(t("probe.c_rss"), [["probe.rss", (v) => mOf(v).peak_rss_gb]], (v) => num(v, 2)))); +} diff --git a/chronos/webui/static/pages_train.js b/chronos/webui/static/pages_train.js new file mode 100644 index 0000000..5ae2281 --- /dev/null +++ b/chronos/webui/static/pages_train.js @@ -0,0 +1,84 @@ +// Train page: job form, lazy-expert probe sweep (runs after every validation), job list. +import { state, t, h, has, api, post, card, pageHead, button, badge, dateTime, logBox, toast, table, int } from "./core.js"; +import { renderGroup, formState, submit } from "./forms.js"; +import { ensureConfig } from "./pages_config.js"; + +let previewTimer = 0; +const STAGE_ORDER = ["pretrain", "sft", "dpo", "orpo", "grpo", "distill"]; +const stageName = (m) => (has(`stage.${m}`) ? t(`stage.${m}`) : m); + +// One data row per selected stage after the first (canonical order); the first stage uses train.data_path. +function paintStageData(host, train) { + const later = STAGE_ORDER.filter((m) => train["train.stages"].includes(m)).slice(1); + host.hidden = !later.length; + for (const el of host.querySelectorAll(".field[data-key^='train.data_']")) { + el.hidden = !later.includes(el.dataset.key.slice("train.data_".length)); + } +} + +async function preview(out, values) { + try { + const p = await post("/api/probe/preview", values); + const text = p.requested > p.variants ? t("train.variants_capped", { n: int(p.requested), cap: int(p.variants) }) + : t("train.variants", { n: int(p.variants) }); + out.replaceChildren(h("p", { class: "note", text: values["probe.enabled"] ? text : t("train.probe_off") }), + values["probe.enabled"] && p.labels.length ? h("details", null, h("summary", { text: t("probe.variant") }), + h("ul", { class: "mono" }, p.labels.map((l) => h("li", { text: l })))) : null); + } catch { + out.replaceChildren(h("p", { class: "error", text: t("ui.invalid") })); + } +} + +export async function renderTrain(main, page) { + await ensureConfig(); + const train = formState("train", "train"); + const probe = formState("probe", "probe"); + const root = h("div"); + const variants = h("div"); + const jobs = h("div"); + const stageData = card(t("group.stage_data"), h("p", { class: "note", text: t("train.stage_data_note") }), + renderGroup("train", "stage_data", train, null, { summary: false })); + const onTrain = (key) => { if (key === "train.stages") paintStageData(stageData, train); }; + const onProbe = () => { clearTimeout(previewTimer); previewTimer = setTimeout(() => preview(variants, probe), 300); }; + const start = button("train.start", () => submit(start, root, async () => { + const r = await post("/api/train/start", { config: state.config, train, probe }); + state.values.monitorRun = r.run; + toast(`${t("train.started")}: ${r.run}`); + page.refresh(); + }), { primary: true }); + root.append( + card(t("group.train"), h("p", { class: "note", text: t("train.config_note") }), renderGroup("train", "train", train, onTrain, { summary: false })), + stageData, + card(t("train.probe_title"), h("p", { class: "note", text: t("train.probe_note") }), + renderGroup("probe", "probe", probe, onProbe, { summary: false }), variants), + h("div", { class: "row end mt" }, start)); + main.append(pageHead("train.title", "train.intro"), root, card(t("train.jobs"), jobs)); + paintStageData(stageData, train); + preview(variants, probe); + page.poll(async () => { + const r = await api("/api/jobs?kind=train"); + paintJobs(jobs, r.jobs || [], page); + return (r.jobs || []).some((j) => ["running", "starting", "stopping"].includes(j.state)) ? 2000 : 8000; + }); +} + +function paintJobs(host, list, page) { + if (!list.length) { host.replaceChildren(h("p", { class: "note", text: t("ui.empty") })); return; } + host.replaceChildren(table([ + { label: t("train.run_dir"), fmt: (j) => (j.meta && j.meta.run) || j.id }, + { label: t("ui.phase"), fmt: (j) => ((j.meta && j.meta.stages) || []).map(stageName).join(" → ") || j.title }, + { label: t("ui.state"), fmt: (j) => badge(j.state) }, + { label: t("ui.started"), fmt: (j) => dateTime(j.started) }, + { label: "", fmt: (j) => h("div", { class: "row" }, + h("a", { href: "#monitor", text: t("train.open_monitor"), onclick: () => { state.values.monitorRun = j.meta && j.meta.run; } }), + ["running", "starting"].includes(j.state) ? button("train.stop", async (e) => { + e.target.disabled = true; + try { await post(`/api/jobs/${encodeURIComponent(j.id)}/stop`); } finally { page.refresh(); } + }, { danger: true }) : null, + button("ui.log", async () => { + const full = await api(`/api/jobs/${encodeURIComponent(j.id)}?log=400`); + host.append(card(`${t("ui.log")} · ${(j.meta && j.meta.run) || j.id}`, logBox(full.log), + full.error ? h("p", { class: "error", text: full.error }) : null)); + })) }, + ], list.slice().reverse())); +} diff --git a/chronos/webui/static/picker.js b/chronos/webui/static/picker.js new file mode 100644 index 0000000..c2f09a8 --- /dev/null +++ b/chronos/webui/static/picker.js @@ -0,0 +1,334 @@ +// File / folder picking for path fields. Two ways in, both labelled in the user's language: +// "Browse…" lists the server's folders through /api/fs/list (in-page dialog). +// "Upload…" uses the system file manager. On the server's own machine the server opens the native +// dialog and the real path is used in place; from another machine (LAN access) the files +// are uploaded into /uploads/… and that server path is used. +// kind: dir | data | checkpoint | config | any. multiple: several files/folders, one per line. +import { state, t, has, h, api, post, clear, bytes, dateTime, reportError, toast, errorText, ApiError } from "./core.js"; + +const lastDir = {}; // per kind, for this browser session + +function splitPaths(text) { + return String(text || "").split(/\r?\n/).map((x) => x.trim()).filter(Boolean); +} + +// Opens the picker; resolves to a list of paths, or null when cancelled. +export function openPicker({ kind = "any", multiple = false, start = "", title } = {}) { + return new Promise((resolve) => { + const picked = new Set(); + let view = null; + let cursor = -1; + const dlg = h("dialog", { class: "picker", "aria-labelledby": "picker-title" }); + const where = h("input", { type: "text", spellcheck: "false", autocomplete: "off", "aria-label": t("ui.path") }); + const list = h("ul", { class: "picker-list", role: "listbox", tabindex: "0", "aria-multiselectable": multiple ? "true" : null, + "aria-label": t("picker.entries") }); + const roots = h("div", { class: "picker-roots", role: "group", "aria-label": t("picker.places") }); + const status = h("p", { class: "note", "aria-live": "polite" }); + const hidden = h("input", { type: "checkbox", id: "picker-hidden" }); + const choose = h("button", { type: "button", class: "primary" }); + const thisFolder = kind === "dir" || kind === "data" || kind === "any"; + const finish = (value) => { dlg.close(); dlg.remove(); resolve(value); }; + + let seq = 0; // only the newest folder request may repaint + const load = async (path) => { + const mine = ++seq; + let next; + try { + next = await api(`/api/fs/list?${new URLSearchParams({ path, kind, hidden: hidden.checked ? "true" : "false" })}`); + } catch (err) { + if (mine !== seq) return; + if (err.status === 404 && path) return load(""); + reportError(err); + return; + } + if (mine !== seq || !dlg.isConnected) return; + view = next; + lastDir[kind] = view.path; + where.value = view.path; + cursor = view.entries.length ? 0 : -1; + paint(); + }; + const entryAt = (i) => (view && i >= 0 ? view.entries[i] : null); + const selectable = (e) => e && (!e.dir || thisFolder); + const toggle = (e) => { + if (!selectable(e)) return; + if (!multiple) picked.clear(); + if (picked.has(e.path)) picked.delete(e.path); else picked.add(e.path); + mark(); + }; + const open = (e) => { if (e && e.dir) load(e.path); else if (e && !multiple) finish([e.path]); }; + const result = () => (picked.size ? [...picked] : (thisFolder && view ? [view.path] : [])); + + // The list is rebuilt only when the folder changes; selection updates attributes in place, so a + // double-click lands on the same element as its first click. + function paint() { + clear(list); + view.entries.forEach((e, i) => { + let before = false; // selection before the first click of a double-click + const li = h("li", { role: "option", id: `pick-${i}`, class: `picker-item${e.dir ? " dir" : ""}` }, + icon(e.dir), h("span", { class: "picker-name", text: e.name }), + h("span", { class: "picker-meta", text: e.dir ? "" : bytes(e.size) }), + h("span", { class: "picker-meta", text: e.mtime ? dateTime(e.mtime) : "" })); + li.addEventListener("click", (ev) => { + cursor = i; + if (ev.detail > 1) return; + before = picked.has(e.path); + if (selectable(e)) toggle(e); else mark(); + }); + li.addEventListener("dblclick", () => { + if (e.dir) { if (!before) picked.delete(e.path); load(e.path); return; } + if (!multiple) finish([e.path]); + }); + list.append(li); + }); + if (!view.entries.length) list.append(h("li", { class: "picker-empty", text: t("picker.empty") })); + if (view.truncated) list.append(h("li", { class: "picker-empty", text: t("picker.truncated", { n: view.entries.length }) })); + if (!roots.childElementCount) { + roots.append(...view.roots.map((r) => h("button", { type: "button", title: r.path, onclick: () => load(r.path), + text: r.id && has(`picker.place.${r.id}`) ? t(`picker.place.${r.id}`) : r.name }))); + } + up.disabled = !view.parent; + mark(); + } + function mark() { + list.querySelectorAll(".picker-item").forEach((li, i) => { + const e = view.entries[i]; + li.setAttribute("aria-selected", picked.has(e.path) ? "true" : "false"); + li.classList.toggle("cursor", i === cursor); + }); + list.setAttribute("aria-activedescendant", cursor >= 0 ? `pick-${cursor}` : ""); + list.querySelector(".cursor")?.scrollIntoView({ block: "nearest" }); + const out = result(); + choose.disabled = !out.length; + status.textContent = picked.size + ? (multiple ? t("picker.n_selected", { n: picked.size }) : [...picked][0]) + : (thisFolder && view ? t("picker.this_folder", { path: view.path }) : t("picker.pick_file")); + } + + const up = h("button", { type: "button", text: "↑", "aria-label": t("picker.up"), title: t("picker.up"), + onclick: () => view && view.parent && load(view.parent) }); + const go = h("button", { type: "button", text: t("picker.go"), onclick: () => load(where.value) }); + const cancel = h("button", { type: "button", text: t("ui.cancel"), onclick: () => finish(null) }); + choose.textContent = multiple ? t("picker.add") : t("picker.select"); + choose.addEventListener("click", () => { const out = result(); if (out.length) finish(out); }); + where.addEventListener("keydown", (e) => { if (e.key === "Enter") { e.preventDefault(); load(where.value); } }); + hidden.addEventListener("change", () => view && load(view.path)); + list.addEventListener("keydown", (ev) => { + if (!view || !view.entries.length) return; + const n = view.entries.length; + const move = { ArrowDown: 1, ArrowUp: -1, PageDown: 10, PageUp: -10 }[ev.key]; + if (move) cursor = Math.max(0, Math.min(n - 1, cursor + move)); + else if (ev.key === "Home") cursor = 0; + else if (ev.key === "End") cursor = n - 1; + else if (ev.key === " ") toggle(entryAt(cursor)); + else if (ev.key === "Enter") { const e = entryAt(cursor); if (e && e.dir) open(e); else if (e) { toggle(e); if (!multiple) open(e); } } + else if (ev.key === "Backspace") { if (view.parent) load(view.parent); } + else return; + ev.preventDefault(); + mark(); + }); + dlg.addEventListener("cancel", (e) => { e.preventDefault(); finish(null); }); + dlg.append( + h("div", { class: "picker-head" }, h("h3", { id: "picker-title", text: title || t(`picker.title.${kind}`) }), + h("button", { type: "button", class: "ghost", text: "×", "aria-label": t("ui.close"), onclick: () => finish(null) })), + h("div", { class: "picker-bar" }, up, where, go), + roots, list, + h("div", { class: "picker-foot" }, + h("label", { class: "compact", for: "picker-hidden" }, hidden, t("picker.hidden")), status, + h("div", { class: "row end" }, cancel, choose))); + document.body.append(dlg); + dlg.showModal(); + load(start || lastDir[kind] || "").then(() => list.focus()); + }); +} + +function icon(dir) { + return h("svg", { viewBox: "0 0 16 16", width: 16, height: 16, class: "picker-icon", "aria-hidden": "true" }, + h("path", { svg: true, d: dir ? "M1.5 3.5h4.5l1.5 1.5h7v8.5h-13z" : "M3.5 1.5h6l3 3v10h-9zM9.5 1.5v3h3" })); +} + +// ── shared field helpers ─────────────────────────────────────────────── +const lastLine = (field) => { const c = splitPaths(field.value); return c[c.length - 1] || ""; }; + +// Multiple fields append (no repeats); single fields take the first path. +function putPaths(field, got, multiple, onChange) { + const current = splitPaths(field.value); + field.value = multiple ? [...new Set([...current, ...got])].join("\n") : got[0]; + field.dispatchEvent(new Event("input", { bubbles: true })); + if (onChange) onChange(field.value); + field.focus(); +} + +// A "Browse…" button: the in-page list of the server's folders. +export function browseButton(field, { kind = "any", multiple = false, onChange } = {}) { + const btn = h("button", { type: "button", class: "browse", text: t(multiple ? "picker.add_button" : "ui.browse"), + tip: t("picker.browse_tip") }); + btn.addEventListener("click", async () => { + const got = await openPicker({ kind, multiple, start: lastLine(field) || lastDir[kind] || "" }); + if (got && got.length) putPaths(field, got, multiple, onChange); + }); + return btn; +} + +// ── "Upload…": system file manager ───────────────────────────────────── +// Mirrors chronos/workbench/files.py (KINDS, BLOCKED_SUFFIXES); the server checks again. +const ACCEPT = { + data: [".jsonl", ".json", ".parquet", ".csv", ".tsv", ".txt"], + checkpoint: [".pth", ".pt", ".safetensors", ".npz", ".gguf", ".json"], // + the .config.json sidecar + config: [".json"], +}; +const WEIGHTS = [".pth", ".pt", ".safetensors", ".npz", ".gguf"]; +const BLOCKED = [".py", ".pyc", ".pyo", ".so", ".dylib", ".dll", ".exe", ".bat", ".cmd", ".com", ".sh", ".command", + ".ps1", ".app", ".pkg", ".dmg", ".jar"]; +const ends = (name, list) => { const low = name.toLowerCase(); return list.some((s) => low.endsWith(s)); }; +const accepts = (kind, name) => !ends(name, BLOCKED) && (!ACCEPT[kind] || ends(name, ACCEPT[kind])); +const baseName = (p) => String(p).split(/[\\/]/).filter(Boolean).pop() || String(p); + +function uploadMode() { + const s = state.session || {}; + return s.access === "local" && s.native_dialog ? "native" : "upload"; +} + +function batchId() { // [A-Za-z0-9_-]{6,48}; works on plain-HTTP LAN pages too + const b = new Uint8Array(9); + crypto.getRandomValues(b); + return `${Date.now().toString(36)}-${Array.from(b, (x) => x.toString(16).padStart(2, "0")).join("")}`; +} +// The server opens the operating system's dialog on its own desktop; the chosen paths are used in place. +async function nativePick(field, { kind, multiple, folder }) { + const got = await post("/api/fs/native", { kind, multiple, folder, start: lastLine(field) || lastDir[kind] || "", + title: t(`picker.title.${folder ? "dir" : kind}`) }); + return got && got.paths && got.paths.length ? got.paths : null; +} + +// One file as a streamed PUT body (XHR, because fetch has no upload progress). +function putFile(file, query, onProgress) { + return new Promise((resolve, reject) => { + const xhr = new XMLHttpRequest(); + xhr.open("PUT", `/api/fs/upload?${new URLSearchParams(query)}`); + xhr.withCredentials = true; + xhr.setRequestHeader("X-Chronos-Request", "1"); + xhr.setRequestHeader("Content-Type", "application/octet-stream"); + xhr.upload.onprogress = (e) => onProgress(e.loaded); + xhr.onload = () => { + let data = null; + try { data = JSON.parse(xhr.responseText); } catch { data = null; } + if (xhr.status >= 200 && xhr.status < 300) resolve(data); + else reject(new ApiError(xhr.status, data && data.detail !== undefined ? data.detail : data)); + }; + xhr.onerror = () => reject(new ApiError(0, { error: "upload_failed" })); + xhr.onabort = () => reject(new ApiError(0, { error: "upload_failed" })); + xhr.send(file); + }); +} + +// Uploads the picked files into one server batch folder; resolves to the server paths a field should use. +async function uploadFiles(files, { kind, folder, note }) { + const all = [...files]; + const list = all.filter((f) => accepts(kind, f.webkitRelativePath || f.name) + && !(f.webkitRelativePath || f.name).split("/").some((p) => p.startsWith("."))); + if (!list.length) throw new ApiError(422, { error: "upload_type" }); + const limit = ((state.session && state.session.max_upload_mb) || 20480) * 2 ** 20; + const big = list.find((f) => f.size > limit); + if (big) throw new ApiError(413, { error: "upload_too_large", message: big.name }); + const total = list.reduce((s, f) => s + f.size, 0); + const batch = batchId(); + let done = 0; + const show = (n) => { note.textContent = t("picker.uploading", { done: bytes(n), total: bytes(total) }); }; + note.hidden = false; + show(0); + const saved = []; + for (const f of list) { + const got = await putFile(f, { kind, batch, name: f.webkitRelativePath || f.name }, (n) => show(done + n)); + done += f.size; + saved.push(got); + } + note.textContent = all.length > list.length + ? t("picker.uploaded_skipped", { n: list.length, skipped: all.length - list.length }) + : t("picker.uploaded", { n: list.length }); + if (folder) { // the uploaded folder itself: / + const top = (list[0].webkitRelativePath || "").split("/")[0]; + return [top ? `${saved[0].root}/${top}` : saved[0].root]; + } + if (kind === "checkpoint") { // weights + sidecar: the field takes the weights file + const weights = saved.filter((s) => ends(s.path, WEIGHTS)); + return (weights.length ? weights : saved).map((s) => s.path); + } + return saved.map((s) => s.path); +} +// Which "Upload" buttons a field gets: folders only for dir, files + folders for datasets. +function uploadKinds(kind) { + if (kind === "dir") return [true]; + if (kind === "data" || kind === "any") return [false, true]; + return [false]; +} + +// "Upload…" button(s) for a path field, plus the progress note they share. +export function uploadButtons(field, { kind = "any", multiple = false, onChange } = {}, note) { + const mode = uploadMode(); + const folders = uploadKinds(kind); + return folders.map((folder) => { + const label = folders.length > 1 ? (folder ? "picker.upload_folder" : "picker.upload_files") : "ui.upload"; + const btn = h("button", { type: "button", class: "upload", text: t(label), + tip: t(mode === "native" ? "picker.native_tip" : "picker.upload_tip") }); + let input = null; + const run = async (files) => { + btn.disabled = true; + try { + const got = await uploadFiles(files, { kind, folder, note }); + if (got.length) putPaths(field, got, multiple, onChange); + } catch (err) { + note.hidden = false; + note.textContent = errorText(err); + reportError(err); + } finally { + btn.disabled = false; + if (input) input.value = ""; + } + }; + btn.addEventListener("click", async () => { + if (uploadMode() === "native") { + btn.disabled = true; + try { + const got = await nativePick(field, { kind, multiple, folder }); + if (got) putPaths(field, got, multiple, onChange); + return; + } catch (err) { + if (!(err instanceof ApiError) || err.code !== "native_unavailable") { reportError(err); return; } + state.session.native_dialog = false; // no dialog on this machine: fall back to uploading + toast(t("picker.native_fallback")); + } finally { + btn.disabled = false; + } + } + if (!input) { + input = h("input", { type: "file", hidden: true, tabindex: "-1", "aria-hidden": "true", + multiple: multiple || folder || kind === "checkpoint" ? true : null, + accept: folder || !ACCEPT[kind] ? null : ACCEPT[kind].join(",") }); + if (folder) input.webkitdirectory = true; + input.addEventListener("change", () => { if (input.files && input.files.length) run(input.files); }); + btn.after(input); + } + input.click(); + }); + return btn; + }); +} + +// Input/textarea + Browse + Upload in one row. ``pick.merge`` fields say when several datasets will be +// merged into one training file; the upload note reports progress and where the files went. +export function pathControl(field, pick) { + const status = h("p", { class: "note upload-note", "aria-live": "polite", hidden: true }); + const row = h("div", { class: "path-row" }, field, browseButton(field, pick), uploadButtons(field, pick, status)); + const box = h("div", { class: "path-box" }, row, status); + if (!pick.merge) return box; + const note = h("p", { class: "note path-note", "aria-live": "polite" }); + const update = () => { + const n = splitPaths(field.value).length; + note.textContent = n > 1 ? t("picker.will_merge", { n }) : t("picker.multi_hint"); + }; + field.addEventListener("input", update); + update(); + box.append(note); + return box; +} diff --git a/chronos/workbench/__init__.py b/chronos/workbench/__init__.py new file mode 100644 index 0000000..9935d47 --- /dev/null +++ b/chronos/workbench/__init__.py @@ -0,0 +1 @@ +"""UI-independent services behind the Chronos Web UI (training sessions, inference runners, data tools).""" diff --git a/chronos/workbench/data.py b/chronos/workbench/data.py new file mode 100644 index 0000000..301b343 --- /dev/null +++ b/chronos/workbench/data.py @@ -0,0 +1,149 @@ +"""Dataset inspection for any task (no UI dependency). + +Streams a file, a directory or a glob (jsonl / json / parquet / csv / tsv / +txt; never a full load) and reports the record schemas, field inventory, +char-length distribution, script mix, duplicate ratio and media modalities. +""" +from __future__ import annotations + +import hashlib +import json +import os +import statistics +from collections import Counter + + +_CHAT_KEYS = ("conversations", "messages", "dialog", "dialogue") +_PROMPT_KEYS = ("prompt", "question", "query", "input", "instruction") +_ANSWER_KEYS = ("response", "answer", "completion", "output", "target", "chosen") + + +def record_schema(rec) -> str: + """Coarse shape of one record; never task-specific beyond the field names.""" + if isinstance(rec, str): + return "plain_text" + if not isinstance(rec, dict): + return "other" + if any(isinstance(rec.get(k), list) for k in _CHAT_KEYS): + return "chat" + if "chosen" in rec and "rejected" in rec: + return "preference" + if "instruction" in rec and any(k in rec for k in ("output", "response", "answer")): + return "instruction" + if any(k in rec for k in _PROMPT_KEYS) and any(k in rec for k in _ANSWER_KEYS): + return "prompt_response" + nested = [v for v in rec.values() if isinstance(v, dict) + and len(v) >= 2 and all(isinstance(x, str) for x in v.values())] + short = [k for k, v in rec.items() if isinstance(v, str) and len(k) <= 3] + if nested or len(short) >= 2: + return "parallel_pair" + if any(isinstance(rec.get(k), str) for k in ("text", "content", "document", "passage", "article", "story")): + return "plain_text" + return "other" + + +def _extract_text(rec) -> str: + """All text a record carries, in field order (chat turns, pairs, any schema).""" + from chronos.tokenizer.extract import _texts_from_record + parts = list(_texts_from_record(rec, None)) + if not parts and isinstance(rec, dict): + parts = [str(v) for v in rec.values() if isinstance(v, str)] + return " ".join(parts) + + +def _fields(rec, prefix: str = "", out: dict | None = None, depth: int = 0) -> dict: + out = {} if out is None else out + if not isinstance(rec, dict) or depth > 2: + return out + for k, v in rec.items(): + key = f"{prefix}.{k}" if prefix else str(k) + if isinstance(v, dict): + _fields(v, key, out, depth + 1) + else: + out[key] = type(v).__name__ if v is not None else "null" + return out + + +def _scan(path, max_records: int = 50_000): + """Stream up to ``max_records`` records; return summary dict + length list + previews. + + ``path`` is one file, folder or glob, or a list of them (one per line in text): several + datasets are scanned as one, in order, as training would see them after merging. + """ + from chronos.tokenizer.extract import iter_records, script_bucket + from chronos.workbench.files import data_files, parse_paths + paths = parse_paths(path) + if not paths: + return {"error": "no path given"}, [], [] + files = data_files(paths) + if not files: + return {"error": f"no readable data files at: {', '.join(paths)!r} (jsonl, json, parquet, csv, tsv, txt)"}, [], [] + char_lens, samples = [], [] + schemas, scripts, field_hits, field_types = Counter(), Counter(), Counter(), {} + examples: dict[str, str] = {} + seen, dup, n_total, errors = set(), 0, 0, [] + modal = Counter() + try: + from chronos.data.flexible_dataset import detect_modalities + except Exception: # pragma: no cover - torch-free environments + detect_modalities = None + for file in files: + if n_total >= max_records: + break + try: + for rec in iter_records(file): + if n_total >= max_records: + break + n_total += 1 + kind = record_schema(rec) + schemas[kind] += 1 + for key, typ in _fields(rec).items(): + field_hits[key] += 1 + field_types.setdefault(key, typ) + if detect_modalities is not None and isinstance(rec, dict): + for mod in detect_modalities(rec): + modal[mod] += 1 + text = _extract_text(rec) + char_lens.append(len(text)) + if text: + scripts[script_bucket(text[:400])] += 1 + digest = hashlib.md5(json.dumps(rec, sort_keys=True, ensure_ascii=False, default=str) + .encode("utf-8")).hexdigest() + if digest in seen: + dup += 1 + else: + seen.add(digest) + if kind not in examples: + examples[kind] = json.dumps(rec, ensure_ascii=False, default=str)[:300] + if len(samples) < 3: + samples.append(text[:200]) + except Exception as exc: # unreadable file: report it, keep scanning the rest + errors.append(f"{os.path.basename(file)}: {type(exc).__name__}: {exc}"[:200]) + if not char_lens: + return {"error": "no parseable records", "files": len(files), "read_errors": errors}, [], samples + ordered = sorted(char_lens) + summary = { + "files": len(files), + "scanned": n_total, + "dup_ratio": round(dup / max(n_total, 1), 4), + "schemas": dict(schemas.most_common()), + "schema_examples": examples, + "fields": {k: {"type": field_types[k], "present": round(c / n_total, 3)} + for k, c in field_hits.most_common(24)}, + "scripts": {k: round(c / max(1, sum(scripts.values())), 3) for k, c in scripts.most_common()}, + "char_min": ordered[0], + "char_mean": round(statistics.mean(char_lens), 1), + "char_median": int(statistics.median(char_lens)), + "char_p95": int(ordered[int(0.95 * (len(ordered) - 1))]), + "char_max": ordered[-1], + "size_mb": round(sum(os.path.getsize(f) for f in files) / (1024 * 1024), 1), + "note": (f"sampled first {max_records} records" if n_total >= max_records else "full scan"), + } + if modal: + summary["modalities"] = dict(modal) + if errors: + summary["read_errors"] = errors[:8] + return summary, char_lens, samples + + +scan_dataset = _scan diff --git a/chronos/workbench/files.py b/chronos/workbench/files.py new file mode 100644 index 0000000..97f3f8e --- /dev/null +++ b/chronos/workbench/files.py @@ -0,0 +1,226 @@ +"""Server-side file picking and dataset merging for the Web UI (no UI dependency). + +The Web UI runs on the user's machine and every path it sends is a server path, so the picker lists +directories through :func:`list_dir` instead of a browser upload. ``kind`` filters what a field +accepts: ``dir`` (folders only), ``data`` (jsonl / json / parquet / csv / tsv / txt), ``checkpoint`` +(.pth / .safetensors / .npz / .gguf), ``config`` (.json) or ``any``. + +:func:`merge_datasets` streams several dataset files or folders into one JSONL file, the format every +Chronos training loader reads. Records are copied as they are (plain-text lines become +``{"text": ...}``); nothing is loaded whole into memory. + +:func:`upload_path` places files a browser on another machine uploads (LAN access) under +``/uploads///``, keeping a folder's +relative layout and refusing traversal, hidden names and executable or script types. +""" +from __future__ import annotations + +import hashlib +import json +import os +import re +import time + +DATA_SUFFIXES = (".parquet", ".jsonl", ".json", ".csv", ".tsv", ".txt") +KINDS = { + "dir": (), + "data": DATA_SUFFIXES, + "checkpoint": (".pth", ".pt", ".safetensors", ".npz", ".gguf"), + "config": (".json",), + "any": None, +} +MAX_ENTRIES = 2000 + + +def _entry(path: str, name: str, is_dir: bool) -> dict: + try: + st = os.stat(path) + size, mtime = (None if is_dir else st.st_size), st.st_mtime + except OSError: + size, mtime = None, None + return {"name": name, "path": path, "dir": is_dir, "size": size, "mtime": mtime} + + +def list_dir(path: str, kind: str = "any", show_hidden: bool = False) -> dict: + """Folders and matching files directly under ``path`` (a file path lists its parent). + + Returns ``{"path", "parent", "entries", "truncated", "roots"}``; raises ``FileNotFoundError`` + when nothing usable exists there and ``ValueError`` for an unknown ``kind``. + """ + if kind not in KINDS: + raise ValueError("kind") + path = os.path.abspath(os.path.expanduser(path or "~")) + while not os.path.isdir(path): + parent = os.path.dirname(path) + if parent == path: + raise FileNotFoundError(path) + path = parent + suffixes = KINDS[kind] + dirs, files = [], [] + try: + with os.scandir(path) as it: + for e in it: + if not show_hidden and e.name.startswith("."): + continue + try: + is_dir = e.is_dir() + except OSError: + continue + if is_dir: + dirs.append(_entry(e.path, e.name, True)) + elif suffixes is None or (suffixes and e.name.lower().endswith(suffixes)): + files.append(_entry(e.path, e.name, False)) + except PermissionError: + pass + key = lambda x: x["name"].lower() # noqa: E731 + entries = sorted(dirs, key=key) + sorted(files, key=key) + parent = os.path.dirname(path) + return {"path": path, "parent": parent if parent != path else None, + "entries": entries[:MAX_ENTRIES], "truncated": len(entries) > MAX_ENTRIES, "roots": _roots()} + + +def _roots() -> list[dict]: + """Shortcut places; ``id`` lets the page show the name in the user's language.""" + home = os.path.expanduser("~") + out = [{"id": "home", "name": "~", "path": home}] + for name in ("Downloads", "Desktop", "Documents"): + p = os.path.join(home, name) + if os.path.isdir(p): + out.append({"id": name.lower(), "name": name, "path": p}) + if os.path.isdir("/Volumes"): + out.append({"id": "volumes", "name": "/Volumes", "path": "/Volumes"}) + out.append({"id": "root", "name": "/", "path": os.path.abspath(os.sep)}) + return out + + +def parse_paths(text) -> list[str]: + """Paths from a list or from text with one path per line (``~`` expanded, blanks and repeats dropped).""" + items = text if isinstance(text, (list, tuple)) else str(text or "").splitlines() + out = [] + for item in items: + p = os.path.expanduser(str(item).strip().strip('"').strip("'")) + if p and p not in out: + out.append(p) + return out + + +def data_files(paths: list[str]) -> list[str]: + """Readable data files behind files, folders (recursive) or globs, in a stable order.""" + from chronos.tokenizer.extract import expand + out = [] + for p in paths: + for f in ([p] if os.path.isfile(p) else expand([p])): + if f.lower().endswith(DATA_SUFFIXES) and f not in out: + out.append(f) + return out + + +def merge_datasets(paths: list[str], out_dir: str, log=None) -> str: + """One JSONL training file for the given files / folders. + + A single ``.jsonl`` source is used in place. Otherwise every record of every source is streamed + into ``out_dir/merged_.jsonl`` (the hash covers paths, sizes and mtimes, so an unchanged + selection reuses the earlier merge). A ``.sources.json`` manifest records what went in. + Raises ``FileNotFoundError`` when no readable data file is found. + """ + from chronos.tokenizer.extract import iter_records + files = data_files(paths) + if not files: + raise FileNotFoundError("no_files") + if len(files) == 1 and files[0].lower().endswith(".jsonl"): + return files[0] + sig = hashlib.sha256() + for f in files: + st = os.stat(f) + sig.update(f"{os.path.abspath(f)}\0{st.st_size}\0{int(st.st_mtime)}\n".encode()) + os.makedirs(out_dir, exist_ok=True) + dst = os.path.join(out_dir, f"merged_{sig.hexdigest()[:12]}.jsonl") + if os.path.isfile(dst) and os.path.isfile(dst + ".sources.json"): + if log: + log(f"[data] reusing merged dataset {dst}") + return dst + counts, t0 = [], time.monotonic() + tmp = dst + ".part" + with open(tmp, "w", encoding="utf-8") as fh: + for f in files: + n = 0 + for rec in iter_records(f): + fh.write(json.dumps(rec if isinstance(rec, dict) else {"text": str(rec)}, ensure_ascii=False, + default=str) + "\n") + n += 1 + counts.append({"path": os.path.abspath(f), "records": n}) + if log: + log(f"[data] merged {n:,} records from {f}") + if not sum(c["records"] for c in counts): + os.remove(tmp) + raise FileNotFoundError("no_files") + os.replace(tmp, dst) + with open(dst + ".sources.json", "w", encoding="utf-8") as fh: + json.dump({"sources": counts, "records": sum(c["records"] for c in counts), + "seconds": round(time.monotonic() - t0, 1)}, fh, indent=1, ensure_ascii=False) + if log: + log(f"[data] {sum(c['records'] for c in counts):,} records from {len(files)} files → {dst}") + return dst + + +# ── uploads from a browser on another machine ────────────────────────── +UPLOAD_DIRS = {"data": "datasets", "checkpoint": "checkpoints", "config": "configs", "dir": "folders", "any": "files"} +BLOCKED_SUFFIXES = (".py", ".pyc", ".pyo", ".so", ".dylib", ".dll", ".exe", ".bat", ".cmd", ".com", ".sh", ".command", + ".ps1", ".app", ".pkg", ".dmg", ".jar") +_BATCH = re.compile(r"^[A-Za-z0-9_-]{6,48}$") +MAX_DEPTH = 8 + + +def upload_parts(name: str) -> list[str] | None: + """Safe relative path components of an uploaded file name (``folder/sub/x.jsonl``), else ``None``. + + Rejects absolute paths, ``..``, hidden components, control characters and over-long names. + """ + if not isinstance(name, str) or not name or len(name) > 1024 or "\x00" in name: + return None + parts = [p for p in name.replace("\\", "/").split("/") if p != ""] + if not parts or len(parts) > MAX_DEPTH or name.startswith("/"): + return None + for p in parts: + if p in (".", "..") or p.startswith(".") or len(p) > 200 or any(ord(c) < 32 for c in p): + return None + return parts + + +def upload_accepts(kind: str, filename: str) -> bool: + """Whether a field of ``kind`` takes an uploaded file with this name.""" + low = filename.lower() + if low.endswith(BLOCKED_SUFFIXES): + return False + if kind == "data": + return low.endswith(DATA_SUFFIXES) + if kind == "checkpoint": # the ``.config.json`` sidecar travels with the weights + return low.endswith(KINDS["checkpoint"] + (".json",)) + if kind == "config": + return low.endswith(".json") + return kind in ("dir", "any") + + +def upload_path(workdir: str, kind: str, batch: str, name: str) -> str: + """Where an upload lands: ``/uploads///``. + + Raises ``ValueError`` naming the bad part (``kind``, ``batch``, ``name`` or ``type``). + """ + if kind not in UPLOAD_DIRS: + raise ValueError("kind") + if not _BATCH.match(batch or ""): + raise ValueError("batch") + parts = upload_parts(name) + if parts is None: + raise ValueError("name") + if not upload_accepts(kind, parts[-1]): + raise ValueError("type") + root = os.path.abspath(os.path.join(workdir, "uploads", UPLOAD_DIRS[kind], batch)) + dst = os.path.abspath(os.path.join(root, *parts)) + if os.path.commonpath([root, dst]) != root: + raise ValueError("name") + return dst + + +def upload_root(workdir: str, kind: str, batch: str) -> str: + return os.path.abspath(os.path.join(workdir, "uploads", UPLOAD_DIRS[kind], batch)) diff --git a/chronos/workbench/inference.py b/chronos/workbench/inference.py new file mode 100644 index 0000000..8101608 --- /dev/null +++ b/chronos/workbench/inference.py @@ -0,0 +1,1472 @@ +"""Inference runners for the Web UI: Torch / MLX, full-memory and SSD-lazy experts. + +UI-independent (no Gradio, no i18n). ``run_inference_modes`` runs one +request in ``compare`` / ``offload`` / ``fullload`` mode and returns plain +JSON-able rows, outputs and decode diagnostics; the Web UI server, the legacy +Gradio tab and the benchmark tools all call it. +""" +import os +import time + +from chronos.trainer.device_utils import configure_cpu_threads, cpu_thread_snapshot +from chronos.tokenizer.visible import decode_visible + + +INFERENCE_BACKEND_CHOICES = ("mlx", "cuda", "xpu", "mps", "cpu") +TORCH_INFERENCE_PRIORITY = ("cuda", "xpu", "mps", "cpu") +INFERENCE_MODE_CHOICES = ("compare", "offload", "fullload") +MISS_POLICY_CHOICES = ("on_demand", "sync_on_demand", "fallback_diagnostic") +RAM_LOAD_RATIO_CHOICES = ( + "0.10", "0.20", "0.25", "0.33", "0.50", "0.67", + "0.75", "0.90", "1.00", "1.10", "1.25", +) +RAM_LOAD_SWEEP_RATIOS = (0.10, 0.20, 0.25, 0.33, 0.50, 0.67, 0.75, 0.90, 1.00, 1.10, 1.25) +INFERENCE_CHART_METRICS = ( + ("response_time_s", "Response time", "s"), + ("tokens_per_sec", "Decode speed", "tokens/s"), + ("rss_delta_gb", "RSS delta", "GB"), + ("setup_rss_delta_gb", "Setup RSS delta", "GB"), + ("prefill_rss_delta_gb", "Prefill RSS delta", "GB"), + ("decode_rss_delta_gb", "Decode RSS delta", "GB"), + ("rss_after_setup_gb", "Setup RSS actual", "GB"), + ("rss_after_prefill_gb", "Prefill RSS actual", "GB"), + ("rss_after_decode_gb", "Decode RSS actual", "GB"), + ("mps_allocated_after_setup_gb", "Setup MPS allocated", "GB"), + ("mps_allocated_after_prefill_gb", "Prefill MPS allocated", "GB"), + ("mps_allocated_after_decode_gb", "Decode MPS allocated", "GB"), + ("mlx_active_after_setup_gb", "Setup MLX active", "GB"), + ("mlx_active_after_prefill_gb", "Prefill MLX active", "GB"), + ("mlx_active_after_decode_gb", "Decode MLX active", "GB"), + ("prefill_time_s", "Prefill time", "s"), + ("decode_time_s", "Decode time", "s"), + ("cache_hit_rate", "Cache hit rate", "ratio"), + ("resident_hit_rate", "Resident hit rate", "ratio"), + ("prediction_hit_rate", "Prediction hit rate", "ratio"), + ("prediction_topk_recall", "Prediction top-k recall", "ratio"), + ("resident_vram_hit_rate", "Resident VRAM hit", "ratio"), + ("ram_promotion_hit_rate", "RAM promotion hit", "ratio"), + ("ssd_cold_miss_rate", "SSD cold miss", "ratio"), + ("cold_miss_predict_hit_rate", "Cold miss predict hit", "ratio"), + ("fallback_weight_rate", "Fallback weight", "ratio"), + ("on_demand_loads", "On-demand loads", "count"), + ("on_demand_load_time_s", "On-demand load time", "s"), + ("average_ponder_steps", "Average recurrent depth", "steps"), + ("early_exit_ratio", "Recurrent early exit", "ratio"), + ("recurrent_contraction", "Recurrent contraction", "ratio"), + ("cluster_recall", "Cluster recall", "ratio"), +) +INFERENCE_SWEEP_CHART_METRICS = ( + ("tokens_per_sec", "Decode speed", "tokens/s"), + ("response_time_s", "Response time", "s"), + ("cache_hit_rate", "Cache hit rate", "ratio"), + ("prediction_hit_rate", "Prediction hit rate", "ratio"), + ("cold_miss_predict_hit_rate", "Cold miss predict hit", "ratio"), + ("fallback_weight_rate", "Fallback weight", "ratio"), + ("rss_delta_gb", "RSS delta", "GB"), + ("prefill_rss_delta_gb", "Prefill RSS delta", "GB"), + ("decode_rss_delta_gb", "Decode RSS delta", "GB"), +) + + +def _best_torch_inference_backend() -> str: + from chronos.backend import BackendDispatcher + + d = BackendDispatcher() + for name in TORCH_INFERENCE_PRIORITY: + if d.info(name).available: + return name + return "cpu" + + +def _available_inference_backend_choices() -> list[str]: + from chronos.backend import available + + detected = set(available()) + return ["auto"] + [name for name in INFERENCE_BACKEND_CHOICES if name in detected] + + +def _default_inference_backend_value() -> str: + return "auto" + + +def _resolve_inference_backend(requested_backend: str, model_path_val: str, sniffed: dict) -> tuple[str, str]: + from chronos.backend import select + + requested = (requested_backend or "auto").strip().lower() or "auto" + backend = select(None if requested == "auto" else requested) + note = "" + + if requested not in {"", "auto"} and backend != requested: + note = ( + f"[backend fallback] Requested {requested}, but it is not available; " + f"using {backend}.\n" + ) + + return backend, note + + +# Lazy-expert helpers live in chronos.lazy_experts (shared with the bundle and +# the server); these names stay for existing callers. +from chronos.lazy_experts import ( # noqa: E402,F401 (re-exported names) + _store_torch_dtype, + active_expert_count as _actual_active_expert_count, + apply_torch_budget as _apply_offload_expert_budget, + expert_budget as _bounded_offload_expert_budget, + mlx_experts_to_placeholders as _replace_mlx_experts_with_placeholders, + torch_experts_to_placeholders as _replace_torch_experts_with_placeholders, + write_mlx_cache_from_reader as _populate_mlx_cache_from_reader, + write_mlx_cache_from_state_dict as _populate_mlx_cache_from_state_dict, +) + + +def _checkpoint_expert_cache_dir(model_path_val: str, model_cfg, tag: str = "e") -> str: + from chronos.lazy_experts import checkpoint_cache_dir + return checkpoint_cache_dir(model_path_val, model_cfg, tag=tag) + + +def _rebuild_mlx_lazy_cache(store, cache_dir: str, reader, weights, clusters=None) -> None: + """Rebuild the MLX page cache at ``cache_dir`` (always rewrites).""" + import shutil + from chronos.lazy_experts import ensure_mlx_cache + if os.path.exists(cache_dir): + shutil.rmtree(cache_dir) + store._cluster_manifest = None + ensure_mlx_cache(store, cache_dir, reader=reader, weights=weights, clusters=clusters) + + +def _memory_snapshot_gb() -> float: + try: + import psutil + + return psutil.Process().memory_info().rss / (1024 ** 3) + except Exception: + return 0.0 + + +def _backend_memory_snapshot(backend: str) -> dict: + try: + from chronos.backend.mac_diagnostics import mps_memory_snapshot, mlx_memory_snapshot + except Exception: + return {} + if backend == "mps": + return mps_memory_snapshot() + if backend == "mlx": + return mlx_memory_snapshot() + return {} + + +def _configure_inference_cpu_threads_if_needed( + backend: str, + requested: int | str | None = "auto", + budget_percent: int | float | str | None = 75, +) -> dict: + """Keep WebUI CPU inference from inheriting a single-thread shell env.""" + if backend != "cpu": + return {} + threads = configure_cpu_threads(requested, budget_percent=budget_percent) + snap = cpu_thread_snapshot() + return { + "cpu_threads": int(threads), + "cpu_thread_env": snap, + } + + +def _memory_delta(after: dict, before: dict, key: str) -> float: + try: + return round(float(after.get(key, 0.0) or 0.0) - float(before.get(key, 0.0) or 0.0), 6) + except Exception: + return 0.0 + + +def _clone_model_cfg(model_cfg): + from chronos.model.config import ChronosConfig + + try: + data = dict(model_cfg.to_dict()) + except Exception: + data = dict(getattr(model_cfg, "__dict__", {})) + data.pop("architectures", None) + data.pop("transformers_version", None) + data.pop("_name_or_path", None) + data.pop("_commit_hash", None) + return ChronosConfig(**data) + + +def _encode_prompt(tokenizer, prompt_val: str, raw_prompt: bool = False) -> tuple[list[int], list[int]]: + if raw_prompt: + enc = tokenizer(prompt_val, add_special_tokens=False, return_attention_mask=True) + else: + rendered = tokenizer.apply_chat_template( + [{"role": "user", "content": prompt_val}], + tokenize=False, + add_generation_prompt=True, + ) + enc = tokenizer(rendered, add_special_tokens=False, return_attention_mask=True) + return list(enc["input_ids"]), list(enc.get("attention_mask") or [1] * len(enc["input_ids"])) + + +def _decode_generation_diagnostics(tokenizer, tokens: list[int], stats: dict | None = None) -> dict: + tokens = [int(t) for t in (tokens or [])] + stats = stats or {} + special_ids = { + "eos": getattr(tokenizer, "eos_token_id", None), + "pad": getattr(tokenizer, "pad_token_id", None), + "unk": getattr(tokenizer, "unk_token_id", None), + "bos": getattr(tokenizer, "bos_token_id", None), + } + raw_text = tokenizer.decode(tokens, skip_special_tokens=False) if tokens else "" + clean_text = decode_visible(tokenizer, tokens) if tokens else "" + first_token_id = tokens[0] if tokens else None + first_token_kind = "" + for name, token_id in special_ids.items(): + if token_id is not None and first_token_id == int(token_id): + first_token_kind = name + break + special_count = 0 + special_id_values = {int(v) for v in special_ids.values() if v is not None} + for token in tokens: + if int(token) in special_id_values: + special_count += 1 + first_topk = stats.get("first_token_topk", []) + warning = "" + if tokens and not clean_text.strip(): + warning = "Generated tokens decode to an empty clean string because they are all special/filtered tokens." + elif first_token_kind in {"eos", "pad"}: + warning = f"First generated token is {first_token_kind.upper()}, so generation may stop or decode to empty text." + return { + "generated_token_ids": tokens, + "token_count": len(tokens), + "raw_decode": raw_text, + "clean_decode": clean_text, + "first_token_id": first_token_id, + "first_token_kind": first_token_kind, + "special_token_count": special_count, + "special_token_ratio": round(special_count / max(len(tokens), 1), 6), + "all_special_or_filtered": bool(tokens and not clean_text.strip()), + "first_token_topk": first_topk, + "first_token_special_probs": stats.get("first_token_special_probs", {}), + "warning": warning, + } + + +def _stage_warning_from_checkpoint(sniffed: dict, model_path_val: str) -> str: + stage = str((sniffed or {}).get("stage") or "").strip().lower() + if stage == "chronos": + return ( + f"`{model_path_val}` is a pretrain (`stage=chronos`) checkpoint. " + "It is not SFT/chat-aligned yet, so chat prompts can produce repetition or low-quality text." + ) + return "" + + +def _checkpoint_sidecar_metadata(model_path_val: str) -> dict: + if not model_path_val: + return {} + try: + import json + import os + from chronos.model.checkpoint import checkpoint_config_path + + path = checkpoint_config_path(model_path_val) + if not path or not os.path.exists(path): + return {} + with open(path, encoding="utf-8") as f: + meta = json.load(f) + return dict(meta) if isinstance(meta, dict) else {} + except Exception: + return {} + + +def _format_offload_stats(stats: dict) -> str: + if not stats: + return "" + prefill = stats.get("prefill_expert_ids", []) + return ( + "[offload/predict] " + f"cache_hit_rate={stats.get('cache_hit_rate', 0):.2%} " + f"prefill={prefill} " + f"predicted={stats.get('prefetch_submitted_ids', [])} " + f"prefetch_requests={stats.get('total_requests', 0)} " + f"promoted={stats.get('promoted_expert_ids', [])} " + f"vram={stats.get('vram_experts', 0)}/{stats.get('vram_capacity', 0)} " + f"ram={stats.get('ram_experts', 0)}/{stats.get('ram_capacity_dynamic', 0)} " + f"storage={stats.get('storage_format', 'n/a')} " + f"cluster_aware={stats.get('cluster_aware', False)}\n" + ) + + +def _run_torch_inference(backend: str, model_cfg, model_path_val: str, token_ids: list[int], + attention_mask: list[int], max_tok: int, temp: float, + eos_token_id: int | None, do_sample: bool = True, + ram_load_ratio: float | str | None = 1.0, + miss_policy: str = "on_demand", + cpu_threads: int | str | None = "auto", + cpu_budget_percent: int | float | str | None = 100, + speculative: dict | None = None, + paging: str = "auto") -> tuple[list[int], dict]: + import os + import importlib + import gc + import torch + from chronos.model.model_chronos import ChronosForCausalLM + from chronos.model.checkpoint import load_checkpoint_state_dict, load_state_dict_controlled + from chronos.export import is_export_artifact, open_export_reader + inference_engine_mod = importlib.import_module("chronos.runtime.inference_engine") + + cpu_thread_stats = _configure_inference_cpu_threads_if_needed( + backend, + requested=cpu_threads, + budget_percent=cpu_budget_percent, + ) + setup_t0 = time.monotonic() + setup_mem0 = _memory_snapshot_gb() + backend_mem0 = _backend_memory_snapshot(backend) + model = ChronosForCausalLM(model_cfg) + model_init_mem = _memory_snapshot_gb() + weights = None + reader = None + if model_path_val and os.path.exists(model_path_val): + if is_export_artifact(model_path_val): + reader = open_export_reader(model_path_val) + base_only = reader.load_state_dict(include_experts=False) + else: + weights = load_checkpoint_state_dict(model_path_val, map_location="cpu") + base_only = { + k: v for k, v in weights.items() + if ".mlp.experts." not in k + } + load_state_dict_controlled( + model, + base_only, + allow_missing_substrings=(".mlp.experts.",), + ) + _replace_torch_experts_with_placeholders(model, model_cfg) + base_load_mem = _memory_snapshot_gb() + + device_map = {"cuda": "cuda", "xpu": "xpu", "mps": "mps", "cpu": "cpu"}[backend] + from chronos.precision import place_torch_model + model, precision = place_torch_model(model, device_map) + model = model.eval() + device_mem = _memory_snapshot_gb() + input_ids = torch.tensor([token_ids]).to(device_map) + attn = torch.tensor([attention_mask]).to(device_map) + from chronos.lazy_experts import page_layout + layout = page_layout(model_cfg, paging) + # Per-expert layout keeps the per-(layer, expert) shards; cluster layout + # writes one file per training cluster. + page_clusters = None if layout["tag"] == "e" else layout["clusters"] + engine = inference_engine_mod.ChronosInferenceEngine( + model, + model_cfg, + ssd_dir=_checkpoint_expert_cache_dir(model_path_val, model_cfg, tag=layout["tag"]), + ) + expert_budget = _apply_offload_expert_budget(engine, model_cfg, ram_load_ratio) + expert_budget.update({"paging": layout["paging"], "paging_resolved": layout["resolved"], + "paging_reason": layout["reason"], "num_pages": layout["num_pages"]}) + miss_policy = _normalize_miss_policy(miss_policy) + if weights is not None: + engine.setup_from_state_dict(weights, warm_expert_ids=[], clusters=page_clusters) + del weights + weights = None + gc.collect() + elif reader is not None: + engine.setup_from_state_reader(reader, warm_expert_ids=[], clusters=page_clusters) + del reader + gc.collect() + else: + engine.setup(warm_expert_ids=[]) + setup_mem1 = _memory_snapshot_gb() + backend_mem_setup = _backend_memory_snapshot(backend) + setup_stats = { + "setup_time_s": round(time.monotonic() - setup_t0, 3), + "setup_rss_delta_gb": round(setup_mem1 - setup_mem0, 3), + "model_init_rss_delta_gb": round(model_init_mem - setup_mem0, 3), + "base_load_rss_delta_gb": round(base_load_mem - model_init_mem, 3), + "device_move_rss_delta_gb": round(device_mem - base_load_mem, 3), + "expert_setup_rss_delta_gb": round(setup_mem1 - device_mem, 3), + "rss_before_setup_gb": round(setup_mem0, 3), + "rss_after_model_init_gb": round(model_init_mem, 3), + "rss_after_base_load_gb": round(base_load_mem, 3), + "rss_after_device_move_gb": round(device_mem, 3), + "rss_after_setup_gb": round(setup_mem1, 3), + **cpu_thread_stats, + } + for snapshot, suffix in [ + (backend_mem0, "before_setup"), + (backend_mem_setup, "after_setup"), + ]: + for key in ("mps_allocated_gb", "mps_driver_allocated_gb", "mlx_active_gb", "mlx_cache_gb", "mlx_peak_gb"): + if key in snapshot: + prefix = key[:-3] if key.endswith("_gb") else key + setup_stats[f"{prefix}_{suffix}_gb"] = snapshot[key] + for key in ("mps_allocated_gb", "mps_driver_allocated_gb", "mlx_active_gb", "mlx_cache_gb", "mlx_peak_gb"): + if key in backend_mem_setup: + prefix = key[:-3] if key.endswith("_gb") else key + setup_stats[f"{prefix}_setup_delta_gb"] = _memory_delta(backend_mem_setup, backend_mem0, key) + + try: + if speculative: + out = engine.generate_speculative( + input_ids, + max_new_tokens=int(max_tok), + temperature=float(temp), + top_p=0.85, + top_k=50, + do_sample=do_sample, + eos_token_id=eos_token_id, + miss_policy=miss_policy, + **speculative, + ) + else: + out = engine.generate( + input_ids, + attention_mask=attn, + max_new_tokens=int(max_tok), + temperature=float(temp), + eos_token_id=eos_token_id, + do_sample=do_sample, + miss_policy=miss_policy, + ) + stats = dict(getattr(engine, "last_stats", {})) + finally: + engine.teardown() + + prompt_len = input_ids.shape[1] + generated = out[0, prompt_len:].tolist() + stats.update(setup_stats) + stats.update(expert_budget) + + return generated, stats + + +def _next_token_from_logits(logits, input_ids, temperature: float, top_p: float = 0.85, + top_k: int = 50, do_sample: bool = True, + repetition_penalty: float = 1.0): + import torch + import torch.nn.functional as F + + temperature = max(float(temperature), 1e-6) + logits = logits / temperature + if repetition_penalty != 1.0: + for i in range(input_ids.shape[0]): + logits[i, torch.unique(input_ids[i])] /= repetition_penalty + if top_k > 0: + k = min(int(top_k), logits.shape[-1]) + logits[logits < torch.topk(logits, k)[0][..., -1, None]] = -float("inf") + if top_p < 1.0: + sorted_logits, sorted_indices = torch.sort(logits, descending=True) + mask = torch.cumsum(F.softmax(sorted_logits, dim=-1), dim=-1) > top_p + mask[..., 1:] = mask[..., :-1].clone() + mask[..., 0] = 0 + logits[mask.scatter(1, sorted_indices, mask)] = -float("inf") + return ( + torch.multinomial(F.softmax(logits, dim=-1), num_samples=1) + if do_sample else torch.argmax(logits, dim=-1, keepdim=True) + ) + + +def _run_torch_full_dram(backend: str, model_cfg, model_path_val: str, token_ids: list[int], + attention_mask: list[int], max_tok: int, temp: float, + eos_token_id: int | None, do_sample: bool = True, + cpu_threads: int | str | None = "auto", + cpu_budget_percent: int | float | str | None = 100, + speculative: dict | None = None) -> tuple[list[int], dict]: + import os + import time as _time + import gc + import torch + from chronos.model.model_chronos import ChronosForCausalLM + from chronos.model.checkpoint import load_checkpoint_state_dict, load_state_dict_controlled + from chronos.export import is_export_artifact, open_export_reader + + device_map = {"cuda": "cuda", "xpu": "xpu", "mps": "mps", "cpu": "cpu"}[backend] + cpu_thread_stats = _configure_inference_cpu_threads_if_needed( + backend, + requested=cpu_threads, + budget_percent=cpu_budget_percent, + ) + setup_t0 = _time.monotonic() + setup_mem0 = _memory_snapshot_gb() + backend_mem0 = _backend_memory_snapshot(backend) + model = ChronosForCausalLM(model_cfg) + model_init_mem = _memory_snapshot_gb() + if model_path_val and os.path.exists(model_path_val): + if is_export_artifact(model_path_val): + weights = open_export_reader(model_path_val).load_state_dict(include_experts=True) + else: + weights = load_checkpoint_state_dict(model_path_val, map_location="cpu") + load_state_dict_controlled(model, weights) + del weights + gc.collect() + weight_load_mem = _memory_snapshot_gb() + from chronos.precision import place_torch_model + model, precision = place_torch_model(model, device_map) + model = model.eval() + setup_mem1 = _memory_snapshot_gb() + backend_mem_setup = _backend_memory_snapshot(backend) + input_ids = torch.tensor([token_ids], device=device_map) + attn = torch.tensor([attention_mask], device=device_map) + prompt_len = input_ids.shape[1] + past_key_values = None + finished = torch.zeros(input_ids.shape[0], dtype=torch.bool, device=input_ids.device) + tokens_generated = 0 + prefill_t0 = _time.monotonic() + prefill_mem0 = _memory_snapshot_gb() + backend_mem_prefill0 = _backend_memory_snapshot(backend) + prefill_time_s = 0.0 + prefill_mem1 = prefill_mem0 + backend_mem_prefill1 = backend_mem_prefill0 + prefill_done_t = prefill_t0 + spec_stats = None + if speculative: + from chronos.runtime.speculative import speculative_generate, speculative_supported + full_depth = int(getattr(model_cfg, "max_inference_depth", None) or model_cfg.recurrent_depth) + use_spec = speculative_supported(model_cfg) and int(speculative["draft_depth"]) < full_depth + first = {} + + def _fwd(ids, cache, depth): + out = model(ids, past_key_values=cache, use_cache=True, recurrent_depth=depth) + if "t" not in first: + first["t"] = _time.monotonic() + return out + gen_out, spec = speculative_generate( + model, input_ids, max_new_tokens=int(max_tok), + draft_depth=int(speculative["draft_depth"]) if use_spec else full_depth, + gamma=int(speculative["gamma"]), gamma_max=int(speculative.get("gamma_max", 8)), + adaptive_gamma=bool(speculative.get("adaptive_gamma", True)), do_sample=do_sample, + temperature=max(float(temp), 1e-6), top_k=50, top_p=0.85, eos_token_id=eos_token_id, + forward_fn=_fwd) + input_ids = gen_out + tokens_generated = int(gen_out.shape[1] - prompt_len) + prefill_done_t = first.get("t", prefill_t0) + prefill_time_s = prefill_done_t - prefill_t0 + prefill_mem1 = _memory_snapshot_gb() + backend_mem_prefill1 = _backend_memory_snapshot(backend) + spec_stats = spec.as_dict() | {"enabled": use_spec, "full_depth": full_depth, + "draft_depth": int(speculative["draft_depth"]) if use_spec else full_depth, + "gamma_final": spec.gamma_history[-1] if spec.gamma_history else int(speculative["gamma"])} + + with torch.inference_mode(): + for step in range(0 if speculative else int(max_tok)): + from chronos.model.model_chronos import cache_sequence_length + past_len = cache_sequence_length(past_key_values) if past_key_values else 0 + result = model( + input_ids[:, past_len:], + attention_mask=attn, + past_key_values=past_key_values, + use_cache=True, + ) + outputs = result + if attn is not None: + attn = torch.cat([attn, attn.new_ones(attn.shape[0], 1)], -1) + next_token = _next_token_from_logits( + outputs.logits[:, -1, :], + input_ids, + temperature=float(temp), + do_sample=do_sample, + ) + if eos_token_id is not None: + next_token = torch.where( + finished.unsqueeze(-1), + next_token.new_full((next_token.shape[0], 1), eos_token_id), + next_token, + ) + input_ids = torch.cat([input_ids, next_token], dim=-1) + past_key_values = outputs.past_key_values + tokens_generated += 1 + + if step == 0: + prefill_done_t = _time.monotonic() + prefill_mem1 = _memory_snapshot_gb() + backend_mem_prefill1 = _backend_memory_snapshot(backend) + prefill_time_s = prefill_done_t - prefill_t0 + + if eos_token_id is not None: + finished |= next_token.squeeze(-1).eq(eos_token_id) + if finished.all(): + break + + end_t = _time.monotonic() + end_mem = _memory_snapshot_gb() + backend_mem_end = _backend_memory_snapshot(backend) + if tokens_generated == 0: + prefill_done_t = end_t + prefill_mem1 = end_mem + backend_mem_prefill1 = backend_mem_end + prefill_time_s = end_t - prefill_t0 + elapsed = end_t - prefill_t0 + generated = input_ids[0, prompt_len:].tolist() + stats = { + "tokens_generated": len(generated), + "elapsed_s": round(elapsed, 3), + "tokens_per_sec": round(len(generated) / max(elapsed, 1e-6), 2), + "setup_time_s": round(_time.monotonic() - setup_t0 - elapsed, 3), + "setup_rss_delta_gb": round(setup_mem1 - setup_mem0, 3), + "model_init_rss_delta_gb": round(model_init_mem - setup_mem0, 3), + "base_load_rss_delta_gb": round(weight_load_mem - model_init_mem, 3), + "device_move_rss_delta_gb": round(setup_mem1 - weight_load_mem, 3), + "expert_setup_rss_delta_gb": 0.0, + "rss_before_setup_gb": round(setup_mem0, 3), + "rss_after_model_init_gb": round(model_init_mem, 3), + "rss_after_base_load_gb": round(weight_load_mem, 3), + "rss_after_device_move_gb": round(setup_mem1, 3), + "rss_after_setup_gb": round(setup_mem1, 3), + "prefill_time_s": round(prefill_time_s, 3), + "decode_time_s": round(max(0.0, end_t - prefill_done_t), 3), + "prefill_rss_delta_gb": round(prefill_mem1 - prefill_mem0, 3), + "decode_rss_delta_gb": round(end_mem - prefill_mem1, 3), + "rss_before_prefill_gb": round(prefill_mem0, 3), + "rss_after_prefill_gb": round(prefill_mem1, 3), + "rss_after_decode_gb": round(end_mem, 3), + "storage_format": "full_dram", + "cache_hit_rate": 1.0, + "cache_hits": 0, + "cache_misses": 0, + **cpu_thread_stats, + } + if spec_stats is not None: + stats["speculative"] = spec_stats + for snapshot, suffix in [ + (backend_mem0, "before_setup"), + (backend_mem_setup, "after_setup"), + (backend_mem_prefill0, "before_prefill"), + (backend_mem_prefill1, "after_prefill"), + (backend_mem_end, "after_decode"), + ]: + for key in ("mps_allocated_gb", "mps_driver_allocated_gb", "mlx_active_gb", "mlx_cache_gb", "mlx_peak_gb"): + if key in snapshot: + prefix = key[:-3] if key.endswith("_gb") else key + stats[f"{prefix}_{suffix}_gb"] = snapshot[key] + return generated, stats + + +def _run_mlx_full_dram(model_cfg, model_path_val: str, token_ids: list[int], + max_tok: int, temp: float, do_sample: bool = True, + eos_token_id: int | None = None, + speculative: dict | None = None) -> tuple[list[int], dict]: + import os + import time as _time + import gc + import torch + import mlx.core as mx + from chronos.model.model_chronos import ChronosForCausalLM + from chronos.model.checkpoint import load_checkpoint_state_dict, load_state_dict_controlled + from chronos.export import is_export_artifact, open_export_reader + from chronos.mlx.model import ChronosMLXModel + from chronos.mlx.inference import ChronosMLXInferenceEngine + + setup_t0 = _time.monotonic() + setup_mem0 = _memory_snapshot_gb() + backend_mem0 = _backend_memory_snapshot("mlx") + if model_path_val and is_export_artifact(model_path_val): + weights = open_export_reader(model_path_val).load_state_dict(include_experts=True) + elif model_path_val and os.path.exists(model_path_val): + weights = load_checkpoint_state_dict(model_path_val, map_location="cpu") + else: + weights = {} + + pt_model = ChronosForCausalLM(model_cfg) + model_init_mem = _memory_snapshot_gb() + if weights: + load_state_dict_controlled(pt_model, weights) + del weights + weights = {} + gc.collect() + weight_load_mem = _memory_snapshot_gb() + from chronos.precision import resolve_mlx + precision = resolve_mlx("auto") + mlx_model = ChronosMLXModel.from_chronos_pytorch(pt_model.eval(), model_cfg, dtype=precision.compute) + del pt_model + gc.collect() + setup_mem1 = _memory_snapshot_gb() + backend_mem_setup = _backend_memory_snapshot("mlx") + engine = ChronosMLXInferenceEngine(mlx_model, model_cfg) + engine.store.storage_format = "full_dram" + try: + ids = mx.array([token_ids]) + run_t0 = _time.monotonic() + tokens = list(engine.generate( + ids, + max_new_tokens=int(max_tok), + temperature=float(temp) if do_sample else 0.0, + top_p=0.85, + eos_token_id=eos_token_id, + speculative=bool(speculative), + **(speculative or {}), + )) + run_elapsed = _time.monotonic() - run_t0 + end_mem = _memory_snapshot_gb() + backend_mem_end = _backend_memory_snapshot("mlx") + stats = dict(getattr(engine, "last_stats", {})) + prefill_mem = float(stats.get("rss_after_prefill_gb", setup_mem1) or setup_mem1) + prefill_time_s = float(stats.get("prefill_time_s", 0.0) or 0.0) + stats.update({ + "setup_time_s": round(_time.monotonic() - setup_t0 - run_elapsed, 3), + "setup_rss_delta_gb": round(setup_mem1 - setup_mem0, 3), + "model_init_rss_delta_gb": round(model_init_mem - setup_mem0, 3), + "base_load_rss_delta_gb": round(weight_load_mem - model_init_mem, 3), + "device_move_rss_delta_gb": round(setup_mem1 - weight_load_mem, 3), + "expert_setup_rss_delta_gb": 0.0, + "rss_before_setup_gb": round(setup_mem0, 3), + "rss_after_model_init_gb": round(model_init_mem, 3), + "rss_after_base_load_gb": round(weight_load_mem, 3), + "rss_after_device_move_gb": round(setup_mem1, 3), + "rss_after_setup_gb": round(setup_mem1, 3), + "prefill_rss_delta_gb": round(prefill_mem - setup_mem1, 3), + "decode_rss_delta_gb": round(end_mem - prefill_mem, 3), + "rss_before_prefill_gb": round(setup_mem1, 3), + "rss_after_prefill_gb": round(prefill_mem, 3), + "rss_after_decode_gb": round(end_mem, 3), + "prefill_time_s": round(prefill_time_s, 3), + "decode_time_s": round(max(0.0, run_elapsed - prefill_time_s), 3), + "storage_format": "mlx_full_dram", + "cache_hit_rate": 1.0, + "resident_hit_rate": 1.0, + "cache_hits": 0, + "cache_misses": 0, + "miss_policy": "mlx_full_dram", + }) + for snapshot, suffix in [ + (backend_mem0, "before_setup"), + (backend_mem_setup, "after_setup"), + (backend_mem_end, "after_decode"), + ]: + for key in ("mlx_active_gb", "mlx_cache_gb", "mlx_peak_gb"): + if key in snapshot: + prefix = key[:-3] if key.endswith("_gb") else key + stats[f"{prefix}_{suffix}_gb"] = snapshot[key] + return tokens, stats + finally: + engine.stop() + + +def _run_mlx_lazy_inference(model_cfg, model_path_val: str, token_ids: list[int], + max_tok: int, temp: float, do_sample: bool = True, + ram_load_ratio: float | str | None = 1.0, + quality_safe: bool = True, + eos_token_id: int | None = None, + speculative: dict | None = None, + residency: str = "planned", + paging: str = "auto", + residency_decay: float | None = None, + decode_wait_s: float | None = None, + verify_wait_s: float | None = None) -> tuple[list[int], dict]: + import mlx.core as mx + from chronos.lazy_experts import LazyOptions, build_mlx_lazy_engine, warm_ids + + defaults = LazyOptions() + opts = LazyOptions( + paging=paging, residency=residency, ram_ratio=_normalize_ram_load_ratio(ram_load_ratio), + residency_decay=defaults.residency_decay if residency_decay is None else float(residency_decay), + decode_wait_s=defaults.decode_wait_s if decode_wait_s is None else float(decode_wait_s), + verify_wait_s=defaults.verify_wait_s if verify_wait_s is None else float(verify_wait_s), + ).validated() + setup_mem0 = _memory_snapshot_gb() + backend_mem0 = _backend_memory_snapshot("mlx") + engine, info = build_mlx_lazy_engine(model_path_val, model_cfg, opts) + try: + # Warm only the execution budget: warming every expert would hide the + # lazy path; selected misses load synchronously, page by page. + engine.store.warm_up(warm_ids(model_cfg, info)) + setup_mem1 = _memory_snapshot_gb() + backend_mem_setup = _backend_memory_snapshot("mlx") + tokens = list(engine.generate( + mx.array([token_ids]), + max_new_tokens=int(max_tok), + temperature=float(temp) if do_sample else 0.0, + top_p=0.85, + eos_token_id=eos_token_id, + speculative=bool(speculative), + **opts.generate_kwargs(), + **(speculative or {}), + )) + stats = dict(getattr(engine, "last_stats", {})) + store_stats = engine.store.stats() + stats.update({ + "setup_rss_delta_gb": round(setup_mem1 - setup_mem0, 3), + "rss_before_setup_gb": round(setup_mem0, 3), + "rss_after_setup_gb": round(setup_mem1, 3), + "rss_after_prefill_gb": stats.get("rss_after_prefill_gb", round(setup_mem1, 3)), + "rss_after_decode_gb": stats.get("rss_after_decode_gb", round(setup_mem1, 3)), + **{k: v for k, v in info.items() if k not in ("lazy_options", "precision")}, + "residency_decay": opts.residency_decay, + "decode_wait_s": opts.decode_wait_s, + "verify_wait_s": opts.verify_wait_s, + "storage_format": store_stats.get("storage_format", "safetensors"), + "cluster_aware": store_stats.get("cluster_aware", False), + "num_clusters": store_stats.get("num_clusters", 0), + "cluster_loads": store_stats.get("cluster_loads", 0), + "vram_experts": store_stats.get("hot_experts", 0), + "vram_capacity": store_stats.get("hot_capacity", 0), + "ram_experts": store_stats.get("warm_experts", 0), + "ram_capacity_dynamic": store_stats.get("warm_capacity", int(model_cfg.num_experts)), + "miss_policy": "mlx_lazy_quality", + "quality_safe": quality_safe, + }) + for snapshot, suffix in [(backend_mem0, "before_setup"), (backend_mem_setup, "after_setup")]: + for key in ("mlx_active_gb", "mlx_cache_gb", "mlx_peak_gb"): + if key in snapshot: + stats[f"{key[:-3]}_{suffix}_gb"] = snapshot[key] + return tokens, stats + finally: + engine.stop() + + +def _text_diff_summary(a: str, b: str) -> dict: + import difflib + + ratio = difflib.SequenceMatcher(a=a, b=b).ratio() if (a or b) else 1.0 + prefix = 0 + for ca, cb in zip(a, b): + if ca != cb: + break + prefix += 1 + return { + "same": a == b, + "similarity": round(ratio, 4), + "common_prefix_chars": prefix, + "len_lazy": len(a), + "len_full_dram": len(b), + } + + +def _rows_to_chart_records(rows: list[dict]) -> list[dict]: + has_sweep = any(row.get("ram_load_ratio") is not None for row in rows) + metrics = INFERENCE_SWEEP_CHART_METRICS if has_sweep else INFERENCE_CHART_METRICS + metric_max: dict[str, float] = {} + for _key, label, _unit in metrics: + vals = [] + for row in rows: + value = row.get(_key) + if value is None: + continue + try: + vals.append(abs(float(value))) + except (TypeError, ValueError): + continue + metric_max[label] = max(vals) if vals else 0.0 + + data = [] + for row in rows: + mode = str(row.get("mode", "")) + ratio = row.get("ram_load_ratio") + x_value = f"{float(ratio):.2g}x" if ratio is not None else mode + for key, label, unit in metrics: + value = row.get(key) + if value is None: + continue + value = float(value) + denom = metric_max.get(label, 0.0) + data.append({ + "metric": label, + "mode": mode, + "x": x_value, + "value": value, + "normalized_value": value / denom if denom > 0 else 0.0, + "unit": unit, + }) + return data + + +def _normalize_inference_mode(selected_mode: str | None) -> str: + mode = (selected_mode or "compare").strip().lower() + return mode if mode in INFERENCE_MODE_CHOICES else "compare" + + +def _normalize_ram_load_ratio(value) -> float: + try: + return float(value) + except (TypeError, ValueError): + return 1.0 + + +def _normalize_miss_policy(value) -> str: + policy = (value or "on_demand").strip().lower().replace("-", "_") + aliases = { + "quality_safe": "sync_on_demand", + "quality": "sync_on_demand", + "safe": "sync_on_demand", + "strict": "sync_on_demand", + "sync": "sync_on_demand", + "blocking": "sync_on_demand", + "fallback": "fallback_diagnostic", + "diagnostic": "fallback_diagnostic", + } + policy = aliases.get(policy, policy) + return policy if policy in MISS_POLICY_CHOICES else "on_demand" + + +def _speculative_options(enabled, draft_depth=1, gamma=4) -> dict | None: + """UI controls → options for recurrent-depth self-speculative decoding. + + ``None`` means plain decoding. Speculative decoding needs no extra + weights; greedy output is token-for-token identical to plain greedy and + sampled output keeps the full-depth distribution (rejection sampling). + """ + if not bool(enabled): + return None + try: + depth = max(1, int(float(draft_depth))) + except (TypeError, ValueError): + depth = 1 + try: + g = max(1, min(8, int(float(gamma)))) + except (TypeError, ValueError): + g = 4 + return {"draft_depth": depth, "gamma": g, "gamma_max": 8, "adaptive_gamma": True} + + +def _speculative_row_fields(stats: dict) -> dict: + spec = (stats or {}).get("speculative") or {} + if not spec: + return {} + enabled = spec.get("enabled", int(spec.get("draft_calls", 0) or 0) > 0) + return { + "speculative": bool(enabled), + "spec_draft_depth": spec.get("draft_depth"), + "spec_full_depth": spec.get("full_depth"), + "spec_acceptance_rate": spec.get("acceptance_rate"), + "spec_tokens_per_verify": spec.get("tokens_per_verify"), + "spec_verify_calls": spec.get("verify_calls"), + "spec_draft_calls": spec.get("draft_calls"), + "spec_gamma_final": spec.get("gamma_final"), + } + + +def _format_inference_stats(rows: list[dict], diff: dict | None = None) -> str: + if not rows: + return "_No inference stats yet._" + mode_labels = [str(row.get("mode", f"run_{idx + 1}")) for idx, row in enumerate(rows)] + + def fmt_num(row: dict, key: str, suffix: str = "", precision: int = 3) -> str: + try: + return f"{float(row.get(key, 0.0) or 0.0):.{precision}f}{suffix}" + except (TypeError, ValueError): + return "" + + def fmt_pct(row: dict, key: str, fallback_key: str | None = None) -> str: + value = row.get(key, row.get(fallback_key, 0.0) if fallback_key else 0.0) + try: + return f"{float(value or 0.0):.2%}" + except (TypeError, ValueError): + return "" + + def fmt_int(row: dict, key: str) -> str: + try: + return str(int(row.get(key, 0) or 0)) + except (TypeError, ValueError): + return "" + + def fmt_hits(row: dict) -> str: + return f"{fmt_int(row, 'cache_hits')}/{fmt_int(row, 'cache_misses')}" + + def fmt_bool(row: dict, key: str) -> str: + value = row.get(key) + if value in (None, ""): + return "" + return "True" if bool(value) else "False" + + metric_rows = [ + ("Backend", lambda r: str(r.get("backend", ""))), + ("Policy", lambda r: str(r.get("miss_policy", "full"))), + ("CPU threads", lambda r: fmt_int(r, "cpu_threads")), + ("Tokens", lambda r: fmt_int(r, "tokens")), + ("Tokens/s", lambda r: fmt_num(r, "tokens_per_sec", precision=2)), + ("Self-speculative", lambda r: fmt_bool(r, "speculative")), + ("Draft / full depth", lambda r: (f"{r.get('spec_draft_depth')} / {r.get('spec_full_depth')}" + if r.get("spec_draft_depth") is not None else "")), + ("Draft acceptance", lambda r: fmt_pct(r, "spec_acceptance_rate") if r.get("spec_acceptance_rate") is not None else ""), + ("Tokens per verify", lambda r: fmt_num(r, "spec_tokens_per_verify", precision=2) + if r.get("spec_tokens_per_verify") is not None else ""), + ("Verify / draft forwards", lambda r: (f"{r.get('spec_verify_calls')} / {r.get('spec_draft_calls')}" + if r.get("spec_verify_calls") is not None else "")), + ("Response time", lambda r: fmt_num(r, "response_time_s", "s")), + ("Prefill time", lambda r: fmt_num(r, "prefill_time_s", "s")), + ("Decode time", lambda r: fmt_num(r, "decode_time_s", "s")), + ("RSS delta", lambda r: fmt_num(r, "rss_delta_gb", " GB")), + ("Setup RSS delta", lambda r: fmt_num(r, "setup_rss_delta_gb", " GB")), + ("Prefill RSS delta", lambda r: fmt_num(r, "prefill_rss_delta_gb", " GB")), + ("Decode RSS delta", lambda r: fmt_num(r, "decode_rss_delta_gb", " GB")), + ("Setup RSS actual", lambda r: fmt_num(r, "rss_after_setup_gb", " GB")), + ("Prefill RSS actual", lambda r: fmt_num(r, "rss_after_prefill_gb", " GB")), + ("Decode RSS actual", lambda r: fmt_num(r, "rss_after_decode_gb", " GB")), + ("MPS setup", lambda r: fmt_num(r, "mps_allocated_after_setup_gb", " GB")), + ("MPS prefill", lambda r: fmt_num(r, "mps_allocated_after_prefill_gb", " GB")), + ("MPS decode", lambda r: fmt_num(r, "mps_allocated_after_decode_gb", " GB")), + ("MLX setup", lambda r: fmt_num(r, "mlx_active_after_setup_gb", " GB")), + ("MLX prefill", lambda r: fmt_num(r, "mlx_active_after_prefill_gb", " GB")), + ("MLX decode", lambda r: fmt_num(r, "mlx_active_after_decode_gb", " GB")), + ("Resident hit", lambda r: fmt_pct(r, "resident_hit_rate", "cache_hit_rate")), + ("Predict hit", lambda r: fmt_pct(r, "prediction_hit_rate")), + ("Prediction top-k recall", lambda r: fmt_pct(r, "prediction_topk_recall")), + ("VRAM hit", lambda r: fmt_pct(r, "resident_vram_hit_rate")), + ("RAM promotion hit", lambda r: fmt_pct(r, "ram_promotion_hit_rate")), + ("SSD cold miss", lambda r: fmt_pct(r, "ssd_cold_miss_rate")), + ("Average recurrent depth", lambda r: fmt_num(r, "average_ponder_steps", precision=2)), + ("Early exit", lambda r: fmt_pct(r, "early_exit_ratio")), + ("Cluster recall", lambda r: fmt_pct(r, "cluster_recall")), + ("Cold miss predict hit", lambda r: fmt_pct(r, "cold_miss_predict_hit_rate")), + ("Fallback weight", lambda r: fmt_pct(r, "fallback_weight_rate")), + ("On-demand loads", lambda r: fmt_int(r, "on_demand_loads")), + ("Prefetch drops", lambda r: fmt_int(r, "prefetch_queue_drops")), + ("Prefetch wait", lambda r: fmt_num(r, "prefetch_wait_time_s", "s")), + ("Warm hits", lambda r: fmt_int(r, "warm_hits")), + ("Hot evictions", lambda r: fmt_int(r, "hot_evictions")), + ("Warm evictions", lambda r: fmt_int(r, "warm_evictions")), + ("Async misses", lambda r: fmt_int(r, "async_cold_miss_prefetches")), + ("Sync SSD loads", lambda r: fmt_int(r, "sync_ssd_loads")), + ("Eviction policy", lambda r: str(r.get("eviction_policy") or "")), + ("Expert hits/misses", fmt_hits), + ("All-resident fast path", lambda r: fmt_bool(r, "all_resident_fast_path")), + ("Load budget", lambda r: str(r.get("load_budget", "all"))), + ("VRAM experts", lambda r: str(r.get("vram_experts", ""))), + ("RAM experts", lambda r: str(r.get("ram_experts", ""))), + ("Cluster aware", lambda r: str(r.get("cluster_aware", False))), + ("First token", lambda r: str(r.get("first_token_id", ""))), + ("First token kind", lambda r: str(r.get("first_token_kind", ""))), + ("Special token ratio", lambda r: fmt_pct(r, "special_token_ratio")), + ] + + lines = [ + "| Metric | " + " | ".join(mode_labels) + " |", + "|---|" + "|".join("---:" for _ in mode_labels) + "|", + ] + for metric, getter in metric_rows: + values = [getter(row) for row in rows] + if all(value in {"", "0.000 GB", "0.000s", "0.00%", "0"} for value in values): + continue + lines.append("| " + metric + " | " + " | ".join(values) + " |") + if diff: + lines.append("") + lines.append( + f"Output diff: same=`{diff.get('same')}`, similarity=`{diff.get('similarity')}`, " + f"common_prefix_chars=`{diff.get('common_prefix_chars')}`, " + f"len_lazy=`{diff.get('len_lazy')}`, len_full_dram=`{diff.get('len_full_dram')}`" + ) + warnings = [str(row.get("decode_warning", "")).strip() for row in rows if row.get("decode_warning")] + if warnings: + lines.append("") + lines.append("Decode warnings:") + for warning in dict.fromkeys(warnings): + lines.append(f"- {warning}") + return "\n".join(lines) + + +def _format_inference_notices(raw: dict) -> str: + notices = [] + checkpoint_warning = (raw or {}).get("checkpoint_warning") + if checkpoint_warning: + notices.append(f"Checkpoint notice: {checkpoint_warning}") + for row in (raw or {}).get("rows", []): + warning = row.get("decode_warning") + if warning: + notices.append(f"{row.get('mode', 'run')}: {warning}") + if not notices: + return "" + return "\n\n".join(f"> {notice}" for notice in dict.fromkeys(notices)) + "\n\n" + + +def _row_from_stats(mode: str, backend: str, tokens: list[int], elapsed: float, + rss_delta: float, stats: dict) -> dict: + effective_budget = stats.get("effective_expert_budget") + ideal_budget = stats.get("ideal_active_experts") + max_budget = stats.get("max_allowed_expert_budget") + load_budget = ( + "all" if mode == "full_dram" else + f"{effective_budget}/{max_budget} (ideal {ideal_budget})" + ) + return { + "mode": mode, + "backend": backend, + "cpu_threads": stats.get("cpu_threads", 0), + "cpu_thread_env": stats.get("cpu_thread_env", {}), + "tokens": len(tokens), + "tokens_per_sec": round(len(tokens) / max(elapsed, 1e-6), 2), + "response_time_s": round(elapsed, 3), + "rss_delta_gb": round(rss_delta, 3), + "setup_time_s": stats.get("setup_time_s", 0.0), + "setup_rss_delta_gb": stats.get("setup_rss_delta_gb", 0.0), + "model_init_rss_delta_gb": stats.get("model_init_rss_delta_gb", 0.0), + "base_load_rss_delta_gb": stats.get("base_load_rss_delta_gb", 0.0), + "device_move_rss_delta_gb": stats.get("device_move_rss_delta_gb", 0.0), + "expert_setup_rss_delta_gb": stats.get("expert_setup_rss_delta_gb", 0.0), + "rss_before_setup_gb": stats.get("rss_before_setup_gb", 0.0), + "rss_after_model_init_gb": stats.get("rss_after_model_init_gb", 0.0), + "rss_after_base_load_gb": stats.get("rss_after_base_load_gb", 0.0), + "rss_after_device_move_gb": stats.get("rss_after_device_move_gb", 0.0), + "rss_after_setup_gb": stats.get("rss_after_setup_gb", 0.0), + "prefill_time_s": stats.get("prefill_time_s", 0.0), + "decode_time_s": stats.get("decode_time_s", 0.0), + "prefill_rss_delta_gb": stats.get("prefill_rss_delta_gb", 0.0), + "decode_rss_delta_gb": stats.get("decode_rss_delta_gb", 0.0), + "rss_before_prefill_gb": stats.get("rss_before_prefill_gb", 0.0), + "rss_after_prefill_gb": stats.get("rss_after_prefill_gb", 0.0), + "rss_after_decode_gb": stats.get("rss_after_decode_gb", 0.0), + "mps_allocated_before_setup_gb": stats.get("mps_allocated_before_setup_gb", 0.0), + "mps_allocated_after_setup_gb": stats.get("mps_allocated_after_setup_gb", 0.0), + "mps_allocated_before_prefill_gb": stats.get("mps_allocated_before_prefill_gb", 0.0), + "mps_allocated_after_prefill_gb": stats.get("mps_allocated_after_prefill_gb", 0.0), + "mps_allocated_after_decode_gb": stats.get("mps_allocated_after_decode_gb", 0.0), + "mps_driver_allocated_after_setup_gb": stats.get("mps_driver_allocated_after_setup_gb", 0.0), + "mps_driver_allocated_after_prefill_gb": stats.get("mps_driver_allocated_after_prefill_gb", 0.0), + "mps_driver_allocated_after_decode_gb": stats.get("mps_driver_allocated_after_decode_gb", 0.0), + "mlx_active_before_setup_gb": stats.get("mlx_active_before_setup_gb", 0.0), + "mlx_active_after_setup_gb": stats.get("mlx_active_after_setup_gb", 0.0), + "mlx_active_before_prefill_gb": stats.get("mlx_active_before_prefill_gb", 0.0), + "mlx_active_after_prefill_gb": stats.get("mlx_active_after_prefill_gb", 0.0), + "mlx_active_after_decode_gb": stats.get("mlx_active_after_decode_gb", 0.0), + "mlx_cache_after_setup_gb": stats.get("mlx_cache_after_setup_gb", 0.0), + "mlx_cache_after_prefill_gb": stats.get("mlx_cache_after_prefill_gb", 0.0), + "mlx_cache_after_decode_gb": stats.get("mlx_cache_after_decode_gb", 0.0), + "cache_hit_rate": stats.get("cache_hit_rate", 1.0 if mode == "full_dram" else 0), + "resident_hit_rate": stats.get("resident_hit_rate", stats.get("cache_hit_rate", 1.0 if mode == "full_dram" else 0)), + "prediction_hit_rate": stats.get("prediction_hit_rate", 0.0), + "prediction_topk_recall": stats.get("prediction_topk_recall", 0.0), + "resident_vram_hit_rate": stats.get("resident_vram_hit_rate", 0.0), + "ram_promotion_hit_rate": stats.get("ram_promotion_hit_rate", 0.0), + "ssd_cold_miss_rate": stats.get("ssd_cold_miss_rate", 0.0), + "average_ponder_steps": stats.get("average_ponder_steps", 1.0), + "early_exit_ratio": stats.get("early_exit_ratio", 0.0), + "recurrent_contraction": stats.get("recurrent_contraction", 0.0), + "cluster_recall": stats.get("cluster_recall", 0.0), + "prediction_hits": stats.get("prediction_hits", 0), + "prediction_total": stats.get("prediction_total", 0), + "cold_miss_predict_hit_rate": stats.get("cold_miss_predict_hit_rate", 0.0), + "cold_prediction_hits": stats.get("cold_prediction_hits", 0), + "cold_prediction_total": stats.get("cold_prediction_total", 0), + "all_resident_fast_path": stats.get("all_resident_fast_path", mode == "full_dram"), + "on_demand_loads": stats.get("on_demand_loads", 0), + "on_demand_load_time_s": stats.get("on_demand_load_time_s", 0.0), + "async_cold_miss_prefetches": stats.get("async_cold_miss_prefetches", 0), + "prefetch_queue_drops": stats.get("prefetch_queue_drops", 0), + "prefetch_wait_time_s": stats.get("prefetch_wait_time_s", 0.0), + "sync_ssd_loads": stats.get("sync_ssd_loads", 0), + "eviction_policy": stats.get("eviction_policy"), + "resident_vram_hits": stats.get("resident_vram_hits", 0), + "resident_ram_hits": stats.get("resident_ram_hits", 0), + "warm_hits": stats.get("warm_hits", 0), + "warm_evictions": stats.get("warm_evictions", 0), + "hot_evictions": stats.get("hot_evictions", 0), + "quality_safe": stats.get("quality_safe", mode != "full_dram"), + "miss_policy": stats.get("miss_policy", "full_dram" if mode == "full_dram" else "on_demand"), + "cache_hits": stats.get("cache_hits", 0), + "cache_misses": stats.get("cache_misses", 0), + "fallback_weight_rate": stats.get("fallback_weight_rate", 0.0), + "fallback_weight_mass": stats.get("fallback_weight_mass", 0.0), + "hit_weight_mass": stats.get("hit_weight_mass", 0.0), + "total_route_weight_mass": stats.get("total_route_weight_mass", 0.0), + "route_layer_stats": stats.get("route_layer_stats", []), + "load_budget": load_budget, + "ideal_active_experts": stats.get("ideal_active_experts"), + "requested_ram_load_ratio": stats.get("requested_ram_load_ratio"), + "requested_expert_budget": stats.get("requested_expert_budget"), + "max_allowed_expert_budget": stats.get("max_allowed_expert_budget"), + "effective_expert_budget": stats.get("effective_expert_budget"), + "effective_vram_expert_budget": stats.get("effective_vram_expert_budget"), + "effective_ram_expert_budget": stats.get("effective_ram_expert_budget"), + "min_vram_expert_budget": stats.get("min_vram_expert_budget"), + "budget_clamped": stats.get("budget_clamped"), + "prefill_experts": stats.get("prefill_expert_ids", []), + "prefill_ram_experts": stats.get("prefill_ram_expert_ids", []), + "activated_experts": stats.get("activated_expert_ids", []), + "predicted_current_experts": stats.get("predicted_current_expert_ids", []), + "predicted_experts": stats.get("prefetch_submitted_ids", []), + "promoted_experts": stats.get("promoted_expert_ids", []), + "on_demand_experts": stats.get("on_demand_expert_ids", []), + "fallback_experts": stats.get("fallback_expert_ids", []), + "vram_experts": ( + "all" if mode == "full_dram" + else f"{stats.get('vram_experts', 0)}/{stats.get('vram_capacity', 0)}" + ), + "ram_experts": ( + "all" if mode == "full_dram" + else f"{stats.get('ram_experts', 0)}/{stats.get('ram_capacity_dynamic', 0)}" + ), + "cluster_aware": False if mode == "full_dram" else stats.get("cluster_aware", False), + } + + +def _attach_decode_diagnostics(row: dict, diagnostics: dict) -> dict: + row["generated_token_ids"] = diagnostics.get("generated_token_ids", []) + row["raw_decode"] = diagnostics.get("raw_decode", "") + row["clean_decode"] = diagnostics.get("clean_decode", "") + row["first_token_id"] = diagnostics.get("first_token_id") + row["first_token_kind"] = diagnostics.get("first_token_kind", "") + row["special_token_count"] = diagnostics.get("special_token_count", 0) + row["special_token_ratio"] = diagnostics.get("special_token_ratio", 0.0) + row["all_special_or_filtered"] = diagnostics.get("all_special_or_filtered", False) + row["first_token_topk"] = diagnostics.get("first_token_topk", []) + row["first_token_special_probs"] = diagnostics.get("first_token_special_probs", {}) + row["decode_warning"] = diagnostics.get("warning", "") + return row + + +def _build_model_cfg(cfg, model_path_val): + from chronos.model.config import ChronosConfig + from chronos.model.checkpoint import config_dict_for_checkpoint, sniff_checkpoint_config + from chronos.export import config_dict_from_export, is_export_artifact + + cfg = cfg or {} + cfg_sources = [] + try: + if model_path_val and is_export_artifact(model_path_val): + ckpt_cfg = config_dict_from_export(model_path_val) + cfg_sources = [model_path_val] + else: + ckpt_cfg, cfg_sources = config_dict_for_checkpoint( + model_path_val if model_path_val else None, + require_unsniffable=False, + ) + except Exception: + ckpt_cfg, cfg_sources = {}, [] + sniffed = ckpt_cfg or (sniff_checkpoint_config(model_path_val) if model_path_val else {}) + sidecar_meta = _checkpoint_sidecar_metadata(model_path_val) + if sidecar_meta: + sniffed = dict(sniffed) + for meta_key in ("stage", "checkpoint_format", "checkpoint_config_version"): + if sidecar_meta.get(meta_key) not in (None, ""): + sniffed[meta_key] = sidecar_meta[meta_key] + sniff_note = "" + if sniffed: + summary = ", ".join( + f"{k}={v}" for k, v in sniffed.items() + if k in ("vocab_size", "hidden_size", "num_hidden_layers", + "num_experts", "moe_intermediate_size") + ) + source_text = "; ".join(cfg_sources) if cfg_sources else model_path_val + sniff_note = f"[checkpoint config: {summary} | source={source_text}]\n" + + from chronos.config_schema import model_config_kwargs + # Checkpoint metadata defines the trained graph. UI values fill missing + # fields for legacy checkpoints, including all new recurrent/media fields. + model_cfg_kwargs = model_config_kwargs({**cfg, **sniffed}) + model_cfg_kwargs.setdefault("hidden_size", 768) + if "num_attention_heads_total_dim" in sniffed: + h = model_cfg_kwargs["hidden_size"] + n_heads = model_cfg_kwargs.get("num_attention_heads", cfg.get("num_attention_heads", 8)) + head_dim = h // n_heads + if head_dim > 0: + correct_n_heads = sniffed["num_attention_heads_total_dim"] // head_dim + correct_n_kv = sniffed["num_kv_heads_total_dim"] // head_dim + if correct_n_heads > 0: + model_cfg_kwargs["num_attention_heads"] = correct_n_heads + if correct_n_kv > 0: + model_cfg_kwargs["num_key_value_heads"] = correct_n_kv + + return ChronosConfig(**model_cfg_kwargs), sniffed, sniff_note + + +def _inference_tokenizer_dir(cfg, model_path_val: str) -> str: + """The tokenizer that belongs to the checkpoint, not a fixed default. + + Order: config ``tokenizer_path``; the checkpoint's bundled ``tokenizer/`` + or the path in its sidecar; the bundled legacy 6400 tokenizer only as the last resort + (older checkpoints that never recorded one). + """ + from chronos.model.checkpoint import resolve_checkpoint_tokenizer + explicit = str((cfg or {}).get("tokenizer_path") or "").strip() or None + path = model_path_val if model_path_val and os.path.exists(model_path_val) else None + return resolve_checkpoint_tokenizer(path, explicit, fallback=True) + + +def _run_inference_modes(cfg, selected_backend, selected_mode, model_path_val, + prompt_val, max_tok, temp, raw_prompt_val, + ram_load_ratio=1.0, sweep_ram_load_ratios=False, + miss_policy="on_demand", speculative=False, draft_depth=1, + gamma=4, residency_planner=True, paging="auto", residency_decay=None, + decode_wait_s=None, verify_wait_s=None) -> dict: + from transformers import AutoTokenizer + from chronos.backend.mac_diagnostics import mac_backend_diagnostics + + if not str(prompt_val or "").strip(): + return {"error": "Please enter a prompt."} + + backend_diag = mac_backend_diagnostics(configure_threads=True) + model_cfg, sniffed, sniff_note = _build_model_cfg(cfg, model_path_val) + backend, backend_note = _resolve_inference_backend(selected_backend, model_path_val, sniffed) + cpu_threads_cfg = (cfg or {}).get("cpu_threads", "auto") + cpu_budget_cfg = (cfg or {}).get("cpu_budget_percent", 100) + tokenizer = AutoTokenizer.from_pretrained(_inference_tokenizer_dir(cfg, model_path_val)) + spec_opts = _speculative_options(speculative, draft_depth, gamma) + token_ids, attn_mask = _encode_prompt(tokenizer, prompt_val, bool(raw_prompt_val)) + + mode = _normalize_inference_mode(selected_mode) + miss_policy = _normalize_miss_policy(miss_policy) + rows: list[dict] = [] + outputs = {"lazy": "", "full_dram": "", "single": ""} + raw = { + "mode": mode, + "backend": backend, + "backend_note": backend_note.strip(), + "checkpoint_note": sniff_note.strip(), + "checkpoint_stage": str(sniffed.get("stage", "") or ""), + "checkpoint_warning": _stage_warning_from_checkpoint(sniffed, model_path_val), + "backend_diagnostics": backend_diag, + "expert_budget_policy": { + "source": "checkpoint num_experts_per_tok", + "cap": "floor(active_experts * 1.25)", + "miss_policy": miss_policy, + **_bounded_offload_expert_budget(model_cfg, ram_load_ratio), + }, + "rows": rows, + "speculative": spec_opts or {"enabled": False}, + } + + ratio_values = [_normalize_ram_load_ratio(ram_load_ratio)] + if mode in {"compare", "offload"} and bool(sweep_ram_load_ratios): + ratio_values = list(RAM_LOAD_SWEEP_RATIOS) + ratio_values = list(dict.fromkeys(float(r) for r in ratio_values)) + + representative_lazy_text = "" + if mode in {"compare", "offload"}: + for ratio in ratio_values: + run_model_cfg = _clone_model_cfg(model_cfg) + mem0 = _memory_snapshot_gb() + t0 = time.monotonic() + if backend == "mlx": + lazy_tokens, lazy_stats = _run_mlx_lazy_inference( + run_model_cfg, + model_path_val, + token_ids, + int(max_tok), + float(temp), + do_sample=(mode != "compare"), + ram_load_ratio=ratio, + quality_safe=(mode == "compare" and not bool(sweep_ram_load_ratios)), + eos_token_id=tokenizer.eos_token_id, + speculative=spec_opts, + residency="planned" if residency_planner else "window", + paging=paging, + residency_decay=residency_decay, + decode_wait_s=decode_wait_s, + verify_wait_s=verify_wait_s, + ) + else: + lazy_tokens, lazy_stats = _run_torch_inference( + backend, + run_model_cfg, + model_path_val, + token_ids, + attn_mask, + int(max_tok), + float(temp), + tokenizer.eos_token_id, + do_sample=(mode != "compare"), + ram_load_ratio=ratio, + miss_policy=miss_policy, + cpu_threads=cpu_threads_cfg, + cpu_budget_percent=cpu_budget_cfg, + speculative=spec_opts, + paging=paging, + ) + lazy_elapsed = time.monotonic() - t0 + lazy_mem = _memory_snapshot_gb() + lazy_diag = _decode_generation_diagnostics(tokenizer, lazy_tokens, lazy_stats) + lazy_text = lazy_diag["clean_decode"] + row = _row_from_stats( + "lazy_offload", backend, lazy_tokens, lazy_elapsed, + lazy_mem - mem0, lazy_stats, + ) + row.update(_speculative_row_fields(lazy_stats)) + _attach_decode_diagnostics(row, lazy_diag) + if len(ratio_values) > 1: + row["mode"] = f"lazy_offload_{ratio:g}x" + row["ram_load_ratio"] = round(float(ratio), 3) + rows.append(row) + if abs(float(ratio) - _normalize_ram_load_ratio(ram_load_ratio)) < 1e-9: + representative_lazy_text = lazy_text + if not representative_lazy_text and rows: + representative_lazy_text = lazy_text + outputs["lazy"] = representative_lazy_text + + full_text = "" + if mode in {"compare", "fullload"}: + full_model_cfg = _clone_model_cfg(model_cfg) + mem1 = _memory_snapshot_gb() + t1 = time.monotonic() + if backend == "mlx": + full_tokens, full_stats = _run_mlx_full_dram( + full_model_cfg, + model_path_val, + token_ids, + int(max_tok), + float(temp), + do_sample=(mode != "compare"), + eos_token_id=tokenizer.eos_token_id, + speculative=spec_opts, + ) + else: + full_tokens, full_stats = _run_torch_full_dram( + backend, + full_model_cfg, + model_path_val, + token_ids, + attn_mask, + int(max_tok), + float(temp), + tokenizer.eos_token_id, + do_sample=(mode != "compare"), + cpu_threads=cpu_threads_cfg, + cpu_budget_percent=cpu_budget_cfg, + speculative=spec_opts, + ) + full_elapsed = time.monotonic() - t1 + full_mem = _memory_snapshot_gb() + full_diag = _decode_generation_diagnostics(tokenizer, full_tokens, full_stats) + full_text = full_diag["clean_decode"] + row = _row_from_stats( + "full_dram", backend, full_tokens, full_elapsed, + full_mem - mem1, full_stats, + ) + row.update(_speculative_row_fields(full_stats)) + _attach_decode_diagnostics(row, full_diag) + rows.append(row) + outputs["full_dram"] = full_text + + diff = _text_diff_summary(representative_lazy_text, full_text) if mode == "compare" else None + if diff: + raw["output_diff"] = diff + raw["rows"] = rows + raw["outputs"] = outputs + raw["decode_diagnostics"] = { + row["mode"]: { + "generated_token_ids": row.get("generated_token_ids", []), + "raw_decode": row.get("raw_decode", ""), + "clean_decode": row.get("clean_decode", ""), + "first_token_id": row.get("first_token_id"), + "first_token_kind": row.get("first_token_kind", ""), + "special_token_ratio": row.get("special_token_ratio", 0.0), + "all_special_or_filtered": row.get("all_special_or_filtered", False), + "warning": row.get("decode_warning", ""), + } + for row in rows + } + raw["chart"] = _rows_to_chart_records(rows) + if mode == "offload": + outputs["single"] = representative_lazy_text + elif mode == "fullload": + outputs["single"] = full_text + return raw + + +def generate_api(cfg, selected_backend="auto", selected_mode="compare", model_path_val="", + prompt_val="", max_tok=128, temp=0.85, raw_prompt_val=False, + ram_load_ratio=1.0, sweep_ram_load_ratios=False, + miss_policy="on_demand", speculative=False, draft_depth=1, gamma=4, + residency_planner=True, paging="auto", residency_decay=None, + decode_wait_s=None, verify_wait_s=None) -> dict: + try: + return _run_inference_modes( + cfg, selected_backend, selected_mode, model_path_val, prompt_val, + max_tok, temp, raw_prompt_val, ram_load_ratio, sweep_ram_load_ratios, + miss_policy, speculative, draft_depth, gamma, residency_planner, + paging=paging, residency_decay=residency_decay, + decode_wait_s=decode_wait_s, verify_wait_s=verify_wait_s, + ) + except Exception as e: + import traceback + + return {"error": str(e), "traceback": traceback.format_exc()} + + +run_inference_modes = _run_inference_modes diff --git a/chronos/workbench/lazy_probe.py b/chronos/workbench/lazy_probe.py new file mode 100644 index 0000000..bd132e6 --- /dev/null +++ b/chronos/workbench/lazy_probe.py @@ -0,0 +1,567 @@ +"""Lazy-expert validation probe: efficiency, hit rate and fidelity of a checkpoint. + +At a validation point the trainer has just written a checkpoint. This probe +loads that checkpoint the way inference would (``chronos.lazy_experts``): +trunk in memory, routed experts paged from an SSD cache, and decodes a few +fixed prompts under every requested setting. Each setting is compared with a +full-memory reference decode of the same prompts on the same backend. + +Measured per variant (labelled *measured*, conditions in ``conditions``): + +* efficiency – decode tokens/s, prefill/decode seconds, on-demand loads and + their load time, prefetch wait, cluster loads, peak RSS; +* hit rate – resident (selection) hit rate, lookahead prediction hit rate, + cold-miss prediction hit rate; +* fidelity – greedy token agreement with the reference (exact match, + matching prefix, position-wise agreement). + +Settings: backend (mlx / torch), paging (auto / cluster / expert), residency +(planned / window), RAM ratio, Torch miss policy, residency decay, prefetch +waits and self-speculative decoding. A sweep is the Cartesian product of the +lists given, deduplicated and capped at ``max_variants`` (the cap is reported, +never silent). +""" +from __future__ import annotations + +import itertools +import os +import time +from dataclasses import asdict, dataclass, field + +# Prompts used when the checkpoint has no tokenizer: fixed id sequences, so +# results from different validation points are comparable. +_SYNTHETIC_PROMPTS = ((5, 17, 33, 2, 61, 9, 40, 12), (7, 3, 29, 44, 18, 6, 51, 23, 11, 2)) +DEFAULT_PROMPTS = ( + "Summarize in one sentence: the weather is nice today and the park is busy.", + "Explain what a mixture-of-experts layer does in one sentence.", +) + + +@dataclass +class ProbeSweep: + """What to measure; every list is one sweep axis.""" + + backends: list[str] = field(default_factory=lambda: ["auto"]) + paging: list[str] = field(default_factory=lambda: ["auto", "expert"]) # deduped after resolving + residency: list[str] = field(default_factory=lambda: ["planned"]) + ram_ratios: list[float] = field(default_factory=lambda: [0.5, 1.0]) + miss_policies: list[str] = field(default_factory=lambda: ["sync_on_demand"]) # torch only + residency_decay: list[float] = field(default_factory=lambda: [0.7]) # mlx planned only + decode_wait_s: list[float] = field(default_factory=lambda: [0.012]) # mlx only + verify_wait_s: list[float] = field(default_factory=lambda: [0.02]) # mlx speculative only + speculative: list[bool] = field(default_factory=lambda: [False]) + draft_depth: int = 1 + gamma: int = 4 + prompts: list[str] = field(default_factory=lambda: list(DEFAULT_PROMPTS)) + max_new_tokens: int = 32 + max_variants: int = 12 + dtype: str = "float32" + cache_root: str | None = None + + @classmethod + def from_dict(cls, data: dict | None) -> "ProbeSweep": + data = dict(data or {}) + known = {f for f in cls.__dataclass_fields__} + out = cls(**{k: v for k, v in data.items() if k in known}) + for name in ("backends", "paging", "residency", "ram_ratios", "miss_policies", "residency_decay", + "decode_wait_s", "verify_wait_s", "speculative", "prompts"): + value = getattr(out, name) + if not isinstance(value, (list, tuple)): + setattr(out, name, [value]) + return out.validated() + + def validated(self) -> "ProbeSweep": + from chronos.expert_clusters import PAGING_MODES + from chronos.lazy_experts import RESIDENCY_MODES + checks = (("paging", self.paging, PAGING_MODES), ("residency", self.residency, RESIDENCY_MODES), + ("miss_policies", self.miss_policies, ("on_demand", "sync_on_demand", "fallback_diagnostic")), + ("backends", self.backends, ("auto", "mlx", "cpu", "mps", "cuda", "xpu"))) + for name, values, allowed in checks: + bad = [v for v in values if v not in allowed] + if bad or not values: + raise ValueError(f"{name}: {bad or 'empty'} not in {allowed}") + if any(float(r) <= 0 for r in self.ram_ratios) or not self.ram_ratios: + raise ValueError("ram_ratios must be > 0") + if any(not 0.0 <= float(d) < 1.0 for d in self.residency_decay): + raise ValueError("residency_decay must be in [0, 1)") + if any(float(w) < 0 for w in (*self.decode_wait_s, *self.verify_wait_s)): + raise ValueError("waits must be >= 0") + if not 1 <= int(self.max_new_tokens) <= 512 or not 1 <= int(self.max_variants) <= 256: + raise ValueError("max_new_tokens in [1, 512], max_variants in [1, 256]") + if int(self.draft_depth) < 1 or not 1 <= int(self.gamma) <= 8: + raise ValueError("draft_depth >= 1, gamma in [1, 8]") + return self + + def as_dict(self) -> dict: + return asdict(self) + + +def resolve_backend(requested: str) -> str: + from chronos.backend import select + return select(None if requested == "auto" else requested) + + +def expand_variants(sweep: ProbeSweep, resolve_paging=None) -> tuple[list[dict], int]: + """Deduplicated settings; axes that do not apply to a backend collapse. + + ``resolve_paging(p)`` maps a paging request to the layout it produces for + the checkpoint (``auto`` → ``cluster`` or ``expert``); settings that + resolve to the same layout are measured once. Returns + ``(variants, total_before_cap)``.""" + resolve_paging = resolve_paging or (lambda p: p) + seen, out = set(), [] + for backend in dict.fromkeys(resolve_backend(b) for b in sweep.backends): + mlx = backend == "mlx" + for paging, residency, ratio, policy, decay, dwait, vwait, spec in itertools.product( + sweep.paging, sweep.residency if mlx else ["-"], sweep.ram_ratios, + ["-"] if mlx else sweep.miss_policies, sweep.residency_decay, sweep.decode_wait_s, + sweep.verify_wait_s, sweep.speculative): + v = {"backend": backend, "paging": resolve_paging(paging), "ram_ratio": round(float(ratio), 4), + "speculative": bool(spec)} + if mlx: + v.update(residency=residency, decode_wait_s=float(dwait)) + if residency == "planned": + v["residency_decay"] = float(decay) + if spec: + v["verify_wait_s"] = float(vwait) + else: + v["miss_policy"] = policy + key = tuple(sorted(v.items())) + if key not in seen: + seen.add(key) + out.append(v) + return out[: int(sweep.max_variants)], len(out) + + +def encode_prompts(model_path: str, sweep: ProbeSweep, tokenizer_dir: str | None = None, + vocab_size: int | None = None) -> tuple[list[list[int]], str]: + """Prompt ids from the checkpoint's tokenizer, else the fixed synthetic ids. + + A tokenizer whose ids do not fit the model's vocabulary (a fallback + tokenizer for a checkpoint that recorded none) is not used.""" + try: + from transformers import AutoTokenizer + from chronos.workbench.inference import _encode_prompt, _inference_tokenizer_dir + tok = AutoTokenizer.from_pretrained(tokenizer_dir or _inference_tokenizer_dir({}, model_path)) + ids = [_encode_prompt(tok, p, False)[0] for p in sweep.prompts if str(p).strip()] + if ids and (not vocab_size or max(max(x) for x in ids if x) < int(vocab_size)): + return ids, "tokenizer" + except Exception: + pass + limit = int(vocab_size or 64) + return [[t % limit for t in p] for p in _SYNTHETIC_PROMPTS], "synthetic" + + +def agreement(tokens: list[int], ref: list[int]) -> dict: + """Greedy fidelity of one decode against the full-memory reference.""" + prefix = 0 + for a, b in zip(tokens, ref): + if a != b: + break + prefix += 1 + n = max(len(ref), 1) + same = sum(1 for a, b in zip(tokens, ref) if a == b) + return {"exact": tokens == ref, "prefix": prefix, "positionwise": same / n, "ref_len": len(ref)} + + +def _decode(backend: str, cfg, path: str, ids: list[int], sweep: ProbeSweep, variant: dict | None): + """One greedy decode; ``variant`` None = full-memory reference.""" + from chronos.workbench.inference import ( + _clone_model_cfg, _run_mlx_full_dram, _run_mlx_lazy_inference, _run_torch_full_dram, + _run_torch_inference, _speculative_options, + ) + spec = _speculative_options(bool(variant and variant["speculative"]), sweep.draft_depth, sweep.gamma) + run_cfg, n = _clone_model_cfg(cfg), int(sweep.max_new_tokens) + if backend == "mlx": + if variant is None: + return _run_mlx_full_dram(run_cfg, path, ids, n, 0.0, do_sample=False, speculative=None) + return _run_mlx_lazy_inference( + run_cfg, path, ids, n, 0.0, do_sample=False, ram_load_ratio=variant["ram_ratio"], quality_safe=True, + speculative=spec, residency=variant["residency"], paging=variant["paging"], + residency_decay=variant.get("residency_decay"), decode_wait_s=variant.get("decode_wait_s"), + verify_wait_s=variant.get("verify_wait_s")) + mask = [1] * len(ids) + if variant is None: + return _run_torch_full_dram(backend, run_cfg, path, ids, mask, n, 1.0, None, do_sample=False) + return _run_torch_inference(backend, run_cfg, path, ids, mask, n, 1.0, None, do_sample=False, + ram_load_ratio=variant["ram_ratio"], miss_policy=variant["miss_policy"], + speculative=spec, paging=variant["paging"]) + + +# Stats summed over prompts, and rates recomputed from their counts. +_SUMS = ("on_demand_loads", "on_demand_load_time_s", "prefetch_wait_time_s", "sync_ssd_loads", "cluster_loads", + "cache_hits", "cache_misses", "prediction_hits", "prediction_total", "cold_prediction_hits", + "cold_prediction_total", "prefill_time_s", "decode_time_s") + + +def _merge(stats: list[dict], tokens: int, elapsed: float) -> dict: + out = {k: round(sum(float(s.get(k, 0) or 0) for s in stats), 4) for k in _SUMS} + sel = out["cache_hits"] + out["cache_misses"] + out["resident_hit_rate"] = round(out["cache_hits"] / sel, 4) if sel else ( + round(sum(float(s.get("resident_hit_rate", 0) or 0) for s in stats) / max(len(stats), 1), 4)) + if out["prediction_total"]: + out["prediction_hit_rate"] = round(out["prediction_hits"] / out["prediction_total"], 4) + elif any("prediction_total" in s for s in stats): + out["prediction_hit_rate"] = None # this path made no lookahead predictions + else: + out["prediction_hit_rate"] = round(sum(float(s.get("prediction_hit_rate", 0) or 0) for s in stats) + / max(len(stats), 1), 4) + if out["cold_prediction_total"]: + out["cold_miss_predict_hit_rate"] = round(out["cold_prediction_hits"] / out["cold_prediction_total"], 4) + out["tokens"] = tokens + out["tokens_per_s"] = round(tokens / elapsed, 2) if elapsed > 0 else 0.0 + out["decode_tokens_per_s"] = round(tokens / out["decode_time_s"], 2) if out["decode_time_s"] > 0 else None + last = stats[-1] if stats else {} + for key in ("paging_resolved", "num_pages", "effective_expert_budget", "ideal_active_experts", + "eviction_policy", "num_clusters", "storage_format"): + if key in last: + out[key] = last[key] + peaks = [float(s.get("rss_after_decode_gb") or 0) for s in stats] + out["peak_rss_gb"] = round(max(peaks), 3) if peaks else None + spec = [s.get("speculative") for s in stats if isinstance(s.get("speculative"), dict)] + if spec: + acc = [float(x.get("acceptance_rate", 0) or 0) for x in spec] + out["spec_acceptance_rate"] = round(sum(acc) / len(acc), 4) + return out + + +def variant_label(v: dict) -> str: + parts = [v["backend"], v["paging"], f"r{v['ram_ratio']:g}"] + if v["backend"] == "mlx": + parts.append(v["residency"]) + if "residency_decay" in v: + parts.append(f"d{v['residency_decay']:g}") + parts.append(f"w{v['decode_wait_s'] * 1000:g}ms") + else: + parts.append(v["miss_policy"]) + if v["speculative"]: + parts.append("spec") + return "/".join(parts) + + +def run_probe(model_path: str, sweep: ProbeSweep | dict | None = None, *, tokenizer_dir: str | None = None, + log=None) -> dict: + """Measure every variant of ``sweep`` on ``model_path``; see the module docstring. + + Lazy variants run first and the full-memory references last, so process + RSS after a lazy decode is not inflated by a fully loaded model.""" + from chronos.lazy_experts import page_layout + from chronos.workbench.inference import _build_model_cfg + log = log or (lambda _m: None) + sweep = sweep if isinstance(sweep, ProbeSweep) else ProbeSweep.from_dict(sweep) + cfg, _sniffed, _note = _build_model_cfg({"dtype": sweep.dtype}, model_path) + if not getattr(cfg, "use_moe", True) or int(getattr(cfg, "num_experts", 0) or 0) < 2: + return {"skipped": "dense model: no routed experts to page", "checkpoint": model_path} + variants, total = expand_variants(sweep, lambda p: page_layout(cfg, p)["resolved"]) + prompts, prompt_source = encode_prompts(model_path, sweep, tokenizer_dir, int(cfg.vocab_size)) + t_start = time.monotonic() + results = [] + for v in variants: + label = variant_label(v) + log(f"[lazy-probe] {label}") + stats, toks, t0 = [], [], time.monotonic() + try: + for ids in prompts: + out, st = _decode(v["backend"], cfg, model_path, ids, sweep, v) + toks.append(list(out)) + stats.append(st) + except Exception as exc: # one bad setting must not hide the others + results.append({"label": label, "settings": v, "error": f"{type(exc).__name__}: {exc}"[:400]}) + continue + results.append({"label": label, "settings": v, "tokens": toks, + "measured": _merge(stats, sum(len(t) for t in toks), time.monotonic() - t0)}) + references = {} + for backend in dict.fromkeys(r["settings"]["backend"] for r in results if "tokens" in r): + try: + refs, t0 = [], time.monotonic() + ref_stats = [] + for ids in prompts: + out, st = _decode(backend, cfg, model_path, ids, sweep, None) + refs.append(list(out)) + ref_stats.append(st) + references[backend] = {"tokens": refs, + "measured": _merge(ref_stats, sum(len(t) for t in refs), time.monotonic() - t0)} + except Exception as exc: + references[backend] = {"error": f"{type(exc).__name__}: {exc}"[:400]} + for r in results: + ref = references.get(r["settings"]["backend"], {}) + if "tokens" not in r or "tokens" not in ref: + continue + per = [agreement(a, b) for a, b in zip(r.pop("tokens"), ref["tokens"])] + r["fidelity"] = {"exact_match_rate": round(sum(p["exact"] for p in per) / len(per), 4), + "positionwise_agreement": round(sum(p["positionwise"] for p in per) / len(per), 4), + "min_matching_prefix": min(p["prefix"] for p in per), + "reference_tokens": sum(p["ref_len"] for p in per)} + full_tps = ref["measured"].get("tokens_per_s") or 0 + if full_tps: + r["measured"]["speed_vs_full"] = round(r["measured"]["tokens_per_s"] / full_tps, 4) + for ref in references.values(): + ref.pop("tokens", None) + layout = page_layout(cfg) + return { + "checkpoint": os.path.abspath(model_path), + "trained_with_clusters": layout["trained_with_clusters"], "auto_paging": layout["resolved"], + "num_experts": int(cfg.num_experts), "top_k": int(cfg.num_experts_per_tok), + "variants": results, "references": references, + "truncated": total > len(variants), "variants_requested": total, + "elapsed_s": round(time.monotonic() - t_start, 2), + "conditions": { + "label": "measured", "decode": "greedy", "max_new_tokens": int(sweep.max_new_tokens), + "prompts": len(prompts), "prompt_source": prompt_source, "dtype": sweep.dtype, + "reference": "full-memory decode of the same prompts on the same backend", + "rss_note": "process RSS after each decode; variants share one process in the listed order", + }, + "sweep": sweep.as_dict(), + } + + +def _sidecar(path: str) -> str: + return os.path.splitext(path)[0] + ".config.json" + + +def newest_checkpoint(candidates) -> str | None: + """The most recently written existing ``.pth`` among ``candidates``.""" + found = [c for c in candidates if c and os.path.isfile(c)] + return max(found, key=os.path.getmtime) if found else None + + +def _settled(path: str, wait_s: float = 1.0, tries: int = 10) -> bool: + """True once the checkpoint's size and mtime are unchanged across ``wait_s``. + + ``save_state_dict_with_config`` writes the ``.pth`` first and its + ``.config.json`` sidecar second, so a sidecar that is older than the + weights (or still missing) is waited for as well; checkpoints saved + without any sidecar are accepted once stable.""" + def sig(): + st = os.stat(path) + side = _sidecar(path) + fresh = os.path.isfile(side) and os.path.getmtime(side) >= st.st_mtime + return st.st_size, st.st_mtime_ns, fresh + try: + last = sig() + for attempt in range(tries): + time.sleep(wait_s) + now = sig() + if now == last and (now[2] or attempt >= 2): + return True + last = now + except OSError: + return False + return False + + +class ProbeScheduler: + """Runs one probe at a time in a low-priority child process. + + ``request`` copies the checkpoint (and its config sidecar) to + ``/lazy_probe/step_/`` first, so training can overwrite the + original while the probe reads the snapshot; the snapshot and the probe's + expert cache are deleted when the probe ends. Results are appended to + ``/lazy_probe.jsonl``; ``poll`` returns the finished summaries + (one line each). A request while a probe runs is recorded as + skipped (validation never waits for the probe). + """ + + def __init__(self, run_dir: str, sweep: dict | None = None, *, tokenizer_dir: str | None = None, + nice: int = 10, log=None): + self.run_dir = os.path.abspath(run_dir) + self.sweep = ProbeSweep.from_dict(sweep).as_dict() # validate up front + self.tokenizer_dir = tokenizer_dir or None + self.nice, self.log = int(nice), (log or (lambda _m: None)) + self.proc = None + self.current: dict | None = None + self.results_path = os.path.join(self.run_dir, "lazy_probe.jsonl") + os.makedirs(self.run_dir, exist_ok=True) + + def busy(self) -> bool: + return self.proc is not None and self.proc.poll() is None + + def skip(self, *, phase: str, step: int, reason: str) -> dict: + """Record a validation that will not be probed (e.g. superseded by a newer one).""" + return self._record({"phase": phase, "step": step, "skipped": reason}) + + def request(self, checkpoint: str | None, *, phase: str, step: int) -> dict: + import json + import shutil + import subprocess + import sys + if not checkpoint or not os.path.isfile(checkpoint): + return self._record({"phase": phase, "step": step, "skipped": "no checkpoint on disk yet"}) + if self.busy(): + return self._record({"phase": phase, "step": step, "skipped": "previous probe still running"}) + if not _settled(checkpoint): + return self._record({"phase": phase, "step": step, "skipped": "checkpoint still being written"}) + work = os.path.join(self.run_dir, "lazy_probe", f"{phase}_step_{int(step):08d}") + os.makedirs(work, exist_ok=True) + snap = os.path.join(work, os.path.basename(checkpoint)) + shutil.copy2(checkpoint, snap) + if os.path.isfile(_sidecar(checkpoint)): + shutil.copy2(_sidecar(checkpoint), _sidecar(snap)) + sweep_file = os.path.join(work, "sweep.json") + with open(sweep_file, "w", encoding="utf-8") as fh: + json.dump(self.sweep, fh) + argv = [sys.executable, "-m", "chronos.workbench.lazy_probe", "--checkpoint", snap, + "--sweep-file", sweep_file, "--out", os.path.join(work, "result.json")] + if self.tokenizer_dir: + argv += ["--tokenizer-dir", self.tokenizer_dir] + preexec = (lambda: os.nice(self.nice)) if hasattr(os, "nice") and self.nice > 0 else None + self.log_file = open(os.path.join(work, "probe.log"), "w", encoding="utf-8") + self.proc = subprocess.Popen(argv, stdout=self.log_file, stderr=subprocess.STDOUT, + preexec_fn=preexec, env={**os.environ, "PYTHONUNBUFFERED": "1"}) + self.current = {"phase": phase, "step": int(step), "checkpoint": os.path.abspath(checkpoint), + "work": work, "t0": time.monotonic()} + self.log(f"[lazy-probe] started for {phase} step {step} ({os.path.basename(checkpoint)})") + return {"phase": phase, "step": step, "started": True} + + def poll(self) -> list[dict]: + """Entries of probes that finished since the last call (at most one).""" + import json + import shutil + if self.proc is None or self.proc.poll() is None: + return [] + cur, code = self.current or {}, self.proc.returncode + self.proc, self.current = None, None + self.log_file.close() + result, out = None, os.path.join(cur.get("work", ""), "result.json") + try: + with open(out, encoding="utf-8") as fh: + result = json.load(fh) + except (OSError, ValueError): + pass + entry = {"phase": cur.get("phase"), "step": cur.get("step"), "checkpoint": cur.get("checkpoint"), + "wall_s": round(time.monotonic() - cur.get("t0", time.monotonic()), 1)} + if result is None: + try: + with open(os.path.join(cur["work"], "probe.log"), encoding="utf-8") as fh: + tail = fh.read()[-600:] + except (OSError, KeyError): + tail = "" + entry["error"] = f"probe exited {code}: {tail.strip()}"[:800] + else: + entry["result"] = result + shutil.rmtree(cur.get("work", ""), ignore_errors=True) # our snapshot + cache only + self._record(entry) + return [entry] + + def wait(self, timeout_s: float = 600.0) -> list[dict]: + t0 = time.monotonic() + while self.busy() and time.monotonic() - t0 < timeout_s: + time.sleep(0.5) + if self.busy(): + self.stop() + return self.poll() + + def stop(self) -> None: + if self.busy(): + self.proc.terminate() + try: + self.proc.wait(timeout=10) + except Exception: + self.proc.kill() + + def _record(self, entry: dict) -> dict: + import json + from datetime import datetime + with open(self.results_path, "a", encoding="utf-8") as fh: + fh.write(json.dumps({"time": datetime.now().isoformat(timespec="seconds"), **entry}, + ensure_ascii=False, default=str) + "\n") + return entry + + +def watch(run_dir: str, sweep: dict | None = None, *, out_dir: str | None = None, tokenizer_dir: str | None = None, + poll_s: float = 5.0, once: bool = False, log=print) -> int: + """Probe any trainer's run directory from outside the training process. + + Tails ``/metrics.jsonl``; after each ``validation`` event it + probes the newest ``.pth`` under ``run_dir`` written since the previous + probe (``chronos longrun`` exports ``*.best.pth`` at an improving + validation; the Web UI trainer saves before validating). Results go to + ``/lazy_probe.jsonl`` (default: the run directory). The run is + only read. ``once``: probe the newest checkpoint now and exit. + """ + import glob + import json + run_dir = os.path.abspath(run_dir) + sched = ProbeScheduler(out_dir or run_dir, sweep, tokenizer_dir=tokenizer_dir, log=log) + + def newest(): + pths = [p for p in glob.glob(os.path.join(run_dir, "**", "*.pth"), recursive=True) + if os.sep + "lazy_probe" + os.sep not in p] + return newest_checkpoint(pths) + + if once: + sched.request(newest(), phase="manual", step=0) + for entry in sched.wait(timeout_s=24 * 3600): + log(json.dumps({k: v for k, v in entry.items() if k != "result"}, ensure_ascii=False)) + return 0 + metrics, offset, probed = os.path.join(run_dir, "metrics.jsonl"), 0, 0.0 + if os.path.exists(metrics): + offset = os.path.getsize(metrics) # only validations from now on + try: + while True: + sched.poll() + if os.path.exists(metrics) and os.path.getsize(metrics) > offset: + with open(metrics, encoding="utf-8") as fh: + fh.seek(offset) + chunk = fh.read() + cut = chunk.rfind("\n") + 1 # keep a partial last line for later + offset += len(chunk[:cut].encode("utf-8")) + for line in chunk[:cut].splitlines(): + try: + row = json.loads(line) + except ValueError: + continue + if row.get("event") != "validation": + continue + ckpt = newest() + if ckpt and os.path.getmtime(ckpt) > probed: + probed = os.path.getmtime(ckpt) + sched.request(ckpt, phase=str(row.get("phase", "")), step=int(row.get("step", 0) or 0)) + time.sleep(poll_s) + except KeyboardInterrupt: + sched.stop() + return 0 + + +def main(argv=None) -> int: + import argparse + import json + import shutil + import tempfile + p = argparse.ArgumentParser(prog="chronos lazy-probe", description=__doc__.split("\n\n")[0]) + src = p.add_mutually_exclusive_group(required=True) + src.add_argument("--checkpoint", help="probe this checkpoint once") + src.add_argument("--watch", metavar="RUN_DIR", help="probe after every validation of a run directory") + p.add_argument("--out-dir", default=None, help="--watch: where lazy_probe.jsonl goes (default: the run dir)") + p.add_argument("--sweep", default=None, help="JSON object with ProbeSweep fields") + p.add_argument("--sweep-file", default=None) + p.add_argument("--tokenizer-dir", default=None) + p.add_argument("--out", default=None, help="write the result JSON here (default: stdout)") + p.add_argument("--keep-cache", action="store_true", help="keep the scratch expert cache") + a = p.parse_args(argv) + sweep = json.loads(a.sweep) if a.sweep else {} + if a.sweep_file: + with open(a.sweep_file, encoding="utf-8") as fh: + sweep = json.load(fh) + if a.watch: + return watch(a.watch, sweep, out_dir=a.out_dir, tokenizer_dir=a.tokenizer_dir) + scratch = tempfile.mkdtemp(prefix="chronos_probe_cache_") + os.environ["CHRONOS_EXPERT_CACHE_ROOT"] = scratch + try: + result = run_probe(a.checkpoint, sweep, tokenizer_dir=a.tokenizer_dir, + log=lambda m: print(m, flush=True)) + finally: + if not a.keep_cache: + shutil.rmtree(scratch, ignore_errors=True) + text = json.dumps(result, ensure_ascii=False, indent=2, default=str) + if a.out: + with open(a.out + ".tmp", "w", encoding="utf-8") as fh: + fh.write(text) + os.replace(a.out + ".tmp", a.out) + else: + print(text) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/chronos/workbench/serve.py b/chronos/workbench/serve.py new file mode 100644 index 0000000..be8712a --- /dev/null +++ b/chronos/workbench/serve.py @@ -0,0 +1,116 @@ +"""``chronos serve`` as a child process (argument list, no shell). + +Security contract (same as the CLI): loopback by default; any other host +requires *allow remote* plus an API key. The key is passed through the +``CHRONOS_API_KEY`` environment variable, never on the command line, so it +does not show up in ``ps``. +""" +from __future__ import annotations + +import os +import subprocess +import sys +import threading +from collections import deque + +LOOPBACK = ("127.0.0.1", "localhost", "::1") + + +def build_serve_command(*, models_dir: str, host: str = "127.0.0.1", port: int = 11435, + device: str = "auto", dtype: str = "auto", lazy_experts: bool = True, + ram_expert_fraction: float = 0.5, allow_remote: bool = False, + api_key: str = "", kv_cache_dtype: str = "", mla_decode: str = "", + router_scope: str = "", max_resident_experts: int | None = None, + ram_budget_mb: float | None = None, monitor_runs_dir: str = "", + paging: str = "auto", mla_cache_rope: bool = False) -> tuple[list[str], dict]: + """Return ``(argv, env_overrides)``; raises ValueError on an unsafe or invalid request.""" + host = (host or "127.0.0.1").strip() + models_dir = os.path.expanduser((models_dir or "").strip()) + if not models_dir or not os.path.isdir(models_dir): + raise ValueError("models_dir") + port = int(port) + if not 1 <= port <= 65535: + raise ValueError("port") + remote = host not in LOOPBACK + if remote and not (allow_remote and (api_key or "").strip()): + raise ValueError("remote_needs_key") + argv = [sys.executable, "-m", "chronos.serving.ollama_server", "--models-dir", models_dir, + "--host", host, "--port", str(port), "--device", device or "auto", "--dtype", dtype or "auto", + "--ram-expert-fraction", str(float(ram_expert_fraction))] + if paging not in ("auto", "cluster", "expert"): + raise ValueError("paging") + if not lazy_experts: + argv.append("--no-lazy-experts") + elif paging != "auto": + argv += ["--paging", paging] + if allow_remote: + argv.append("--allow-remote") + for flag, value in (("--kv-cache-dtype", kv_cache_dtype), ("--mla-decode", mla_decode), + ("--router-scope", router_scope)): + if value and value != "checkpoint": + argv += [flag, value] + if mla_cache_rope: + argv.append("--mla-cache-rope") + if max_resident_experts: + argv += ["--max-resident-experts", str(int(max_resident_experts))] + if ram_budget_mb: + argv += ["--ram-budget-mb", str(float(ram_budget_mb))] + if monitor_runs_dir and monitor_runs_dir.strip(): + argv += ["--monitor-runs-dir", os.path.expanduser(monitor_runs_dir.strip())] + env = {"CHRONOS_API_KEY": api_key.strip()} if (api_key or "").strip() else {} + return argv, env + + +def redact(argv: list[str]) -> str: + return " ".join(argv[1:]) # the key is never in argv; drop the interpreter path + + +class ServeProcess: + def __init__(self): + self.proc: subprocess.Popen | None = None + self.lines: deque[str] = deque(maxlen=500) + self.lock = threading.Lock() + self.url = "" + self.auth = False + + def running(self) -> bool: + return self.proc is not None and self.proc.poll() is None + + def _pump(self, proc: subprocess.Popen) -> None: + for line in proc.stdout: + with self.lock: + self.lines.append(line.rstrip()) + with self.lock: + self.lines.append(f"[exit {proc.wait()}]") + + def start(self, argv: list[str], env_overrides: dict, host: str, port: int) -> str: + if self.running(): + return "busy" + env = dict(os.environ) + env.pop("CHRONOS_API_KEY", None) # only an explicit key from the form enables auth + env.update(env_overrides) + env["PYTHONUNBUFFERED"] = "1" + repo = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + self.lines.clear() + self.lines.append(f"$ {redact(argv)}") + self.proc = subprocess.Popen(argv, cwd=repo, env=env, stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, text=True, bufsize=1) + threading.Thread(target=self._pump, args=(self.proc,), daemon=True).start() + shown = f"[{host}]" if ":" in host else host + self.url, self.auth = f"http://{shown}:{int(port)}", bool(env_overrides.get("CHRONOS_API_KEY")) + return "started" + + def stop(self, timeout: float = 10.0) -> str: + if not self.running(): + return "idle" + self.proc.terminate() + try: + self.proc.wait(timeout=timeout) + except subprocess.TimeoutExpired: + self.proc.kill() + self.proc.wait() + return "stopped" + + def snapshot(self) -> tuple[bool, str]: + with self.lock: + return self.running(), "\n".join(self.lines) diff --git a/chronos/workbench/tokenizer.py b/chronos/workbench/tokenizer.py new file mode 100644 index 0000000..c4dffc9 --- /dev/null +++ b/chronos/workbench/tokenizer.py @@ -0,0 +1,114 @@ +"""Chronos Tokenizer Builder jobs and report helpers (no UI dependency).""" +from __future__ import annotations + +import json +import os +import threading +import time +from collections import deque + +EVAL_COLUMNS = ["bucket", "texts", "bytes/token", "chars/token", "tokens/word", + "byte_fallback_rate", "roundtrip_failures"] + + +def parse_paths(text: str) -> list[str]: + """One path per line or comma; ``~`` expanded; blanks dropped.""" + out = [] + for chunk in (text or "").replace(",", "\n").splitlines(): + chunk = chunk.strip().strip('"').strip("'") + if chunk: + out.append(os.path.expanduser(chunk)) + return out + + +def report_rows(report: dict) -> list[list]: + """Per-bucket rows from a ``heldout_eval`` dict (``vocab_utilization`` skipped).""" + rows = [] + for bucket, stats in (report or {}).items(): + if not isinstance(stats, dict): + continue + rows.append([bucket, stats.get("texts"), stats.get("bytes_per_token"), stats.get("chars_per_token"), + stats.get("tokens_per_word"), stats.get("byte_fallback_rate"), + stats.get("roundtrip_failures")]) + return rows + + +def read_report(out_dir: str) -> dict: + path = os.path.join(os.path.expanduser(out_dir or ""), "tokenizer_report.json") + if not os.path.isfile(path): + return {} + with open(path, encoding="utf-8") as fh: + return json.load(fh) + + +def report_summary(report: dict) -> dict: + if not report: + return {} + keep = ("vocab_size", "fingerprint", "algorithm", "elapsed_s", "special_tokens") + out = {k: report[k] for k in keep if k in report} + heldout = report.get("heldout_eval") or {} + if "vocab_utilization" in heldout: + out["vocab_utilization"] = heldout["vocab_utilization"] + if report.get("sources"): + out["sources"] = report["sources"] + return out + + +class TokenizerJob: + """One background build at a time; log lines are kept in a bounded deque.""" + + def __init__(self): + self.lock = threading.Lock() + self.thread: threading.Thread | None = None + self.lines: deque[str] = deque(maxlen=400) + self.state = "idle" + self.out_dir = "" + self.error = "" + + def log(self, message) -> None: + with self.lock: + self.lines.append(f"{time.strftime('%H:%M:%S')} {message}") + + def running(self) -> bool: + return self.thread is not None and self.thread.is_alive() + + def start(self, paths: list[str], out_dir: str, vocab_size: int, per_source: int, + fields: list[str] | None, temperature: float) -> str: + if self.running(): + return "busy" + if not paths: + return "no_paths" + if not out_dir: + return "no_out" + from chronos.tokenizer.extract import expand + files = expand(paths) + if not files: + return "no_files" + self.lines.clear() + self.state, self.out_dir, self.error = "running", os.path.expanduser(out_dir), "" + self.log(f"{len(files)} files: " + ", ".join(os.path.basename(f) for f in files[:8]) + + (" …" if len(files) > 8 else "")) + + def work(): + from chronos.tokenizer import BPETrainerConfig, ExtractConfig, build_tokenizer + try: + build_tokenizer( + paths, self.out_dir, vocab_size=int(vocab_size), + extract=ExtractConfig(per_source_texts=int(per_source), fields=fields or None), + trainer=BPETrainerConfig(vocab_size=int(vocab_size), + language_temperature=float(temperature)), + log=self.log, + ) + self.state = "done" + except Exception as exc: # surfaced in the UI, never raised into Gradio + self.error = f"{type(exc).__name__}: {exc}" + self.log(f"error: {self.error}") + self.state = "failed" + + self.thread = threading.Thread(target=work, name="chronos-tokenizer", daemon=True) + self.thread.start() + return "started" + + def snapshot(self) -> tuple[str, str]: + with self.lock: + return self.state, "\n".join(self.lines) diff --git a/chronos/workbench/train_worker.py b/chronos/workbench/train_worker.py new file mode 100644 index 0000000..4a9f7fd --- /dev/null +++ b/chronos/workbench/train_worker.py @@ -0,0 +1,306 @@ +"""Training job worker: ``python -m chronos.workbench.train_worker ``. + +Runs one or more ``TrainSession`` stages in sequence and writes a run +directory that ``chronos.monitor.snapshot.RunMonitor`` (and the Web UI live +monitor) can read: + +* ``run_spec.json`` – what was asked for (config, stages, backend); +* ``status.json`` – heartbeat: pid, state, current phase, step, error; +* ``metrics.jsonl`` – one row per logged step, plus ``validation`` / + ``phase_start`` / ``phase_end`` / ``final`` events; +* ``train.log`` – the session log; +* ``samples.jsonl`` – live generation samples (prompt → output); +* ``lazy_probe.jsonl`` – after each validation, the lazy-expert probe + (``chronos.workbench.lazy_probe``): efficiency, hit rate and fidelity of + the just-saved checkpoint under every requested paging / residency / + RAM-ratio / miss-policy / wait / speculative setting. + +The job file is written by the Web UI server; it is JSON with +``{"run_dir", "config", "stages": [{"mode", "data_path", "data_paths", "init_weight", +"teacher_path", "max_steps", "val_ratio", "sample_prompt"}], "backend", +"lazy_probe": {"enabled": true, "sweep": {...ProbeSweep fields}}}``. +SIGTERM (the UI stop button) stops the current stage and skips the rest. +""" +from __future__ import annotations + +import json +import os +import signal +import sys +import time +from datetime import datetime + +STAGE_MODES = ("pretrain", "sft", "dpo", "orpo", "grpo", "distill") + +# TrainSession reports three stage-specific terms; name them for the monitor. +TERM_NAMES = { + "pretrain": ("primary_loss", "balance_loss", "temporal_loss"), + "sft": ("primary_loss", "lookahead_loss", "anchor_loss"), + "dpo": ("primary_loss", "anchor_loss", "lookahead_loss"), + "orpo": ("primary_loss", "or_loss", "anchor_loss"), + "grpo": ("primary_loss", "kl_loss", "reward_mean"), + "distill": ("primary_loss", "ce_loss", "anchor_loss"), +} + + +def _now() -> str: + return datetime.now().isoformat(timespec="seconds") + + +def _write_json(path: str, payload: dict) -> None: + tmp = path + ".tmp" + with open(tmp, "w", encoding="utf-8") as fh: + json.dump(payload, fh, ensure_ascii=False, indent=2, default=str) + os.replace(tmp, path) + + +class RunWriter: + """Appends monitor-format rows and keeps the heartbeat current.""" + + def __init__(self, run_dir: str): + self.run_dir = run_dir + os.makedirs(run_dir, exist_ok=True) + self.metrics = open(os.path.join(run_dir, "metrics.jsonl"), "a", encoding="utf-8") + self.log = open(os.path.join(run_dir, "train.log"), "a", encoding="utf-8") + self.samples_path = os.path.join(run_dir, "samples.jsonl") + self.status = {"pid": os.getpid(), "state": "starting", "started": _now()} + self.t0 = time.monotonic() + + def row(self, payload: dict) -> None: + self.metrics.write(json.dumps({"time": _now(), **payload}, ensure_ascii=False, default=float) + "\n") + self.metrics.flush() + + def lines(self, text: str) -> None: + if text: + self.log.write(text.rstrip("\n") + "\n") + self.log.flush() + + def sample(self, payload: dict) -> None: + with open(self.samples_path, "a", encoding="utf-8") as fh: + fh.write(json.dumps({"time": _now(), **payload}, ensure_ascii=False) + "\n") + + def heartbeat(self, **fields) -> None: + self.status.update(fields, updated=_now(), run_wall_s=round(time.monotonic() - self.t0, 1)) + _write_json(os.path.join(self.run_dir, "status.json"), self.status) + + def close(self) -> None: + self.metrics.close() + self.log.close() + + +def metric_row(mode: str, metric: dict, total_steps: int) -> dict: + """Map one ``TrainSession`` metric dict onto monitor keys.""" + if metric.get("val"): + return {"event": "validation", "phase": mode, "step": int(metric.get("step", 0)), + "valid_ce": float(metric.get("val_loss", metric.get("total", 0.0)))} + names = TERM_NAMES.get(mode, TERM_NAMES["pretrain"]) + row = {"phase": mode, "step": int(metric.get("step", 0)), "total": int(total_steps or 0), + "loss": float(metric.get("total", 0.0))} + for name, key in zip(names, ("primary", "secondary", "tertiary")): + if metric.get(key) is not None: + row[name] = float(metric[key]) + if metric.get("tokens_per_s"): + row["tokens_per_s"] = float(metric["tokens_per_s"]) + if metric.get("tps"): + row["steps_per_s"] = float(metric["tps"]) + row["step_s"] = 1.0 / float(metric["tps"]) + for key in ("grad_norm", "lr", "lookahead_union_recall", "router_adjacent_jaccard", "recurrent_loss"): + value = metric.get(key) + if isinstance(value, (int, float)): + row[key] = float(value) + return row + + +PROBE_GRACE_S = 3.0 + + +def _fresh_checkpoint(candidates, newer_than: float) -> str | None: + from chronos.workbench.lazy_probe import newest_checkpoint + fresh = [] + for path in candidates: + try: + if os.path.getmtime(path) > newer_than: + fresh.append(path) + except OSError: + continue + return newest_checkpoint(fresh) + + +def probe_event(entry: dict) -> dict: + """A compact ``lazy_probe`` event row for metrics.jsonl (the full result is in lazy_probe.jsonl).""" + row = {"event": "lazy_probe", "phase": entry.get("phase"), "step": entry.get("step"), + "wall_s": entry.get("wall_s")} + if "error" in entry: + row["error"] = str(entry["error"])[:200] + result = entry.get("result") or {} + if result.get("skipped"): + row["skipped"] = str(result["skipped"])[:200] + failed = [v for v in result.get("variants") or [] if "error" in v] + if failed: + row["probe_errors"] = len(failed) + variants = [v for v in result.get("variants") or [] if "fidelity" in v] + if variants: + row["probe_variants"] = len(variants) + row["probe_min_exact_match"] = min(v["fidelity"]["exact_match_rate"] for v in variants) + hits = [v["measured"]["resident_hit_rate"] for v in variants + if v.get("measured", {}).get("resident_hit_rate") is not None] + if hits: + row["probe_mean_resident_hit_rate"] = round(sum(hits) / len(hits), 4) + return row + + +def stage_checkpoints(run_cfg: dict, mode: str) -> list[str]: + """Checkpoint files this stage writes (``__moe[.best].pth`` in ``save_dir``).""" + import glob + from chronos.workbench.training import STAGE_CHECKPOINT_PREFIX + prefix = STAGE_CHECKPOINT_PREFIX.get(mode, mode) + return glob.glob(os.path.join(run_cfg.get("save_dir", "./out"), f"{prefix}_*_moe*.pth")) + + +def stage_data_path(stage: dict, writer: RunWriter, cfg: dict) -> str: + """The one JSONL file a stage trains on. + + ``data_paths`` (several files / folders, any supported format) are merged into + ``/data/merged_.jsonl``; a single ``.jsonl`` file is used in place. An empty + selection keeps the old behaviour (``data_path`` or the config's, else a synthetic smoke run). + """ + paths = [p for p in stage.get("data_paths") or [] if p] + if not paths: + return stage.get("data_path") or cfg.get("data_path", "") + from chronos.workbench.files import merge_datasets + try: + return merge_datasets(paths, os.path.join(writer.run_dir, "data"), log=writer.lines) + except FileNotFoundError: + raise FileNotFoundError(f"no readable records in {', '.join(paths)}") from None + + +def run_stage(session, writer: RunWriter, cfg: dict, stage: dict, backend: str, stop, probe=None) -> str: + from chronos.workbench.training import _prepare_training_run_config + mode = stage["mode"] + data_path = stage_data_path(stage, writer, cfg) + run_cfg, effective = _prepare_training_run_config( + cfg, mode, backend, data_path, None, + stage.get("init_weight", ""), stage.get("max_steps", cfg.get("max_steps", 0)), + stage.get("val_ratio", 0.0), stage.get("teacher_path", ""), stage.get("sample_prompt", "")) + if stage.get("max_steps") is not None: + run_cfg["max_steps"] = int(stage["max_steps"] or 0) + run_cfg["cleanup_gradio_temp_dataset"] = False # never delete a user dataset + session.effective_config = effective + writer.row({"event": "phase_start", "phase": mode, "step": 0}) + writer.heartbeat(state="running", phase=mode, phase_started=_now()) + session.start(run_cfg, mode) + seen, last_sample, last_beat = 0, "", 0.0 + pending = None # validation step whose checkpoint has not been probed yet + probed_mtime = time.time() # only checkpoints newer than this belong to this stage / probe + while True: + alive = session.is_running() + writer.lines(session.drain_log()) + rows = session.get_metrics() + for metric in rows[seen:]: + row = metric_row(mode, metric, session.total_steps) + writer.row(row) + if probe is not None and row.get("event") == "validation": + if pending is not None: # validations arrive faster than checkpoints settle + probe.skip(phase=mode, step=pending["step"], reason=f"superseded by step {row['step']}") + pending = {"step": row["step"], "t": time.monotonic()} + seen = len(rows) + if probe is not None and pending is not None: + # Torch saves before validating; MLX validates, then may save ``.best`` and the final + # checkpoint. Give the trainer a short grace period, then probe the newest checkpoint + # written since the last probe (the weights that were just validated). + ckpt = _fresh_checkpoint(stage_checkpoints(run_cfg, mode), probed_mtime) + due = time.monotonic() - pending["t"] >= PROBE_GRACE_S or not alive + if due and (ckpt is not None or not alive): + probe.request(ckpt, phase=mode, step=pending["step"]) + if ckpt is not None: + probed_mtime = os.path.getmtime(ckpt) + pending = None + if probe is not None: + for entry in probe.poll(): + writer.row(probe_event(entry)) + if session.last_sample and session.last_sample != last_sample: + last_sample = session.last_sample + writer.sample({"phase": mode, "step": session.last_sample_step, + "prompt": run_cfg.get("sample_prompt") or "", "output": last_sample}) + if time.monotonic() - last_beat > 2.0 or not alive: + writer.heartbeat(step=session.step, total=session.total_steps, loss=session.loss, + effective_config=session.get_effective_config()) + last_beat = time.monotonic() + if stop["requested"] and alive: + session.stop() + if not alive: + break + time.sleep(0.5) + state = session.status if session.status in ("finished", "stopped", "error") else "finished" + writer.row({"event": "phase_end", "phase": mode, "step": session.step, "state": state}) + return state + + +def run_job(job: dict) -> int: + from chronos.workbench.training import TrainSession + run_dir = os.path.abspath(job["run_dir"]) + stages = [s for s in job.get("stages", []) if s.get("mode") in STAGE_MODES] + if not stages: + raise ValueError("no valid stages") + writer = RunWriter(run_dir) + _write_json(os.path.join(run_dir, "run_spec.json"), { + "run_dir": run_dir, "source": "chronos-webui", "backend": job.get("backend", "auto"), + "phases": [{"name": s["mode"], "budget_fraction": round(1 / len(stages), 4), + "data_path": s.get("data_path", ""), "data_paths": s.get("data_paths") or [], + "max_steps": s.get("max_steps")} for s in stages], + "model_config": job.get("config", {}), "created": _now(), + }) + stop = {"requested": False} + probe = None + probe_cfg = job.get("lazy_probe") or {} + if probe_cfg.get("enabled", True): + from chronos.workbench.lazy_probe import ProbeScheduler + probe = ProbeScheduler(run_dir, probe_cfg.get("sweep"), tokenizer_dir=job.get("config", {}).get( + "tokenizer_path") or None, log=writer.lines) + + def _on_term(_sig, _frm): + stop["requested"] = True + + signal.signal(signal.SIGTERM, _on_term) + signal.signal(signal.SIGINT, _on_term) + writer.heartbeat(state="starting", stages=[s["mode"] for s in stages]) + final, error = "finished", None + try: + for stage in stages: + session = TrainSession() + state = run_stage(session, writer, dict(job.get("config", {})), stage, job.get("backend", "auto"), + stop, probe) + if state == "error": + final, error = "failed", f"stage {stage['mode']} failed (see train.log)" + break + if stop["requested"] or state == "stopped": + final = "stopped" + break + except Exception as exc: # recorded for the UI, then re-raised for the exit code + final, error = "failed", f"{type(exc).__name__}: {exc}" + writer.lines(error) + raise + finally: + if probe is not None: + if stop["requested"]: + probe.stop() + for entry in probe.wait(): + writer.row(probe_event(entry)) + writer.row({"event": "final", "state": final, **({"error": error} if error else {})}) + writer.heartbeat(state="finished" if final == "finished" else ("failed" if final == "failed" else "stopped"), + error=error) + writer.close() + return 0 if final == "finished" else (1 if final == "failed" else 0) + + +def main(argv=None) -> int: + argv = sys.argv[1:] if argv is None else argv + if len(argv) != 1: + print("usage: python -m chronos.workbench.train_worker ", file=sys.stderr) + return 2 + with open(argv[0], encoding="utf-8") as fh: + return run_job(json.load(fh)) + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/chronos/workbench/training.py b/chronos/workbench/training.py new file mode 100644 index 0000000..48c517c --- /dev/null +++ b/chronos/workbench/training.py @@ -0,0 +1,2084 @@ +"""Training sessions for the Web UI: all six stages, Torch and MLX backends. + +UI-independent (no Gradio). ``TrainSession`` runs one stage in a worker +thread and exposes status, metrics, a log queue and the effective config; +``chronos.workbench.train_worker`` runs it as a subprocess for the Web UI. +Language-dependent defaults (sample prompts, placeholders) use +``set_language_provider``; the default language is English. +""" +import os +import glob +import time +import threading +import queue +import shutil +import tempfile +from contextlib import contextmanager +from types import SimpleNamespace + + +import chronos.deps # default tokenizer path +from chronos.tokenizer.visible import decode_visible +from ui.presets import BASE_MOE_DEFAULTS +from chronos.backend import training_available, resolve_training_device +from chronos.trainer.device_utils import ( + autocast_context, + configure_cpu_threads, + cpu_thread_snapshot, + dataloader_kwargs, + grad_scaler, + optimizer_step_with_scaler, + resolve_dtype_name, + runtime_summary, +) +from chronos.model.checkpoint import ( + config_dict_for_checkpoint, + load_checkpoint_state_dict, + load_state_dict_controlled, + save_state_dict_with_config, + sniff_checkpoint_config, +) + + +_language_provider = None + + +def set_language_provider(fn) -> None: + """Callable returning the UI language code (``zh-Hans``/``zh-Hant``/``en``/``ja``).""" + global _language_provider + _language_provider = fn + + +def _language() -> str: + try: + return (_language_provider() if _language_provider else None) or "en" + except Exception: + return "en" + + +STAGE_UI_ORDER = ["pretrain", "sft", "dpo", "orpo", "grpo", "distill"] +STAGE_LABELS = { + "pretrain": "Stage 1 · Pretrain", + "sft": "Stage 2 · SFT", + "dpo": "Stage 3 · DPO", + "orpo": "Stage 4 · ORPO", + "grpo": "Stage 5 · GRPO", + "distill": "Stage 6 · Distill", +} +STAGE_CHECKPOINT_PREFIX = { + "pretrain": "chronos", + "sft": "sft", + "dpo": "dpo", + "orpo": "orpo", + "grpo": "grpo", + "distill": "distill", +} +STAGE_DEFAULT_INIT = { + "sft": "chronos", + "dpo": "sft", + "orpo": "sft", + "grpo": "orpo", + "distill": "grpo", +} +STAGE_DEFAULT_DATA = { + "pretrain": "./tests/fixtures/tiny_pretrain.jsonl", + "sft": "./tests/fixtures/tiny_sft.jsonl", + "dpo": "./tests/fixtures/tiny_dpo.jsonl", + "orpo": "./tests/fixtures/tiny_dpo.jsonl", + "grpo": "./tests/fixtures/tiny_grpo.jsonl", + "distill": "./tests/fixtures/tiny_sft.jsonl", +} +CHECKPOINT_TOPOLOGY_KEYS = ( + "hidden_size", + "num_hidden_layers", + "num_experts", + "num_experts_per_tok", + "num_shared_experts", + "moe_intermediate_size", + "vocab_size", + "lookahead_steps", + "kv_latent_dim", + "rope_dim", + "num_attention_heads", + "num_key_value_heads", "head_dim", "use_moe", "use_hybrid_attention", "tie_word_embeddings", + "architecture_version", "recurrent_enabled", "recurrent_groups", "recurrent_depth", + "prelude_layers", "coda_layers", "layer_aware_lookahead", "layer_aware_cache", + "modalities", "image_patch_size", "modality_fusion_heads", + # v3 semantics that do not change tensor shapes but do change what the + # weights compute; a stage must inherit them from its init checkpoint. + "recurrent_attention_mode", "recurrent_order", "rope_layout", "rope_theta", "sliding_window_size", + "intermediate_size", "router_scope", +) +STAGE_HELP_TEXT = { + "pretrain": { + "zh-Hans": "从通用语料继续预训练。`init_weight` 可留空;若存在同名 checkpoint,将按当前拓扑尝试恢复。", + "zh-Hant": "從通用語料繼續預訓練。`init_weight` 可留空;若存在同名 checkpoint,將按目前拓撲嘗試恢復。", + "en": "Continue base pretraining on LM-style data. `init_weight` may be left blank; if a matching checkpoint exists, Train will resume from it.", + "ja": "汎用コーパスで事前学習を続けます。`init_weight` は空で構いません。同名 checkpoint があり拓撲が一致すれば再開します。", + }, + "sft": { + "zh-Hans": "使用 `conversations` 数据做监督微调。`init_weight` 留空时,会从当前 `save_dir` 自动接续 `chronos__moe.pth`;只有手动填路径时才覆盖。", + "zh-Hant": "使用 `conversations` 資料做監督微調。`init_weight` 留空時,會從目前 `save_dir` 自動接續 `chronos__moe.pth`;只有手動填路徑時才覆蓋。", + "en": "Run supervised fine-tuning on `conversations` data. If `init_weight` is blank, Train auto-resolves `chronos__moe.pth` from the current `save_dir`; only a pasted path overrides it.", + "ja": "`conversations` データで SFT を行います。`init_weight` を空欄にすると、現在の `save_dir` から `chronos__moe.pth` を自動解決します。パスを入力した場合のみ上書きします。", + }, + "dpo": { + "zh-Hans": "使用 `chosen / rejected` 偏好对做 DPO。`init_weight` 留空时,会自动加载当前 `save_dir` 下的 `sft__moe.pth`;手动填写路径可覆盖。", + "zh-Hant": "使用 `chosen / rejected` 偏好對做 DPO。`init_weight` 留空時,會自動載入目前 `save_dir` 下的 `sft__moe.pth`;手動填寫路徑可覆蓋。", + "en": "Run DPO on `chosen / rejected` preference pairs. Leaving `init_weight` blank auto-loads `sft__moe.pth` from the current `save_dir`; paste a path only when you want to override it.", + "ja": "`chosen / rejected` の選好ペアで DPO を実行します。`init_weight` を空欄にすると、現在の `save_dir` から `sft__moe.pth` を自動読み込みします。上書きしたい場合だけパスを入力してください。", + }, + "orpo": { + "zh-Hans": "使用同样的偏好对做 ORPO。`init_weight` 留空时,会自动加载当前 `save_dir` 下的 `sft__moe.pth`;手动填写路径可覆盖。", + "zh-Hant": "使用相同的偏好對做 ORPO。`init_weight` 留空時,會自動載入目前 `save_dir` 下的 `sft__moe.pth`;手動填寫路徑可覆蓋。", + "en": "Run ORPO on the same preference-pair format. Leaving `init_weight` blank auto-loads `sft__moe.pth` from the current `save_dir`; paste a path only when you want to override it.", + "ja": "同じ選好ペア形式で ORPO を実行します。`init_weight` を空欄にすると、現在の `save_dir` から `sft__moe.pth` を自動読み込みします。上書きしたい場合だけパスを入力してください。", + }, + "grpo": { + "zh-Hans": "使用 prompt 数据做 GRPO rollout。`init_weight` 留空时,会自动加载当前 `save_dir` 下的 `orpo__moe.pth`;`reward` 可配置。", + "zh-Hant": "使用 prompt 資料做 GRPO rollout。`init_weight` 留空時,會自動載入目前 `save_dir` 下的 `orpo__moe.pth`;`reward` 可設定。", + "en": "Run GRPO rollouts on prompt-style data. Leaving `init_weight` blank auto-loads `orpo__moe.pth` from the current `save_dir`; `reward` remains configurable.", + "ja": "prompt 形式のデータで GRPO rollout を行います。`init_weight` を空欄にすると、現在の `save_dir` から `orpo__moe.pth` を自動読み込みします。`reward` は設定できます。", + }, + "distill": { + "zh-Hans": "蒸馏阶段中,学生 `init_weight` 留空时会自动接续当前 `save_dir` 下的 `grpo__moe.pth`;`teacher_path` 留空时会自动解析 `sft__moe.pth`。只有手动填路径时才覆盖。", + "zh-Hant": "蒸餾階段中,學生 `init_weight` 留空時會自動接續目前 `save_dir` 下的 `grpo__moe.pth`;`teacher_path` 留空時會自動解析 `sft__moe.pth`。只有手動填路徑時才覆蓋。", + "en": "For distillation, a blank student `init_weight` auto-resolves `grpo__moe.pth` from the current `save_dir`, and a blank `teacher_path` auto-resolves `sft__moe.pth`. Paste paths only when you want to override either one.", + "ja": "蒸留では、学生側の `init_weight` を空欄にすると現在の `save_dir` から `grpo__moe.pth` を自動解決し、`teacher_path` を空欄にすると `sft__moe.pth` を自動解決します。上書きしたい場合だけパスを入力してください。", + }, +} +STAGE_METRIC_LABELS = { + "pretrain": ("Total Loss", "CE Loss", "Aux Loss"), + "sft": ("SFT Loss", "CE Loss", "Lookahead"), + "dpo": ("DPO Loss", "Preference", "Anchor"), + "orpo": ("ORPO Loss", "Chosen NLL", "OR Term"), + "grpo": ("GRPO Loss", "Policy", "KL"), + "distill": ("Distill Loss", "KD Loss", "CE Loss"), +} +STAGE_CHART_META = { + "pretrain": { + "title": "Pretrain Metrics", + "primary": "CE", + "secondary": "Aux", + "tertiary": "Temporal", + "val": "Validation", + "speed_title": "Training Speed (steps/s)", + "speed_label": "steps/s", + }, + "sft": { + "title": "SFT Metrics", + "primary": "CE", + "secondary": "Lookahead", + "tertiary": "Anchor", + "val": "Validation", + "speed_title": "SFT Speed (steps/s)", + "speed_label": "steps/s", + }, + "dpo": { + "title": "DPO Metrics", + "primary": "Preference", + "secondary": "Anchor", + "tertiary": "Lookahead", + "val": "Validation", + "speed_title": "Preference Speed (steps/s)", + "speed_label": "steps/s", + }, + "orpo": { + "title": "ORPO Metrics", + "primary": "Chosen NLL", + "secondary": "OR Term", + "tertiary": "Anchor", + "val": "Validation", + "speed_title": "ORPO Speed (steps/s)", + "speed_label": "steps/s", + }, + "grpo": { + "title": "GRPO Metrics", + "primary": "Policy", + "secondary": "KL", + "tertiary": "Reward", + "val": "Validation", + "speed_title": "Rollout Speed + Reward", + "speed_label": "rollouts/s", + "speed_overlay": "Mean Reward", + }, + "distill": { + "title": "Distill Metrics", + "primary": "KD", + "secondary": "CE", + "tertiary": "Anchor", + "val": "Validation", + "speed_title": "Distill Speed (steps/s)", + "speed_label": "steps/s", + }, +} + + +DEFAULT_STAGE_SAMPLE_PROMPTS = { + "pretrain": { + "zh-Hans": "请用简洁中文介绍 Project Chronos 如何把 MoE 的专家加载提前到 Prefill 阶段。", + "zh-Hant": "請用精簡中文介紹 Project Chronos 如何把 MoE 的專家載入提前到 Prefill 階段。", + "en": "Explain how Project Chronos moves MoE expert loading into the prefill stage.", + "ja": "Project Chronos が MoE の専門家ロードを Prefill 段階へ前倒しする仕組みを説明してください。", + }, + "sft": { + "zh-Hans": "用户:为什么 Chronos 的双层路由比传统被动 offload 更适合消费级硬件?\n助手:", + "zh-Hant": "使用者:為什麼 Chronos 的雙層路由比傳統被動 offload 更適合消費級硬體?\n助手:", + "en": "User: Why is Chronos's dual-layer routing better suited to consumer hardware than reactive expert offload?\nAssistant:", + "ja": "ユーザー: なぜ Chronos の二層ルーティングは、従来の受動的な expert offload よりも民生向けハードウェアに向いているのですか?\nアシスタント:", + }, + "dpo": { + "zh-Hans": "用户:请比较 Chronos 和传统 reactive offload 在推理时的关键差异。\n助手:", + "zh-Hant": "使用者:請比較 Chronos 與傳統 reactive offload 在推理時的關鍵差異。\n助手:", + "en": "User: Compare Chronos with conventional reactive offload during inference.\nAssistant:", + "ja": "ユーザー: 推論時における Chronos と従来の reactive offload の主要な違いを比較してください。\nアシスタント:", + }, + "orpo": { + "zh-Hans": "用户:请写一段面向开发者的 Project Chronos 介绍。\n助手:", + "zh-Hant": "使用者:請寫一段面向開發者的 Project Chronos 介紹。\n助手:", + "en": "User: Write a developer-facing introduction to Project Chronos.\nAssistant:", + "ja": "ユーザー: 開発者向けの Project Chronos 紹介文を書いてください。\nアシスタント:", + }, + "grpo": { + "zh-Hans": "请比较 Chronos 与传统 MoE offload 在吞吐、首 token 延迟和缓存未命中行为上的权衡。", + "zh-Hant": "請比較 Chronos 與傳統 MoE offload 在吞吐、首 token 延遲和快取未命中行為上的權衡。", + "en": "Compare Chronos with conventional MoE offload in terms of throughput, first-token latency, and cache-miss behavior.", + "ja": "Chronos と従来の MoE offload を、スループット、初回トークン遅延、キャッシュミス時の挙動で比較してください。", + }, + "distill": { + "zh-Hans": "请用更现代、更有产品感的英文改写 Project Chronos 的首页介绍,保留核心技术点。", + "zh-Hant": "請用更現代、更有產品感的英文改寫 Project Chronos 的首頁介紹,保留核心技術點。", + "en": "Rewrite the Project Chronos landing-page intro in a more modern product voice while preserving the core technical claims.", + "ja": "Project Chronos のトップ紹介文を、技術的な要点を保ったまま、よりモダンでプロダクト寄りの英語に書き換えてください。", + }, +} + + +def _stage_sample_prompt(mode: str, lang: str | None = None) -> str: + lang = lang or _language() + prompts = DEFAULT_STAGE_SAMPLE_PROMPTS.get(mode, DEFAULT_STAGE_SAMPLE_PROMPTS["pretrain"]) + return prompts.get(lang, prompts["en"]) + + +def _default_sample_prompts() -> set[str]: + vals: set[str] = set() + for prompts in DEFAULT_STAGE_SAMPLE_PROMPTS.values(): + vals.update(v.strip() for v in prompts.values() if v and v.strip()) + return vals + + +DEFAULT_SAMPLE_PROMPT_VALUES = _default_sample_prompts() +DEFAULT_STAGE_DATA_VALUES = {v.strip() for v in STAGE_DEFAULT_DATA.values() if v.strip()} +DEFAULT_STAGE_INIT_VALUES = { + f"./out/{prefix}_768_moe.pth" + for prefix in STAGE_DEFAULT_INIT.values() +} + +PRETRAIN_INIT_PLACEHOLDER = { + "zh-Hans": "留空则按当前 save_dir 自动续训同阶段 checkpoint", + "zh-Hant": "留空則按目前 save_dir 自動續訓同階段 checkpoint", + "en": "Leave blank to auto-resume the current-stage checkpoint from save_dir", + "ja": "空欄なら save_dir から同一ステージ checkpoint を自動再開", +} +UPSTREAM_INIT_PLACEHOLDER = { + "zh-Hans": "留空则按当前 save_dir 自动载入 {prefix}__moe.pth,手动填写才覆盖", + "zh-Hant": "留空則按目前 save_dir 自動載入 {prefix}__moe.pth,手動填寫才覆蓋", + "en": "Leave blank to auto-load {prefix}__moe.pth from save_dir; paste a path to override", + "ja": "空欄なら save_dir から {prefix}__moe.pth を自動読み込み。上書き時だけパスを指定", +} +DISTILL_TEACHER_PLACEHOLDER = { + "zh-Hans": "留空则按当前 save_dir 自动载入 sft__moe.pth,手动填写才覆盖", + "zh-Hant": "留空則按目前 save_dir 自動載入 sft__moe.pth,手動填寫才覆蓋", + "en": "Leave blank to auto-load sft__moe.pth from save_dir; paste a path to override", + "ja": "空欄なら save_dir から sft__moe.pth を自動読み込み。上書き時だけパスを指定", +} + +TRAIN_BACKEND_CHOICES = ["auto", "cuda", "xpu", "mlx", "mps", "cpu"] + +TRAIN_BACKEND_LABELS = { + "auto": { + "zh-Hans": "自动 (默认最快)", + "zh-Hant": "自動 (預設最快)", + "en": "Auto (fastest default)", + "ja": "自動 (最速を既定)", + }, + "cuda": { + "zh-Hans": "CUDA", + "zh-Hant": "CUDA", + "en": "CUDA", + "ja": "CUDA", + }, + "mps": { + "zh-Hans": "MPS", + "zh-Hant": "MPS", + "en": "MPS", + "ja": "MPS", + }, + "xpu": { + "zh-Hans": "XPU", + "zh-Hant": "XPU", + "en": "XPU", + "ja": "XPU", + }, + "mlx": { + "zh-Hans": "MLX", + "zh-Hant": "MLX", + "en": "MLX", + "ja": "MLX", + }, + "cpu": { + "zh-Hans": "CPU", + "zh-Hant": "CPU", + "en": "CPU", + "ja": "CPU", + }, +} + + +def _stage_text(stage_map: dict[str, str], mode: str, lang: str | None = None) -> str: + lang = lang or _language() + per_stage = stage_map.get(mode, stage_map["pretrain"]) + return per_stage.get(lang, per_stage["en"]) + + +def _stage_init_placeholder(mode: str, lang: str | None = None) -> str: + lang = lang or _language() + if mode == "pretrain": + return PRETRAIN_INIT_PLACEHOLDER.get(lang, PRETRAIN_INIT_PLACEHOLDER["en"]) + upstream = STAGE_DEFAULT_INIT.get(mode, "chronos") + template = UPSTREAM_INIT_PLACEHOLDER.get(lang, UPSTREAM_INIT_PLACEHOLDER["en"]) + return template.format(prefix=upstream) + + +def _normalize_stage_init_value(current_init_weight: str | None) -> str: + current_init = (current_init_weight or "").strip() + if current_init in DEFAULT_STAGE_INIT_VALUES: + return "" + return current_init + + +def _extract_gradio_file_path(value) -> str: + """Return the current path from Gradio File values across versions. + + Gradio's `type="filepath"` normally passes a string, but depending on + version/event it may pass a small dict, a FileData-like object, or a one + item list. Keep this tolerant so Start can read the latest upload directly + instead of relying only on the textbox update event. + """ + if value in (None, ""): + return "" + if isinstance(value, (list, tuple)): + return _extract_gradio_file_path(value[0] if value else "") + if isinstance(value, dict): + for key in ("path", "name", "orig_name"): + if value.get(key): + return str(value[key]).strip() + return "" + for attr in ("path", "name"): + candidate = getattr(value, attr, None) + if candidate: + return str(candidate).strip() + return str(value).strip() + + +def _distill_teacher_placeholder(lang: str | None = None) -> str: + lang = lang or _language() + return DISTILL_TEACHER_PLACEHOLDER.get(lang, DISTILL_TEACHER_PLACEHOLDER["en"]) + + +def _available_train_backend_choices() -> list[str]: + available = set(training_available()) + return ["auto"] + [name for name in TRAIN_BACKEND_CHOICES[1:] if name in available] + + +def _train_backend_label(name: str, lang: str | None = None) -> str: + lang = lang or _language() + labels = TRAIN_BACKEND_LABELS.get(name, TRAIN_BACKEND_LABELS["auto"]) + return labels.get(lang, labels["en"]) + + +def _train_backend_dropdown_choices(lang: str | None = None) -> list[tuple[str, str]]: + return [ + (_train_backend_label(name, lang), name) + for name in _available_train_backend_choices() + ] + + +def _default_train_backend_value() -> str: + return "auto" + + +def _normalize_dtype_for_trainer(dtype: str | None) -> str: + dt = (dtype or "auto").strip().lower() + if dt in {"auto", ""}: + return "auto" + if dt in {"bf16", "bfloat16"}: + return "bfloat16" + if dt in {"fp32", "float32", "full"}: + return "float32" + return "float16" + + +def _is_auto_value(value) -> bool: + return value in (None, "", "auto", 0, "0") + + +def _cpu_budget_for_backend(cfg: dict, resolved_backend: str) -> float: + requested_threads = cfg.get("cpu_threads", "auto") + raw_budget = cfg.get("cpu_budget_percent", None) + if resolved_backend == "cpu" and _is_auto_value(requested_threads): + return 100.0 if raw_budget in (None, "", "auto") else float(raw_budget) + if raw_budget in (None, "", "auto"): + return 100.0 + return float(raw_budget) + + +def _effective_training_config( + cfg: dict, + *, + mode: str, + requested_backend: str, + resolved_backend: str, + device: str, + cpu_threads: int, + workers: int | None = None, + total_train_steps: int | None = None, + optimizer_update_steps: int | None = None, + progress_unit: str = "micro_step", +) -> dict: + keys = [ + "learning_rate", + "batch_size", + "accumulation_steps", + "epochs", + "max_steps", + "max_seq_len", + "save_interval", + "log_interval", + "weight_decay", + "grad_clip", + "dtype", + "cpu_threads", + "cpu_budget_percent", + "num_workers", + "max_gen_len", + "num_generations", + "temperature", + "beta", + "alpha", + "lambda_or", + "reward_spec", + "teacher_path", + "data_path", + "data_path_source", + "lambda_router_anchor", + "stage_overrides_applied", + ] + out = { + "mode": mode, + "requested_backend": requested_backend, + "resolved_backend": resolved_backend, + "device": device, + "effective_cpu_threads": int(cpu_threads), + } + if workers is not None: + out["effective_num_workers"] = int(workers) + if total_train_steps is not None: + out["total_train_steps"] = int(total_train_steps) + if optimizer_update_steps is not None: + out["optimizer_update_steps"] = int(optimizer_update_steps) + if total_train_steps is not None or optimizer_update_steps is not None: + out["progress_unit"] = progress_unit + for key in keys: + if key in cfg: + out[key] = cfg[key] + return out + + +def _format_effective_training_config(summary: dict) -> str: + parts = [] + for key in [ + "mode", + "requested_backend", + "resolved_backend", + "device", + "dtype", + "learning_rate", + "batch_size", + "accumulation_steps", + "epochs", + "max_steps", + "max_seq_len", + "weight_decay", + "grad_clip", + "save_interval", + "log_interval", + "effective_cpu_threads", + "cpu_budget_percent", + "effective_num_workers", + "total_train_steps", + "optimizer_update_steps", + "progress_unit", + ]: + if key in summary: + parts.append(f"{key}={summary[key]}") + return "Effective config: " + ", ".join(parts) + + +def _coerce_max_steps(value) -> int | None: + try: + steps = int(value or 0) + except Exception: + return None + return steps if steps > 0 else None + + +def _stage_collate(mode: str, modalities, multimodal_collate, preference_collate): + """DataLoader collate for a stage: media batches need the multimodal rules + (CE stages) or the pair rules (DPO/ORPO); text-only keeps the default.""" + if not modalities: + return None + if mode in {"pretrain", "sft", "distill"}: + return multimodal_collate + if mode in {"dpo", "orpo"}: + return preference_collate + return None + + +def _planned_train_steps(data_iter, epochs: int, max_steps=None) -> int: + """Return the real UI progress denominator in micro/batch steps. + + Dataset loaders must always see the full corpus. `max_steps` is only a + training-loop cap, so it is applied after deriving len(data_iter) * epochs. + """ + cap = _coerce_max_steps(max_steps) + planned = 0 + try: + planned = int(len(data_iter)) * max(1, int(epochs or 1)) + except Exception: + planned = 0 + if cap is not None: + return min(planned, cap) if planned > 0 else cap + return max(0, planned) + + +def _planned_epoch_iters(data_iter, max_steps=None) -> int: + cap = _coerce_max_steps(max_steps) + try: + n = int(len(data_iter)) + except Exception: + n = 0 + if cap is not None and n > 0: + return max(1, min(cap, n)) + return max(1, n) + + +def _planned_optimizer_updates(train_steps: int, accumulation_steps: int) -> int: + train_steps = max(0, int(train_steps or 0)) + accum = max(1, int(accumulation_steps or 1)) + return (train_steps + accum - 1) // accum if train_steps else 0 + + +_STAGE_OVERRIDE_KEYS = frozenset(( + "learning_rate", "batch_size", "accumulation_steps", "epochs", "max_steps", "max_seq_len", + "weight_decay", "grad_clip", "save_interval", "lambda_router_anchor", "beta", "alpha", + "lambda_or", "temperature", "num_generations", "max_gen_len", +)) + + +def _prepare_training_run_config( + cfg: dict | None, + train_mode: str, + selected_backend: str | None, + data_path: str | None, + dataset_upload, + init_weight: str | None, + max_steps, + val_ratio, + teacher_path: str | None, + sample_prompt: str | None, +) -> tuple[dict, dict]: + merged = dict(BASE_MOE_DEFAULTS) + merged.update(dict(cfg) if cfg else {}) + # Per-stage hyperparameters (Config tab → auto plan) override the shared + # values for this stage only; architecture keys are never stage-specific. + stage_values = (merged.get("stage_overrides") or {}).get(train_mode) or {} + merged.update({k: v for k, v in stage_values.items() if k in _STAGE_OVERRIDE_KEYS}) + merged["stage_overrides_applied"] = sorted(k for k in stage_values if k in _STAGE_OVERRIDE_KEYS) + cfg = merged + requested_backend = (selected_backend or "auto").strip().lower() or "auto" + resolved_backend, resolved_device = resolve_training_device(requested_backend) + cfg["train_backend"] = requested_backend + cfg["device"] = resolved_device + resolved_data_path, data_path_source = _resolve_training_data_path( + data_path or cfg.get("data_path", ""), + dataset_upload, + ) + cfg["data_path"] = resolved_data_path + cfg["data_path_source"] = data_path_source + cfg["init_weight"] = _normalize_stage_init_value(init_weight) + if "max_steps" not in cfg: + cfg["max_steps"] = 0 + cfg["val_ratio"] = float(val_ratio or 0.0) + cfg["teacher_path"] = teacher_path or "" + cfg["sample_prompt"] = sample_prompt or "" + cfg["cpu_budget_percent"] = _cpu_budget_for_backend(cfg, resolved_backend) + initial_effective = _effective_training_config( + cfg, + mode=train_mode, + requested_backend=requested_backend, + resolved_backend=resolved_backend, + device=resolved_device, + cpu_threads=0, + workers=None, + ) + return cfg, initial_effective + + +def _gradio_temp_roots() -> list[str]: + roots = [] + for env_key in ("GRADIO_TEMP_DIR", "GRADIO_TEMP"): + value = os.environ.get(env_key) + if value: + roots.append(value) + roots.append(os.path.join(tempfile.gettempdir(), "gradio")) + out = [] + seen = set() + for root in roots: + try: + real = os.path.realpath(os.path.abspath(os.path.expanduser(str(root)))) + except Exception: + continue + if real not in seen: + out.append(real) + seen.add(real) + return out + + +def _path_in_gradio_temp(path: str | None) -> tuple[bool, str, str]: + if not path: + return False, "", "" + try: + real_path = os.path.realpath(os.path.abspath(os.path.expanduser(str(path)))) + except Exception: + return False, "", "" + for root in _gradio_temp_roots(): + try: + if os.path.commonpath([real_path, root]) == root and real_path != root: + return True, real_path, root + except ValueError: + continue + return False, real_path, "" + + +def _project_root() -> str: + return os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) + + +def _training_upload_cache_root() -> str: + root = os.environ.get("CHRONOS_TRAIN_UPLOAD_CACHE_DIR") + if root: + return os.path.realpath(os.path.abspath(os.path.expanduser(root))) + return os.path.join(_project_root(), ".chronos_uploads", "datasets") + + +def _path_in_training_upload_cache(path: str | None) -> tuple[bool, str, str]: + if not path: + return False, "", "" + try: + real_path = os.path.realpath(os.path.abspath(os.path.expanduser(str(path)))) + root = os.path.realpath(os.path.abspath(_training_upload_cache_root())) + return os.path.commonpath([real_path, root]) == root and real_path != root, real_path, root + except Exception: + return False, "", "" + + +def _stage_gradio_upload_for_training(path: str | None) -> str: + """Move Gradio's private temp upload into a stable project cache. + + Training directly from `/private/.../T/gradio` is fragile on macOS: Gradio + owns that directory and may rotate or clean files independently of the + training thread. Manual paths are returned unchanged. + """ + path = _extract_gradio_file_path(path) + inside, real_path, _root = _path_in_gradio_temp(path) + if not inside or not os.path.exists(real_path): + return path or "" + cache_root = _training_upload_cache_root() + os.makedirs(cache_root, exist_ok=True) + base = os.path.basename(real_path) or "dataset.jsonl" + stem, ext = os.path.splitext(base) + if not ext: + ext = ".jsonl" + stamp = time.strftime("%Y%m%d_%H%M%S") + size = os.path.getsize(real_path) + target = os.path.join(cache_root, f"{stamp}_{os.getpid()}_{size}_{stem[:48]}{ext}") + shutil.copy2(real_path, target) + _cleanup_gradio_temp_dataset(real_path) + return target + + +def _resolve_training_data_path(current_path: str | None, upload_value=None) -> tuple[str, str]: + """Resolve the dataset path at Start time. + + The upload `change` callback updates the textbox in normal operation, but + Gradio's private upload/event state can lag behind Start. Resolve again + when Start is clicked so a newly uploaded file wins over the default tiny + fixture immediately. If the upload temp file was already moved into the + project cache, keep the textbox path. + """ + current = (current_path or "").strip() + upload_path = _extract_gradio_file_path(upload_value) + if upload_path: + staged = _stage_gradio_upload_for_training(upload_path) + if staged and os.path.exists(staged): + if staged != current: + return staged, "upload" + return staged, "textbox" + if current: + return current, "textbox" + return "", "empty" + + +def _close_dataset_handles(*objects) -> None: + """Close lazy JSONL file handles before deleting Gradio upload temp files.""" + seen: set[int] = set() + + def visit(obj): + if obj is None: + return + oid = id(obj) + if oid in seen: + return + seen.add(oid) + fh = getattr(obj, "_fh", None) + if fh is not None: + try: + fh.close() + except Exception: + pass + try: + obj._fh = None + except Exception: + pass + for attr in ("dataset", "datasets"): + child = getattr(obj, attr, None) + if child is not None: + visit(child) + if isinstance(obj, (list, tuple, set)): + for item in obj: + visit(item) + elif isinstance(obj, dict): + for item in obj.values(): + visit(item) + + for item in objects: + visit(item) + + +def _cleanup_gradio_temp_dataset(path: str | None) -> dict: + """Delete a dataset upload copied into Gradio's temp area. + + The guard deliberately refuses to touch any path outside Gradio's temp + root, so manual local dataset paths remain untouched. + """ + inside, real_path, root = _path_in_gradio_temp(path) + result = { + "path": real_path, + "root": root, + "deleted": False, + "removed_dirs": [], + "skipped": not inside, + "reason": "" if inside else "not_gradio_temp", + } + if not inside: + return result + if not os.path.lexists(real_path): + result["skipped"] = True + result["reason"] = "missing" + return result + try: + if os.path.isdir(real_path) and not os.path.islink(real_path): + shutil.rmtree(real_path) + else: + os.unlink(real_path) + result["deleted"] = True + result["skipped"] = False + except Exception as exc: + result["skipped"] = True + result["reason"] = f"delete_failed: {exc}" + return result + + parent = os.path.dirname(real_path) + while parent and parent != root: + try: + os.rmdir(parent) + result["removed_dirs"].append(parent) + except OSError: + break + parent = os.path.dirname(parent) + return result + + +def _cleanup_training_dataset_artifact(path: str | None) -> dict: + """Clean staged upload artifacts while preserving user-owned paths.""" + inside, real_path, root = _path_in_training_upload_cache(path) + if not inside: + return _cleanup_gradio_temp_dataset(path) + result = { + "path": real_path, + "root": root, + "deleted": False, + "removed_dirs": [], + "skipped": False, + "reason": "", + } + if not os.path.lexists(real_path): + result["skipped"] = True + result["reason"] = "missing" + return result + try: + if os.path.isdir(real_path) and not os.path.islink(real_path): + shutil.rmtree(real_path) + else: + os.unlink(real_path) + result["deleted"] = True + except Exception as exc: + result["skipped"] = True + result["reason"] = f"delete_failed: {exc}" + return result + parent = os.path.dirname(real_path) + while parent and parent != root: + try: + os.rmdir(parent) + result["removed_dirs"].append(parent) + except OSError: + break + parent = os.path.dirname(parent) + return result + + +@contextmanager +def _trainer_logger_sink(put_line): + """Forward every trainer ``Logger`` line to ``put_line`` while active. + + The old version swapped a module attribute, which trainers that had + already bound ``Logger`` by name never saw; the sink registry reaches all. + """ + from chronos.model.kernel import add_log_sink + with add_log_sink(put_line): + yield + + +def _sniff_checkpoint(path: str) -> dict: + try: + cfg, _sources = config_dict_for_checkpoint(path, require_unsniffable=False) + return cfg or sniff_checkpoint_config(path) + except Exception: + return {} + + +def _verify_checkpoint_warn(checkpoint_path: str, model_cfg, put_line) -> None: + try: + from chronos.verify import verify_checkpoint + + report = verify_checkpoint( + checkpoint_path, + model_cfg, + device="cpu", + include_mlx=True, + write_json=True, + ) + status = "ok" if report.get("ok") else "warning" + put_line(f"[verify] {status}; report={report.get('verify_json', '')}") + for warning in report.get("warnings", []): + put_line(f"[verify warning] {warning}") + except Exception as exc: + put_line(f"[verify warning] checkpoint verification failed: {exc}") + + +def _sync_metal_backend(device: str | None) -> None: + """Flush pending Metal work before a WebUI training thread exits.""" + if str(device or "").lower() != "mps": + return + try: + import torch + + if hasattr(torch, "mps"): + synchronize = getattr(torch.mps, "synchronize", None) + if synchronize is not None: + synchronize() + empty_cache = getattr(torch.mps, "empty_cache", None) + if empty_cache is not None: + empty_cache() + except Exception: + pass + + +# ── Background trainer thread ───────────────────────────────────── + +class TrainSession: + def __init__(self): + self._stop = threading.Event() + self._thread = None + self._log_q: queue.Queue = queue.Queue(maxsize=5000) + self.status = "idle" + self.step = 0 + self.loss = None + # Separate metric history for charts + self._metrics: list[dict] = [] # [{step, total, ce, aux, temporal, tps}] + self._metric_lock = threading.Lock() + # Progress + ETA — set when training kicks off + self.total_steps: int = 0 + self.t_start: float = 0.0 + # M8a: live generation sample (updated each save_interval). + self.last_sample: str = "" + self.last_sample_step: int = 0 + self.effective_config: dict = {} + self.tokenizer_path: str = "" + self.vocab_size: int = 0 + + def _normalise_effective_cpu_config(self, cfg: dict, resolved_backend: str) -> None: + cfg["cpu_budget_percent"] = _cpu_budget_for_backend(cfg, resolved_backend) + + def is_running(self): + return self._thread is not None and self._thread.is_alive() + + def start(self, cfg: dict, mode: str): + if self.is_running(): + return + self._stop.clear() + self.status = "running" + self.step = 0 + self.loss = None + self._metrics.clear() + self.total_steps = 0 + self.t_start = time.monotonic() + self.tokenizer_path = str(cfg.get("tokenizer_path") or "").strip() + self.vocab_size = int(cfg.get("vocab_size") or 0) + self._thread = threading.Thread( + target=self._run, args=(cfg, mode), daemon=True + ) + self._thread.start() + + def stop(self): + self._stop.set() + self.status = "stopped" + + def _put(self, msg: str): + try: + self._log_q.put_nowait(msg) + except queue.Full: + pass + + def _put_metric(self, m: dict): + with self._metric_lock: + self._metrics.append(m) + + def drain_log(self): + """Return all pending log lines as a single string (no newline prefix).""" + lines = [] + while True: + try: + lines.append(self._log_q.get_nowait()) + except queue.Empty: + break + return "\n".join(lines) + + def get_metrics(self): + with self._metric_lock: + return list(self._metrics) + + def get_effective_config(self): + return dict(self.effective_config) + + def _stage_checkpoint_path(self, save_dir: str, mode: str, hidden_size: int) -> str: + prefix = STAGE_CHECKPOINT_PREFIX.get(mode, "chronos") + return os.path.join(save_dir, f"{prefix}_{hidden_size}_moe.pth") + + def _default_init_path(self, save_dir: str, mode: str, hidden_size: int) -> str: + upstream = STAGE_DEFAULT_INIT.get(mode) + if not upstream: + return "" + return os.path.join(save_dir, f"{upstream}_{hidden_size}_moe.pth") + + def _resolve_default_init_path(self, save_dir: str, mode: str, hidden_size: int) -> str: + exact = self._default_init_path(save_dir, mode, hidden_size) + if os.path.exists(exact): + return exact + upstream = STAGE_DEFAULT_INIT.get(mode) + if not upstream: + return exact + candidates = [ + p for p in glob.glob(os.path.join(save_dir, f"{upstream}_*_moe.pth")) + if os.path.isfile(p) + ] + if not candidates: + return exact + return max(candidates, key=os.path.getmtime) + + def _topology_mismatches(self, sniffed: dict, model_cfg_kwargs: dict) -> list[str]: + mismatches = [] + for k in CHECKPOINT_TOPOLOGY_KEYS: + if k in sniffed and k in model_cfg_kwargs and sniffed[k] != model_cfg_kwargs[k]: + mismatches.append(f"{k}: ckpt={sniffed[k]} != ui={model_cfg_kwargs[k]}") + return mismatches + + def _adopt_checkpoint_topology(self, model_cfg_kwargs: dict, sniffed: dict) -> dict: + adopted = {} + for key in CHECKPOINT_TOPOLOGY_KEYS: + if key not in sniffed: + continue + current = model_cfg_kwargs.get(key) + value = sniffed[key] + if current is None or current != value: + adopted[key] = value + model_cfg_kwargs[key] = value + return adopted + + def _build_stage_args(self, cfg: dict, mode: str, save_dir: str, hidden_size: int): + reward_spec = (cfg.get("reward_spec") or "toy").strip() or "toy" + teacher_path = (cfg.get("teacher_path") or "").strip() + return SimpleNamespace( + device=cfg.get("device", "cpu"), + dtype=_normalize_dtype_for_trainer(cfg.get("dtype")), + learning_rate=float(cfg.get("learning_rate", 5e-4)), + accumulation_steps=max(1, int(cfg.get("accumulation_steps", 1))), + grad_clip=float(cfg.get("grad_clip", 1.0)), + cpu_threads=cfg.get("cpu_threads", "auto"), + cpu_budget_percent=cfg.get("cpu_budget_percent", 100), + num_workers=cfg.get("num_workers", "auto"), + log_interval=max(1, int(cfg.get("log_interval", 10))), + save_interval=max(1, int(cfg.get("save_interval", 500))), + save_dir=save_dir, + epochs=max(1, int(cfg.get("epochs", 1))), + batch_size=max(1, int(cfg.get("batch_size", 1))), + max_seq_len=max(8, int(cfg.get("max_seq_len", 512))), + max_gen_len=max(1, int(cfg.get("max_gen_len", 24))), + num_generations=max(1, int(cfg.get("num_generations", 4))), + temperature=float(cfg.get("temperature", 1.0)), + beta=float(cfg.get("beta", 0.1)), + alpha=float(cfg.get("alpha", 0.7)), + lambda_or=float(cfg.get("lambda_or", 0.1)), + lambda_router_anchor=float(cfg.get("lambda_router_anchor", 0.0)), + reward=reward_spec, + teacher_path=teacher_path or os.path.join(save_dir, f"sft_{hidden_size}_moe.pth"), + hidden_size=hidden_size, + num_hidden_layers=int(cfg.get("num_hidden_layers", 8)), + num_experts=int(cfg.get("num_experts", 4)), + steps=int(cfg.get("max_steps", 0)) or None, + weight_decay=float(cfg.get("weight_decay", 0.01)), + image_size=int(cfg.get("image_size", 224)), + audio_sample_rate=int(cfg.get("audio_sample_rate", 16000)), + max_audio_seconds=float(cfg.get("max_audio_seconds", 30.0)), + media_error_policy=cfg.get("media_error_policy", "warn"), + ) + + def _record_stage_metric(self, mode: str, step: int, result, tps: float = 0.0): + meta = STAGE_CHART_META.get(mode, STAGE_CHART_META["pretrain"]) + if isinstance(result, tuple): + if mode == "sft": + total, ce_loss, aux_loss, lookahead, anchor = result + metric = { + "total": total, + "primary": ce_loss, + "secondary": lookahead, + "tertiary": anchor, + "ce": ce_loss, + "aux": lookahead, + "temporal": anchor, + } + elif mode == "dpo": + total, pref_loss, _aux_loss, lookahead, anchor = result + metric = { + "total": total, + "primary": pref_loss, + "secondary": anchor, + "tertiary": lookahead, + "ce": pref_loss, + "aux": anchor, + "temporal": lookahead, + } + elif mode == "orpo": + total, chosen_nll, or_term, _lookahead, anchor = result + metric = { + "total": total, + "primary": chosen_nll, + "secondary": or_term, + "tertiary": anchor, + "ce": chosen_nll, + "aux": or_term, + "temporal": anchor, + } + elif mode == "distill": + total, kd_loss, ce_loss, _lookahead, anchor = result + metric = { + "total": total, + "primary": kd_loss, + "secondary": ce_loss, + "tertiary": anchor, + "ce": kd_loss, + "aux": ce_loss, + "temporal": anchor, + } + else: + return + elif isinstance(result, dict) and mode == "grpo": + metric = { + "total": result.get("loss", 0.0), + "primary": result.get("pg_loss", 0.0), + "secondary": result.get("kl", 0.0), + "tertiary": result.get("mean_reward", 0.0), + "ce": result.get("pg_loss", 0.0), + "aux": result.get("kl", 0.0), + "temporal": result.get("mean_reward", 0.0), + } + else: + return + + if mode == "pretrain": + metric.setdefault("primary", metric.get("ce", 0.0)) + metric.setdefault("secondary", metric.get("aux", 0.0)) + metric.setdefault("tertiary", metric.get("temporal", 0.0)) + + metric.update({"step": int(step), "tps": float(tps)}) + self.step = int(step) + self.loss = float(metric["total"]) + self._put_metric(metric) + self._put( + f"[{mode.upper()} summary] step={step} total={metric['total']:.4f} " + f"{meta['primary']}={metric.get('primary', 0.0):.4f} " + f"{meta['secondary']}={metric.get('secondary', 0.0):.4f} " + f"{meta['tertiary']}={metric.get('tertiary', 0.0):.4f} " + f"tps={tps:.2f}" + ) + + def _generate_live_sample(self, model, device: str, cfg: dict, mode: str): + import torch + + sp = (cfg.get("sample_prompt") or "").strip() + if not sp: + sp = _stage_sample_prompt(mode) + tokenizer = self._load_tokenizer() + rendered = tokenizer.apply_chat_template( + [{"role": "user", "content": sp}], + tokenize=False, + add_generation_prompt=True, + ) + enc = tokenizer(rendered, return_tensors="pt", add_special_tokens=False) + ids = enc.input_ids.to(device) + was_training = model.training + model.eval() + with torch.no_grad(): + gen = ids.clone() + for _ in range(80): + with autocast_context(device, cfg.get("dtype", "auto"), model=model): + o = model(gen, use_cache=False) + nxt = o.logits[:, -1, :].argmax(dim=-1, keepdim=True) + gen = torch.cat([gen, nxt], dim=-1) + if int(nxt.item()) == (tokenizer.eos_token_id or -1): + break + txt = decode_visible(tokenizer, gen[0, ids.shape[1]:].tolist()) + if was_training: + model.train() + self.last_sample = txt + self.last_sample_step = self.step or self.last_sample_step + self._put(f"[sample @ step {self.last_sample_step or 0}] {txt[:200]}") + + def _run(self, cfg: dict, mode: str): + t_start = time.monotonic() + data_path_for_cleanup = (cfg.get("data_path") or "").strip() + cleanup_after_run = bool(cfg.get("cleanup_gradio_temp_dataset", True)) + train_ds = val_ds = full_ds = loader = val_loader = None + try: + import torch + from torch.utils.data import DataLoader + + from chronos.model.config import ChronosConfig + from chronos.model.model_chronos import ChronosForCausalLM + from chronos.model.moe_chronos import ChronosMOEFeedForward + + self._put(f"[{mode.upper()}] Building model...") + from chronos.config_schema import model_config_kwargs + model_cfg_kwargs = model_config_kwargs(cfg) + model_cfg_kwargs.setdefault("hidden_size", 512) + model_cfg_kwargs.setdefault("num_hidden_layers", 8) + detected_modalities_pre = [] + if data_path_for_cleanup and os.path.exists(data_path_for_cleanup): + try: + from chronos.data.flexible_dataset import dataset_modality_summary + detected_modalities_pre = dataset_modality_summary(data_path_for_cleanup).get( + "detected_modalities", [] + ) + except Exception as exc: + self._put(f"[data] modality detection warning: {exc}") + if cfg.get("auto_detect_modalities", True): + model_cfg_kwargs["modalities"] = detected_modalities_pre + save_dir = cfg.get("save_dir", "./out") + init_weight = (cfg.get("init_weight") or "").strip() + load_path = "" + init_sniffed = {} + if mode != "pretrain": + load_path = init_weight or self._resolve_default_init_path( + save_dir, mode, int(model_cfg_kwargs["hidden_size"]) + ) + if os.path.exists(load_path): + init_sniffed = _sniff_checkpoint(load_path) + adopted = self._adopt_checkpoint_topology(model_cfg_kwargs, init_sniffed) + if adopted: + summary = ", ".join(f"{k}={v}" for k, v in adopted.items()) + self._put( + f"[{mode.upper()}] Adopted topology from init checkpoint " + f"{load_path}: {summary}" + ) + + model_cfg = ChronosConfig(**model_cfg_kwargs) + model = ChronosForCausalLM(model_cfg) + params_m = sum(p.numel() for p in model.parameters()) / 1e6 + self._put(f"Model: {params_m:.1f}M params " + f"(H={model_cfg.hidden_size}, L={model_cfg.num_hidden_layers}, " + f"E={model_cfg.num_experts}, ffn={model_cfg.intermediate_size}, " + f"vocab={model_cfg.vocab_size})") + + ckp_path = self._stage_checkpoint_path(save_dir, mode, model_cfg.hidden_size) + mlx_checkpoint_path = None + + # Init-weight resolution: + # - pretrain: optionally resume from its own checkpoint if present + # - other stages: require an upstream weight (explicit init_weight + # or the stage's default predecessor checkpoint). + if mode == "pretrain": + resume_path = init_weight or ckp_path + if os.path.exists(resume_path): + sniffed = _sniff_checkpoint(resume_path) + mismatches = self._topology_mismatches(sniffed, model_cfg_kwargs) + if mismatches: + self._put( + "Resume checkpoint exists but does not match current UI config; " + "starting fresh instead.\n " + "\n ".join(mismatches) + ) + else: + weights = load_checkpoint_state_dict(resume_path, map_location="cpu") + load_state_dict_controlled(model, weights) + self._put(f"Resumed from {resume_path}") + mlx_checkpoint_path = resume_path + else: + self._put("Pretraining from random init") + else: + if not os.path.exists(load_path): + raise FileNotFoundError( + f"[{mode.upper()}] requires an upstream checkpoint to initialize from. " + f"Tried: {load_path}\n" + f"Set 'init_weight' in the Train tab to point at a valid .pth, " + f"or run the prior stage first." + ) + + sniffed = init_sniffed or _sniff_checkpoint(load_path) + mismatch_hints = self._topology_mismatches(sniffed, model_cfg_kwargs) + if mismatch_hints: + raise RuntimeError( + f"[{mode.upper()}] init checkpoint topology does not match current UI config:\n " + + "\n ".join(mismatch_hints) + + "\nLoad the matching preset/config first, or switch init_weight to the correct checkpoint." + ) + + weights = load_checkpoint_state_dict(load_path, map_location="cpu") + load_state_dict_controlled(model, weights) + self._put(f"[{mode.upper()}] Initialized from {load_path}") + mlx_checkpoint_path = load_path + + requested_backend = (cfg.get("train_backend") or "auto").strip().lower() or "auto" + resolved_backend, device = resolve_training_device(requested_backend) + if resolved_backend != "mlx" and model_cfg.modalities and mode in {"dpo", "orpo", "grpo"}: + # MLX conditions DPO/ORPO pairs and GRPO rollouts on the prompt's + # image/audio; the PyTorch preference trainers are text-only and + # would silently drop the media. + if requested_backend != "auto" or "mlx" not in set(training_available()): + raise ValueError(f"多模态 {mode.upper()} 训练需要 MLX 后端(PyTorch 的 {mode.upper()} 只支持文本)。" + "请选择 auto 或 MLX。") + resolved_backend, device = resolve_training_device("mlx") + self._put(f"[data] Modalities {model_cfg.modalities}: using mlx for {mode}.") + cfg["train_backend"] = requested_backend + cfg["device"] = device + cfg["dtype"] = _normalize_dtype_for_trainer(cfg.get("dtype")) + self._normalise_effective_cpu_config(cfg, resolved_backend) + cpu_threads = configure_cpu_threads( + cfg.get("cpu_threads", "auto"), + budget_percent=cfg.get("cpu_budget_percent", 100), + ) + rt = runtime_summary(device, cfg.get("dtype", "auto")) + self._put(f"Training backend: {resolved_backend} (requested: {requested_backend})") + self._put(f"Device: {device}") + self._put( + f"Runtime: dtype={rt.dtype} cpu_threads={rt.cpu_threads} " + f"autocast={rt.autocast} scaler={rt.scaler}" + ) + thread_diag = cpu_thread_snapshot() + self._put( + "CPU thread env: " + f"torch={thread_diag.get('torch_num_threads')} " + f"interop={thread_diag.get('torch_num_interop_threads')} " + f"physical={thread_diag.get('physical_cores')} " + f"OMP={thread_diag.get('OMP_NUM_THREADS')} " + f"MKL={thread_diag.get('MKL_NUM_THREADS')} " + f"VECLIB={thread_diag.get('VECLIB_MAXIMUM_THREADS')} " + f"NUMEXPR={thread_diag.get('NUMEXPR_NUM_THREADS')}" + ) + + data_path = data_path_for_cleanup + self._put(f"Dataset: {data_path or ''} (source={cfg.get('data_path_source', 'unknown')})") + max_seq_len = cfg.get("max_seq_len", 512) + batch_size = cfg.get("batch_size", 4) + accum = max(1, int(cfg.get("accumulation_steps", 8))) + epochs = cfg.get("epochs", 1) + save_interval = cfg.get("save_interval", 500) + log_interval = max(1, cfg.get("log_interval", 10)) + val_ratio = float(cfg.get("val_ratio", 0.05)) + max_steps = _coerce_max_steps(cfg.get("max_steps", 0)) # 0 => no cap + base_lr = float(cfg.get("learning_rate", 5e-4)) + weight_decay = float(cfg.get("weight_decay", 0.01)) + optimizer = None + + if not data_path or not os.path.exists(data_path): + self._put("No dataset found — running synthetic smoke test (50 steps)") + loader = self._synthetic_loader(model_cfg.vocab_size, max_seq_len, batch_size, n=50) + val_loader = None + else: + tokenizer = self._load_tokenizer() + from chronos.data.flexible_dataset import ( + FlexibleDataset, StreamingSFTDataset, MultimodalStreamingDataset, + MultimodalStreamingSFTDataset, StreamingDPODataset, MultimodalStreamingDPODataset, + dataset_modality_summary, multimodal_collate, preference_collate, + ) + modality_summary = dataset_modality_summary(data_path) + detected_modalities = modality_summary.get("detected_modalities", []) + if mode == "pretrain": + if cfg.get("auto_detect_modalities", True) and detected_modalities: + model_cfg_kwargs["modalities"] = detected_modalities + full_ds = ( + MultimodalStreamingDataset(data_path, tokenizer, max_length=max_seq_len, + image_size=int(cfg.get("image_size", 224)), + audio_sample_rate=int(cfg.get("audio_sample_rate", 16000)), + max_audio_seconds=float(cfg.get("max_audio_seconds", 30.0)), + media_error_policy=cfg.get("media_error_policy", "warn")) + if detected_modalities else FlexibleDataset(data_path, tokenizer, max_length=max_seq_len) + ) + elif mode in {"sft", "distill"}: + if cfg.get("auto_detect_modalities", True) and detected_modalities: + model_cfg_kwargs["modalities"] = detected_modalities + full_ds = ( + MultimodalStreamingSFTDataset(data_path, tokenizer, max_length=max_seq_len, + image_size=int(cfg.get("image_size", 224)), + audio_sample_rate=int(cfg.get("audio_sample_rate", 16000)), + max_audio_seconds=float(cfg.get("max_audio_seconds", 30.0)), + media_error_policy=cfg.get("media_error_policy", "warn")) + if detected_modalities else StreamingSFTDataset(data_path, tokenizer, max_length=max_seq_len) + ) + elif mode in {"dpo", "orpo"}: + if cfg.get("auto_detect_modalities", True) and detected_modalities: + model_cfg_kwargs["modalities"] = detected_modalities + full_ds = ( + MultimodalStreamingDPODataset(data_path, tokenizer, max_length=max_seq_len, + image_size=int(cfg.get("image_size", 224)), + audio_sample_rate=int(cfg.get("audio_sample_rate", 16000)), + max_audio_seconds=float(cfg.get("max_audio_seconds", 30.0)), + media_error_policy=cfg.get("media_error_policy", "warn")) + if detected_modalities else StreamingDPODataset(data_path, tokenizer, max_length=max_seq_len) + ) + else: + full_ds = None + # Deterministic val split: every 1/val_ratio-th record goes to val + # (idx-modulo split → reproducible without rescanning the file). + if full_ds is not None and val_ratio > 0 and len(full_ds) >= 20: + stride = max(2, int(round(1.0 / val_ratio))) + val_idx = [i for i in range(len(full_ds)) if i % stride == 0] + train_idx = [i for i in range(len(full_ds)) if i % stride != 0] + from torch.utils.data import Subset + train_ds = Subset(full_ds, train_idx) + val_ds = Subset(full_ds, val_idx) + self._put(f"Split: train={len(train_ds)} val={len(val_ds)}") + elif full_ds is not None: + train_ds, val_ds = full_ds, None + else: + train_ds, val_ds = None, None + loader = ( + DataLoader( + train_ds, + batch_size=batch_size, + collate_fn=_stage_collate(mode, detected_modalities, multimodal_collate, preference_collate), + **dataloader_kwargs(device=device, num_workers=cfg.get("num_workers", "auto"), shuffle=True), + ) + if train_ds is not None else None + ) + val_loader = ( + DataLoader( + val_ds, + batch_size=batch_size, + collate_fn=_stage_collate(mode, detected_modalities, multimodal_collate, preference_collate), + **dataloader_kwargs(device=device, num_workers=cfg.get("num_workers", "auto"), shuffle=False), + ) + if val_ds is not None else None + ) + if loader is not None: + workers = getattr(loader, "num_workers", 0) + self._put( + f"CPU threads configured: {cpu_threads}; DataLoader workers: {workers}" + ) + else: + workers = None + if mode in {"grpo"}: + tokenizer = self._load_tokenizer() + from chronos.trainer.grpo_trainer import load_grpo_prompt_records, load_grpo_prompts + # MLX resolves each record's image/audio per step; Torch GRPO is text-only. + prompts = (load_grpo_prompt_records(data_path, max_prompts=None) if resolved_backend == "mlx" + else load_grpo_prompts(data_path, max_prompts=None)) + if not prompts: + raise ValueError(f"[{mode.upper()}] no prompts found in {data_path}") + else: + prompts = None + + stage_args = self._build_stage_args(cfg, mode, save_dir, model_cfg.hidden_size) + stage_args.device = device + train_iter_for_steps = prompts if mode == "grpo" else loader + planned_total_steps = _planned_train_steps( + train_iter_for_steps, + stage_args.epochs, + stage_args.steps, + ) + planned_optimizer_updates = _planned_optimizer_updates( + planned_total_steps, + stage_args.accumulation_steps, + ) + self.total_steps = planned_total_steps + self.effective_config = _effective_training_config( + cfg, + mode=mode, + requested_backend=requested_backend, + resolved_backend=resolved_backend, + device=device, + cpu_threads=cpu_threads, + workers=workers, + total_train_steps=planned_total_steps, + optimizer_update_steps=planned_optimizer_updates, + ) + self._put(_format_effective_training_config(self.effective_config)) + + if resolved_backend == "mlx": + from chronos.mlx.training import run_mlx_stage + + self._put("[MLX] Running native MLX trainer; skipping PyTorch model.to()/optimizer path.") + if mlx_checkpoint_path: + self._put(f"[MLX {mode.upper()}] Loading checkpoint → {mlx_checkpoint_path}") + else: + self._put(f"[MLX {mode.upper()}] Starting from random init.") + + def _mlx_progress(event: dict): + kind = str(event.get("event", "step")) + if kind == "validation": + value = float(event["ce"]) + self._put(f"[MLX {mode.upper()} validation] step={event['step']} CE={value:.4f} tokens={event['tokens']}") + self._put_metric({"step": event["step"], "total": value, "primary": value, + "ce": value, "aux": 0., "temporal": 0., "tps": 0., "val": True, "val_loss": value}) + return + if kind == "start": + total = int(event.get("steps", 0) or 0) + if total > 0: + self.total_steps = total + self._put( + f"[MLX {mode.upper()}] started dtype={event.get('dtype', '')} " + f"total_steps={self.total_steps} accum={event.get('accumulation_steps', '')} " + f"save_interval={event.get('save_interval', '')}" + ) + self._put(f"[MLX optimizer] {event.get('optimizer', '')}") + return + if kind == "step": + step = int(event.get("step", event.get("steps", 0)) or 0) + total = int(event.get("steps", self.total_steps) or self.total_steps) + if total > 0: + self.total_steps = total + loss = float(event.get("loss", 0.0) or 0.0) + tps = float(event.get("tps", 0.0) or 0.0) + self.step = step + self.loss = loss + metric = { + "step": step, + "total": loss, + "primary": float(event.get("primary", event.get("ce", loss))), + "secondary": float(event.get("secondary", event.get("aux", 0.0))), + "tertiary": float(event.get("tertiary", event.get("temporal", 0.0))), + "ce": float(event.get("ce", 0.0)), + "aux": float(event.get("aux", 0.0) or 0.0), + "temporal": float(event.get("temporal", 0.0) or 0.0), + "tps": tps, + "tokens_per_s": float(event.get("tokens_per_s", 0)), + "grad_norm": float(event.get("grad_norm", 0)), + "loss_components": event.get("loss_components", {}), + "recurrent_loss": float(event.get("recurrent_loss", 0)), + "lookahead_loss": float(event.get("lookahead_loss", 0)), + } + self._put_metric(metric) + self._put( + f"[MLX {mode.upper()}] step={step}/{self.total_steps} loss={loss:.4f} " + f"primary={metric['primary']:.4f} aux={metric['aux']:.4f} " + f"recurrent={metric['recurrent_loss']:.4f} grad_norm={metric['grad_norm']:.3f} " + f"tokens/s={metric['tokens_per_s']:.0f} " + f"steps/s={tps:.2f} lr={float(event.get('lr', 0.0) or 0.0):.2e} " + f"elapsed={float(event.get('elapsed_s', 0.0) or 0.0):.1f}s" + ) + return + if kind == "rollback": + step = int(event.get("step", 0) or 0) + total = int(event.get("steps", self.total_steps) or self.total_steps) + if total > 0: + self.total_steps = total + self._put( + f"[MLX {mode.upper()} rollback] step={step}/{self.total_steps} " + f"reason={event.get('reason', '')} rollbacks={int(event.get('rollbacks', 0) or 0)} " + f"next_lr={float(event.get('lr', 0.0) or 0.0):.2e}" + ) + return + if kind == "save": + self._put( + f"[MLX {mode.upper()}] saved checkpoint ({event.get('reason', '')}) → " + f"{event.get('checkpoint_path', '')}" + ) + return + if kind == "stopped": + if int(event.get("steps", 0) or 0) > 0: + self.total_steps = int(event.get("steps", 0) or 0) + self._put( + f"[MLX {mode.upper()}] stopped at step={int(event.get('step', 0) or 0)}/{self.total_steps}" + ) + return + if kind == "failed": + self._put( + f"[MLX {mode.upper()}] failed ({event.get('reason', 'numerical_error')}) at " + f"step={int(event.get('step', 0) or 0)}/{int(event.get('steps', self.total_steps) or self.total_steps)}" + ) + return + if kind == "complete": + self._put( + f"[MLX {mode.upper()}] completed step={int(event.get('step', 0) or 0)}/" + f"{int(event.get('steps', self.total_steps) or self.total_steps)}" + ) + + result = run_mlx_stage( + stage=mode, + config=model_cfg, + checkpoint_path=mlx_checkpoint_path, + save_dir=save_dir, + loader=loader, + validation_loader=val_loader, + prompts=prompts, + teacher_path=stage_args.teacher_path if mode == "distill" else None, + args=stage_args, + progress_callback=_mlx_progress, + stop_event=self._stop, + ) + self.step = int(result.steps) + self.loss = float(result.last_loss) + self.total_steps = max(self.total_steps, int(result.total_steps or 0), self.step) + elapsed = time.monotonic() - t_start + if self._stop.is_set(): + self.status = "stopped" + self._put(f"[MLX {mode.upper()}] Stopped in {elapsed:.1f}s. Saved → {result.checkpoint_path}") + if result.checkpoint_saved: + _verify_checkpoint_warn(result.checkpoint_path, model_cfg, self._put) + return + if result.stopped: + self.status = "error" + self._put( + f"[MLX {mode.upper()}] Failed ({getattr(result, 'failure_reason', 'numerical_error')}) in {elapsed:.1f}s. " + f"Last finite checkpoint → {result.checkpoint_path}" + ) + if result.checkpoint_saved: + _verify_checkpoint_warn(result.checkpoint_path, model_cfg, self._put) + return + self._put(f"[MLX {mode.upper()}] Training complete in {elapsed:.1f}s. Saved → {result.checkpoint_path}") + _verify_checkpoint_warn(result.checkpoint_path, model_cfg, self._put) + self.status = "finished" + return + + model = model.to(device) + from chronos.trainer.optim_utils import build_configured_optimizer, get_lr, apply_lr + optimizer = build_configured_optimizer( + model, model_cfg, lr=base_lr, weight_decay=weight_decay, + ) + from chronos.trainer.paged_store import PagedTrainingController + paged_training = PagedTrainingController(model, model_cfg) + # One compute dtype end to end (weights, activations, KV) with + # FP32 masters in the optimizer; no autocast per-op casts. + from chronos.trainer.precision_training import attach_precision + precision, train_autocast, scaler = attach_precision( + model, optimizer, device, cfg.get("dtype", "auto")) + self._put(f"[precision] {precision.backend}/{precision.device}: compute={precision.compute} " + f"master={precision.master} ({precision.reason})") + + model.train() + global_step = 0 + step_t = time.monotonic() + best_val = float("inf") + best_path = ckp_path.replace(".pth", ".best.pth") + if mode in {"sft", "dpo", "orpo", "grpo", "distill"}: + tokenizer = self._load_tokenizer() + + def _eval_val() -> float: + if val_loader is None: + return float("nan") + model.eval() + tot, n = 0.0, 0 + with torch.no_grad(): + for k, vbatch in enumerate(val_loader): + if k >= 50: # cap eval cost + break + if isinstance(vbatch, dict): + vx, vy = vbatch["input_ids"], vbatch["labels"] + vmedia, vmedia_mask = vbatch.get("modality_inputs"), vbatch.get("modality_mask") + else: + vx, vy = vbatch + vmedia = vmedia_mask = None + vx = vx.to(device); vy = vy.to(device) + if vmedia: + vmedia = {key: value.to(device) for key, value in vmedia.items()} + if vmedia_mask is not None: + vmedia_mask = vmedia_mask.to(device) + with autocast_context(device, cfg.get("dtype", "auto"), model=model): + eval_masks = paged_training.masks_for_forward(device, allow_evict=False) + vout = model( + vx, labels=vy, + modality_inputs=vmedia, modality_mask=vmedia_mask, + available_expert_masks=eval_masks, + ) + tot += float(vout.loss.item()); n += 1 + model.train() + return tot / max(n, 1) + + if mode in {"sft", "dpo", "orpo", "grpo", "distill"}: + with _trainer_logger_sink(self._put): + if mode == "sft": + from chronos.trainer.sft_trainer import ChronosSFTTrainer + + trainer = ChronosSFTTrainer(model, model_cfg, stage_args, tokenizer) + if float(getattr(model_cfg, "lambda_router_anchor", 0.0)) > 0 and loader is not None: + first_batch = next(iter(loader)) + if isinstance(first_batch, dict): + trainer.set_calibration_batch( + first_batch["input_ids"], + modality_inputs=first_batch.get("modality_inputs"), + modality_mask=first_batch.get("modality_mask"), + ) + else: + trainer.set_calibration_batch(first_batch[0]) + self._put("[SFT] Router anchor reference captured.") + iters = _planned_epoch_iters(loader, stage_args.steps) + stage_global_step = 0 + for epoch in range(stage_args.epochs): + epoch_start = time.monotonic() + for step_idx, batch in enumerate(loader, start=1): + if self._stop.is_set(): + break + if step_idx > iters or (stage_args.steps is not None and stage_global_step >= stage_args.steps): + break + stage_global_step += 1 + if isinstance(batch, dict): + ids, labels = batch["input_ids"], batch["labels"] + result = trainer.train_step( + ids, labels, stage_global_step, self.total_steps, + modality_inputs=batch.get("modality_inputs"), + modality_mask=batch.get("modality_mask"), + ) + else: + ids, labels = batch + result = trainer.train_step(ids, labels, stage_global_step, self.total_steps) + if step_idx % stage_args.log_interval == 0 or step_idx == iters: + elapsed = max(time.monotonic() - epoch_start, 1e-6) + self._record_stage_metric(mode, stage_global_step, result, tps=step_idx / elapsed) + if step_idx % stage_args.save_interval == 0: + trainer._save(epoch, step_idx) + self._generate_live_sample(model, device, cfg, mode) + if self._stop.is_set() or (stage_args.steps is not None and stage_global_step >= stage_args.steps): + break + trainer._save(epoch=stage_args.epochs - 1, step=iters) + elif mode == "dpo": + from chronos.trainer.dpo_trainer import ChronosDPOTrainer + + trainer = ChronosDPOTrainer(model, model_cfg, stage_args, tokenizer) + if float(getattr(model_cfg, "lambda_router_anchor", 0.0)) > 0 and loader is not None: + first = next(iter(loader)) + calib = torch.cat([first["x_chosen"], first["x_rejected"]], dim=0) + trainer.set_calibration_batch(calib) + self._put("[DPO] Router anchor reference captured.") + iters = _planned_epoch_iters(loader, stage_args.steps) + stage_global_step = 0 + for epoch in range(stage_args.epochs): + epoch_start = time.monotonic() + for step_idx, batch in enumerate(loader, start=1): + if self._stop.is_set(): + break + if step_idx > iters or (stage_args.steps is not None and stage_global_step >= stage_args.steps): + break + stage_global_step += 1 + result = trainer.train_step(batch, stage_global_step, self.total_steps) + if step_idx % stage_args.log_interval == 0 or step_idx == iters: + elapsed = max(time.monotonic() - epoch_start, 1e-6) + self._record_stage_metric(mode, stage_global_step, result, tps=step_idx / elapsed) + if step_idx % stage_args.save_interval == 0: + trainer._save(epoch, step_idx) + self._generate_live_sample(model, device, cfg, mode) + if self._stop.is_set() or (stage_args.steps is not None and stage_global_step >= stage_args.steps): + break + trainer._save(epoch=stage_args.epochs - 1, step=iters) + elif mode == "orpo": + from chronos.trainer.orpo_trainer import ChronosORPOTrainer + + trainer = ChronosORPOTrainer(model, model_cfg, stage_args, tokenizer) + if float(getattr(model_cfg, "lambda_router_anchor", 0.0)) > 0 and loader is not None: + first = next(iter(loader)) + calib = torch.cat([first["x_chosen"], first["x_rejected"]], dim=0) + trainer.set_calibration_batch(calib) + self._put("[ORPO] Router anchor reference captured.") + iters = _planned_epoch_iters(loader, stage_args.steps) + stage_global_step = 0 + for epoch in range(stage_args.epochs): + epoch_start = time.monotonic() + for step_idx, batch in enumerate(loader, start=1): + if self._stop.is_set(): + break + if step_idx > iters or (stage_args.steps is not None and stage_global_step >= stage_args.steps): + break + stage_global_step += 1 + result = trainer.train_step(batch, stage_global_step, self.total_steps) + if step_idx % stage_args.log_interval == 0 or step_idx == iters: + elapsed = max(time.monotonic() - epoch_start, 1e-6) + self._record_stage_metric(mode, stage_global_step, result, tps=step_idx / elapsed) + if step_idx % stage_args.save_interval == 0: + trainer._save(epoch, step_idx) + self._generate_live_sample(model, device, cfg, mode) + if self._stop.is_set() or (stage_args.steps is not None and stage_global_step >= stage_args.steps): + break + trainer._save(epoch=stage_args.epochs - 1, step=iters) + elif mode == "grpo": + from chronos.trainer.grpo_trainer import ChronosGRPOTrainer + from chronos.trainer.reward import build_reward_fn + + reward_fn = build_reward_fn(stage_args.reward) + trainer = ChronosGRPOTrainer(model, model_cfg, stage_args, tokenizer, reward_fn=reward_fn) + if float(getattr(model_cfg, "lambda_router_anchor", 0.0)) > 0 and prompts: + calib = tokenizer( + prompts[0], return_tensors="pt", truncation=True, max_length=stage_args.max_seq_len + ).input_ids + trainer.set_calibration_batch(calib) + self._put("[GRPO] Router anchor reference captured.") + iters = _planned_epoch_iters(prompts, stage_args.steps) + stage_global_step = 0 + for epoch in range(stage_args.epochs): + epoch_start = time.monotonic() + for step_idx, prompt in enumerate(prompts, start=1): + if self._stop.is_set(): + break + if step_idx > iters or (stage_args.steps is not None and stage_global_step >= stage_args.steps): + break + stage_global_step += 1 + result = trainer.train_step(prompt, stage_global_step, self.total_steps) + if step_idx % stage_args.log_interval == 0 or step_idx == iters: + elapsed = max(time.monotonic() - epoch_start, 1e-6) + self._record_stage_metric(mode, stage_global_step, result, tps=step_idx / elapsed) + if step_idx % stage_args.save_interval == 0: + trainer._save(epoch, step_idx) + self._generate_live_sample(model, device, cfg, mode) + if self._stop.is_set() or (stage_args.steps is not None and stage_global_step >= stage_args.steps): + break + trainer._save(epoch=stage_args.epochs - 1, step=iters) + elif mode == "distill": + from chronos.trainer.distill_trainer import ChronosDistillTrainer + + teacher_path = stage_args.teacher_path + if not os.path.exists(teacher_path): + raise FileNotFoundError(f"[DISTILL] teacher not found: {teacher_path}") + teacher = ChronosForCausalLM(model_cfg) + t_state = load_checkpoint_state_dict(teacher_path, map_location="cpu") + load_state_dict_controlled(teacher, t_state) + teacher = teacher.to(device) + teacher.eval().requires_grad_(False) + self._put(f"[DISTILL] Teacher: {teacher_path}") + trainer = ChronosDistillTrainer(model, teacher, model_cfg, stage_args, tokenizer) + if float(getattr(model_cfg, "lambda_router_anchor", 0.0)) > 0 and loader is not None: + first = next(iter(loader)) + if isinstance(first, dict): + trainer.set_calibration_batch( + first["input_ids"], modality_inputs=first.get("modality_inputs"), + modality_mask=first.get("modality_mask"), + ) + else: + trainer.set_calibration_batch(first[0]) + self._put("[DISTILL] Router anchor reference captured.") + iters = _planned_epoch_iters(loader, stage_args.steps) + stage_global_step = 0 + for epoch in range(stage_args.epochs): + epoch_start = time.monotonic() + for step_idx, batch in enumerate(loader, start=1): + if self._stop.is_set(): + break + if step_idx > iters or (stage_args.steps is not None and stage_global_step >= stage_args.steps): + break + stage_global_step += 1 + if isinstance(batch, dict): + result = trainer.train_step( + batch["input_ids"], batch["labels"], stage_global_step, self.total_steps, + modality_inputs=batch.get("modality_inputs"), + modality_mask=batch.get("modality_mask"), + ) + else: + ids, labels = batch + result = trainer.train_step(ids, labels, stage_global_step, self.total_steps) + if step_idx % stage_args.log_interval == 0 or step_idx == iters: + elapsed = max(time.monotonic() - epoch_start, 1e-6) + self._record_stage_metric(mode, stage_global_step, result, tps=step_idx / elapsed) + if step_idx % stage_args.save_interval == 0: + trainer._save(epoch, step_idx) + self._generate_live_sample(model, device, cfg, mode) + if self._stop.is_set() or (stage_args.steps is not None and stage_global_step >= stage_args.steps): + break + trainer._save(epoch=stage_args.epochs - 1, step=iters) + self._generate_live_sample(model, device, cfg, mode) + elapsed = time.monotonic() - t_start + self._put(f"[{mode.upper()}] Training complete in {elapsed:.1f}s. Saved → {ckp_path}") + _verify_checkpoint_warn(ckp_path, model_cfg, self._put) + self.status = "finished" + return + + stop_outer = False + for epoch in range(epochs): + if self._stop.is_set() or stop_outer: + break + for step, batch in enumerate(loader, start=1): + if self._stop.is_set(): + break + if max_steps and global_step >= max_steps: + stop_outer = True + break + if isinstance(batch, dict): + input_ids, labels = batch["input_ids"], batch["labels"] + media, media_mask = batch.get("modality_inputs"), batch.get("modality_mask") + else: + input_ids, labels = batch + media = media_mask = None + input_ids = input_ids.to(device) + labels = labels.to(device) + if media: + media = {key: value.to(device) for key, value in media.items()} + if media_mask is not None: + media_mask = media_mask.to(device) + + with train_autocast: + paged_masks = paged_training.masks_for_forward(device) + result = model( + input_ids, labels=labels, + modality_inputs=media, modality_mask=media_mask, + available_expert_masks=paged_masks, + ) + out, lp = result.legacy_tuple() + moe_layers = [l.mlp for l in model.model.layers + if isinstance(l.mlp, ChronosMOEFeedForward)] + + aux_val = out.aux_loss.item() if hasattr(out, "aux_loss") else 0.0 + + # Use the shared loss helper so lambda_temporal / + # lambda_lookahead actually flow gradient back to the + # gate. + from chronos.trainer.loss_mixin import ( + chronos_loss_term, collect_router_probs, + collect_offload_training_metrics, + ) + loss = chronos_loss_term( + model, out.loss, lp, model_cfg, aux_loss=out.aux_loss, + input_ids=input_ids, labels=labels, + ) + # Logging-only: detached probs are fine here. + router_4d_det = collect_router_probs(model, with_grad=False) + if router_4d_det is not None and router_4d_det.shape[1] > 1: + from chronos.model.temporal_loss import temporal_locality_loss + temp_val = temporal_locality_loss( + router_4d_det.mean(dim=2) + ).item() + offload_metrics = collect_offload_training_metrics( + model, lp, model_cfg, + ) + else: + temp_val = 0.0 + offload_metrics = {} + + step_loss = loss / accum + + scaler.scale(step_loss).backward() + global_step += 1 + self.step = global_step + self.loss = loss.item() + + # LR schedule (warmup → cosine). Refresh every step. + sched_total = self.total_steps or (global_step + 1) + apply_lr(optimizer, get_lr(global_step, sched_total, base_lr)) + + # Optimizer.step() once per `accum` micro-batches. + # Off-by-one fix: trigger when (global_step % accum == 0). + # Previous code did the same check but had no warmup-aware + # accumulation count, occasionally stepping after step 1. + if global_step % accum == 0: + optimizer_step_with_scaler( + scaler, + optimizer, + model.parameters(), + 1.0, + ) + paged_training.observe() + + if global_step % log_interval == 0: + now = time.monotonic() + tps = log_interval / max(now - step_t, 1e-6) + step_t = now + ce_val = out.loss.item() + tot_val = loss.item() + + self._put( + f"Epoch {epoch+1}/{epochs} Step {global_step} " + f"loss={tot_val:.4f} ce={ce_val:.4f} " + f"aux={aux_val:.4f} temporal={temp_val:.4f} " + f"topk_recall={offload_metrics.get('lookahead_topk_recall', 0.0):.2%} " + f"union_recall={offload_metrics.get('lookahead_union_recall', 0.0):.2%} " + f"router_jaccard={offload_metrics.get('router_adjacent_jaccard', 0.0):.2%} " + f"steps/s={tps:.2f} lr={optimizer.param_groups[0]['lr']:.2e}" + ) + self._put_metric({ + "step": global_step, + "total": tot_val, + "ce": ce_val, + "aux": aux_val, + "temporal": temp_val, + "tps": tps, + **offload_metrics, + }) + + if global_step % save_interval == 0: + os.makedirs(save_dir, exist_ok=True) + save_state_dict_with_config( + model, + ckp_path, + model_cfg, + stage=STAGE_CHECKPOINT_PREFIX.get(mode, mode), + ) + self._put(f"Saved checkpoint → {ckp_path}") + + # Validation eval + best-ckpt tracking. + v = _eval_val() + if v == v: # not NaN + self._put(f"Validation loss: {v:.4f} (best={best_val:.4f})") + self._put_metric({ + "step": global_step, "total": v, "ce": v, + "aux": 0.0, "temporal": 0.0, "tps": 0.0, + "val": True, + "val_loss": v, + }) + if v < best_val: + best_val = v + save_state_dict_with_config( + model, + best_path, + model_cfg, + stage=STAGE_CHECKPOINT_PREFIX.get(mode, mode), + ) + self._put(f" ↑ new best → {best_path}") + + # M8a: live qualitative sample so the user sees + # whether the model is actually learning, not just + # whether the loss number went down. We greedy-decode + # ~80 tokens from the user-supplied prompt, and fall + # back to a stage-aware evaluation prompt if blank. + try: + sp = (cfg.get("sample_prompt") or "").strip() + if not sp: + sp = _stage_sample_prompt(mode) + tokenizer = self._load_tokenizer() + rendered = tokenizer.apply_chat_template( + [{"role": "user", "content": sp}], + tokenize=False, + add_generation_prompt=True, + ) + ids = tokenizer( + rendered, return_tensors="pt", add_special_tokens=False + ).input_ids.to(device) + model.eval() + with torch.no_grad(): + gen = ids.clone() + for _ in range(80): + with autocast_context(device, cfg.get("dtype", "auto"), model=model): + o = model(gen, use_cache=False) + nxt = o.logits[:, -1, :].argmax(dim=-1, keepdim=True) + gen = torch.cat([gen, nxt], dim=-1) + if int(nxt.item()) == (tokenizer.eos_token_id or -1): + break + txt = decode_visible(tokenizer, gen[0, ids.shape[1]:].tolist()) + model.train() + self.last_sample = txt + self.last_sample_step = global_step + self._put(f"[sample @ step {global_step}] {txt[:200]}") + except Exception as gen_err: + self._put(f"[sample failed: {gen_err}]") + + os.makedirs(save_dir, exist_ok=True) + save_state_dict_with_config( + model, + ckp_path, + model_cfg, + stage=STAGE_CHECKPOINT_PREFIX.get(mode, mode), + ) + elapsed = time.monotonic() - t_start + self._put(f"Training complete in {elapsed:.1f}s. Saved → {ckp_path}") + _verify_checkpoint_warn(ckp_path, model_cfg, self._put) + self.status = "finished" + + except Exception as e: + import traceback + self._put(f"[ERROR] {e}\n{traceback.format_exc()}") + self.status = "error" + finally: + _sync_metal_backend((cfg or {}).get("device")) + _close_dataset_handles(loader, val_loader, train_ds, val_ds, full_ds) + if cleanup_after_run: + cleanup = _cleanup_training_dataset_artifact(data_path_for_cleanup) + if cleanup.get("deleted"): + removed_dirs = len(cleanup.get("removed_dirs") or []) + suffix = f"; removed {removed_dirs} empty parent dirs" if removed_dirs else "" + self._put(f"[cleanup] removed staged upload dataset: {cleanup.get('path')}{suffix}") + elif cleanup.get("reason") not in {"not_gradio_temp", "missing"}: + self._put( + f"[cleanup] skipped staged upload dataset cleanup for " + f"{cleanup.get('path')}: {cleanup.get('reason')}" + ) + + def _synthetic_loader(self, vocab_size, seq_len, batch_size, n=50): + import torch + from torch.utils.data import TensorDataset, DataLoader + ids = torch.randint(0, vocab_size, (n * batch_size, seq_len)) + ds = TensorDataset(ids, ids.clone()) + return DataLoader(ds, batch_size=batch_size) + + def _load_tokenizer(self): + from transformers import AutoTokenizer + path = resolve_tokenizer_dir(self.tokenizer_path) + tok = AutoTokenizer.from_pretrained(path) + if self.vocab_size and len(tok) > self.vocab_size: + raise ValueError( + f"tokenizer at {path} has {len(tok)} tokens but the model vocab_size is " + f"{self.vocab_size}; set vocab_size >= {len(tok)} or pick the matching tokenizer" + ) + return tok + + +def resolve_tokenizer_dir(configured: str | None) -> str: + """Config ``tokenizer_path`` (a Chronos Tokenizer Builder output) wins; else the bundled legacy one.""" + configured = os.path.expanduser(str(configured or "").strip()) + if configured: + if not os.path.isfile(os.path.join(configured, "tokenizer.json")): + raise FileNotFoundError(f"tokenizer_path {configured!r} has no tokenizer.json") + return configured + return chronos.deps.get_tokenizer_path() diff --git a/chronos_app.py b/chronos_app.py index f4e7351..c4d72c8 100644 --- a/chronos_app.py +++ b/chronos_app.py @@ -1,20 +1,23 @@ """ -chronos_app.py — Backwards-compatible launcher shim. +chronos_app.py — launcher for the Chronos Web UI from a source checkout. -For installed users, prefer: chronos-ui -For repo users, you can run: python chronos_app.py [--port N] [--share] +Installed users run ``chronos-ui`` (or ``chronos webui``); both start the same server. -This file simply delegates to chronos.app.main(). + python chronos_app.py [--port N] [--host H] [--workdir DIR] [--runs-dir DIR] + python chronos_app.py --legacy [--port N] [--share] # the old Gradio console + +The default is the FastAPI + single-page UI (chronos/webui). It listens on loopback without a login; +any other host needs --allow-remote and a key in CHRONOS_UI_KEY or CHRONOS_API_KEY. """ -import sys import os +import sys -# Ensure Project_Chronos root is on sys.path when run directly +# Ensure the Project_Chronos root is on sys.path when run directly. _here = os.path.dirname(os.path.abspath(__file__)) if _here not in sys.path: sys.path.insert(0, _here) -from chronos.app import main +from chronos.webui.server import main if __name__ == "__main__": - main() + raise SystemExit(main()) diff --git a/demos/translation/README.md b/demos/translation/README.md new file mode 100644 index 0000000..b8e630a --- /dev/null +++ b/demos/translation/README.md @@ -0,0 +1,158 @@ +# chronos-translate: an en↔zh translation demo on the Chronos kernel + +The Chronos kernel (`chronos/`) trains general models and carries no +translation-specific code. Everything that builds the English↔Chinese +benchmark model lives here, as an extension that imports the kernel. + +| Path | What it is | +|---|---| +| `chronos_translate/corpus/` | download, clean, dedup and shard en–zh data (WMT19, OPUS-100, FLORES+, …); `docmix` builds merged n-in-1 sets | +| `chronos_translate/run.py` | `TranslationLongRun`: the kernel `LongRun` plus FLORES+ BLEU/chrF validation | +| `chronos_translate/doc_run.py` | doc-mix variant: micro-batch auto-fit, `target_passes`, document-level eval | +| `chronos_translate/probe.py` | offline FLORES+ probe of a run checkpoint | +| `chronos_translate/bundle/` | self-contained model bundles: build, check, translate, prepare-data, fine-tune, serve | +| `chronos_translate/model_presets.py` | the 50M topology base and the tokenizer's language tokens | +| `recipes/enzh_50m_72h.json` | the 72h benchmark recipe (paths relative to this file) | +| `recipes/docmix_plan.json` | planner output for the doc-mix packages A/B/C | +| `scripts/` | `plan_docmix.py`, `make_docmix_packages.py` | +| `tests/` | extension tests (`pytest demos/translation/tests`) | + +## Install + +This extension is a demo inside the repository. It is not published on PyPI; +install it from a checkout. The kernel comes from PyPI (`pip install --pre` +while 0.3.1 is in beta) or from the same checkout. + +```sh +git clone https://github.com/FonaTech/Project_Chronos.git && cd Project_Chronos +pip install -e '.[mlx,serve]' # the kernel (or: pip install --pre 'Project_Chronos[mlx,serve]==0.3.2a0') +pip install -e demos/translation # this extension (sacrebleu, sacremoses, pyarrow pinned) +chronos-translate --version +``` + +The extension pins `Project_Chronos==0.3.2a0`. Use the checkout's tag +(`git checkout v0.3.2a0`) so both sides match. A model bundle needs the two +as wheels; build them from the checkout: + +```sh +python -m build --outdir dist . # dist/project_chronos-0.3.2a0-py3-none-any.whl +python -m build --outdir dist demos/translation # dist/chronos_translate-0.3.2a0-py3-none-any.whl +``` + +The extension's tests run from the repo root: `pytest demos/translation/tests`. +The kernel CI does not run them, because they need sacrebleu and pyarrow. + +## Commands + +```sh +chronos tokenizer data/pairs.jsonl --out tok --vocab-size 16384 \ + --extra-special "<|en|>" "<|zh|>" "<|translate|>" # kernel tokenizer + language tags +chronos-translate corpus download --help # also: build | shards | docmix +chronos-translate run --spec demos/translation/recipes/enzh_50m_72h.json +chronos-translate doc-run --spec /recipe.json +chronos-translate inspect --run-dir runs/enzh_50m_v1 --samples 24 +chronos-translate bundle build --run-dir runs/enzh_50m_v1 --wheel dist/project_chronos-*.whl \ + --wheel dist/chronos_translate-*.whl +``` + +`chronos serve`, `chronos monitor` and `chronos tokenizer` stay kernel commands. + +## How it plugs into the kernel + +This folder is also the template for other task extensions. It uses only +public kernel hooks and never patches kernel code: + +| Kernel hook | What this extension does with it | +|---|---| +| `RunSpec` subclass | `TranslationRunSpec` adds `bleu_samples`, `probe_samples` and its own `export_prefix` | +| `LongRun.eval_samples_for` | sample count per phase (pretrain probe, SFT BLEU subset, final devtest) | +| `LongRun.task_eval` | returns `{metric: value}`; the keys land in the `validation` / `final` rows of `metrics.jsonl` and show up in the monitor | +| `LongRun.generate`, `write_samples` | greedy decoding with the KV cache; example outputs go to `samples.jsonl` | +| `LongRun.pinned_modules` | records the versions of sacrebleu and the extension modules in the run | +| `longrun.main(runner_cls=, spec_cls=, extra_path_keys=)` | the `chronos-translate run` CLI, with `extra.raw_root` resolved against the recipe folder | +| `special_tokens_with(...)` | the tokenizer's `<|en|>`, `<|zh|>`, `<|translate|>` slots | + +A failing `task_eval` is logged as `task_eval_error` and never stops training. +A new task copies this layout: its own package, a `RunSpec` subclass, a +`LongRun` subclass and a CLI that calls the kernel `main`. + +## Migrating from 0.3.1a1 + +| 0.3.1a1 (kernel) | 0.3.1a2 (this extension) | +|---|---| +| `chronos corpus …` | `chronos-translate corpus …` | +| `chronos bundle …` | `chronos-translate bundle …` (a bundle's `bin/chronos bundle …` still works) | +| `chronos longrun --spec enzh_50m_72h.json` | `chronos-translate run --spec …` | +| `python -m chronos.mlx.training.doc_run` | `chronos-translate doc-run` | +| `chronos.data.corpus.*` | `chronos_translate.corpus.*` | +| `chronos.bundle.*` | `chronos_translate.bundle.*` | +| `inspect_checkpoint.translation_probe` | `chronos_translate.probe.translation_probe` | +| `chronos.model.factory.ENZH_DEMO_BASE` | `chronos_translate.model_presets.ENZH_50M_BASE` | + +Recipes keep their format: `bleu_samples` and `probe_samples` belong to +`TranslationRunSpec`, so the kernel runner rejects them with a pointer here. +Relative paths in a recipe now resolve against the recipe's own folder. + +## Data and weights + +WMT19 and OPUS-100 list their licences as unknown, so weights trained on them +are for research use only. FLORES+ (CC BY-SA 4.0) is used for evaluation only. + +**Status of the 50M en→zh demo (in progress; `demos/translation`).** +- Model: 49.69M total / 12.09M active parameters, 36 experts, MLA latent 128, SWA window 128, 16k self-built vocabulary. +- Run: a 72-hour MLX bf16 run (pretrain, then SFT) started on 2026-11-05. +- Interim measurement: valid CE 2.477 at pretrain step 13,996 of about 24.7k planned (it was 3.012 at step 1,656). That checkpoint is packaged as `chronos-enzh-50m-pretrain-s13996` (see Model bundle). +- BLEU/chrF on FLORES+ and WMT22, and the ablations (attention mode, depth, lazy-expert budget, speculative γ), will be published after the run finishes. No quality numbers are claimed before then. + +## Released model: chronos-enzh-50m-sft + +[`models/chronos-enzh-50m-sft/`](models/chronos-enzh-50m-sft/) packages a 49.7M-parameter Chronos v3 model (12.1M active per token) trained for 69 hours on one Apple M5 Max: configuration, tokenizer, trained prompt, decoding settings, a driver (`translate.py`) and the evaluation behind every number. The weights (99.5 MB, bfloat16 safetensors) are attached to the release [`enzh-50m-sft-v1`](https://github.com/FonaTech/Project_Chronos/releases/tag/enzh-50m-sft-v1). + +- **Boundary:** English → Chinese only, one sentence (≤ 128 tokens) at a time. Chinese → English is disabled: English-only fine-tuning erased it (FLORES+ BLEU 0.00 after SFT). The driver refuses input outside the boundary. +- **Measured** (MLX bf16, greedy): FLORES+ devtest BLEU 33.48 / chrF 29.52; WMT22 BLEU 32.60 / chrF 28.83; WMT24++ BLEU 26.89 / chrF 24.43 (split into sentences). +- **Research use only.** The training corpora's licences are unknown; see the folder's `NOTICE`. + +```bash +cd demos/translation/models/chronos-enzh-50m-sft +pip install --pre "Project_Chronos[mlx]==0.3.2a0" # or "Project_Chronos==0.3.2a0" without MLX +python translate.py --download && python translate.py "The meeting was moved to Friday." +``` + +## Model bundle (translation demo extension) + +Bundles belong to the translation extension (`demos/translation`). Build the two wheels first (`python -m build --outdir dist .` and `python -m build --outdir dist demos/translation`). `chronos-translate bundle build` packages one exported checkpoint of a run into a folder that works right after unpacking. Building only reads the run directory. + +```bash +chronos-translate bundle build --run-dir runs/enzh_50m_v1 --which best --pack \ + --wheel dist/project_chronos-0.3.2a0-py3-none-any.whl --wheel dist/chronos_translate-0.3.2a0-py3-none-any.whl +``` + +| Bundle path | Content | +|---|---| +| `model/` | weights + `.config.json` sidecar, tokenizer (`model/tokenizer/`) | +| `eval/` | FLORES+ dev/devtest (CC BY-SA 4.0) for `bundle eval` / `probe` | +| `data/sft_valid/` | the run's SFT validation shards | +| `wheels/`, `bin/setup.sh`, `bin/chronos` | offline install of the kernel and extension wheels into `.venv`; launcher that sets `CHRONOS_BUNDLE` and sends `bundle …` to `chronos-translate` | +| `recipes/source_run_spec.json`, `recommended.json` | the recipe that produced the weights; fine-tune tiers `smoke` / `quick` / `standard` / `full` | +| `bundle.json` | provenance (step, tokens, valid CE), measured quality probe, SHA-256 of every file | + +On the recipient side: + +```bash +bin/setup.sh # venv + wheels + `bundle check` +bin/chronos bundle translate "The weather is very nice today." +bin/chronos bundle translate --backend mlx --speculative --file examples/translate_en.txt +bin/chronos bundle eval --split devtest -n 200 +bin/chronos bundle prepare-data my_pairs.jsonl --out work/data # FLORES+ is removed from your data +bin/chronos bundle finetune --data work/data --run-dir work/ft --tier quick --mode sft +bin/chronos bundle serve -- --port 11435 +``` + +`--speculative` needs `--repetition-penalty 1.0` (its default), because the penalty changes the target distribution at every position. `finetune` writes a `chronos-translate run` spec with `init_checkpoint` set to the bundle weights and refuses a run directory that already holds a run. Bundles built from data with unknown licences (WMT19, OPUS-100) say in `NOTICE.md` that the weights are for research only. + +## Kernel measurements taken on this demo + +Three measurements in the main README use this demo's model or data: +- Self-speculative decoding table: pretrain step-13,996 checkpoint, greedy, batch 1, FLORES+ dev en→zh prompts, draft depth 1, γ 4 (reports in `reports/speculative/`). +- 0.3.2 native-kernel parity: the logits of the 50M en→zh checkpoint are bit-identical between 0.3.1a3 + minimind and the native kernel; the timings ran while the 50M en→zh SFT run was training on the GPU. +- MLX compiled step and activation recomputation (2026-11-08): the 50M en→zh recipe's model config from random init, real en→zh shards. diff --git a/demos/translation/README_zh.md b/demos/translation/README_zh.md new file mode 100644 index 0000000..8111b7a --- /dev/null +++ b/demos/translation/README_zh.md @@ -0,0 +1,152 @@ +# chronos-translate:基于 Chronos 内核的英↔中翻译 demo + +Chronos 内核(`chronos/`)用于训练通用模型,不含任何翻译特化代码。 +构建英↔中标杆模型所需的全部内容都放在这里,作为调用内核的扩展。 + +| 路径 | 内容 | +|---|---| +| `chronos_translate/corpus/` | 下载、清洗、去重并分片英中数据(WMT19、OPUS-100、FLORES+ 等);`docmix` 构建 n 合 1 合并集 | +| `chronos_translate/run.py` | `TranslationLongRun`:内核 `LongRun` 加 FLORES+ BLEU/chrF 验证 | +| `chronos_translate/doc_run.py` | doc-mix 版本:微批自适应、`target_passes`、篇章级评测 | +| `chronos_translate/probe.py` | 对运行检查点做离线 FLORES+ 探测 | +| `chronos_translate/bundle/` | 自包含模型包:构建、校验、翻译、准备数据、微调、服务 | +| `chronos_translate/model_presets.py` | 50M 拓扑基础配置和分词器语言标记 | +| `recipes/enzh_50m_72h.json` | 72 小时标杆配方(路径相对于本文件) | +| `recipes/docmix_plan.json` | doc-mix 训练包 A/B/C 的规划器输出 | +| `scripts/` | `plan_docmix.py`、`make_docmix_packages.py` | +| `tests/` | 扩展测试(`pytest demos/translation/tests`) | + +## 安装 + +本扩展是仓库里的一个 demo,不发布到 PyPI,需要从仓库检出后安装。 +内核可以从 PyPI 安装(0.3.1 处于 beta 阶段,需加 `pip install --pre`),也可以用同一份检出安装。 + +```sh +git clone https://github.com/FonaTech/Project_Chronos.git && cd Project_Chronos +pip install -e '.[mlx,serve]' # 内核(或:pip install --pre 'Project_Chronos[mlx,serve]==0.3.2a0') +pip install -e demos/translation # 本扩展(sacrebleu、sacremoses、pyarrow 固定版本) +chronos-translate --version +``` + +扩展固定依赖 `Project_Chronos==0.3.2a0`。请检出对应标签(`git checkout v0.3.2a0`),使两边版本一致。 +模型包需要这两个 wheel,可以从检出目录构建: + +```sh +python -m build --outdir dist . # dist/project_chronos-0.3.2a0-py3-none-any.whl +python -m build --outdir dist demos/translation # dist/chronos_translate-0.3.2a0-py3-none-any.whl +``` + +扩展测试在仓库根目录运行:`pytest demos/translation/tests`。 +内核 CI 不运行这些测试,因为它们需要 sacrebleu 和 pyarrow。 + +## 命令 + +```sh +chronos tokenizer data/pairs.jsonl --out tok --vocab-size 16384 \ + --extra-special "<|en|>" "<|zh|>" "<|translate|>" # 内核分词器 + 语言标记 +chronos-translate corpus download --help # 另有 build | shards | docmix +chronos-translate run --spec demos/translation/recipes/enzh_50m_72h.json +chronos-translate doc-run --spec <训练包>/recipe.json +chronos-translate inspect --run-dir runs/enzh_50m_v1 --samples 24 +chronos-translate bundle build --run-dir runs/enzh_50m_v1 --wheel dist/project_chronos-*.whl \ + --wheel dist/chronos_translate-*.whl +``` + +`chronos serve`、`chronos monitor` 和 `chronos tokenizer` 仍是内核命令。 + +## 如何接入内核 + +这个目录也是其他任务扩展的模板。它只使用内核公开的钩子,不修改内核代码: + +| 内核钩子 | 本扩展的用法 | +|---|---| +| `RunSpec` 子类 | `TranslationRunSpec` 增加 `bleu_samples`、`probe_samples` 和自己的 `export_prefix` | +| `LongRun.eval_samples_for` | 每个阶段的样本数(预训练探测、SFT BLEU 子集、最终 devtest) | +| `LongRun.task_eval` | 返回 `{指标: 数值}`;这些键写入 `metrics.jsonl` 的 `validation` / `final` 行,并显示在 monitor 中 | +| `LongRun.generate`、`write_samples` | 带 KV cache 的贪心解码;示例输出写入 `samples.jsonl` | +| `LongRun.pinned_modules` | 在运行记录中写入 sacrebleu 和扩展模块的版本 | +| `longrun.main(runner_cls=, spec_cls=, extra_path_keys=)` | `chronos-translate run` 命令行;`extra.raw_root` 相对于配方目录解析 | +| `special_tokens_with(...)` | 分词器中的 `<|en|>`、`<|zh|>`、`<|translate|>` 位置 | + +`task_eval` 出错时记为 `task_eval_error`,不会中断训练。 +新任务照搬这个结构即可:独立的包、一个 `RunSpec` 子类、一个 `LongRun` 子类,以及调用内核 `main` 的命令行。 + +## 从 0.3.1a1 迁移 + +| 0.3.1a1(内核) | 0.3.1a2(本扩展) | +|---|---| +| `chronos corpus …` | `chronos-translate corpus …` | +| `chronos bundle …` | `chronos-translate bundle …`(模型包里的 `bin/chronos bundle …` 仍可用) | +| `chronos longrun --spec enzh_50m_72h.json` | `chronos-translate run --spec …` | +| `python -m chronos.mlx.training.doc_run` | `chronos-translate doc-run` | +| `chronos.data.corpus.*` | `chronos_translate.corpus.*` | +| `chronos.bundle.*` | `chronos_translate.bundle.*` | +| `inspect_checkpoint.translation_probe` | `chronos_translate.probe.translation_probe` | +| `chronos.model.factory.ENZH_DEMO_BASE` | `chronos_translate.model_presets.ENZH_50M_BASE` | + +配方格式不变:`bleu_samples` 和 `probe_samples` 属于 `TranslationRunSpec`, +内核运行器遇到它们会报错并指向这里。配方中的相对路径现在相对于配方所在目录解析。 + +## 数据与权重 + +WMT19 和 OPUS-100 的许可证标注为 unknown,用它们训练的权重只能用于研究。 +FLORES+(CC BY-SA 4.0)只用于评测。 + +**50M 英译中 demo(进行中;`demos/translation`)** +- 模型:总参数 49.69M,激活 12.09M;36 个专家;MLA latent 128;SWA 窗口 128;自研 16k 词表。 +- 训练:72 小时 MLX bf16 任务(先预训练,后 SFT),2026-11-05 启动。 +- 中途实测:预训练第 13,996 步(计划约 24.7k 步)valid CE 为 2.477(第 1,656 步时为 3.012)。该 checkpoint 已打包为 `chronos-enzh-50m-pretrain-s13996`(见“模型包”)。 +- FLORES+ 和 WMT22 上的 BLEU/chrF,以及各项消融(注意力模式、深度、懒加载专家预算、推测 γ),等训练结束后公布。在此之前不给出任何质量数字。 + +## 已发布模型:chronos-enzh-50m-sft + +[`models/chronos-enzh-50m-sft/`](models/chronos-enzh-50m-sft/) 打包了一个 4,969 万参数的 Chronos v3 模型(每个 token 激活 1,209 万),在一台 Apple M5 Max 上训练了 69 小时。目录中有模型配置、分词器、训练时的 prompt、解码参数、驱动脚本(`translate.py`),以及每个数字背后的评测。权重(99.5 MB,bfloat16 safetensors)作为附件放在 release [`enzh-50m-sft-v1`](https://github.com/FonaTech/Project_Chronos/releases/tag/enzh-50m-sft-v1) 中。 + +- **边界:** 只做英译中,每次一句(≤ 128 token)。中译英已屏蔽:只含英译中的微调抹掉了这一能力(SFT 后 FLORES+ BLEU 0.00)。驱动会拒绝边界以外的输入。 +- **实测**(MLX bf16,贪心解码):FLORES+ devtest BLEU 33.48 / chrF 29.52;WMT22 BLEU 32.60 / chrF 28.83;WMT24++ BLEU 26.89 / chrF 24.43(分句)。 +- **仅供研究使用。** 训练语料的许可未知,见目录中的 `NOTICE`。 + +```bash +cd demos/translation/models/chronos-enzh-50m-sft +pip install --pre "Project_Chronos[mlx]==0.3.2a0" # 不用 MLX 时装 "Project_Chronos==0.3.2a0" +python translate.py --download && python translate.py "The meeting was moved to Friday." +``` + +## 模型包(翻译 demo 扩展) + +模型包属于翻译扩展(`demos/translation`)。先构建两个 wheel(`python -m build --outdir dist .` 和 `python -m build --outdir dist demos/translation`)。`chronos-translate bundle build` 把某次运行导出的一个 checkpoint 打包成解压即用的目录。打包过程只读取运行目录。 + +```bash +chronos-translate bundle build --run-dir runs/enzh_50m_v1 --which best --pack \ + --wheel dist/project_chronos-0.3.2a0-py3-none-any.whl --wheel dist/chronos_translate-0.3.2a0-py3-none-any.whl +``` + +| 包内路径 | 内容 | +|---|---| +| `model/` | 权重 + `.config.json` 配置文件,分词器(`model/tokenizer/`) | +| `eval/` | FLORES+ dev/devtest(CC BY-SA 4.0),供 `bundle eval` / `probe` 使用 | +| `data/sft_valid/` | 该次运行的 SFT 验证分片 | +| `wheels/`、`bin/setup.sh`、`bin/chronos` | 把内核和扩展两个 wheel 离线安装到 `.venv`;启动脚本设置 `CHRONOS_BUNDLE`,并把 `bundle …` 转给 `chronos-translate` | +| `recipes/source_run_spec.json`、`recommended.json` | 产生这份权重的配方;微调档位 `smoke` / `quick` / `standard` / `full` | +| `bundle.json` | 来源信息(步数、token 数、valid CE)、实测质量探针、每个文件的 SHA-256 | + +接收方的用法: + +```bash +bin/setup.sh # 建 venv、装 wheels、运行 `bundle check` +bin/chronos bundle translate "The weather is very nice today." +bin/chronos bundle translate --backend mlx --speculative --file examples/translate_en.txt +bin/chronos bundle eval --split devtest -n 200 +bin/chronos bundle prepare-data my_pairs.jsonl --out work/data # 会从你的数据中剔除 FLORES+ +bin/chronos bundle finetune --data work/data --run-dir work/ft --tier quick --mode sft +bin/chronos bundle serve -- --port 11435 +``` + +`--speculative` 要求 `--repetition-penalty 1.0`(此时的默认值),因为惩罚会逐位置改变目标分布。`finetune` 写出一份 `init_checkpoint` 指向包内权重的 `chronos-translate run` spec;运行目录里已有训练时会拒绝写入。用许可未知的数据(WMT19、OPUS-100)训练的模型包,`NOTICE.md` 中写明权重仅供研究使用。 + +## 在本 demo 上做的内核实测 + +主 README 中有三项实测用到了本 demo 的模型或数据: +- 自推测解码表:预训练 step 13,996 checkpoint,greedy,batch 1,FLORES+ dev 英→中提示,起草深度 1,γ 4(报告在 `reports/speculative/`)。 +- 0.3.2 原生内核一致性:50M 英译中 checkpoint 的 logits 在 0.3.1a3 + minimind 与原生内核之间逐位一致;计时时 50M 英译中 SFT 正在 GPU 上训练。 +- MLX 编译步与激活重计算(2026-11-08):50M 英译中 recipe 的模型配置,随机初始化,真实英译中分片。 diff --git a/demos/translation/chronos_translate/__init__.py b/demos/translation/chronos_translate/__init__.py new file mode 100644 index 0000000..73a99ba --- /dev/null +++ b/demos/translation/chronos_translate/__init__.py @@ -0,0 +1,19 @@ +"""English↔Chinese translation demo built on the Chronos kernel. + +Everything translation-specific lives here, outside the ``chronos`` kernel: + +* ``corpus``: download, clean, dedup and shard en–zh parallel data + (WMT19, OPUS-100, FLORES+, …) into the kernel's shard layout; + ``corpus.docmix`` builds merged multi-sentence ("n-in-1") sets; +* ``run``: ``TranslationLongRun``, the kernel ``LongRun`` with BLEU/chrF + validation (``chronos-translate run --spec …``); +* ``doc_run``: the doc-mix variant with document-level evaluation; +* ``probe``: offline FLORES+ probe for a run checkpoint; +* ``bundle``: self-contained model bundles (build, check, translate, + prepare-data, fine-tune, serve); +* ``model_presets``: the 50M en→zh model topology and tokenizer tokens. + +The kernel needs none of this to train a general model. +""" + +__version__ = "0.3.1a2" diff --git a/chronos/bundle/__init__.py b/demos/translation/chronos_translate/bundle/__init__.py similarity index 66% rename from chronos/bundle/__init__.py rename to demos/translation/chronos_translate/bundle/__init__.py index 97e00bb..e87896d 100644 --- a/chronos/bundle/__init__.py +++ b/demos/translation/chronos_translate/bundle/__init__.py @@ -1,4 +1,4 @@ -"""Out-of-the-box model bundles (``chronos bundle``). +"""Out-of-the-box translation model bundles (``chronos-translate bundle``). A bundle is one self-contained directory: @@ -9,13 +9,13 @@ model/.pth weights (+ .config.json sidecar) model/tokenizer/ the model's own tokenizer eval/ FLORES+ dev/devtest (CC BY-SA 4.0) for smoke tests - recipes/*.json ``chronos longrun`` specs for SFT / continued pretraining + recipes/*.json ``chronos-translate run`` specs for SFT / continued pretraining recommended.json tiered next-stage parameters with their sources examples/ tiny en-zh pairs to prove the fine-tune path -``chronos bundle build`` creates it from a training run, ``chronos bundle check`` -verifies hashes and runs a CPU forward smoke test, ``chronos bundle translate`` -and ``chronos bundle finetune`` are the two entry points a recipient needs. +``chronos-translate bundle build`` creates it from a training run, ``... check`` +verifies hashes and runs a CPU forward smoke test, ``... translate`` +and ``... finetune`` are the two entry points a recipient needs. """ from .builder import BUNDLE_FORMAT, build_bundle, check_bundle, load_bundle_manifest diff --git a/chronos/bundle/builder.py b/demos/translation/chronos_translate/bundle/builder.py similarity index 92% rename from chronos/bundle/builder.py rename to demos/translation/chronos_translate/bundle/builder.py index f13116b..0e432ae 100644 --- a/chronos/bundle/builder.py +++ b/demos/translation/chronos_translate/bundle/builder.py @@ -14,8 +14,6 @@ "chronos_tokenizer.json", "tokenizer_report.json") FLORES_REL = os.path.join("facebook__flores__eng-zho", "data", "pair", "eng_Latn-zho_Hans") FLORES_FILES = ("dev-00000-of-00001.parquet", "devtest-00000-of-00001.parquet") -# minimind sub-packages Chronos imports (model.*, trainer.trainer_utils, dataset.lm_dataset). -MINIMIND_PARTS = ("model", "trainer", "dataset", "LICENSE") # Never shipped: they hold absolute local paths, optimizer state or caches. _SKIP_NAMES = {"__pycache__", ".DS_Store"} @@ -144,9 +142,13 @@ def _planner_preset(vocab_size: int, hidden_size: int) -> dict | None: def build_bundle(run_dir: str, out_dir: str | None = None, *, phase: str = "pretrain", which: str = "best", - name: str | None = None, minimind_dir: str | None = None, wheel: str | None = None, + name: str | None = None, minimind_dir: str | None = None, wheel=None, include_sft_valid: bool = True, status: str = "interim", log=print) -> str: - """Assemble a bundle from a ``chronos longrun`` run directory (read-only on the run).""" + """Assemble a bundle from a run directory (read-only on the run). + + ``wheel``: one path or a list of paths (the kernel and the + ``chronos_translate`` wheels) copied to ``wheels/`` for ``bin/setup.sh``. + ``minimind_dir`` is ignored since 0.3.2 (the kernel is self-contained).""" from chronos.model.checkpoint import checkpoint_config_path, tokenizer_metadata from . import docs, recommend run_dir = os.path.abspath(run_dir) @@ -201,18 +203,9 @@ def build_bundle(run_dir: str, out_dir: str | None = None, *, phase: str = "pret valid_src = os.path.join(spec["shards_dir"], "sft", "valid") if os.path.isdir(valid_src): _copytree(valid_src, os.path.join(out_dir, "data", "sft_valid")) - # minimind (Apache-2.0) so the recipient needs neither git nor network. - from chronos.deps import ensure_minimind - mm = minimind_dir or str(ensure_minimind()) - for part in MINIMIND_PARTS: - src = os.path.join(mm, part) - if os.path.isdir(src): - _copytree(src, os.path.join(out_dir, "third_party", "minimind", part)) - elif os.path.isfile(src): - _copy(src, os.path.join(out_dir, "third_party", "minimind", part)) - mm_rev = _git_head(mm) - if wheel: - _copy(wheel, os.path.join(out_dir, "wheels", os.path.basename(wheel))) + del minimind_dir # kept for callers of the pre-0.3.2 signature + for whl in ([wheel] if isinstance(wheel, str) else list(wheel or ())): + _copy(whl, os.path.join(out_dir, "wheels", os.path.basename(whl))) # Recipes: the exact spec that produced these weights (paths made relative). roots = _path_roots(run_dir) source_spec = _sanitize(spec, roots) @@ -235,8 +228,8 @@ def build_bundle(run_dir: str, out_dir: str | None = None, *, phase: str = "pret "tokenizer": {"dir": "model/tokenizer", **{k: v for k, v in tok_meta.items() if k != "path"}}, "training": prov, "eval": {"flores_plus": flores, "licence": "CC BY-SA 4.0", "root": "eval"}, - "third_party": {"minimind": {"dir": "third_party/minimind", "licence": "Apache-2.0", "commit": mm_rev}}, "chronos_version": _chronos_version(), + "chronos_translate_version": _extension_version(), } with open(os.path.join(out_dir, MANIFEST), "w", encoding="utf-8") as fh: json.dump(manifest, fh, ensure_ascii=False, indent=2) @@ -248,22 +241,16 @@ def build_bundle(run_dir: str, out_dir: str | None = None, *, phase: str = "pret return out_dir -def _git_head(path: str) -> str | None: - head = os.path.join(path, ".git", "HEAD") - try: - ref = open(head, encoding="utf-8").read().strip() - if ref.startswith("ref: "): - return open(os.path.join(path, ".git", ref[5:]), encoding="utf-8").read().strip() - return ref - except OSError: - return None - - def _chronos_version() -> str: import chronos return getattr(chronos, "__version__", "unknown") +def _extension_version() -> str: + from .. import __version__ + return __version__ + + def _rewrite_manifest(bundle_dir: str, manifest: dict) -> None: manifest["files"] = _file_table(bundle_dir) with open(os.path.join(bundle_dir, MANIFEST), "w", encoding="utf-8") as fh: diff --git a/chronos/bundle/cli.py b/demos/translation/chronos_translate/bundle/cli.py similarity index 61% rename from chronos/bundle/cli.py rename to demos/translation/chronos_translate/bundle/cli.py index 8fc317a..d4faeca 100644 --- a/chronos/bundle/cli.py +++ b/demos/translation/chronos_translate/bundle/cli.py @@ -1,4 +1,4 @@ -"""``chronos bundle {build|pack|check|probe|translate|eval|prepare-data|finetune|serve}``.""" +"""``chronos-translate bundle {build|pack|check|probe|translate|eval|prepare-data|finetune|serve}``.""" from __future__ import annotations import argparse @@ -12,18 +12,56 @@ def _bundle_dir(value: str | None) -> str: return os.path.abspath(value or os.environ.get("CHRONOS_BUNDLE") or ".") +def _add_lazy_args(parser) -> None: + """SSD-lazy expert options (MLX backend); defaults are the engine defaults.""" + from chronos.lazy_experts import ( + DEFAULT_DECODE_WAIT_S, DEFAULT_RAM_RATIO, DEFAULT_RESIDENCY, DEFAULT_RESIDENCY_DECAY, + DEFAULT_VERIFY_WAIT_S, RESIDENCY_MODES, + ) + g = parser.add_argument_group("lazy experts (MLX)") + g.add_argument("--lazy-experts", action="store_true", + help="keep only the trunk in memory and page routed experts from an SSD cache") + g.add_argument("--paging", default="auto", choices=["auto", "cluster", "expert"], + help="page layout; auto = by training cluster if the model was trained with cluster " + "locality, else per expert (default: auto)") + g.add_argument("--residency", default=DEFAULT_RESIDENCY, choices=list(RESIDENCY_MODES), + help=f"planned = next-use eviction, window = LRU + protected window (default: {DEFAULT_RESIDENCY})") + g.add_argument("--decay", type=float, default=DEFAULT_RESIDENCY_DECAY, + help=f"planned residency: weight of older forwards, [0, 1) (default: {DEFAULT_RESIDENCY_DECAY})") + g.add_argument("--ram-ratio", type=float, default=DEFAULT_RAM_RATIO, + help=f"expert pages kept loaded, × the routed working set (default: {DEFAULT_RAM_RATIO})") + g.add_argument("--decode-wait", type=float, default=DEFAULT_DECODE_WAIT_S, + help=f"seconds a decode step waits for prefetched pages (default: {DEFAULT_DECODE_WAIT_S})") + g.add_argument("--verify-wait", type=float, default=DEFAULT_VERIFY_WAIT_S, + help=f"seconds a speculative verify waits for prefetched pages (default: {DEFAULT_VERIFY_WAIT_S})") + + +def _lazy_options(a): + from chronos.lazy_experts import LazyOptions + return LazyOptions(paging=a.paging, residency=a.residency, residency_decay=a.decay, ram_ratio=a.ram_ratio, + decode_wait_s=a.decode_wait, verify_wait_s=a.verify_wait).validated() + + +def _bundle_model(bundle: str, a): + from .runtime import BundleModel + backend = "mlx" if a.lazy_experts else a.backend + return BundleModel(bundle, device=a.device, dtype=a.dtype, backend=backend, lazy_experts=a.lazy_experts, + lazy_options=_lazy_options(a) if a.lazy_experts else None) + + def main(argv=None) -> int: - p = argparse.ArgumentParser(prog="chronos bundle", description=__doc__) + p = argparse.ArgumentParser(prog="chronos-translate bundle", description=__doc__) sub = p.add_subparsers(dest="cmd", required=True) - b = sub.add_parser("build", help="assemble a bundle from a chronos longrun run directory (read-only on the run)") + b = sub.add_parser("build", help="assemble a bundle from a run directory (read-only on the run)") b.add_argument("--run-dir", required=True) b.add_argument("--out", default=None) b.add_argument("--phase", default="pretrain", choices=["pretrain", "sft"]) b.add_argument("--which", default="best", choices=["best", "final"]) b.add_argument("--name", default=None) b.add_argument("--status", default="interim", choices=["interim", "final"]) - b.add_argument("--wheel", default=None, help="a project_chronos wheel to ship under wheels/") + b.add_argument("--wheel", action="append", default=None, + help="a wheel to ship under wheels/ (repeat: the project_chronos and chronos_translate wheels)") b.add_argument("--probe-n", type=int, default=50, help="FLORES+ dev sentences for the quality probe (0 = skip)") b.add_argument("--pack", action="store_true", help="also write .tar.gz + .sha256") @@ -56,14 +94,18 @@ def main(argv=None) -> int: help="recurrent-depth self-speculative decoding (same greedy output, fewer full-depth forwards)") t.add_argument("--draft-depth", type=int, default=1) t.add_argument("--gamma", type=int, default=4, help="initial draft length (adapts between 1 and 8)") + _add_lazy_args(t) e = sub.add_parser("eval", help="BLEU/chrF on the bundled FLORES+ split") e.add_argument("--bundle", default=None) e.add_argument("--split", default="devtest", choices=["dev", "devtest"]) e.add_argument("-n", type=int, default=0, help="first n sentences (0 = all)") e.add_argument("--repetition-penalty", type=float, default=1.2) + e.add_argument("--backend", default="torch", choices=["torch", "mlx"]) e.add_argument("--device", default="auto") + e.add_argument("--dtype", default="float32") e.add_argument("--out", default=None, help="write the report JSON here") + _add_lazy_args(e) d = sub.add_parser("prepare-data", help="your parallel data → shards tokenized with the bundle tokenizer") d.add_argument("inputs", nargs="+", help=".jsonl/.csv/.tsv/.parquet files with zh and en columns") @@ -75,7 +117,7 @@ def main(argv=None) -> int: d.add_argument("--detokenize-en", action="store_true", help="undo Moses tokenization on the English side") d.add_argument("--workers", type=int, default=4) - f = sub.add_parser("finetune", help="write a chronos longrun spec that starts from the bundle weights (MLX)") + f = sub.add_parser("finetune", help="write a run spec that starts from the bundle weights (MLX)") f.add_argument("--bundle", default=None) f.add_argument("--data", required=True, help="the --out of prepare-data (or a shards dir)") f.add_argument("--run-dir", required=True) @@ -84,6 +126,16 @@ def main(argv=None) -> int: f.add_argument("--hours", type=float, default=None, help="override the tier's wall-clock budget") f.add_argument("--seed", type=int, default=None) f.add_argument("--dry-run", action="store_true", help="write the spec, do not start training") + from chronos.expert_clusters import DEFAULT_LAMBDA + f.add_argument("--cluster-locality", action=argparse.BooleanOptionalAction, default=True, + help="train with the expert-cluster locality constraint so lazy inference can page " + "by cluster (default: on)") + f.add_argument("--lambda-cluster", type=float, default=None, + help=f"constraint strength (default: {DEFAULT_LAMBDA}, from a measured sweep)") + f.add_argument("--cluster-window", type=int, default=None, + help="tokens per locality window (default: nearest power of two to the median SFT " + "record length of --data, clamped to [16, seq_len])") + f.add_argument("--clusters", type=int, default=None, help="number of clusters (default: ceil(E / 2k))") s = sub.add_parser("serve", help="Ollama/OpenAI-protocol server over the bundle's model/ (loopback only)") s.add_argument("--bundle", default=None) @@ -120,7 +172,6 @@ def _run(a) -> int: _print(builder.record_quality_probe(_bundle_dir(a.bundle), a.n, device=a.device)) return 0 if a.cmd == "translate": - from .runtime import BundleModel lines = list(a.text) and [" ".join(a.text)] if a.file: with open(a.file, encoding="utf-8") as fh: @@ -128,19 +179,30 @@ def _run(a) -> int: elif not lines: lines = [ln.strip() for ln in sys.stdin if ln.strip()] rp = a.repetition_penalty if a.repetition_penalty is not None else (1.0 if a.speculative else 1.2) - bm = BundleModel(_bundle_dir(a.bundle), device=a.device, dtype=a.dtype, backend=a.backend) - for hyp in bm.translate(lines, a.direction, max_new_tokens=a.max_new_tokens, repetition_penalty=rp, - speculative=a.speculative, draft_depth=a.draft_depth, gamma=a.gamma): - print(hyp, flush=True) + bm = _bundle_model(_bundle_dir(a.bundle), a) + try: + for hyp in bm.translate(lines, a.direction, max_new_tokens=a.max_new_tokens, repetition_penalty=rp, + speculative=a.speculative, draft_depth=a.draft_depth, gamma=a.gamma): + print(hyp, flush=True) + finally: + bm.close() + if bm.last_stats.get("lazy"): + print(json.dumps({"lazy": bm.last_stats["lazy"]}, ensure_ascii=False), file=sys.stderr) if bm.last_stats.get("speculative"): print(f"[speculative] {json.dumps(bm.last_stats['speculative'])}", file=sys.stderr) return 0 if a.cmd == "eval": - from .runtime import BundleModel, eval_pairs, score + from .runtime import eval_pairs, score bundle = _bundle_dir(a.bundle) pairs = eval_pairs(bundle, a.split) pairs = pairs[: a.n] if a.n else pairs - report = score(BundleModel(bundle, device=a.device), pairs, repetition_penalty=a.repetition_penalty) + bm = _bundle_model(bundle, a) + try: + report = score(bm, pairs, repetition_penalty=a.repetition_penalty) + finally: + bm.close() + if bm.last_stats.get("lazy"): + report["lazy"] = bm.last_stats["lazy"] report["set"] = f"flores_plus_{a.split}" _print(report) if a.out: @@ -157,10 +219,12 @@ def _run(a) -> int: data = os.path.abspath(a.data) shards = os.path.join(data, "shards") if os.path.isdir(os.path.join(data, "shards")) else data spec = write_finetune_spec(_bundle_dir(a.bundle), shards, a.run_dir, tier=a.tier, mode=a.mode, - budget_hours=a.hours, seed=a.seed) + budget_hours=a.hours, seed=a.seed, cluster_locality=a.cluster_locality, + lambda_cluster=a.lambda_cluster, cluster_window=a.cluster_window, + clusters=a.clusters) print(f"[finetune] spec: {spec}") if a.dry_run: - print(f"[finetune] start it with: chronos longrun --spec {spec}") + print(f"[finetune] start it with: chronos-translate run --spec {spec}") return 0 return launch(spec) if a.cmd == "serve": diff --git a/chronos/bundle/docs.py b/demos/translation/chronos_translate/bundle/docs.py similarity index 82% rename from chronos/bundle/docs.py rename to demos/translation/chronos_translate/bundle/docs.py index 3c23c07..832d86b 100644 --- a/chronos/bundle/docs.py +++ b/demos/translation/chronos_translate/bundle/docs.py @@ -60,16 +60,20 @@ def write_examples(out_dir: str) -> None: LAUNCHER = """#!/bin/sh -# Runs `chronos` with this bundle's settings (no git, no network needed). +# Runs Chronos with this bundle's settings (no git, no network needed). +# `bin/chronos bundle …` goes to the translation extension (`chronos-translate +# bundle …`); every other command goes to the Chronos kernel CLI. HERE="$(cd "$(dirname "$0")/.." && pwd)" export CHRONOS_BUNDLE="${CHRONOS_BUNDLE:-$HERE}" -export CHRONOS_MINIMIND_DIR="${CHRONOS_MINIMIND_DIR:-$HERE/third_party/minimind}" -if [ -x "$HERE/.venv/bin/chronos" ]; then exec "$HERE/.venv/bin/chronos" "$@"; fi -exec chronos "$@" +BIN=chronos +if [ "${1:-}" = bundle ]; then BIN=chronos-translate; fi +if [ -x "$HERE/.venv/bin/$BIN" ]; then exec "$HERE/.venv/bin/$BIN" "$@"; fi +exec "$BIN" "$@" """ SETUP = """#!/bin/sh -# One-time setup: a virtualenv in .venv with Chronos and its pinned extras. +# One-time setup: a virtualenv in .venv with the Chronos kernel, the +# translation extension (both from wheels/) and their pinned extras. set -eu HERE="$(cd "$(dirname "$0")/.." && pwd)" PY="${PYTHON:-python3}" @@ -77,13 +81,15 @@ def write_examples(out_dir: str) -> None: [ -d "$HERE/.venv" ] || "$PY" -m venv "$HERE/.venv" . "$HERE/.venv/bin/activate" python -m pip install --upgrade pip -EXTRAS="translate,serve" +EXTRAS="serve" if [ "$(uname -s)" = Darwin ] && [ "$(uname -m)" = arm64 ]; then EXTRAS="$EXTRAS,mlx"; fi -WHEEL="$(ls "$HERE"/wheels/*.whl 2>/dev/null | head -n 1 || true)" -if [ -n "$WHEEL" ]; then - python -m pip install "$WHEEL[$EXTRAS]" +KERNEL="$(ls "$HERE"/wheels/project_chronos-*.whl 2>/dev/null | head -n 1 || true)" +EXT="$(ls "$HERE"/wheels/chronos_translate-*.whl 2>/dev/null | head -n 1 || true)" +if [ -n "$KERNEL" ] && [ -n "$EXT" ]; then + python -m pip install "$KERNEL[$EXTRAS]" "$EXT" else - echo "no wheel in wheels/: install Chronos from source with pip install -e '[$EXTRAS]'" >&2 + echo "wheels/ needs project_chronos-*.whl and chronos_translate-*.whl; from a source tree use" >&2 + echo " pip install -e '[$EXTRAS]' -e '/demos/translation'" >&2 exit 1 fi "$HERE/bin/chronos" bundle check @@ -147,7 +153,7 @@ def _readme_en(m: dict, recs: dict) -> str: "## Quick start", "", "```sh", "tar xzf " + m["name"] + ".tar.gz && cd " + m["name"], - "sh bin/setup.sh # .venv + pinned extras + `chronos bundle check`", + "sh bin/setup.sh # .venv + pinned extras + `bin/chronos bundle check`", "bin/chronos bundle translate \"The weather is very nice today.\"", "bin/chronos bundle translate --direction zh_en \"今天天气很好。\"", "bin/chronos bundle translate --file examples/translate_en.txt", @@ -157,9 +163,15 @@ def _readme_en(m: dict, recs: dict) -> str: "`--speculative` (recurrent-depth self-speculative decoding) gives the same greedy output as plain " "decoding and reports its acceptance rate on stderr. It needs `--repetition-penalty 1.0`, its default. " "On CPU at this model size it was measured slower than plain decoding.", "", - "`bin/chronos` sets `CHRONOS_BUNDLE` and `CHRONOS_MINIMIND_DIR` (the vendored minimind in " - "`third_party/`), so nothing is fetched from the network. Without `bin/`, export both variables and call " - "`chronos bundle …` directly.", "", + "`--lazy-experts` (MLX) keeps only the trunk in memory and pages the routed experts from an SSD cache " + "(`~/.cache/chronos/expert_cache`, or `$CHRONOS_EXPERT_CACHE`). The greedy output is the same. The page " + "layout adapts to the weights: one file per expert cluster when the model was trained with the " + "cluster-locality constraint, one per expert otherwise (`--paging auto|cluster|expert`). " + "`--residency planned` (default) evicts the page needed latest; `window` keeps LRU order. " + "`--decay`, `--ram-ratio`, `--decode-wait` and `--verify-wait` tune it; `--help` lists the defaults. " + "The page counts are printed to stderr.", "", + "`bin/chronos` sets `CHRONOS_BUNDLE`; nothing is fetched from the network. Without `bin/`, export " + "`CHRONOS_BUNDLE` and call `chronos-translate bundle …` directly.", "", "## Next stage: SFT (fine-tuning) on Apple silicon (MLX)", "", "```sh", "# 1. your pairs: .jsonl {\"en\":…, \"zh\":…} | .csv | .tsv | .parquet", @@ -174,8 +186,14 @@ def _readme_en(m: dict, recs: dict) -> str: "`--mode sft` (default) trains the chat prompt `<|im_start|>user\\n翻译成中文,只输出译文:\\n…`; " "`--mode pretrain` continues pretraining on new text; `--mode pretrain+sft` does both (40/60 time split). " "Monitor a run with `bin/chronos monitor --runs-dir work`. The fine-tuned checkpoint lands in " - "`work/run/*_ft_sft.best.pth`; rebuild a bundle from it with `chronos bundle build --run-dir work/run " + "`work/run/*_ft_sft.best.pth`; rebuild a bundle from it with `chronos-translate bundle build --run-dir work/run " "--phase sft`.", "", + "Fine-tuning trains with the expert-cluster locality constraint by default, so the result can be paged " + "by cluster at inference (`--no-cluster-locality` turns it off). Defaults: `--lambda-cluster 0.3` (from " + "a measured sweep on a synthetic task with from-scratch training; its effect on a fine-tune has not " + "been measured) and `--cluster-window` = the power of two nearest the median SFT record length of " + "your data. The spec records where each value came from (`extra.cluster_locality_source`). Models " + "with fewer than two clusters (E ≤ 2k) train without it.", "", "Tiers (from `recommended.json`; every value is labelled with its source):", "", "| Tier | Hours | SFT peak LR | Tokens / step | Warmup | Use |", "|---|---|---|---|---|---|", *_tier_rows(recs), "", @@ -193,7 +211,7 @@ def _readme_en(m: dict, recs: dict) -> str: "## Files", "", "`bundle.json` (identity, provenance, sha256 of every file) · `model/` (weights, config sidecar, tokenizer) · " "`recipes/source_run_spec.json` (the exact training spec) · `recommended.json` (next-stage parameters) · " - "`eval/` (FLORES+) · `data/sft_valid/` (held-out SFT validation shards) · `examples/` · `third_party/` · " + "`eval/` (FLORES+) · `data/sft_valid/` (held-out SFT validation shards) · `examples/` · " "`wheels/` · `bin/`. Verify integrity any time with `bin/chronos bundle check`.", "", "See `NOTICE.md` before redistributing: the weights are for **research use only**.", "", ] @@ -238,8 +256,14 @@ def _readme_zh(m: dict, recs: dict) -> str: "```", "", "`--speculative`(循环深度自推测解码)的 greedy 输出与普通解码一致,接受率打印到 stderr。" "它要求 `--repetition-penalty 1.0`(此时的默认值)。在这个规模的模型上用 CPU 实测,它比普通解码慢。", "", - "`bin/chronos` 会设置 `CHRONOS_BUNDLE` 和 `CHRONOS_MINIMIND_DIR`(指向 `third_party/` 里随包附带的 minimind)," - "全程不需要联网。不用 `bin/` 时,手动导出这两个变量后直接调用 `chronos bundle …`。", "", + "`--lazy-experts`(MLX)只把主干留在内存里,路由专家从 SSD 缓存按需分页加载" + "(`~/.cache/chronos/expert_cache`,或 `$CHRONOS_EXPERT_CACHE`),greedy 输出不变。分页方式按权重自适应:" + "模型训练时开了专家簇局部性约束就按簇读文件,否则按单个专家读(`--paging auto|cluster|expert`)。" + "`--residency planned`(默认)优先淘汰最晚才会用到的页,`window` 保持 LRU 顺序。" + "可用 `--decay`、`--ram-ratio`、`--decode-wait`、`--verify-wait` 调整,默认值见 `--help`。" + "页读取统计打印到 stderr。", "", + "`bin/chronos` 会设置 `CHRONOS_BUNDLE`,全程不需要联网。不用 `bin/` 时,手动导出 `CHRONOS_BUNDLE` " + "后直接调用 `chronos-translate bundle …`。", "", "## 下一阶段:SFT 微调(Apple silicon / MLX)", "", "```sh", "# 1. 准备平行语料:.jsonl {\"en\":…, \"zh\":…} | .csv | .tsv | .parquet", @@ -254,7 +278,11 @@ def _readme_zh(m: dict, recs: dict) -> str: "`--mode sft`(默认)训练对话格式 `<|im_start|>user\\n翻译成中文,只输出译文:\\n…`;" "`--mode pretrain` 在新文本上继续预训练;`--mode pretrain+sft` 两者都做(时间按 40/60 分配)。" "用 `bin/chronos monitor --runs-dir work` 监控训练。微调后的检查点在 `work/run/*_ft_sft.best.pth`," - "可用 `chronos bundle build --run-dir work/run --phase sft` 重新打包。", "", + "可用 `chronos-translate bundle build --run-dir work/run --phase sft` 重新打包。", "", + "微调默认带专家簇局部性约束训练,这样得到的模型在推理时可以按簇分页(`--no-cluster-locality` 关闭)。" + "默认值:`--lambda-cluster 0.3`(来自合成任务上从头训练的实测扫描,对微调的效果尚未实测);" + "`--cluster-window` 取最接近你数据中位 SFT 记录长度的 2 的幂。spec 中记录了每个值的来源" + "(`extra.cluster_locality_source`)。簇数少于 2(E ≤ 2k)的模型不加这项约束。", "", "档位(来自 `recommended.json`,每个数值都标注了来源):", "", "| 档位 | 小时 | SFT 峰值 LR | 每步 token | Warmup | 用途 |", "|---|---|---|---|---|---|", *_tier_rows(recs), "", @@ -271,7 +299,7 @@ def _readme_zh(m: dict, recs: dict) -> str: "## 文件", "", "`bundle.json`(身份、来源、每个文件的 sha256)· `model/`(权重、配置 sidecar、分词器)· " "`recipes/source_run_spec.json`(产生这份权重的训练配置)· `recommended.json`(下一阶段参数)· " - "`eval/`(FLORES+)· `data/sft_valid/`(留出的 SFT 验证分片)· `examples/` · `third_party/` · `wheels/` · " + "`eval/`(FLORES+)· `data/sft_valid/`(留出的 SFT 验证分片)· `examples/` · `wheels/` · " "`bin/`。随时可用 `bin/chronos bundle check` 校验完整性。", "", "再分发前请阅读 `NOTICE.md`:权重**仅供研究使用**。", "", ] @@ -279,7 +307,6 @@ def _readme_zh(m: dict, recs: dict) -> str: def _notice(m: dict) -> str: - mm = (m.get("third_party") or {}).get("minimind") or {} return "\n".join([ "# NOTICE", "", "## Weights: research use only", "", @@ -294,9 +321,8 @@ def _notice(m: dict) -> str: "evaluation only**. Do not use them commercially or redistribute them as a product without checking the " "licences of the underlying corpora yourself.", "", "## Code", "", - "- Chronos (`wheels/`, `bin/`): Apache-2.0.", - f"- minimind (`third_party/minimind/`, commit `{mm.get('commit') or 'unknown'}`): Apache-2.0, " - "© jingyaogong. Its `LICENSE` file is included.", + "- Chronos (`wheels/`, `bin/`): Apache-2.0. Since 0.3.2 the kernel has no third-party model code; " + "see `THIRD_PARTY_NOTICES.md` in the Chronos wheel.", "- FLORES+ files in `eval/` keep their CC BY-SA 4.0 licence (attribution: the FLORES+ / OLDI project).", "", "## No warranty", "", "Provided as is. Machine translation output can be wrong; check it before relying on it.", "", diff --git a/chronos/bundle/finetune.py b/demos/translation/chronos_translate/bundle/finetune.py similarity index 84% rename from chronos/bundle/finetune.py rename to demos/translation/chronos_translate/bundle/finetune.py index 3280ea2..f2066ce 100644 --- a/chronos/bundle/finetune.py +++ b/demos/translation/chronos_translate/bundle/finetune.py @@ -41,11 +41,11 @@ def prepare_data(bundle_dir: str, inputs: list[str], out_dir: str, *, zh_field: ``inputs`` are files (``.jsonl``/``.csv``/``.tsv``/``.parquet``) with a Chinese and an English column. FLORES+ (shipped in the bundle) is removed from the data so the bundled evaluation stays held out.""" - from chronos.data.corpus.clean import CleanConfig - from chronos.data.corpus.evalsets import load_eval_sets - from chronos.data.corpus.pipeline import PairSource, build_corpus - from chronos.data.corpus.readers import count_rows - from chronos.data.corpus.shards import build_shards + from chronos_translate.corpus.clean import CleanConfig + from chronos_translate.corpus.evalsets import load_eval_sets + from chronos_translate.corpus.pipeline import PairSource, build_corpus + from chronos_translate.corpus.readers import count_rows + from chronos_translate.corpus.shards import build_shards bundle_dir, out_dir = os.path.abspath(bundle_dir), os.path.abspath(out_dir) manifest = load_bundle_manifest(bundle_dir) if os.path.exists(os.path.join(out_dir, "shards", "shards_manifest.json")): @@ -102,27 +102,33 @@ def _check_shards(shards_dir: str, phases: list[dict]) -> None: def write_finetune_spec(bundle_dir: str, shards_dir: str, run_dir: str, *, tier: str = "quick", mode: str = "sft", - budget_hours: float | None = None, seed: int | None = None) -> str: - """Write ``/finetune_spec.json`` for ``chronos longrun --spec``.""" + budget_hours: float | None = None, seed: int | None = None, cluster_locality: bool = True, + lambda_cluster: float | None = None, cluster_window: int | None = None, + clusters: int | None = None) -> str: + """Write ``/finetune_spec.json`` for ``chronos-translate run --spec``. + + The expert-cluster locality constraint is on by default; see + ``recommend.cluster_locality_config`` for the defaults and their sources.""" from .recommend import longrun_spec bundle_dir = os.path.abspath(bundle_dir) with open(os.path.join(bundle_dir, "recipes", "source_run_spec.json"), encoding="utf-8") as fh: recipe = json.load(fh) spec = longrun_spec(bundle_dir, recipe, run_dir=run_dir, shards_dir=shards_dir, tier=tier, mode=mode, - budget_hours=budget_hours, seed=seed) + budget_hours=budget_hours, seed=seed, cluster_locality=cluster_locality, + lambda_cluster=lambda_cluster, cluster_window=cluster_window, clusters=clusters) _check_shards(spec["shards_dir"], spec["phases"]) os.makedirs(spec["run_dir"], exist_ok=True) path = os.path.join(spec["run_dir"], "finetune_spec.json") if os.path.exists(os.path.join(spec["run_dir"], "checkpoints", "latest.state.pkl")): - # longrun resumes from latest.state.pkl; a different spec would mix two runs. + # the run resumes from latest.state.pkl; a different spec would mix two runs. raise FileExistsError(f"{spec['run_dir']} already holds a run; resume it with " - f"`chronos longrun --spec {path}` or choose a new --run-dir") + f"`chronos-translate run --spec {path}` or choose a new --run-dir") with open(path, "w", encoding="utf-8") as fh: json.dump(spec, fh, ensure_ascii=False, indent=2) return path def launch(spec_path: str, budget_hours: float | None = None) -> int: - from chronos.mlx.training.longrun import main as longrun_main + from ..run import main as run_main # TranslationRunSpec: bleu_samples / probe_samples argv = ["--spec", spec_path] + (["--budget-hours", str(budget_hours)] if budget_hours is not None else []) - return longrun_main(argv) + return run_main(argv) diff --git a/chronos/bundle/recommend.py b/demos/translation/chronos_translate/bundle/recommend.py similarity index 78% rename from chronos/bundle/recommend.py rename to demos/translation/chronos_translate/bundle/recommend.py index cb97842..0d4be7d 100644 --- a/chronos/bundle/recommend.py +++ b/demos/translation/chronos_translate/bundle/recommend.py @@ -10,7 +10,7 @@ Nothing here is a measured optimum. The tiers trade wall time for quality on a single Apple-silicon or CUDA machine; ``chronos bundle finetune --tier`` -turns a tier into a ``chronos longrun`` spec. +turns a tier into a ``chronos-translate run`` spec. """ from __future__ import annotations @@ -18,6 +18,9 @@ import json import os +# Generic helpers (kernel); re-exported for existing imports. +from chronos.expert_clusters import cluster_locality_config, median_record_tokens # noqa: F401 + # Wall-clock budgets per tier (hours) and the reason for each. TIERS = { "smoke": {"hours": 0.05, "why": "proves the pipeline end to end on the bundled examples (minutes)"}, @@ -99,18 +102,39 @@ def tier_phases(recipe: dict, tier: str, mode: str = "sft") -> list[dict]: def longrun_spec(bundle_dir: str, recipe: dict, *, run_dir: str, shards_dir: str, tier: str, - mode: str = "sft", budget_hours: float | None = None, seed: int | None = None) -> dict: - """A ``chronos longrun`` RunSpec (as a dict) that starts from the bundle weights.""" + mode: str = "sft", budget_hours: float | None = None, seed: int | None = None, + cluster_locality: bool = True, lambda_cluster: float | None = None, + cluster_window: int | None = None, clusters: int | None = None) -> dict: + """A ``TranslationRunSpec`` (as a dict) that starts from the bundle weights. + + The cluster-locality constraint is on by default (``cluster_locality_config``).""" from .builder import load_bundle_manifest manifest = load_bundle_manifest(bundle_dir) bundle_dir = os.path.abspath(bundle_dir) smoke = tier == "smoke" + model_config = copy.deepcopy(recipe["model_config"]) + phases = tier_phases(recipe, tier, mode) + seq_len = min((int(p["seq_len"]) for p in phases if p.get("seq_len")), default=None) + # Decide from the weights being fine-tuned: the recipe may omit fields that + # took class defaults when it ran. + topology = dict(model_config) + try: + from chronos.model.checkpoint import read_checkpoint_config + saved, _ = read_checkpoint_config(os.path.join(bundle_dir, manifest["model"]["checkpoint"])) + topology.update({k: saved[k] for k in ("num_experts", "num_experts_per_tok", "use_moe", + "max_position_embeddings") if saved and k in saved}) + except (OSError, ValueError): + pass + locality = cluster_locality_config(topology, shards_dir, enabled=cluster_locality, + lambda_cluster=lambda_cluster, window=cluster_window, clusters=clusters, + seq_len=seq_len) + model_config.update(locality["values"]) spec = { "run_dir": os.path.abspath(run_dir), "shards_dir": os.path.abspath(shards_dir), "tokenizer_dir": os.path.join(bundle_dir, manifest["tokenizer"]["dir"]), - "model_config": copy.deepcopy(recipe["model_config"]), - "phases": tier_phases(recipe, tier, mode), + "model_config": model_config, + "phases": phases, "budget_hours": float(budget_hours if budget_hours is not None else TIERS[tier]["hours"]), "eval_reserve_fraction": 0.1 if smoke else 0.04, "log_every_steps": 2 if smoke else 20, @@ -126,7 +150,7 @@ def longrun_spec(bundle_dir: str, recipe: dict, *, run_dir: str, shards_dir: str "init_checkpoint": os.path.join(bundle_dir, manifest["model"]["checkpoint"]), "export_prefix": manifest["name"].replace("-", "_") + "_ft", "extra": {"raw_root": os.path.join(bundle_dir, "eval"), "from_bundle": manifest["name"], - "tier": tier, "mode": mode}, + "tier": tier, "mode": mode, "cluster_locality_source": locality["source"]}, } return spec @@ -158,6 +182,11 @@ def build_recommendations(recipe: dict, planner_preset: dict | None, decode: dic for p in recipe.get("phases", [])}, "recipe"), "model_lambdas": _labelled({k: v for k, v in recipe.get("model_config", {}).items() if k.startswith(("lambda_", "ponder", "fallback_mask"))}, "recipe"), + "cluster_locality": _labelled( + cluster_locality_config(recipe.get("model_config", {}), None)["values"], "rule", + "on by default for `chronos bundle finetune` (--no-cluster-locality to disable); lambda from " + "a measured sweep on a synthetic task (from-scratch training), window from the median SFT " + "record length of the fine-tune data when it has one"), }, "torch_stages": torch_stages, "data": _labelled({ @@ -167,7 +196,7 @@ def build_recommendations(recipe: dict, planner_preset: dict | None, decode: dic "zh_fullwidth_punct": True}, "min_pairs_hint": "below ~5k pairs prefer tier 'quick' with mode 'sft'; the 50M model overfits " "small sets quickly — watch valid_ce in metrics.jsonl", - }, "recipe", "defaults of chronos.data.corpus (build_corpus / build_shards) used for the bundled weights"), + }, "recipe", "defaults of chronos_translate.corpus (build_corpus / build_shards) used for the bundled weights"), } if decode: out["decode"] = decode diff --git a/chronos/bundle/runtime.py b/demos/translation/chronos_translate/bundle/runtime.py similarity index 72% rename from chronos/bundle/runtime.py rename to demos/translation/chronos_translate/bundle/runtime.py index 818d042..3fbdd52 100644 --- a/chronos/bundle/runtime.py +++ b/demos/translation/chronos_translate/bundle/runtime.py @@ -7,6 +7,11 @@ self-speculative decoding (same greedy output, fewer full-depth forwards); it needs ``repetition_penalty == 1`` because the penalty changes the target distribution position by position. + +``lazy_experts=True`` (MLX) keeps only the trunk in memory and pages routed +experts from an SSD cache (``chronos.lazy_experts``): by training cluster when +the checkpoint was trained with cluster locality, per expert otherwise, with +next-use planned residency by default. The greedy output is the same. """ from __future__ import annotations @@ -20,7 +25,8 @@ class BundleModel: """Weights + tokenizer of one bundle, ready for greedy translation.""" - def __init__(self, bundle_dir: str, *, device: str = "cpu", dtype: str = "float32", backend: str = "torch"): + def __init__(self, bundle_dir: str, *, device: str = "cpu", dtype: str = "float32", backend: str = "torch", + lazy_experts: bool = False, lazy_options=None, cache_root: str | None = None): import torch from tokenizers import Tokenizer from chronos.model.checkpoint import chronos_config_from_checkpoint, load_checkpoint_into_model @@ -35,6 +41,13 @@ def __init__(self, bundle_dir: str, *, device: str = "cpu", dtype: str = "float3 self.config, _ = chronos_config_from_checkpoint(self.checkpoint) if self.tokenizer.get_vocab_size() > int(self.config.vocab_size): raise ValueError("bundle tokenizer is larger than the model vocabulary") + self.prompt_format = self.manifest.get("prompt_format", "pretrain_tags") + tid = self.tokenizer.token_to_id + self.stop_ids = {tid(t) for t in STOP_TOKENS if tid(t) is not None} + self.engine, self.lazy_info = None, {} + if lazy_experts: + self._init_lazy(backend, device, dtype, lazy_options, cache_root) + return model = ChronosForCausalLM(self.config) load_checkpoint_into_model(model, self.checkpoint, map_location="cpu") self.backend, self.last_stats = backend, {} @@ -59,9 +72,34 @@ def __init__(self, bundle_dir: str, *, device: str = "cpu", dtype: str = "float3 self.device = device else: raise ValueError(f"backend must be 'torch' or 'mlx', not {backend!r}") - self.prompt_format = self.manifest.get("prompt_format", "pretrain_tags") - tid = self.tokenizer.token_to_id - self.stop_ids = {tid(t) for t in STOP_TOKENS if tid(t) is not None} + + def _init_lazy(self, backend, device, dtype, lazy_options, cache_root): + import mlx.core as mx + from chronos.lazy_experts import LazyOptions, build_mlx_lazy_engine, warm_ids + if backend != "mlx": + raise ValueError("lazy_experts needs backend='mlx'") + if not getattr(self.config, "use_moe", True): + raise ValueError("lazy_experts needs a MoE checkpoint") + if device == "cpu": + mx.set_default_device(mx.cpu) + elif device not in ("auto", "gpu"): + raise ValueError(f"MLX backend runs on 'gpu' or 'cpu', not {device!r}") + self.lazy_options = (lazy_options or LazyOptions()).validated() + # Outside the bundle (it may be read-only and its files are hashed). + root = cache_root or os.environ.get("CHRONOS_EXPERT_CACHE") or os.path.join( + os.path.expanduser("~"), ".cache", "chronos", "expert_cache") + self.engine, self.lazy_info = build_mlx_lazy_engine(self.checkpoint, self.config, self.lazy_options, + cache_root=root, dtype=dtype) + self.engine.store.warm_up(warm_ids(self.config, self.lazy_info)) + self.model, self.backend, self.last_stats = self.engine.model, "mlx", {} + self.precision = None + self.device = "cpu" if device == "cpu" else "gpu" + + def close(self) -> None: + """Stop the lazy engine's prefetch thread (no-op without lazy experts).""" + if self.engine is not None: + self.engine.stop() + self.engine = None # ---- prompts --------------------------------------------------------------- def directions(self) -> list[str]: @@ -74,7 +112,7 @@ def prompt_ids(self, src: str, direction: str = "en_zh") -> list[int]: if self.prompt_format == "pretrain_tags": a, b = LANG_TAGS[direction] return [tok.token_to_id(a)] + tok.encode(src, add_special_tokens=False).ids + [tok.token_to_id(b)] - from chronos.data.corpus.shards import SFT_PROMPT_EN_ZH + from chronos_translate.corpus.shards import SFT_PROMPT_EN_ZH text = f"<|im_start|>user\n{SFT_PROMPT_EN_ZH}{src}<|im_end|>\n<|im_start|>assistant\n" return tok.encode(text, add_special_tokens=False).ids @@ -85,7 +123,9 @@ def greedy(self, prompt: list[int], limit: int, repetition_penalty: float = 1.0, if speculative and repetition_penalty != 1.0: raise ValueError("speculative decoding needs repetition_penalty=1.0 (the penalty changes the target " "distribution at every position)") - if speculative: + if self.engine is not None: + out = self._lazy(prompt, limit, repetition_penalty, speculative, draft_depth, gamma) + elif speculative: out = self._speculative(prompt, limit, draft_depth, gamma) elif self.backend == "mlx": out = self._greedy_mlx(prompt, limit, repetition_penalty) @@ -138,6 +178,29 @@ def _greedy_mlx(self, prompt, limit, repetition_penalty): logits, _, cache = self.model(mx.array([[nxt]], dtype=mx.int32), cache=cache) return out + def _lazy(self, prompt, limit, repetition_penalty, speculative, draft_depth, gamma): + import mlx.core as mx + kw = dict(speculative=True, draft_depth=draft_depth, gamma=gamma) if speculative else {} + out = [] + for tok in self.engine.generate(mx.array([prompt], dtype=mx.int32), max_new_tokens=limit, temperature=0.0, + top_p=1.0, eos_token_id=sorted(self.stop_ids), + repetition_penalty=float(repetition_penalty), + **self.lazy_options.generate_kwargs(), **kw): + if tok in self.stop_ids: + break + out.append(int(tok)) + st = dict(self.engine.last_stats or {}) + agg = self.last_stats.setdefault("lazy", {"tokens": 0, "sync_ssd_loads": 0, "cluster_loads": 0}) + agg["tokens"] += len(out) + agg["sync_ssd_loads"] += int(st.get("sync_ssd_loads", 0)) + agg["cluster_loads"] = int(self.engine.store.stats().get("cluster_loads", 0)) + if speculative and st.get("speculative"): + spec = self.last_stats.setdefault("speculative", {"proposed": 0, "accepted": 0, "verify_calls": 0, + "draft_calls": 0, "generated": 0}) + for k in spec: + spec[k] += int(st["speculative"].get(k, 0)) + return out + def _speculative(self, prompt, limit, draft_depth, gamma): eos = sorted(self.stop_ids) if self.backend == "mlx": @@ -169,6 +232,11 @@ def translate(self, sources: list[str], direction: str = "en_zh", *, max_new_tok gen = self.greedy(self.prompt_ids(src, direction), limit, repetition_penalty, speculative=speculative, draft_depth=draft_depth, gamma=gamma) out.append(self.tokenizer.decode(gen, skip_special_tokens=True)) + lazy = self.last_stats.get("lazy") + if lazy: + lazy.update({k: self.lazy_info[k] for k in ("paging_resolved", "num_pages", "trained_with_clusters", + "effective_expert_budget") if k in self.lazy_info}) + lazy["residency"] = self.lazy_options.residency spec = self.last_stats.get("speculative") if spec: spec["acceptance_rate"] = round(spec["accepted"] / spec["proposed"], 4) if spec["proposed"] else 0.0 @@ -178,7 +246,7 @@ def translate(self, sources: list[str], direction: str = "en_zh", *, max_new_tok def eval_pairs(bundle_dir: str, split: str = "dev") -> list[tuple[str, str]]: """FLORES+ (en, zh) pairs shipped in ``/eval``.""" - from chronos.data.corpus.evalsets import load_eval_sets + from chronos_translate.corpus.evalsets import load_eval_sets name = "flores_dev" if split == "dev" else "flores_devtest" return load_eval_sets(os.path.join(os.path.abspath(bundle_dir), "eval"), [name]).get(name, []) diff --git a/demos/translation/chronos_translate/cli.py b/demos/translation/chronos_translate/cli.py new file mode 100644 index 0000000..dce2cfa --- /dev/null +++ b/demos/translation/chronos_translate/cli.py @@ -0,0 +1,59 @@ +"""``chronos-translate``: the en↔zh translation demo's command line. + + chronos-translate corpus download|build|shards|docmix … data pipeline + chronos-translate run --spec recipes/enzh_50m_72h.json time-budgeted MLX run + chronos-translate doc-run --spec doc-mix variant + chronos-translate inspect --run-dir runs/… offline FLORES+ probe + chronos-translate bundle build|check|translate|… model bundles + +Kernel commands (``chronos serve``, ``chronos monitor``, ``chronos tokenizer``, +…) stay in the ``chronos`` CLI. +""" +from __future__ import annotations + +import importlib +import sys + +CORPUS = { + "download": "chronos_translate.corpus.sources", + "build": "chronos_translate.corpus.presets", + "shards": "chronos_translate.corpus.shards", + "docmix": "chronos_translate.corpus.docmix", +} +COMMANDS = { + "run": "chronos_translate.run", + "doc-run": "chronos_translate.doc_run", + "inspect": "chronos_translate.probe", + "bundle": "chronos_translate.bundle.cli", +} + + +def _usage() -> str: + return (__doc__ or "").strip() + "\n" + + +def main(argv=None) -> int: + argv = list(sys.argv[1:] if argv is None else argv) + if not argv or argv[0] in {"-h", "--help", "help"}: + print(_usage()) + return 0 if argv else 2 + if argv[0] in {"-V", "--version"}: + from . import __version__ + print(__version__) + return 0 + cmd, rest = argv[0], argv[1:] + if cmd == "corpus": + if not rest or rest[0] not in CORPUS: + print("usage: chronos-translate corpus {" + "|".join(CORPUS) + "} [options]", file=sys.stderr) + return 2 + module, rest = CORPUS[rest[0]], rest[1:] + elif cmd in COMMANDS: + module = COMMANDS[cmd] + else: + print(f"unknown command {cmd!r}\n\n{_usage()}", file=sys.stderr) + return 2 + return int(importlib.import_module(module).main(rest) or 0) + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/chronos/data/corpus/__init__.py b/demos/translation/chronos_translate/corpus/__init__.py similarity index 100% rename from chronos/data/corpus/__init__.py rename to demos/translation/chronos_translate/corpus/__init__.py diff --git a/chronos/data/corpus/clean.py b/demos/translation/chronos_translate/corpus/clean.py similarity index 100% rename from chronos/data/corpus/clean.py rename to demos/translation/chronos_translate/corpus/clean.py diff --git a/demos/translation/chronos_translate/corpus/docmix.py b/demos/translation/chronos_translate/corpus/docmix.py new file mode 100644 index 0000000..dee18ff --- /dev/null +++ b/demos/translation/chronos_translate/corpus/docmix.py @@ -0,0 +1,566 @@ +"""Document-mix translation shards: science-weighted subsets, merged n-in-1 +samples up to a context limit, and bidirectional SFT records. + +Why: ``shards_v1`` holds single sentences (SFT p50 75 / p99 225 tokens), so a +model trained on it never sees long inputs. Here consecutive rows of the +same corpus unit are merged into one sample (2-in-1 … n-in-1). + +Measured on ``corpus_v1/pairs`` (adjacent-pair vs random-pair content-word +overlap): most WMT19 units and iic keep document order (ratio 2–25), while +OPUS-100 and WMT19 unit 00012 are shuffled (ratio ≈ 1). Each block is +classified here with the same statistic; merges inside an ordered block are +coherent discourse. Merges of shuffled rows are random concatenations: they +teach length and position handling but not coherence, and the manifest +counts them separately. Document boundaries are not stored in the corpus, +so some ordered merges cross a document boundary. + +Layout of ``out_dir`` (same readers as ``shards.py`` plus one extra file): + pretrain/{train,valid}/*.bin flat tokens, ``<|endoftext|>``-separated + sft/{train,valid}/.bin/.idx/.plen as in shards.py + sft/{train,valid}/.dir uint8 per record: 0 = en→zh, 1 = zh→en + sft/{train,valid}/.n uint8 per record: sentences merged (1..255) +""" +from __future__ import annotations + +import json +import math +import os +import random +import re +import time +from concurrent.futures import ProcessPoolExecutor +from dataclasses import asdict, dataclass, field + +import numpy as np + +from chronos_translate.corpus.shards import SFT_PROMPTS, _dtype_for + +DIRECTIONS = ("en_zh", "zh_en") +DIR_CODE = {d: i for i, d in enumerate(DIRECTIONS)} +# Share of SAMPLES per merge size; "long" draws n uniformly in [6, n_max] +# where n_max is what fits the context limit. +DEFAULT_SHARES = {"1": 0.40, "2": 0.20, "3": 0.15, "4": 0.10, "5": 0.05, "long": 0.10} + +# Science score = keyword hits per row (English: a trailing "*" is a prefix, +# otherwise a whole word with an optional plural "s"; Chinese: substrings). +# Generic UN/policy vocabulary (measure, general, physical, data protection) +# is avoided on purpose. Chunks are ranked by mean score per row. +SCIENCE_EN = ( + "research*", "scien*", "experiment*", "laborator*", "clinic*", "patient", "disease", "medic*", + "vaccin*", "virus", "viruses", "bacteri*", "gene", "genes", "genetic*", "genom*", "protein", "cell", + "molecul*", "chemi*", "physics", "physicist", "quantum", "particle", "atom", "atomic", "nuclear", + "energy", "solar", "battery", "batteries", "electron*", "electric*", "climate", "carbon", "emission", + "ocean*", "geolog*", "ecolog*", "ecosystem", "species", "evolution*", "biolog*", "neuro*", "brain", + "algorithm*", "comput*", "software", "robot*", "artificial intelligence", "machine learning", + "engineer*", "technolog*", "satellite", "planet*", "astronom*", "telescope", "mathemat*", "equation", + "statistic*", "hypothes*", "sensor", "semiconductor", "polymer", "catalys*", "reactor", "fusion", + "laser", "optic*", "spectr*", "drug", "therap*", "diagnos*", "infection", "cancer", "tumou?r", "dna", + "rna", "enzyme", "microb*", "fossil", "isotope", "radiation", "theorem", "physiolog*", "pharmac*", +) + + +def _en_pattern(term: str) -> str: + if term.endswith("*"): + return re.escape(term[:-1]) + r"\w*" + body = term if "?" in term else re.escape(term) + return body + r"s?\b" + + + +SCIENCE_ZH = ( + "研究", "科学", "实验", "实验室", "临床", "患者", "疾病", "医学", "医疗", "健康", "疫苗", "病毒", "细菌", + "基因", "蛋白", "细胞", "分子", "化学", "物理", "量子", "粒子", "原子", "核能", "能源", "太阳能", "电池", + "电子", "气候", "碳", "排放", "海洋", "地质", "生态", "物种", "进化", "生物", "神经", "大脑", "算法", + "计算", "软件", "数据", "网络", "机器人", "人工智能", "机器学习", "工程", "技术", "卫星", "太空", "行星", + "天文", "望远镜", "数学", "方程", "统计", "理论", "假设", "测量", "传感", "材料", "半导体", "聚合物", + "催化", "反应堆", "聚变", "激光", "光学", "光谱", "药物", "治疗", "诊断", +) +_SCI_EN_RE = re.compile(r"\b(?:" + "|".join(_en_pattern(s) for s in SCIENCE_EN) + r")") +_SCI_ZH_RE = re.compile("|".join(re.escape(s) for s in sorted(SCIENCE_ZH, key=len, reverse=True))) +# Adjacency statistic (same as the measurement that motivated this module). +_WORD = re.compile(r"[a-z]{4,}") +_STOP = frozenset(( + "that this with from have will been were they their there which would could about into than them these " + "those what when where while also more most such only over other some very after before because being " + "between both each every however should since through under until upon your said says year years").split()) + + +def science_hits(en: str, zh: str) -> int: + """Keyword hits of one pair (English side lower-cased, Chinese side as is).""" + return len(_SCI_EN_RE.findall(en.lower())) + len(_SCI_ZH_RE.findall(zh)) + + +def _bag(text: str) -> frozenset: + return frozenset(w for w in _WORD.findall(text.lower()) if w not in _STOP) + + +@dataclass +class DocMixSpec: + fraction: float # share of train rows kept (0.15 = 15 %) + ctx_len: int # SFT record cap = pretrain window (tokens) + shares: dict = field(default_factory=lambda: dict(DEFAULT_SHARES)) + long_min: int = 6 # "long" samples: n ~ U[long_min, n_cap] + zh_en_share: float = 1 / 3 # en→zh : zh→en = 2 : 1 (SFT and tagged pretrain docs) + mono_share: float = 0.5 # pretrain: monolingual docs; the rest are tagged pairs + para_break: float = 0.15 # chance that a sentence boundary becomes a newline + science_weights: tuple = (2.0, 1.2, 1.0) # high / medium / other + science_quantiles: tuple = (0.10, 0.20) # chunk shares of the high / medium tier + chunk_rows: int = 256 # selection unit (consecutive rows of one part) + block_rows: int = 65536 # adjacency classification window + ordered_ratio: float = 2.0 # adjacent/random overlap ratio for "ordered" + ordered_min_adj: float = 0.05 # ... and at least this adjacent overlap + seed: int = 20261107 + + +def _scan_part(args) -> dict: + path, block_rows, seed = args + import pyarrow.parquet as pq + table = pq.read_table(path, columns=["zh", "en"]) + zh, en = table["zh"].to_pylist(), table["en"].to_pylist() + sci = np.fromiter((science_hits(e, z) for e, z in zip(en, zh)), dtype=np.int16, count=len(en)) + rng = random.Random(seed) + blocks = [] + for b0 in range(0, len(en), block_rows): + bags = [_bag(s) for s in en[b0:b0 + block_rows]] + n = len(bags) + adj = sum(1 for a, b in zip(bags, bags[1:]) if a & b) + k = min(20000, 2 * n) if n > 1 else 0 + rnd = sum(1 for _ in range(k) if bags[rng.randrange(n)] & bags[rng.randrange(n)]) + blocks.append((adj, max(0, n - 1), rnd, k)) + return {"name": os.path.basename(path), "rows": len(en), "sci": sci, + "blocks": np.asarray(blocks, dtype=np.int64).reshape(-1, 4)} + + +def scan_corpus(pairs_dir: str, cache_dir: str, *, block_rows: int = 65536, workers: int = 8, + log=print) -> dict: + """Science hits per row and adjacency counts per block, cached in ``cache_dir``.""" + os.makedirs(cache_dir, exist_ok=True) + meta_path = os.path.join(cache_dir, "scan.json") + names = sorted(p for p in os.listdir(pairs_dir) if p.endswith(".parquet")) + if os.path.exists(meta_path): + meta = json.load(open(meta_path, encoding="utf-8")) + if meta.get("names") == names and meta.get("block_rows") == block_rows: + data = np.load(os.path.join(cache_dir, "scan.npz")) + return {"names": names, "block_rows": block_rows, "rows": meta["rows"], + "sci": {n: data[f"sci/{n}"] for n in names}, "blocks": {n: data[f"blk/{n}"] for n in names}} + t0 = time.time() + jobs = [(os.path.join(pairs_dir, n), block_rows, 17 + i) for i, n in enumerate(names)] + with ProcessPoolExecutor(max_workers=workers) as pool: + results = {r["name"]: r for r in pool.map(_scan_part, jobs)} + out = {"names": names, "block_rows": block_rows, "rows": {n: results[n]["rows"] for n in names}, + "sci": {n: results[n]["sci"] for n in names}, "blocks": {n: results[n]["blocks"] for n in names}} + np.savez(os.path.join(cache_dir, "scan.npz"), **{f"sci/{n}": out["sci"][n] for n in names}, + **{f"blk/{n}": out["blocks"][n] for n in names}) + json.dump({"names": names, "block_rows": block_rows, "rows": out["rows"], "keywords_en": SCIENCE_EN, + "keywords_zh": SCIENCE_ZH, "elapsed_s": round(time.time() - t0, 1)}, + open(meta_path, "w", encoding="utf-8"), ensure_ascii=False, indent=1) + log(f"[docmix] scanned {len(names)} parts in {time.time() - t0:.0f}s") + return out + + +def block_ordered(blocks: np.ndarray, ratio: float, min_adj: float) -> np.ndarray: + """Per block: adjacent-pair overlap ≥ ``ratio`` × random-pair overlap and ≥ ``min_adj``.""" + adj = blocks[:, 0] / np.maximum(blocks[:, 1], 1) + rnd = blocks[:, 2] / np.maximum(blocks[:, 3], 1) + return (adj >= ratio * np.maximum(rnd, 1e-3)) & (adj >= min_adj) + + +def select_chunks(scan: dict, spec: DocMixSpec) -> dict: + """Science-weighted chunk sample of the train parts, without replacement. + + Chunks (``chunk_rows`` consecutive rows) are ranked by mean keyword hits + per row; the top ``science_quantiles[0]`` get weight ``science_weights[0]``, + the next ``science_quantiles[1]`` the medium weight, the rest 1. Keys + ``log(u)/w`` (Efraimidis–Spirakis) pick chunks until ``fraction`` of all + train rows is reached; consecutive picked chunks form one run. + """ + names = [n for n in scan["names"] if n.startswith("train.")] + rows_of, cr = scan["rows"], spec.chunk_rows + part, start, stop, mean, ordered = [], [], [], [], [] + for pi, name in enumerate(names): + r = rows_of[name] + starts = np.arange(0, r, cr) + stops = np.minimum(starts + cr, r) + sci = np.add.reduceat(scan["sci"][name].astype(np.float64), starts) if r else np.zeros(0) + blk = block_ordered(scan["blocks"][name], spec.ordered_ratio, spec.ordered_min_adj) + part.append(np.full(len(starts), pi)); start.append(starts); stop.append(stops) + mean.append(sci / (stops - starts)); ordered.append(blk[starts // scan["block_rows"]]) + part, start, stop = np.concatenate(part), np.concatenate(start), np.concatenate(stop) + mean, ordered = np.concatenate(mean), np.concatenate(ordered) + q_hi, q_mid = spec.science_quantiles + t_hi = float(np.quantile(mean, 1 - q_hi)) + t_mid = float(np.quantile(mean, 1 - q_hi - q_mid)) + tier = np.where(mean >= t_hi, 0, np.where(mean >= t_mid, 1, 2)) + weight = np.asarray(spec.science_weights, dtype=np.float64)[tier] + rng = np.random.default_rng(spec.seed) + keys = np.log(rng.random(len(part))) / weight + order = np.argsort(-keys, kind="stable") + total = int((stop - start).sum()) + target = int(round(spec.fraction * total)) + cum = np.cumsum((stop - start)[order]) + take = np.sort(order[:int(np.searchsorted(cum, target)) + 1]) + runs = {name: [] for name in names} + for ci in take: + lst = runs[names[part[ci]]] + s, e, o = int(start[ci]), int(stop[ci]), bool(ordered[ci]) + if lst and lst[-1][1] == s and lst[-1][2] == o: + lst[-1][1] = e # extend the run + else: + lst.append([s, e, o]) + rows = stop - start + stats = {"train_rows_total": total, "rows_selected": int(rows[take].sum()), + "chunks_selected": int(len(take)), "chunks_total": int(len(part)), + "tier_thresholds_mean_hits": {"high": round(t_hi, 4), "medium": round(t_mid, 4)}, + "tier_row_share_all": [round(float(rows[tier == t].sum() / total), 4) for t in range(3)], + "tier_row_share_selected": [round(float(rows[take][tier[take] == t].sum() / max(rows[take].sum(), 1)), 4) + for t in range(3)], + "mean_hits_per_row_all": round(float((mean * rows).sum() / total), 4), + "mean_hits_per_row_selected": round(float((mean[take] * rows[take]).sum() / max(rows[take].sum(), 1)), 4), + "ordered_row_share_selected": round(float(rows[take][ordered[take]].sum() / max(rows[take].sum(), 1)), 4)} + return {"runs": {k: v for k, v in runs.items() if v}, "stats": stats} + + +SIZE_KEYS = ("1", "2", "3", "4", "5", "long") +LEN_BINS = (0, 128, 256, 512, 1024, 2048, 3072, 4096, 1 << 30) + + +def merge_plan(cost: np.ndarray, cap: int, spec: DocMixSpec, rng: random.Random) -> list: + """Split consecutive rows into samples: [(start, stop, size_key), ...]. + + ``cost`` is the token cost of each row inside a merged sample; a sample + never exceeds ``cap``. The size key is drawn from ``spec.shares``; "long" + takes n ~ U[long_min, n_fit] (n_fit = rows that still fit the cap). When + fewer rows fit than requested the sample is shortened; a row that alone + exceeds the cap is skipped (counted by the caller). + """ + keys = list(SIZE_KEYS) + weights = [float(spec.shares.get(k, 0.0)) for k in keys] + cs = np.concatenate([[0], np.cumsum(cost, dtype=np.int64)]) + out, i, n_rows = [], 0, len(cost) + while i < n_rows: + n_fit = int(np.searchsorted(cs, cs[i] + cap, side="right")) - 1 - i + n_fit = min(n_fit, n_rows - i) + if n_fit <= 0: + i += 1 + continue + key = rng.choices(keys, weights)[0] + if key == "long": + n = n_fit if n_fit <= spec.long_min else rng.randint(spec.long_min, n_fit) + else: + n = min(int(key), n_fit) + out.append((i, i + n, key)) + i += n + return out + + +def _join(rows: list, sep: str, breaks: list) -> str: + parts = [rows[0]] + for text, br in zip(rows[1:], breaks): + parts.append("\n" if br else sep) + parts.append(text) + return "".join(parts) + + +def _write_arrays(prefix: str, arrays: dict) -> None: + for suffix, arr in arrays.items(): + tmp = prefix + suffix + ".tmp" + with open(tmp, "wb") as fh: + arr.tofile(fh) + os.replace(tmp, prefix + suffix) + + +def _len_bin(n: int) -> str: + for lo, hi in zip(LEN_BINS, LEN_BINS[1:]): + if n <= hi: + return f"{lo + 1}-{hi}" if hi < (1 << 30) else f">{lo}" + return "?" + + +def _sft_samples(tok, en, zh, en_len, zh_len, runs_local, spec, rng, overhead): + """Merged chat records for one part. ``runs_local``: [(start, stop, ordered)] in row space.""" + cap = spec.ctx_len - overhead + prompts, replies, meta = [], [], [] + cost = np.asarray(en_len, np.int64) + np.asarray(zh_len, np.int64) + 1 + for s, e, ordered in runs_local: + for a, b, key in merge_plan(cost[s:e], cap, spec, rng): + a, b = a + s, b + s + breaks = [rng.random() < spec.para_break for _ in range(b - a - 1)] + en_text = _join(en[a:b], " ", breaks) + zh_text = _join(zh[a:b], "", breaks) + d = "zh_en" if rng.random() < spec.zh_en_share else "en_zh" + src, tgt = (en_text, zh_text) if d == "en_zh" else (zh_text, en_text) + prompts.append(f"<|im_start|>user\n{SFT_PROMPTS[d]}{src}<|im_end|>\n<|im_start|>assistant\n") + replies.append(f"{tgt}<|im_end|>\n") + meta.append((DIR_CODE[d], b - a, key, bool(ordered))) + p_ids = [x.ids for x in tok.encode_batch(prompts, add_special_tokens=False)] if prompts else [] + r_ids = [x.ids for x in tok.encode_batch(replies, add_special_tokens=False)] if replies else [] + return p_ids, r_ids, meta + + +def _pretrain_docs(tok, en, zh, en_len, zh_len, runs_local, spec, rng, ids): + """Merged documents for the packed pretrain stream (same merge shares).""" + eot, en_tag, zh_tag = ids + cost = np.asarray(en_len, np.int64) + np.asarray(zh_len, np.int64) + 1 + plan = [] + for s, e, _ordered in runs_local: + for a, b, _key in merge_plan(cost[s:e], spec.ctx_len, spec, rng): + breaks = [rng.random() < spec.para_break for _ in range(b - a - 1)] + r = rng.random() + kind = "mono" if r < spec.mono_share else ( + "zh_en" if r < spec.mono_share + (1 - spec.mono_share) * spec.zh_en_share else "en_zh") + plan.append((kind, _join(en[a + s:b + s], " ", breaks), _join(zh[a + s:b + s], "", breaks))) + if not plan: + return [], {} + enc_en = [x.ids for x in tok.encode_batch([p[1] for p in plan], add_special_tokens=False)] + enc_zh = [x.ids for x in tok.encode_batch([p[2] for p in plan], add_special_tokens=False)] + out, counts = [], {"mono": 0, "en_zh": 0, "zh_en": 0} + for (kind, _e, _z), e_ids, z_ids in zip(plan, enc_en, enc_zh): + counts[kind] += 1 + if kind == "mono": + out.extend(z_ids); out.append(eot); out.extend(e_ids); out.append(eot) + elif kind == "en_zh": + out.append(en_tag); out.extend(e_ids); out.append(zh_tag); out.extend(z_ids); out.append(eot) + else: + out.append(zh_tag); out.extend(z_ids); out.append(en_tag); out.extend(e_ids); out.append(eot) + return out, counts + + +def _build_part(args) -> dict: + tokenizer_dir, part_path, runs, out_dir, split, spec_d, seed = args + import pyarrow.parquet as pq + from tokenizers import Tokenizer + spec = DocMixSpec(**spec_d) + tok = Tokenizer.from_file(os.path.join(tokenizer_dir, "tokenizer.json")) + dtype = _dtype_for(tok.get_vocab_size()) + special = tuple(tok.token_to_id(t) for t in ("<|endoftext|>", "<|en|>", "<|zh|>")) + table = pq.read_table(part_path, columns=["zh", "en"]) + zh_all, en_all = table["zh"].to_pylist(), table["en"].to_pylist() + en, zh, local = [], [], [] + for s, e, o in runs: # gather selected rows; runs → local spans + local.append((len(en), len(en) + (e - s), o)) + en.extend(en_all[s:e]); zh.extend(zh_all[s:e]) + del table, zh_all, en_all + en_len = [len(x.ids) for x in tok.encode_batch(en, add_special_tokens=False)] + zh_len = [len(x.ids) for x in tok.encode_batch(zh, add_special_tokens=False)] + # Chat-template overhead of one record (+8 margin: joins can re-tokenize). + overhead = 8 + max(len(tok.encode(f"<|im_start|>user\n{p}<|im_end|>\n<|im_start|>assistant\n<|im_end|>\n", + add_special_tokens=False).ids) for p in SFT_PROMPTS.values()) + stem = os.path.basename(part_path)[:-len(".parquet")] + p_ids, r_ids, meta = _sft_samples(tok, en, zh, en_len, zh_len, local, spec, random.Random(seed), overhead) + tokens, offsets, plens, dirs, ns = [], [0], [], [], [] + st = {"records": 0, "skipped_too_long": 0, "by_size": {}, "by_dir": {d: 0 for d in DIRECTIONS}, + "by_len": {}, "tokens_by_len": {}, "ordered_records": 0, "random_concat_records": 0, + "sft_tokens": 0, "sft_supervised_tokens": 0, "max_len": 0} + for p, r, (d, n, key, ordered) in zip(p_ids, r_ids, meta): + total = len(p) + len(r) + if total > spec.ctx_len: + st["skipped_too_long"] += 1 + continue + tokens.extend(p); tokens.extend(r) + offsets.append(offsets[-1] + total); plens.append(len(p)); dirs.append(d); ns.append(min(n, 255)) + st["records"] += 1 + st["by_size"][key] = st["by_size"].get(key, 0) + 1 + st["by_dir"][DIRECTIONS[d]] += 1 + b = _len_bin(total) + st["by_len"][b] = st["by_len"].get(b, 0) + 1 + st["tokens_by_len"][b] = st["tokens_by_len"].get(b, 0) + total + if n > 1: + st["ordered_records" if ordered else "random_concat_records"] += 1 + st["sft_tokens"] += total + st["sft_supervised_tokens"] += len(r) + st["max_len"] = max(st["max_len"], total) + sft_dir = os.path.join(out_dir, "sft", split) + _write_arrays(os.path.join(sft_dir, stem), { + ".bin": np.asarray(tokens, dtype), ".idx": np.asarray(offsets, np.int64), + ".n": np.asarray(ns, np.uint8), ".dir": np.asarray(dirs, np.uint8), ".plen": np.asarray(plens, np.int32)}) + pre, counts = _pretrain_docs(tok, en, zh, en_len, zh_len, local, spec, random.Random(seed + 1), special) + _write_arrays(os.path.join(out_dir, "pretrain", split, stem), {".bin": np.asarray(pre, dtype)}) + return {"part": stem, "split": split, "rows": len(en), "en_tokens": int(sum(en_len)), + "zh_tokens": int(sum(zh_len)), "pretrain_tokens": len(pre), "pretrain_docs": counts, **st} + + +def _merge_stats(results: list) -> dict: + out = {} + for r in results: + acc = out.setdefault(r["split"], {}) + for k, v in r.items(): + if k in ("part", "split"): + continue + if isinstance(v, dict): + d = acc.setdefault(k, {}) + for kk, vv in v.items(): + d[kk] = d.get(kk, 0) + vv + elif k == "max_len": + acc[k] = max(acc.get(k, 0), v) + else: + acc[k] = acc.get(k, 0) + v + for acc in out.values(): + recs = max(acc.get("records", 0), 1) + acc["size_share_records"] = {k: round(acc.get("by_size", {}).get(k, 0) / recs, 4) for k in SIZE_KEYS} + acc["dir_share_records"] = {k: round(v / recs, 4) for k, v in acc.get("by_dir", {}).items()} + tot = max(acc.get("sft_tokens", 0), 1) + acc["token_share_by_len"] = {k: round(v / tot, 4) for k, v in sorted( + acc.get("tokens_by_len", {}).items(), key=lambda kv: int(kv[0].lstrip(">").split("-")[0]))} + return out + + +def build_docmix(pairs_dir: str, tokenizer_dir: str, out_dir: str, spec: DocMixSpec, *, scan_dir: str, + workers: int = 8, log=print) -> dict: + """Select, merge and tokenize one doc-mix subset into ``out_dir``.""" + t0 = time.time() + scan = scan_corpus(pairs_dir, scan_dir, block_rows=spec.block_rows, workers=workers, log=log) + sel = select_chunks(scan, spec) + for kind in ("pretrain", "sft"): + for split in ("train", "valid"): + os.makedirs(os.path.join(out_dir, kind, split), exist_ok=True) + spec_d = asdict(spec) + jobs = [] + for i, (name, runs) in enumerate(sorted(sel["runs"].items())): + jobs.append((tokenizer_dir, os.path.join(pairs_dir, name), runs, out_dir, "train", spec_d, spec.seed + 101 * i)) + for i, name in enumerate(n for n in scan["names"] if n.startswith("valid.")): + rows = scan["rows"][name] + if rows: + ordered = bool(block_ordered(scan["blocks"][name], spec.ordered_ratio, spec.ordered_min_adj).all()) + jobs.append((tokenizer_dir, os.path.join(pairs_dir, name), [[0, rows, ordered]], out_dir, "valid", + spec_d, spec.seed + 7 + 101 * i)) + log(f"[docmix] {len(jobs)} parts, {sel['stats']['rows_selected']:,} train rows selected") + with ProcessPoolExecutor(max_workers=workers) as pool: + results = list(pool.map(_build_part, jobs)) + with open(os.path.join(tokenizer_dir, "tokenizer_report.json"), encoding="utf-8") as fh: + tok_meta = json.load(fh) + manifest = {"created_utc": time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime()), + "elapsed_s": round(time.time() - t0, 1), "format": "chronos-docmix-v1", + "tokenizer_fingerprint": tok_meta.get("fingerprint"), "spec": spec_d, + "prompts": SFT_PROMPTS, "directions": list(DIRECTIONS), + "selection": sel["stats"], "splits": _merge_stats(results), + "parts": sorted(results, key=lambda r: (r["split"], r["part"]))} + with open(os.path.join(out_dir, "docmix_manifest.json"), "w", encoding="utf-8") as fh: + json.dump(manifest, fh, ensure_ascii=False, indent=1) + log(f"[docmix] done in {time.time() - t0:.0f}s → {out_dir}") + return manifest + + +def main(argv=None) -> int: + import argparse + p = argparse.ArgumentParser(description="Science-weighted, merged (n-in-1), bidirectional translation shards") + p.add_argument("--pairs", required=True) + p.add_argument("--tokenizer", required=True) + p.add_argument("--out", required=True) + p.add_argument("--scan-dir", required=True, help="cache for per-row science hits and block adjacency") + p.add_argument("--fraction", type=float, required=True) + p.add_argument("--ctx", type=int, required=True) + p.add_argument("--seed", type=int, default=DocMixSpec.seed) + p.add_argument("--workers", type=int, default=8) + args = p.parse_args(argv) + os.environ.setdefault("TOKENIZERS_PARALLELISM", "false") + spec = DocMixSpec(fraction=args.fraction, ctx_len=args.ctx, seed=args.seed) + m = build_docmix(args.pairs, args.tokenizer, args.out, spec, scan_dir=args.scan_dir, workers=args.workers, + log=lambda s: print(s, flush=True)) + print(json.dumps({"selection": m["selection"], "train": {k: v for k, v in m["splits"].get("train", {}).items() + if not isinstance(v, dict) or "share" in k}}, + ensure_ascii=False), flush=True) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) + + +class DocSFTRecords: + """SFT batches that give every record the same expected passes, at any length. + + ``shards.SFTRecords`` picks the batch's target record uniformly; a batch + holds ~budget / width records, so each short record is seen ~W_long/W_short + times as often as a long one. Here a record is the target with weight + 1 / rows(its length), where rows = records that one batch of that length + holds (budget // padded width, capped at ``max_rows``): every length then + yields records ∝ its count, i.e. the same expected passes per record for + short sentences and 4k-token documents, floor and cap effects included. + Reads ``.dir`` / ``.n`` and counts what was drawn per length bin + (``seen``; stored totals in ``bin_tokens``). + """ + + def __init__(self, folder: str, dtype=np.uint16, seed: int = 0, pad_id: int = 0, tol_div: int = 16): + stems = sorted(f[:-5] for f in os.listdir(folder) if f.endswith(".plen")) + self.tokens, self.offsets, self.plens, rows = [], [], [], [] + for si, stem in enumerate(stems): + base = os.path.join(folder, stem) + off = np.fromfile(base + ".idx", dtype=np.int64) + plen = np.fromfile(base + ".plen", dtype=np.int32) + dirs = np.fromfile(base + ".dir", dtype=np.uint8) + ns = np.fromfile(base + ".n", dtype=np.uint8) + if not (len(off) == len(plen) + 1 == len(dirs) + 1 == len(ns) + 1): + raise ValueError(f"{base}: .idx/.plen/.dir/.n lengths disagree") + if not len(plen): + continue + self.tokens.append(np.memmap(base + ".bin", dtype=dtype, mode="r")) + self.offsets.append(off); self.plens.append(plen) + si = len(self.tokens) - 1 + rows.append(np.stack([np.full(len(plen), si), np.arange(len(plen)), np.diff(off), + dirs.astype(np.int64), ns.astype(np.int64)], axis=1)) + idx = np.concatenate(rows) if rows else np.zeros((0, 5), np.int64) + self.index = idx[np.argsort(idx[:, 2], kind="stable")] + self.lengths = self.index[:, 2] + self.pad_id, self.tol_div = pad_id, tol_div + self._cum_cache: dict = {} + self._total = int(self.lengths.sum()) + # Stored tokens per record-length bin (same bins as ``seen["len_bins"]``). + bins = np.searchsorted(np.asarray(LEN_BINS[1:]), self.lengths, side="left") + self.bin_tokens = {_len_bin(int(LEN_BINS[bi + 1])): int(self.lengths[bins == bi].sum()) + for bi in np.unique(bins)} + self.rng = np.random.default_rng(seed) + self.seen = {"records": 0, "tokens": 0, "dir": [0, 0], "len_bins": {}} + self.last_meta = None + + def __len__(self): + return len(self.index) + + def _bucket(self, n, width_multiple: int = 64): + """Padded width of a batch whose target length is ``n`` (as in ``batch``).""" + n = np.asarray(n, dtype=np.int64) + tol = np.maximum(4, n // self.tol_div) + return -(-(n + tol) // width_multiple) * width_multiple + + def draw_cum(self, token_budget: int, max_rows: int = 256, width_multiple: int = 64) -> np.ndarray: + """Cumulative target weights 1 / rows(length) for one batch shape (cached).""" + key = (int(token_budget), int(max_rows), int(width_multiple)) + cum = self._cum_cache.get(key) + if cum is None: + rows = np.clip(int(token_budget) // self._bucket(self.lengths, width_multiple), 1, int(max_rows)) + cum = self._cum_cache[key] = np.cumsum(1.0 / rows) + return cum + + def total_tokens(self) -> int: + return self._total + + def supervised_tokens(self) -> int: + return int(sum(int(o[-1]) - int(p.sum()) for o, p in zip(self.offsets, self.plens))) + + def batch(self, token_budget: int, max_rows: int = 256, width_multiple: int = 64): + cum = self.draw_cum(token_budget, max_rows, width_multiple) + i = min(int(np.searchsorted(cum, self.rng.random() * cum[-1], side="right")), len(cum) - 1) + target = int(self.lengths[i]) + tol = max(4, target // self.tol_div) + lo = int(np.searchsorted(self.lengths, target - tol, side="left")) + hi = int(np.searchsorted(self.lengths, target + tol, side="right")) + bucket = -(-(target + tol) // width_multiple) * width_multiple + rows = max(1, min(max_rows, token_budget // max(bucket, 1), hi - lo)) + pick = self.index[lo + self.rng.choice(hi - lo, size=rows, replace=False)] + width = -(-int(pick[:, 2].max()) // width_multiple) * width_multiple + 1 + ids = np.full((len(pick), width), self.pad_id, dtype=np.int32) + labels = np.full((len(pick), width), -100, dtype=np.int32) + for r, (si, ri, n, _d, _k) in enumerate(pick): + off = self.offsets[si][ri] + seq = self.tokens[si][off:off + n] + ids[r, :n] = seq + p = int(self.plens[si][ri]) + labels[r, p:n] = seq[p:] + self.last_meta = pick[:, 2:5].copy() # length, direction, sentences merged + s = self.seen + s["records"] += len(pick); s["tokens"] += int(pick[:, 2].sum()) + for d in (0, 1): + s["dir"][d] += int((pick[:, 3] == d).sum()) + for n in pick[:, 2]: # tokens drawn per record-length bin + b = _len_bin(int(n)) + s["len_bins"][b] = s["len_bins"].get(b, 0) + int(n) + return ids, labels diff --git a/chronos/data/corpus/download.py b/demos/translation/chronos_translate/corpus/download.py similarity index 100% rename from chronos/data/corpus/download.py rename to demos/translation/chronos_translate/corpus/download.py diff --git a/demos/translation/chronos_translate/corpus/evalsets.py b/demos/translation/chronos_translate/corpus/evalsets.py new file mode 100644 index 0000000..ed3ab30 --- /dev/null +++ b/demos/translation/chronos_translate/corpus/evalsets.py @@ -0,0 +1,120 @@ +"""Held-out evaluation sets (never trained on; also used for leakage filtering).""" +from __future__ import annotations + +import ast +import json +import os + + +def _flores(raw: str, split: str): + import pyarrow.parquet as pq + path = os.path.join(raw, "facebook__flores__eng-zho", "data", "pair", "eng_Latn-zho_Hans", + f"{split}-00000-of-00001.parquet") + for r in pq.read_table(path, columns=["sentence_eng_Latn", "sentence_zho_Hans"]).to_pylist(): + yield r["sentence_eng_Latn"], r["sentence_zho_Hans"] + + +def _wmt22(raw: str): + import pyarrow.parquet as pq + folder = os.path.join(raw, "haoranxu__WMT22-Test__en-zh", "en-zh") + for name in sorted(os.listdir(folder)): + if not name.endswith(".parquet"): + continue + for r in pq.read_table(os.path.join(folder, name)).to_pylist(): + value = r["en-zh"] + pair = value if isinstance(value, dict) else ast.literal_eval(value) + yield pair["en"], pair["zh"] + + +def _wmt24pp(raw: str): + path = os.path.join(raw, "google__wmt24pp__en-zh_CN", "en-zh_CN.jsonl") + with open(path, encoding="utf-8") as fh: + for line in fh: + r = json.loads(line) + if str(r.get("is_bad_source", "")).strip().lower() == "true": + continue # documented low-quality sources + yield r["source"], r["target"] + + +def _opus_test(raw: str): + import pyarrow.parquet as pq + path = os.path.join(raw, "Helsinki-NLP__opus-100", "en-zh", "test-00000-of-00001.parquet") + for r in pq.read_table(path, columns=["translation"]).to_pylist(): + yield r["translation"]["en"], r["translation"]["zh"] + + +EVAL_SETS = { + "flores_dev": lambda raw: _flores(raw, "dev"), + "flores_devtest": lambda raw: _flores(raw, "devtest"), + "wmt22_enzh": _wmt22, + "wmt24pp_enzh": _wmt24pp, + "opus100_test": _opus_test, +} + + +def load_eval_sets(raw_root: str, names=None) -> dict[str, list[tuple[str, str]]]: + """Return {name: [(en, zh), ...]} for every available set.""" + out = {} + for name, loader in EVAL_SETS.items(): + if names and name not in names: + continue + try: + out[name] = list(loader(raw_root)) + except FileNotFoundError: + continue + return out + + +# ---- document-level sets (doc-mix runs) ------------------------------------ +def _flores_docs(raw: str, split: str): + """FLORES+ sentences grouped by source article (URL), in id order.""" + import pyarrow.parquet as pq + path = os.path.join(raw, "facebook__flores__eng-zho", "data", "pair", "eng_Latn-zho_Hans", + f"{split}-00000-of-00001.parquet") + rows = pq.read_table(path, columns=["id", "URL", "sentence_eng_Latn", "sentence_zho_Hans"]).to_pylist() + docs: dict = {} + for r in sorted(rows, key=lambda r: int(r["id"])): + docs.setdefault(r["URL"], []).append((r["sentence_eng_Latn"], r["sentence_zho_Hans"])) + return [{"doc_id": url, "segments": segs} for url, segs in docs.items()] + + +def _wmt24pp_docs(raw: str): + """WMT24++ en→zh_CN segments grouped by document_id, in segment order (bad sources dropped).""" + path = os.path.join(raw, "google__wmt24pp__en-zh_CN", "en-zh_CN.jsonl") + docs: dict = {} + with open(path, encoding="utf-8") as fh: + for line in fh: + r = json.loads(line) + if str(r.get("is_bad_source", "")).strip().lower() == "true": + continue + docs.setdefault(r["document_id"], []).append((int(r["segment_id"]), r["source"], r["target"], + r.get("domain"))) + out = [] + for doc_id, segs in docs.items(): + segs.sort() + out.append({"doc_id": doc_id, "domain": segs[0][3], "segments": [(s, t) for _i, s, t, _d in segs]}) + return out + + +EVAL_DOCUMENTS = { + "flores_dev_docs": lambda raw: _flores_docs(raw, "dev"), + "flores_devtest_docs": lambda raw: _flores_docs(raw, "devtest"), + "wmt24pp_docs": _wmt24pp_docs, +} + + +def load_eval_documents(raw_root: str, names=None) -> dict[str, list[dict]]: + """Return {name: [{"doc_id", "segments": [(en, zh), ...]}, ...]} for every available set. + + A document's source is its English segments joined by " ", its reference + the Chinese segments joined without separator (same joins as doc-mix). + """ + out = {} + for name, loader in EVAL_DOCUMENTS.items(): + if names and name not in names: + continue + try: + out[name] = loader(raw_root) + except FileNotFoundError: + continue + return out diff --git a/chronos/data/corpus/pipeline.py b/demos/translation/chronos_translate/corpus/pipeline.py similarity index 100% rename from chronos/data/corpus/pipeline.py rename to demos/translation/chronos_translate/corpus/pipeline.py diff --git a/chronos/data/corpus/presets.py b/demos/translation/chronos_translate/corpus/presets.py similarity index 97% rename from chronos/data/corpus/presets.py rename to demos/translation/chronos_translate/corpus/presets.py index 755cfd2..b7e961e 100644 --- a/chronos/data/corpus/presets.py +++ b/demos/translation/chronos_translate/corpus/presets.py @@ -1,4 +1,4 @@ -"""Corpus presets and the ``python -m chronos.data.corpus.presets`` CLI. +"""Corpus presets and the ``python -m chronos_translate.corpus.presets`` CLI. A preset is only a list of ``PairSource`` objects plus evaluation sets; the pipeline itself is task-agnostic. diff --git a/chronos/data/corpus/readers.py b/demos/translation/chronos_translate/corpus/readers.py similarity index 100% rename from chronos/data/corpus/readers.py rename to demos/translation/chronos_translate/corpus/readers.py diff --git a/chronos/data/corpus/shards.py b/demos/translation/chronos_translate/corpus/shards.py similarity index 67% rename from chronos/data/corpus/shards.py rename to demos/translation/chronos_translate/corpus/shards.py index b18a4db..7c411e6 100644 --- a/chronos/data/corpus/shards.py +++ b/demos/translation/chronos_translate/corpus/shards.py @@ -7,6 +7,7 @@ * ``<|en|>{en}<|zh|>{zh}`` and reverse — cross-lingual alignment SFT stream: chat-template records ``[ids, loss_mask]`` (only the assistant reply is supervised) in a ``.bin`` + ``.idx`` pair for O(1) random access. +The layout and its readers are generic: ``chronos.data.shards``. """ from __future__ import annotations @@ -18,11 +19,14 @@ import numpy as np -SFT_PROMPT_EN_ZH = "翻译成中文,只输出译文:\n" - +# Readers live in the kernel; re-exported so existing imports keep working. +from chronos.data.shards import PackedTokenStream, SFTRecords, _dtype_for # noqa: F401 -def _dtype_for(vocab_size: int): - return np.uint16 if vocab_size <= 65535 else np.uint32 +SFT_PROMPT_EN_ZH = "翻译成中文,只输出译文:\n" +# Reverse direction (doc-mix shards, ``chronos_translate.corpus.docmix``): same +# template, so one model serves both directions from the instruction alone. +SFT_PROMPT_ZH_EN = "翻译成英文,只输出译文:\n" +SFT_PROMPTS = {"en_zh": SFT_PROMPT_EN_ZH, "zh_en": SFT_PROMPT_ZH_EN} def _encode_batch(tok, texts: list[str]) -> list[list[int]]: @@ -142,80 +146,6 @@ def build_shards(pairs_dir: str, tokenizer_dir: str, out_dir: str, *, workers: i return manifest -class PackedTokenStream: - """Random fixed-length windows over memory-mapped pretrain shards.""" - - def __init__(self, folder: str, seq_len: int, dtype=np.uint16, seed: int = 0): - files = sorted(os.path.join(folder, f) for f in os.listdir(folder) if f.endswith(".bin")) - self.arrays = [np.memmap(f, dtype=dtype, mode="r") for f in files] - self.arrays = [a for a in self.arrays if a.size > seq_len + 1] - sizes = np.array([a.size for a in self.arrays], dtype=np.float64) - self.weights = sizes / sizes.sum() - self.total_tokens = int(sizes.sum()) - self.seq_len = seq_len - self.rng = np.random.default_rng(seed) - - def batch(self, batch_size: int) -> np.ndarray: - which = self.rng.choice(len(self.arrays), size=batch_size, p=self.weights) - out = np.empty((batch_size, self.seq_len + 1), dtype=np.int32) - for row, i in enumerate(which): - arr = self.arrays[i] - start = int(self.rng.integers(0, arr.size - self.seq_len - 1)) - out[row] = arr[start:start + self.seq_len + 1] - return out - - -class SFTRecords: - """Length-bucketed SFT batches with assistant-only loss masks.""" - - def __init__(self, folder: str, dtype=np.uint16, seed: int = 0, pad_id: int = 0): - stems = sorted(f[:-5] for f in os.listdir(folder) if f.endswith(".plen")) - self.tokens, self.offsets, self.plens, self.index = [], [], [], [] - for si, stem in enumerate(stems): - base = os.path.join(folder, stem) - tok = np.memmap(base + ".bin", dtype=dtype, mode="r") - off = np.fromfile(base + ".idx", dtype=np.int64) - plen = np.fromfile(base + ".plen", dtype=np.int32) - self.tokens.append(tok); self.offsets.append(off); self.plens.append(plen) - self.index.append(np.stack([np.full(len(plen), si), np.arange(len(plen)), - np.diff(off)], axis=1)) - self.index = np.concatenate(self.index) if self.index else np.zeros((0, 3), np.int64) - # Sorted by length once: each batch is a contiguous similar-length - # window found by binary search (O(log n), no full scan per batch). - self.index = self.index[np.argsort(self.index[:, 2], kind="stable")] - self.lengths = self.index[:, 2] - self.rng = np.random.default_rng(seed) - self.pad_id = pad_id - - def __len__(self): - return len(self.index) - - def batch(self, token_budget: int, max_rows: int = 256, width_multiple: int = 64): - """Sample a bucket of similar-length records filling ~token_budget tokens. - - The padded width is rounded up to ``width_multiple`` so the training - graph sees a handful of shapes (Metal kernels are shape-specialized). - """ - target = int(self.lengths[int(self.rng.integers(0, len(self.index)))]) - tol = max(4, target // 8) - lo = int(np.searchsorted(self.lengths, target - tol, side="left")) - hi = int(np.searchsorted(self.lengths, target + tol, side="right")) - bucket = -(-(target + tol) // width_multiple) * width_multiple - rows = max(1, min(max_rows, token_budget // max(bucket, 1), hi - lo)) - pick = self.index[lo + self.rng.choice(hi - lo, size=rows, replace=False)] - width = int(pick[:, 2].max()) - width = -(-width // width_multiple) * width_multiple + 1 # +1: inputs/labels are shifted - ids = np.full((len(pick), width), self.pad_id, dtype=np.int32) - labels = np.full((len(pick), width), -100, dtype=np.int32) - for r, (si, ri, n) in enumerate(pick): - off = self.offsets[si][ri] - seq = self.tokens[si][off:off + n] - ids[r, :n] = seq - p = int(self.plens[si][ri]) - labels[r, p:n] = seq[p:] - return ids, labels - - def main(argv=None) -> int: import argparse parser = argparse.ArgumentParser(description="Tokenize the pair corpus into training shards") diff --git a/chronos/data/corpus/sources.py b/demos/translation/chronos_translate/corpus/sources.py similarity index 100% rename from chronos/data/corpus/sources.py rename to demos/translation/chronos_translate/corpus/sources.py diff --git a/demos/translation/chronos_translate/doc_run.py b/demos/translation/chronos_translate/doc_run.py new file mode 100644 index 0000000..0c452f0 --- /dev/null +++ b/demos/translation/chronos_translate/doc_run.py @@ -0,0 +1,365 @@ +"""Time-budgeted MLX run on doc-mix shards (``chronos_translate.corpus.docmix``). + +Same loop, checkpoints, telemetry and resume as the kernel ``LongRun`` (via +``TranslationLongRun``); this subclass changes only what the doc-mix data needs: + +* SFT batches come from ``DocSFTRecords`` (target record drawn ∝ length, so + short sentences and 4k-token documents get the same passes per record) + and carry both directions (``.dir``: 0 = en→zh, 1 = zh→en). +* Translation eval covers both directions at sentence level (FLORES+ + devtest) and document level (FLORES+ devtest articles, WMT24++ documents + that fit the context). ``bleu_zh`` / ``chrf`` keep the en→zh sentence + scores under the live run's key names, so monitors and comparisons keep working. +* ``micro_tokens`` is fitted at launch to the GPU's recommended working set + (largest power-of-two fraction that runs one full-length step without an + allocation failure and under the memory target); ``tokens_per_step`` is + kept by raising gradient accumulation, so the optimisation recipe is unchanged. + +Paths in the recipe may be relative to the recipe file, so a package can be +copied to another machine and launched in place. +""" +from __future__ import annotations + +import json +import math +import os +import time + +import mlx.core as mx +import mlx.nn as nn +import numpy as np + +from chronos.mlx.training.longrun import PhaseSpec, PretrainSource, SFTSource +from chronos.mlx.training.longrun import load_spec as _load_spec +from chronos.mlx.training.longrun import main as _longrun_main + +from .run import EXTRA_PATH_KEYS, TranslationLongRun, TranslationRunSpec + +DIR_NAMES = ("en_zh", "zh_en") + + +class _PhaseDone(Exception): + """Raised from ``_emit`` when a phase reaches ``extra.target_passes``.""" + + +class DocSFTSource(SFTSource): + """``SFTSource`` over doc-mix shards (records ∝ length, both directions).""" + + def __init__(self, shards_dir, seed): # noqa: D107 - same interface as SFTSource + from chronos_translate.corpus.docmix import DocSFTRecords + self.records = DocSFTRecords(os.path.join(shards_dir, "sft", "train"), seed=seed) + self.valid = DocSFTRecords(os.path.join(shards_dir, "sft", "valid"), seed=seed + 1) + + def seen(self) -> dict: + s = self.records.seen + n = max(1, s["records"]) + tot = max(1, s["tokens"]) + return {"sft_drawn_records": s["records"], "sft_drawn_tokens": s["tokens"], + "sft_drawn_zh_en_share": round(s["dir"][1] / n, 4), + "sft_drawn_len_share": {k: round(v / tot, 4) for k, v in sorted(s["len_bins"].items())}, + "sft_passes": round(s["tokens"] / max(1, self.records.total_tokens()), 4)} + + +def _docmix_manifest(shards_dir: str) -> dict: + path = os.path.join(shards_dir, "docmix_manifest.json") + if not os.path.isfile(path): + raise FileNotFoundError(f"{shards_dir} is not a doc-mix shard folder (no docmix_manifest.json)") + with open(path, encoding="utf-8") as fh: + return json.load(fh) + + +def _gpu_info() -> dict: + """Metal device info (unified memory: the GPU working set bounds CPU-stream runs too).""" + if not hasattr(mx, "device_info"): + return {} + try: + return dict(mx.device_info(mx.gpu)) + except Exception: # noqa: BLE001 - no Metal device + return dict(mx.device_info()) + + +class DocLongRun(TranslationLongRun): + def __init__(self, spec: TranslationRunSpec, log=print): + self.docmix = _docmix_manifest(spec.shards_dir) + self.ctx_len = int(self.docmix["spec"]["ctx_len"]) + if int(spec.model_config.get("max_position_embeddings", self.ctx_len)) < self.ctx_len: + raise ValueError("model_config.max_position_embeddings is below the shards' ctx_len") + super().__init__(spec, log=log) + self._data_tokens: dict = {} + self._projected: set = set() + + # ---- data ---------------------------------------------------------------- + def _source(self, phase: PhaseSpec): + if phase.name == "pretrain": + src = PretrainSource(self.spec.shards_dir, phase.seq_len, self.spec.seed) + self._data_tokens[phase.name] = int(src.stream.total_tokens) + else: + src = DocSFTSource(self.spec.shards_dir, self.spec.seed) + self._data_tokens[phase.name] = int(src.records.supervised_tokens()) + return src + + # ---- memory fit ------------------------------------------------------------ + def _probe_peak(self, grad_fn, rows: int, seq: int) -> float: + """Peak bytes of two accumulated micro-steps on ``rows`` full-length rows.""" + from chronos.mlx.training.trainer import _add_grads + rng = np.random.default_rng(0) + ids = mx.array(rng.integers(8, int(self.config.vocab_size), size=(rows, seq)), dtype=mx.int32) + mx.clear_cache() + mx.reset_peak_memory() + _, g1 = grad_fn(self.model, ids, ids) + mx.eval(g1) + _, g2 = grad_fn(self.model, ids, ids) + acc = _add_grads(g1, g2) + mx.eval(acc) + peak = float(mx.get_peak_memory()) + del g1, g2, acc + mx.clear_cache() + return peak + + def _fit_micro_tokens(self, phase: PhaseSpec) -> int: + """Largest ``micro_tokens`` ≤ the recipe's whose step fits the memory target. + + Peak memory is measured at 1 and 2 full-context rows and extrapolated + linearly (activations scale with rows); the chosen size is then run + once to confirm. The result is stored in the run state, so a resume + keeps the same micro-batches. + """ + fitted = self.state.setdefault("fitted_micro_tokens", {}) + if phase.name in fitted: + return int(fitted[phase.name]) + extra = self.spec.extra or {} + seq = max(int(phase.seq_len), self.ctx_len) if phase.name != "pretrain" else int(phase.seq_len) + want_rows = max(1, int(phase.micro_tokens) // seq) + info = _gpu_info() + limit = float(info.get("max_recommended_working_set_size") or info.get("memory_size") or 0) + if extra.get("micro_fit", "auto") == "off" or not limit: + fitted[phase.name] = int(phase.micro_tokens) + return int(phase.micro_tokens) + target = float(extra.get("micro_fit_fraction", 0.7)) * limit + grad_fn = nn.value_and_grad(self.model, self._loss_fn) + p1 = self._probe_peak(grad_fn, 1, seq) + p2 = self._probe_peak(grad_fn, 2, seq) if want_rows >= 2 else p1 + per_row = max(p2 - p1, 1.0) + rows = 1 + while rows * 2 <= want_rows and p1 + (rows * 2 - 1) * per_row <= target: + rows *= 2 + peak = self._probe_peak(grad_fn, rows, seq) if rows > 2 else (p2 if rows == 2 else p1) + while rows > 1 and peak > target: + rows //= 2 + peak = self._probe_peak(grad_fn, rows, seq) + micro = rows * seq if rows < want_rows else int(phase.micro_tokens) + fitted[phase.name] = micro + report = {"phase": phase.name, "seq": seq, "rows": rows, "micro_tokens": micro, + "recipe_micro_tokens": int(phase.micro_tokens), "peak_gb": round(peak / 1e9, 2), + "target_gb": round(target / 1e9, 2), "limit_gb": round(limit / 1e9, 2), + "device": info.get("device_name") or info.get("architecture")} + self.state.setdefault("micro_fit", {})[phase.name] = report + self.log(f"[doc] micro-batch fit: {json.dumps(report, ensure_ascii=False)}") + if peak > target: + self.log(f"[doc] warning: one {seq}-token row needs {peak / 1e9:.1f} GB, above the " + f"{target / 1e9:.1f} GB target; training continues at 1 row per micro-batch") + return micro + + # ---- training ------------------------------------------------------------ + def run_phase(self, pi: int, deadline_s: float, max_steps: int | None = None): + from dataclasses import replace + original = self.spec.phases[pi] + micro = self._fit_micro_tokens(original) + phase = replace(original, micro_tokens=micro) + accum = max(1, phase.tokens_per_step // micro) + data = self._data_tokens.get(phase.name) + self.log(f"[doc] {phase.name}: micro_tokens={micro} × accum {accum} = {micro * accum} tokens/step " + f"(recipe {original.tokens_per_step}); ctx={self.ctx_len}") + if self.state["phase_step"] == 0: + self.state.setdefault("phase_start_tokens", {})[phase.name] = int(self.state["tokens_seen"]) + self._phase_name = phase.name + self.spec.phases[pi] = phase + try: + super().run_phase(pi, deadline_s, max_steps=max_steps) + except _PhaseDone: + # Same closing steps as LongRun.run_phase after its loop. + source = self._active_source + self.log(f"[doc] {phase.name}: reached {self._passes(phase.name):.2f} passes " + f"(target {self._target(phase.name)}) at step {self.state['phase_step']}") + self.state["rng"][phase.name] = source.rng_state() + self._beat("evaluating") + self._periodic_eval(source, phase) + self.export_checkpoint(f"{self.spec.export_prefix}_{phase.name}", stage=phase.name) + self._emit({"phase": phase.name, "event": "phase_end", "step": self.state["phase_step"], + "tokens_seen": self.state["tokens_seen"], "reason": "target_passes"}) + finally: + self.spec.phases[pi] = original + self._phase_name = None + if data and max_steps is None: + self.log(f"[doc] {phase.name}: {self._passes(phase.name):.2f} passes over {data:,} " + f"{'tokens' if phase.name == 'pretrain' else 'supervised tokens'}") + + def _target(self, name: str) -> float | None: + t = ((self.spec.extra or {}).get("target_passes") or {}).get(name) + return float(t) if t else None + + def _emit(self, record: dict): + """Pass accounting on training rows; ends the phase at ``target_passes``. + + Once the cumulative rate (tokens per wall second, evals included) is + known, the time schedule's phase budget shrinks to the predicted time of + the target, so warmup + cosine end where the data passes do. Time left + over moves to the next phase (its deadline is fixed by the recipe). + """ + name = getattr(self, "_phase_name", None) + target = self._target(name) if name and "event" not in record and record.get("phase") == name else None + done = False + if target and self._data_tokens.get(name): + st = self.state + data = self._data_tokens[name] + seen = int(st["tokens_seen"]) - int((st.get("phase_start_tokens") or {}).get(name, 0)) + wall = float(st.get("phase_wall_s") or 0.0) + done = seen >= target * data + if wall >= 60 and seen > 0 and self.spec.schedule == "time" and st.get("phase_budget_s"): + need = wall * target * data / seen + orig = st.setdefault("phase_budget_orig_s", {}).setdefault(name, float(st["phase_budget_s"])) + st["phase_budget_s"] = max(wall, min(orig, need)) + step = int(record.get("step") or st["phase_step"]) + st["phase_total"] = record["total"] = max(step, int(step * st["phase_budget_s"] / wall)) + record["passes"] = round(seen / data, 4) + if name not in self._projected and wall >= 600: + self._projected.add(name) + rate = seen / wall + budget = (st.get("phase_budget_orig_s") or {}).get(name, st.get("phase_budget_s") or wall) + self.log(f"[doc] {name}: {rate:,.0f} tok/s over {wall / 60:.0f} min → " + f"{rate * budget / data:.2f} passes fit the phase budget; target {target} " + f"({'reached early' if rate * budget >= target * data else 'not reached in time'})") + super()._emit(record) + if done: + raise _PhaseDone + + def _passes(self, name: str) -> float: + start = (self.state.get("phase_start_tokens") or {}).get(name, 0) + return (int(self.state["tokens_seen"]) - int(start)) / max(1, self._data_tokens.get(name) or 1) + + def _periodic_eval(self, source, phase): + rec = {"phase": phase.name, "step": self.state["phase_step"], "event": "data_passes", + "passes": round(self._passes(phase.name), 4)} + if isinstance(source, DocSFTSource): + rec.update(source.seen()) + self._emit(rec) + super()._periodic_eval(source, phase) + + # ---- translation --------------------------------------------------------- + def translate(self, sources: list[str], max_new_tokens: int | None = None, + direction: str = "en_zh") -> list[str]: + """Greedy translation with the doc-mix prompt for ``direction``. + + The output limit scales with the source (zh output ≲ 1.6× en tokens, + en ≲ 2× zh tokens) and is capped by the context left after the prompt. + """ + from chronos_translate.corpus.shards import SFT_PROMPTS + tok = self._tokenizer() + end = tok.token_to_id("<|im_end|>") + ratio = 1.6 if direction == "en_zh" else 2.0 + self.model.eval() + out = [] + try: + for src in sources: + prompt = f"<|im_start|>user\n{SFT_PROMPTS[direction]}{src}<|im_end|>\n<|im_start|>assistant\n" + ids = tok.encode(prompt, add_special_tokens=False).ids + src_len = len(tok.encode(src, add_special_tokens=False).ids) + room = self.ctx_len - len(ids) + limit = min(room, int(ratio * src_len) + 16) + if max_new_tokens: + limit = min(limit, int(max_new_tokens)) + out.append(tok.decode(self.generate(ids, max(1, limit), (end,)), skip_special_tokens=True) + if room > 0 else "") + finally: + self.model.train() + return out + + def _score(self, hyps, refs, direction: str) -> tuple[float, float]: + import sacrebleu + bleu = sacrebleu.corpus_bleu(hyps, [refs], tokenize="zh" if direction == "en_zh" else "13a") + return round(bleu.score, 2), round(sacrebleu.corpus_chrf(hyps, [refs]).score, 2) + + def _fits(self, src: str, ref: str, direction: str) -> bool: + from chronos_translate.corpus.shards import SFT_PROMPTS + tok = self._tokenizer() + n = len(tok.encode(SFT_PROMPTS[direction] + src, add_special_tokens=False).ids) + return n + len(tok.encode(ref, add_special_tokens=False).ids) + 12 <= self.ctx_len + + def translation_eval(self, n: int) -> dict: + """Both directions on FLORES+ devtest sentences and on whole documents. + + Documents are translated in one pass each (source segments joined the + way the doc-mix records join them) and scored at document level; + ``*_len_ratio`` = hypothesis / reference characters flags early stops + and run-on output on long inputs. + """ + from chronos_translate.corpus.evalsets import load_eval_documents, load_eval_sets + raw = (self.spec.extra or {}).get("raw_root") + if not raw: + return {} + t0 = time.monotonic() + out, samples = {}, [] + pairs = load_eval_sets(raw, ["flores_devtest"]).get("flores_devtest", [])[:n] + for direction in DIR_NAMES: + if not pairs: + break + srcs = [en if direction == "en_zh" else zh for en, zh in pairs] + refs = [zh if direction == "en_zh" else en for en, zh in pairs] + hyps = self.translate(srcs, direction=direction) + bleu, chrf = self._score(hyps, refs, direction) + if direction == "en_zh": + out.update({"flores_devtest_n": len(pairs), "bleu_zh": bleu, "chrf": chrf}) + else: + out.update({"sent_zh_en_bleu": bleu, "sent_zh_en_chrf": chrf}) + samples += [{"direction": direction, "set": "flores_devtest", "src": s, "ref": r, "hyp": h} + for s, r, h in list(zip(srcs, refs, hyps))[:3]] + extra = self.spec.extra or {} + final = n >= int(self.spec.final_eval_samples or 0) > 0 + # Periodic evals use a fixed small subset; the final eval every document + # that fits the context unless the recipe caps it. + n_docs = int(extra.get("final_doc_eval_docs", 1 << 30) if final else extra.get("doc_eval_docs", 16)) + docs = load_eval_documents(raw, ["flores_devtest_docs", "wmt24pp_docs"]) + plan = (("doc", "flores_devtest_docs", DIR_NAMES), ("wmt24pp_doc", "wmt24pp_docs", ("en_zh",))) + for prefix, name, directions in plan: + for direction in directions: + srcs, refs = [], [] + for d in docs.get(name, []): + en = " ".join(e for e, _z in d["segments"]) + zh = "".join(z for _e, z in d["segments"]) + src, ref = (en, zh) if direction == "en_zh" else (zh, en) + if self._fits(src, ref, direction): + srcs.append(src); refs.append(ref) + if len(srcs) >= n_docs: + break + if not srcs: + continue + hyps = self.translate(srcs, direction=direction) + bleu, chrf = self._score(hyps, refs, direction) + ratio = sum(map(len, hyps)) / max(1, sum(map(len, refs))) + out.update({f"{prefix}_{direction}_bleu": bleu, f"{prefix}_{direction}_chrf": chrf, + f"{prefix}_{direction}_len_ratio": round(ratio, 3), f"{prefix}_{direction}_n": len(srcs)}) + samples += [{"direction": direction, "set": name, "src": s, "ref": r, "hyp": h} + for s, r, h in list(zip(srcs, refs, hyps))[:2]] + self.write_samples(samples) + if out: + out["eval_s"] = round(time.monotonic() - t0, 1) + return out + + +def load_spec(path: str, budget_hours: float | None = None) -> TranslationRunSpec: + """Read a recipe; relative paths (and ``extra.raw_root``) resolve against its folder.""" + return _load_spec(path, budget_hours, spec_cls=TranslationRunSpec, extra_path_keys=EXTRA_PATH_KEYS) + + +def _smoke(spec, args) -> None: + if args.max_steps is not None: # smoke: keep the closing eval to a few documents + spec.extra = dict(spec.extra or {}, doc_eval_docs=2) + + +def main(argv=None) -> int: + return _longrun_main(argv, runner_cls=DocLongRun, spec_cls=TranslationRunSpec, extra_path_keys=EXTRA_PATH_KEYS, + description="Time-budgeted Chronos MLX run on doc-mix shards", prepare=_smoke) + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/demos/translation/chronos_translate/model_presets.py b/demos/translation/chronos_translate/model_presets.py new file mode 100644 index 0000000..543eef9 --- /dev/null +++ b/demos/translation/chronos_translate/model_presets.py @@ -0,0 +1,37 @@ +"""The en→zh demo's model topology and tokenizer special tokens. + +``ENZH_50M_BASE`` is the fixed part of the 50M benchmark topology (moved out +of ``chronos.model.factory`` in 0.3.1a2, where it was ``ENZH_DEMO_BASE``). The +searched part (hidden size, expert count and width) comes from the kernel's +``fit_config``:: + + from chronos.model.factory import fit_config + fit = fit_config(50e6, 12e6, vocab_size=16384, base=ENZH_50M_BASE) + +The 72h recipe (``recipes/enzh_50m_72h.json``) stores the full ``model_config`` +it was trained with; that file, not this search, is the reference. + +``SPECIAL_TOKENS`` is the order the 0.3.1a1 tokenizer used (language tags in +ids 3-5), so a tokenizer trained with ``chronos tokenizer --out +--extra-special "<|en|>" "<|zh|>" "<|translate|>"`` matches the 50M run. +""" +from __future__ import annotations + +from chronos.tokenizer.model import special_tokens_with + +LANG_TOKENS = ("<|en|>", "<|zh|>", "<|translate|>") +SPECIAL_TOKENS = special_tokens_with(LANG_TOKENS) + +ENZH_50M_BASE = dict( + architecture_version=3, num_hidden_layers=6, prelude_layers=1, coda_layers=1, + recurrent_depth=4, min_recurrent_depth=1, max_inference_depth=4, + recurrent_attention_mode="shared_first", adaptive_halting=True, + depth_schedule="fixed_then_adaptive", depth_schedule_warmup_fraction=0.3, + halting_threshold=0.95, num_experts_per_tok=2, num_shared_experts=1, + kv_latent_dim=128, rope_dim=32, rope_layout="per_head", sliding_window_size=128, + max_position_embeddings=1024, + layer_aware_lookahead=True, layer_aware_cache=True, lookahead_steps=2, + dropout=0.0, fallback_mask_prob=0.08, rope_theta=1e6, + bos_token_id=1, eos_token_id=2, tie_word_embeddings=True, +) +ENZH_DEMO_BASE = ENZH_50M_BASE # pre-0.3.1a2 name (chronos.model.factory) diff --git a/demos/translation/chronos_translate/probe.py b/demos/translation/chronos_translate/probe.py new file mode 100644 index 0000000..bfd7221 --- /dev/null +++ b/demos/translation/chronos_translate/probe.py @@ -0,0 +1,78 @@ +"""Greedy en↔zh translation probe for a model loaded from a run (FLORES+ dev, BLEU / chrF). + +Pretrain checkpoints are probed in the ``<|en|>…<|zh|>`` tag format they +were trained on (both directions); SFT checkpoints use the chat prompt. Used +by ``TranslationLongRun`` at each pretrain validation and by +``chronos-translate inspect`` (offline, on the MLX CPU device). +""" +from __future__ import annotations + +import os +import time + +LANG_TAGS = ("<|en|>", "<|zh|>") + + +def translation_probe(spec: dict, model, phase_name: str, n: int) -> dict: + import sacrebleu + from tokenizers import Tokenizer + + from chronos.mlx.training.inspect_checkpoint import greedy + + from .corpus.evalsets import load_eval_sets + from .corpus.shards import SFT_PROMPT_EN_ZH + tok = Tokenizer.from_file(os.path.join(spec["tokenizer_dir"], "tokenizer.json")) + tid = tok.token_to_id + stop = {tid(t) for t in ("<|endoftext|>", "<|im_end|>", *LANG_TAGS)} + raw = (spec.get("extra") or {}).get("raw_root") + pairs = load_eval_sets(raw, ["flores_dev"]).get("flores_dev", [])[:n] if raw else [] + if not pairs: + return {"probe": "skipped: FLORES+ dev not found"} + out, t0 = {}, time.monotonic() + directions = [("en_zh", 0, 1)] + ([("zh_en", 1, 0)] if phase_name == "pretrain" else []) + for name, si, ti in directions: + hyps, samples = [], [] + for pair in pairs: + src, ref = pair[si], pair[ti] + if phase_name == "pretrain": + tags = LANG_TAGS if name == "en_zh" else LANG_TAGS[::-1] + prompt = [tid(tags[0])] + tok.encode(src, add_special_tokens=False).ids + [tid(tags[1])] + else: + text = f"<|im_start|>user\n{SFT_PROMPT_EN_ZH}{src}<|im_end|>\n<|im_start|>assistant\n" + prompt = tok.encode(text, add_special_tokens=False).ids + src_len = len(tok.encode(src, add_special_tokens=False).ids) + hyp = tok.decode(greedy(model, tok, prompt, stop, int(1.6 * src_len) + 16), skip_special_tokens=True) + hyps.append(hyp) + if len(samples) < 6: + samples.append({"src": src, "ref": ref, "hyp": hyp}) + refs = [p[ti] for p in pairs] + bleu = sacrebleu.corpus_bleu(hyps, [refs], tokenize="zh" if ti == 1 else "13a") + chrf = sacrebleu.corpus_chrf(hyps, [refs]) + out[name] = {"n": len(pairs), "bleu": round(bleu.score, 2), "chrf": round(chrf.score, 2), + "samples": samples} + out["probe_s"] = round(time.monotonic() - t0, 1) + out["probe_set"] = "flores_dev" + return out + + +def main(argv=None) -> int: + """``chronos-translate inspect``: the kernel inspector plus this probe.""" + import argparse + import json + + from chronos.mlx.training.inspect_checkpoint import inspect_run + p = argparse.ArgumentParser(description="Inspect a run checkpoint (CPU) with the en↔zh FLORES+ dev probe") + p.add_argument("--run-dir", required=True) + p.add_argument("--samples", type=int, default=24, help="FLORES+ dev sentences per direction (0 = skip)") + p.add_argument("--batches", type=int, default=8, help="validation micro-batches") + p.add_argument("--export", default=None, help="write a serveable .pth here") + p.add_argument("--device", default="cpu", choices=("cpu", "gpu")) + a = p.parse_args(argv) + report = inspect_run(a.run_dir, samples=a.samples, n_batches=a.batches, export_path=a.export, + device=a.device, probes={"translation": translation_probe}) + print(json.dumps(report, ensure_ascii=False, indent=2)) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/demos/translation/chronos_translate/run.py b/demos/translation/chronos_translate/run.py new file mode 100644 index 0000000..e8dfac1 --- /dev/null +++ b/demos/translation/chronos_translate/run.py @@ -0,0 +1,115 @@ +"""en↔zh translation run: the kernel ``LongRun`` plus translation metrics. + +* every SFT validation: greedy en→zh on a FLORES+ devtest subset + (``bleu_samples``), BLEU (``tokenize=zh``) and chrF; +* every pretrain validation: the ``<|en|>…<|zh|>`` probe on FLORES+ dev in + both directions (``probe_samples``, keys ``probe_{en_zh,zh_en}_{bleu,chrf}``); +* end of run: en→zh on ``final_eval_samples`` FLORES+ devtest sentences. + +FLORES+ is read from ``extra.raw_root`` (a ``chronos-translate corpus download`` +tree). The recipe format is the kernel's ``RunSpec`` plus the three sample +counts above, so 0.3.1a1 recipes run unchanged:: + + chronos-translate run --spec demos/translation/recipes/enzh_50m_72h.json +""" +from __future__ import annotations + +import time +from dataclasses import asdict, dataclass + +from chronos.mlx.training.longrun import LongRun, RunSpec +from chronos.mlx.training.longrun import main as _longrun_main + +#: ``extra`` keys holding paths (resolved against the recipe's folder). +EXTRA_PATH_KEYS = ("raw_root",) + + +@dataclass +class TranslationRunSpec(RunSpec): + final_eval_samples: int = 1012 # full FLORES+ devtest at the end (0 = skip) + export_prefix: str = "chronos_enzh" + bleu_samples: int = 200 # periodic FLORES+ devtest subset during SFT + # Greedy FLORES+ dev probe at each pretrain validation (``<|en|>…<|zh|>`` + # format, both directions); samples go to ``samples.jsonl``. 0 = off. + probe_samples: int = 16 + + +class TranslationLongRun(LongRun): + def pinned_modules(self) -> tuple[str, ...]: + return super().pinned_modules() + ("sacrebleu", "chronos_translate.corpus.evalsets", + "chronos_translate.corpus.shards", "chronos_translate.probe") + + def eval_samples_for(self, phase_name: str, *, final: bool) -> int: + if final: + return int(self.spec.final_eval_samples or 0) + if phase_name == "sft": + return int(getattr(self.spec, "bleu_samples", 0) or 0) + if phase_name == "pretrain": + return int(getattr(self.spec, "probe_samples", 0) or 0) + return super().eval_samples_for(phase_name, final=final) + + def task_eval(self, phase_name: str, n: int, *, final: bool = False) -> dict: + if final or phase_name != "pretrain": + return self.translation_eval(n) + return self._pretrain_probe(n) + + def _pretrain_probe(self, n: int) -> dict: + from .probe import translation_probe + probe = translation_probe(asdict(self.spec), self.model, "pretrain", n) + out, rows = {}, [] + for direction in ("en_zh", "zh_en"): + res = probe.get(direction) + if not isinstance(res, dict): + continue + out[f"probe_{direction}_bleu"], out[f"probe_{direction}_chrf"] = res["bleu"], res["chrf"] + rows += [{"direction": direction, "set": probe.get("probe_set"), **sample} + for sample in res.get("samples", [])[:3]] + self.write_samples(rows) + if out: + out["probe_n"], out["probe_s"] = n, probe.get("probe_s") + return out + + # ---- translation quality (greedy, KV cache, MLX GPU) ---------------------- + def translate(self, sources: list[str], max_new_tokens: int = 160) -> list[str]: + from .corpus.shards import SFT_PROMPT_EN_ZH + tok = self._tokenizer() + end = tok.token_to_id("<|im_end|>") + self.model.eval() + out = [] + for src in sources: + prompt = f"<|im_start|>user\n{SFT_PROMPT_EN_ZH}{src}<|im_end|>\n<|im_start|>assistant\n" + ids = tok.encode(prompt, add_special_tokens=False).ids + src_len = len(tok.encode(src, add_special_tokens=False).ids) + limit = min(max_new_tokens, int(1.6 * src_len) + 16) # zh output ≲ 1.6× en tokens + out.append(tok.decode(self.generate(ids, limit, (end,)), skip_special_tokens=True)) + self.model.train() + return out + + def translation_eval(self, n: int) -> dict: + import sacrebleu + + from .corpus.evalsets import load_eval_sets + raw = self.spec.extra.get("raw_root") + if not raw: + return {} + pairs = load_eval_sets(raw, ["flores_devtest"]).get("flores_devtest", [])[:n] + if not pairs: + return {} + t0 = time.monotonic() + hyps = self.translate([en for en, _zh in pairs]) + refs = [zh for _en, zh in pairs] + bleu = sacrebleu.corpus_bleu(hyps, [refs], tokenize="zh") + chrf = sacrebleu.corpus_chrf(hyps, [refs]) + self.write_samples([{"direction": "en_zh", "set": "flores_devtest", "src": en, "ref": zh, "hyp": hyp} + for (en, zh), hyp in list(zip(pairs, hyps))[:5]]) + return {"flores_devtest_n": len(pairs), "bleu_zh": round(bleu.score, 2), "chrf": round(chrf.score, 2), + "eval_s": round(time.monotonic() - t0, 1)} + + +def main(argv=None) -> int: + return _longrun_main(argv, runner_cls=TranslationLongRun, spec_cls=TranslationRunSpec, + extra_path_keys=EXTRA_PATH_KEYS, description="Time-budgeted en↔zh Chronos MLX run") + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/models/chronos-enzh-50m-sft/NOTICE b/demos/translation/models/chronos-enzh-50m-sft/NOTICE similarity index 100% rename from models/chronos-enzh-50m-sft/NOTICE rename to demos/translation/models/chronos-enzh-50m-sft/NOTICE diff --git a/models/chronos-enzh-50m-sft/README.md b/demos/translation/models/chronos-enzh-50m-sft/README.md similarity index 100% rename from models/chronos-enzh-50m-sft/README.md rename to demos/translation/models/chronos-enzh-50m-sft/README.md diff --git a/models/chronos-enzh-50m-sft/README_zh.md b/demos/translation/models/chronos-enzh-50m-sft/README_zh.md similarity index 100% rename from models/chronos-enzh-50m-sft/README_zh.md rename to demos/translation/models/chronos-enzh-50m-sft/README_zh.md diff --git a/models/chronos-enzh-50m-sft/config.json b/demos/translation/models/chronos-enzh-50m-sft/config.json similarity index 100% rename from models/chronos-enzh-50m-sft/config.json rename to demos/translation/models/chronos-enzh-50m-sft/config.json diff --git a/models/chronos-enzh-50m-sft/eval/boundary_long_input.py b/demos/translation/models/chronos-enzh-50m-sft/eval/boundary_long_input.py similarity index 100% rename from models/chronos-enzh-50m-sft/eval/boundary_long_input.py rename to demos/translation/models/chronos-enzh-50m-sft/eval/boundary_long_input.py diff --git a/models/chronos-enzh-50m-sft/eval/boundary_zh_en.py b/demos/translation/models/chronos-enzh-50m-sft/eval/boundary_zh_en.py similarity index 100% rename from models/chronos-enzh-50m-sft/eval/boundary_zh_en.py rename to demos/translation/models/chronos-enzh-50m-sft/eval/boundary_zh_en.py diff --git a/models/chronos-enzh-50m-sft/eval/evaluate.py b/demos/translation/models/chronos-enzh-50m-sft/eval/evaluate.py similarity index 100% rename from models/chronos-enzh-50m-sft/eval/evaluate.py rename to demos/translation/models/chronos-enzh-50m-sft/eval/evaluate.py diff --git a/models/chronos-enzh-50m-sft/eval/results/selftest.json b/demos/translation/models/chronos-enzh-50m-sft/eval/results/selftest.json similarity index 100% rename from models/chronos-enzh-50m-sft/eval/results/selftest.json rename to demos/translation/models/chronos-enzh-50m-sft/eval/results/selftest.json diff --git a/models/chronos-enzh-50m-sft/eval/results/summary.json b/demos/translation/models/chronos-enzh-50m-sft/eval/results/summary.json similarity index 100% rename from models/chronos-enzh-50m-sft/eval/results/summary.json rename to demos/translation/models/chronos-enzh-50m-sft/eval/results/summary.json diff --git a/models/chronos-enzh-50m-sft/eval/selftest.json b/demos/translation/models/chronos-enzh-50m-sft/eval/selftest.json similarity index 100% rename from models/chronos-enzh-50m-sft/eval/selftest.json rename to demos/translation/models/chronos-enzh-50m-sft/eval/selftest.json diff --git a/models/chronos-enzh-50m-sft/generation_config.json b/demos/translation/models/chronos-enzh-50m-sft/generation_config.json similarity index 100% rename from models/chronos-enzh-50m-sft/generation_config.json rename to demos/translation/models/chronos-enzh-50m-sft/generation_config.json diff --git a/models/chronos-enzh-50m-sft/prompts.json b/demos/translation/models/chronos-enzh-50m-sft/prompts.json similarity index 100% rename from models/chronos-enzh-50m-sft/prompts.json rename to demos/translation/models/chronos-enzh-50m-sft/prompts.json diff --git a/demos/translation/models/chronos-enzh-50m-sft/tokenizer/special_tokens_map.json b/demos/translation/models/chronos-enzh-50m-sft/tokenizer/special_tokens_map.json new file mode 100644 index 0000000..c317396 --- /dev/null +++ b/demos/translation/models/chronos-enzh-50m-sft/tokenizer/special_tokens_map.json @@ -0,0 +1,5 @@ +{ + "bos_token": "<|im_start|>", + "eos_token": "<|im_end|>", + "pad_token": "<|endoftext|>" +} \ No newline at end of file diff --git a/models/chronos-enzh-50m-sft/tokenizer/tokenizer.json b/demos/translation/models/chronos-enzh-50m-sft/tokenizer/tokenizer.json similarity index 100% rename from models/chronos-enzh-50m-sft/tokenizer/tokenizer.json rename to demos/translation/models/chronos-enzh-50m-sft/tokenizer/tokenizer.json diff --git a/models/chronos-enzh-50m-sft/tokenizer/tokenizer_config.json b/demos/translation/models/chronos-enzh-50m-sft/tokenizer/tokenizer_config.json similarity index 100% rename from models/chronos-enzh-50m-sft/tokenizer/tokenizer_config.json rename to demos/translation/models/chronos-enzh-50m-sft/tokenizer/tokenizer_config.json diff --git a/models/chronos-enzh-50m-sft/tokenizer/tokenizer_report.json b/demos/translation/models/chronos-enzh-50m-sft/tokenizer/tokenizer_report.json similarity index 100% rename from models/chronos-enzh-50m-sft/tokenizer/tokenizer_report.json rename to demos/translation/models/chronos-enzh-50m-sft/tokenizer/tokenizer_report.json diff --git a/models/chronos-enzh-50m-sft/translate.py b/demos/translation/models/chronos-enzh-50m-sft/translate.py similarity index 100% rename from models/chronos-enzh-50m-sft/translate.py rename to demos/translation/models/chronos-enzh-50m-sft/translate.py diff --git a/demos/translation/pyproject.toml b/demos/translation/pyproject.toml new file mode 100644 index 0000000..d62566a --- /dev/null +++ b/demos/translation/pyproject.toml @@ -0,0 +1,28 @@ +[build-system] +requires = ["setuptools>=68", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +name = "chronos-translate" +version = "0.3.2a0" +description = "English-Chinese translation demo for the Chronos kernel: corpus pipeline, BLEU/chrF runs, model bundles" +readme = "README.md" +license = "Apache-2.0" +requires-python = ">=3.10" +dependencies = [ + "Project_Chronos==0.3.2a0", + "sacrebleu==2.6.0", + "sacremoses==0.2.0", + "pyarrow==23.0.1", +] + +[project.optional-dependencies] +mlx = ["Project_Chronos[mlx]==0.3.2a0"] +serve = ["Project_Chronos[serve]==0.3.2a0"] + +[project.scripts] +chronos-translate = "chronos_translate.cli:main" + +[tool.setuptools.packages.find] +where = ["."] +include = ["chronos_translate*"] diff --git a/demos/translation/recipes/docmix_plan.json b/demos/translation/recipes/docmix_plan.json new file mode 100644 index 0000000..6986b72 --- /dev/null +++ b/demos/translation/recipes/docmix_plan.json @@ -0,0 +1,614 @@ +{ + "A": { + "model": { + "architecture_version": 3, + "hidden_size": 384, + "num_hidden_layers": 5, + "vocab_size": 16384, + "num_attention_heads": 6, + "num_key_value_heads": 2, + "max_position_embeddings": 4096, + "tie_word_embeddings": true, + "dropout": 0.0, + "recurrent_enabled": true, + "recurrent_groups": 3, + "recurrent_depth": 4, + "min_recurrent_depth": 2, + "prelude_layers": 1, + "coda_layers": 1, + "adaptive_halting": true, + "halting_threshold": 0.95, + "max_inference_depth": 4, + "ponder_loss_coef": 0.003, + "recurrent_distill_coef": 0.05, + "recurrent_stability_coef": 0.001, + "recurrent_latent_refinement": false, + "recurrent_attention_mode": "shared_first", + "recurrent_strategy": "scheduled", + "depth_schedule": "fixed_then_adaptive", + "depth_schedule_warmup_fraction": 0.3, + "use_moe": true, + "num_experts": 18, + "num_experts_per_tok": 2, + "num_shared_experts": 1, + "moe_intermediate_size": 384, + "lookahead_steps": 2, + "layer_aware_lookahead": true, + "layer_aware_cache": true, + "lambda_balance": 0.005, + "lambda_temporal": 0.001, + "lambda_lookahead": 0.1, + "lambda_lookahead_topk": 0.05, + "lambda_cluster_locality": 0.3, + "cluster_locality_clusters": 0, + "cluster_locality_window": 128, + "lambda_router_anchor": 0.0, + "fallback_mask_prob": 0.08, + "use_hybrid_attention": true, + "kv_latent_dim": 128, + "rope_dim": 32, + "rope_layout": "per_head", + "sliding_window_size": 512, + "kv_cache_dtype": "auto", + "mla_cache_rope": true, + "router_scope": "per_iteration", + "ram_budget_mb": null, + "vram_budget_gb": 0.25, + "optimizer_paging": false, + "activation_checkpointing": false, + "extra_metadata": { + "stage_overrides": { + "pretrain": { + "learning_rate": 0.002, + "batch_size": 4, + "accumulation_steps": 8, + "max_seq_len": 4096, + "grad_clip": 1.0, + "epochs": 4, + "max_steps": 45288, + "weight_decay": 0.1, + "save_interval": 2260, + "lambda_router_anchor": 0.0 + }, + "sft": { + "learning_rate": 0.00067, + "batch_size": 4, + "accumulation_steps": 4, + "max_seq_len": 4096, + "grad_clip": 1.0, + "epochs": 1, + "max_steps": 0, + "weight_decay": 0.1, + "save_interval": 500, + "lambda_router_anchor": 0.0 + }, + "dpo": { + "learning_rate": 0.0001, + "batch_size": 2, + "accumulation_steps": 4, + "max_seq_len": 4096, + "grad_clip": 1.0, + "epochs": 1, + "max_steps": 0, + "weight_decay": 0.01, + "beta": 0.1, + "lambda_router_anchor": 0.01, + "save_interval": 500 + }, + "orpo": { + "learning_rate": 0.0002, + "batch_size": 2, + "accumulation_steps": 4, + "max_seq_len": 4096, + "grad_clip": 1.0, + "epochs": 1, + "max_steps": 0, + "weight_decay": 0.01, + "lambda_or": 0.1, + "lambda_router_anchor": 0.01, + "save_interval": 500 + }, + "grpo": { + "learning_rate": 2e-05, + "batch_size": 1, + "accumulation_steps": 1, + "max_seq_len": 4096, + "grad_clip": 1.0, + "epochs": 1, + "max_steps": 0, + "weight_decay": 0.01, + "beta": 0.04, + "num_generations": 8, + "temperature": 1.0, + "max_gen_len": 256, + "lambda_router_anchor": 0.01, + "save_interval": 500 + }, + "distill": { + "learning_rate": 0.00067, + "batch_size": 4, + "accumulation_steps": 4, + "max_seq_len": 4096, + "grad_clip": 1.0, + "epochs": 1, + "max_steps": 0, + "weight_decay": 0.1, + "alpha": 0.7, + "temperature": 4.0, + "lambda_router_anchor": 0.0, + "save_interval": 500 + } + } + } + }, + "phases": [ + { + "name": "pretrain", + "budget_fraction": 0.5, + "peak_lr": 0.002, + "tokens_per_step": 131072, + "micro_tokens": 16384, + "seq_len": 4096, + "warmup_fraction": 0.02, + "min_lr_ratio": 0.1, + "weight_decay": 0.1, + "grad_clip": 1.0 + }, + { + "name": "sft", + "budget_fraction": 0.5, + "peak_lr": 0.00067, + "tokens_per_step": 65536, + "micro_tokens": 16384, + "seq_len": 4096, + "warmup_fraction": 0.01, + "min_lr_ratio": 0.05, + "weight_decay": 0.1, + "grad_clip": 1.0 + } + ], + "arch": { + "total_params": 50328836, + "active_params": 14939396, + "active_union_upper": 22902020, + "params_source": "measured (meta-device count)", + "hidden_size": 384, + "physical_layers": 5, + "recurrent_groups": 3, + "recurrent_depth": 4, + "virtual_layers": 14, + "experts": 18, + "top_k": 2, + "expert_width": 384, + "heads": "6/2" + }, + "scaling": { + "chosen_lr": 0.002, + "chosen_batch_tokens": 131072 + }, + "memory": { + "level": "none", + "ram_gb": 128.0, + "target_gb": 76.8, + "micro_tokens": 16384, + "rows_per_micro": 4, + "accumulation_steps": 8, + "training_peak_gb": 13.59, + "training_peak_label": "estimated", + "routed_expert_mb_bf16": 75.9, + "ram_budget_mb": null, + "kv_cache_dtype": "auto", + "router_scope": "per_iteration", + "activation_checkpointing": false, + "optimizer_paging": false + } + }, + "B": { + "model": { + "architecture_version": 3, + "hidden_size": 384, + "num_hidden_layers": 5, + "vocab_size": 16384, + "num_attention_heads": 6, + "num_key_value_heads": 2, + "max_position_embeddings": 1024, + "tie_word_embeddings": true, + "dropout": 0.0, + "recurrent_enabled": true, + "recurrent_groups": 3, + "recurrent_depth": 4, + "min_recurrent_depth": 2, + "prelude_layers": 1, + "coda_layers": 1, + "adaptive_halting": true, + "halting_threshold": 0.95, + "max_inference_depth": 4, + "ponder_loss_coef": 0.003, + "recurrent_distill_coef": 0.05, + "recurrent_stability_coef": 0.001, + "recurrent_latent_refinement": false, + "recurrent_attention_mode": "shared_first", + "recurrent_strategy": "scheduled", + "depth_schedule": "fixed_then_adaptive", + "depth_schedule_warmup_fraction": 0.3, + "use_moe": true, + "num_experts": 18, + "num_experts_per_tok": 2, + "num_shared_experts": 1, + "moe_intermediate_size": 384, + "lookahead_steps": 2, + "layer_aware_lookahead": true, + "layer_aware_cache": true, + "lambda_balance": 0.005, + "lambda_temporal": 0.001, + "lambda_lookahead": 0.1, + "lambda_lookahead_topk": 0.05, + "lambda_cluster_locality": 0.3, + "cluster_locality_clusters": 0, + "cluster_locality_window": 128, + "lambda_router_anchor": 0.0, + "fallback_mask_prob": 0.08, + "use_hybrid_attention": true, + "kv_latent_dim": 128, + "rope_dim": 32, + "rope_layout": "per_head", + "sliding_window_size": 256, + "kv_cache_dtype": "auto", + "mla_cache_rope": true, + "router_scope": "per_iteration", + "ram_budget_mb": null, + "vram_budget_gb": 0.25, + "optimizer_paging": false, + "activation_checkpointing": false, + "extra_metadata": { + "stage_overrides": { + "pretrain": { + "learning_rate": 0.0025, + "batch_size": 16, + "accumulation_steps": 4, + "max_seq_len": 1024, + "grad_clip": 1.0, + "epochs": 4, + "max_steps": 15256, + "weight_decay": 0.1, + "save_interval": 760, + "lambda_router_anchor": 0.0 + }, + "sft": { + "learning_rate": 0.00083, + "batch_size": 16, + "accumulation_steps": 2, + "max_seq_len": 1024, + "grad_clip": 1.0, + "epochs": 1, + "max_steps": 0, + "weight_decay": 0.1, + "save_interval": 500, + "lambda_router_anchor": 0.0 + }, + "dpo": { + "learning_rate": 0.00013, + "batch_size": 8, + "accumulation_steps": 2, + "max_seq_len": 1024, + "grad_clip": 1.0, + "epochs": 1, + "max_steps": 0, + "weight_decay": 0.01, + "beta": 0.1, + "lambda_router_anchor": 0.01, + "save_interval": 500 + }, + "orpo": { + "learning_rate": 0.00025, + "batch_size": 8, + "accumulation_steps": 2, + "max_seq_len": 1024, + "grad_clip": 1.0, + "epochs": 1, + "max_steps": 0, + "weight_decay": 0.01, + "lambda_or": 0.1, + "lambda_router_anchor": 0.01, + "save_interval": 500 + }, + "grpo": { + "learning_rate": 2e-05, + "batch_size": 4, + "accumulation_steps": 1, + "max_seq_len": 1024, + "grad_clip": 1.0, + "epochs": 1, + "max_steps": 0, + "weight_decay": 0.01, + "beta": 0.04, + "num_generations": 8, + "temperature": 1.0, + "max_gen_len": 256, + "lambda_router_anchor": 0.01, + "save_interval": 500 + }, + "distill": { + "learning_rate": 0.00083, + "batch_size": 16, + "accumulation_steps": 2, + "max_seq_len": 1024, + "grad_clip": 1.0, + "epochs": 1, + "max_steps": 0, + "weight_decay": 0.1, + "alpha": 0.7, + "temperature": 4.0, + "lambda_router_anchor": 0.0, + "save_interval": 500 + } + } + } + }, + "phases": [ + { + "name": "pretrain", + "budget_fraction": 0.5, + "peak_lr": 0.0025, + "tokens_per_step": 65536, + "micro_tokens": 16384, + "seq_len": 1024, + "warmup_fraction": 0.02, + "min_lr_ratio": 0.1, + "weight_decay": 0.1, + "grad_clip": 1.0 + }, + { + "name": "sft", + "budget_fraction": 0.5, + "peak_lr": 0.00083, + "tokens_per_step": 32768, + "micro_tokens": 16384, + "seq_len": 1024, + "warmup_fraction": 0.01, + "min_lr_ratio": 0.05, + "weight_decay": 0.1, + "grad_clip": 1.0 + } + ], + "arch": { + "total_params": 50328836, + "active_params": 14939396, + "active_union_upper": 22902020, + "params_source": "measured (meta-device count)", + "hidden_size": 384, + "physical_layers": 5, + "recurrent_groups": 3, + "recurrent_depth": 4, + "virtual_layers": 14, + "experts": 18, + "top_k": 2, + "expert_width": 384, + "heads": "6/2" + }, + "scaling": { + "chosen_lr": 0.0025, + "chosen_batch_tokens": 65536 + }, + "memory": { + "level": "none", + "ram_gb": 128.0, + "target_gb": 76.8, + "micro_tokens": 16384, + "rows_per_micro": 16, + "accumulation_steps": 4, + "training_peak_gb": 13.59, + "training_peak_label": "estimated", + "routed_expert_mb_bf16": 75.9, + "ram_budget_mb": null, + "kv_cache_dtype": "auto", + "router_scope": "per_iteration", + "activation_checkpointing": false, + "optimizer_paging": false + } + }, + "C": { + "model": { + "architecture_version": 3, + "hidden_size": 384, + "num_hidden_layers": 5, + "vocab_size": 16384, + "num_attention_heads": 6, + "num_key_value_heads": 2, + "max_position_embeddings": 1024, + "tie_word_embeddings": true, + "dropout": 0.0, + "recurrent_enabled": true, + "recurrent_groups": 3, + "recurrent_depth": 4, + "min_recurrent_depth": 2, + "prelude_layers": 1, + "coda_layers": 1, + "adaptive_halting": true, + "halting_threshold": 0.95, + "max_inference_depth": 4, + "ponder_loss_coef": 0.003, + "recurrent_distill_coef": 0.05, + "recurrent_stability_coef": 0.001, + "recurrent_latent_refinement": false, + "recurrent_attention_mode": "shared_first", + "recurrent_strategy": "scheduled", + "depth_schedule": "fixed_then_adaptive", + "depth_schedule_warmup_fraction": 0.3, + "use_moe": true, + "num_experts": 18, + "num_experts_per_tok": 2, + "num_shared_experts": 1, + "moe_intermediate_size": 384, + "lookahead_steps": 2, + "layer_aware_lookahead": true, + "layer_aware_cache": true, + "lambda_balance": 0.005, + "lambda_temporal": 0.001, + "lambda_lookahead": 0.1, + "lambda_lookahead_topk": 0.05, + "lambda_cluster_locality": 0.3, + "cluster_locality_clusters": 0, + "cluster_locality_window": 128, + "lambda_router_anchor": 0.0, + "fallback_mask_prob": 0.08, + "use_hybrid_attention": true, + "kv_latent_dim": 128, + "rope_dim": 32, + "rope_layout": "per_head", + "sliding_window_size": 256, + "kv_cache_dtype": "auto", + "mla_cache_rope": true, + "router_scope": "per_iteration", + "ram_budget_mb": null, + "vram_budget_gb": 0.25, + "optimizer_paging": false, + "activation_checkpointing": false, + "extra_metadata": { + "stage_overrides": { + "pretrain": { + "learning_rate": 0.003, + "batch_size": 16, + "accumulation_steps": 2, + "max_seq_len": 1024, + "grad_clip": 1.0, + "epochs": 4, + "max_steps": 3100, + "weight_decay": 0.1, + "save_interval": 160, + "lambda_router_anchor": 0.0 + }, + "sft": { + "learning_rate": 0.001, + "batch_size": 16, + "accumulation_steps": 1, + "max_seq_len": 1024, + "grad_clip": 1.0, + "epochs": 1, + "max_steps": 0, + "weight_decay": 0.1, + "save_interval": 500, + "lambda_router_anchor": 0.0 + }, + "dpo": { + "learning_rate": 0.00015, + "batch_size": 8, + "accumulation_steps": 1, + "max_seq_len": 1024, + "grad_clip": 1.0, + "epochs": 1, + "max_steps": 0, + "weight_decay": 0.01, + "beta": 0.1, + "lambda_router_anchor": 0.01, + "save_interval": 500 + }, + "orpo": { + "learning_rate": 0.0003, + "batch_size": 8, + "accumulation_steps": 1, + "max_seq_len": 1024, + "grad_clip": 1.0, + "epochs": 1, + "max_steps": 0, + "weight_decay": 0.01, + "lambda_or": 0.1, + "lambda_router_anchor": 0.01, + "save_interval": 500 + }, + "grpo": { + "learning_rate": 2e-05, + "batch_size": 4, + "accumulation_steps": 1, + "max_seq_len": 1024, + "grad_clip": 1.0, + "epochs": 1, + "max_steps": 0, + "weight_decay": 0.01, + "beta": 0.04, + "num_generations": 8, + "temperature": 1.0, + "max_gen_len": 256, + "lambda_router_anchor": 0.01, + "save_interval": 500 + }, + "distill": { + "learning_rate": 0.001, + "batch_size": 16, + "accumulation_steps": 1, + "max_seq_len": 1024, + "grad_clip": 1.0, + "epochs": 1, + "max_steps": 0, + "weight_decay": 0.1, + "alpha": 0.7, + "temperature": 4.0, + "lambda_router_anchor": 0.0, + "save_interval": 500 + } + } + } + }, + "phases": [ + { + "name": "pretrain", + "budget_fraction": 0.5, + "peak_lr": 0.003, + "tokens_per_step": 32768, + "micro_tokens": 16384, + "seq_len": 1024, + "warmup_fraction": 0.02, + "min_lr_ratio": 0.1, + "weight_decay": 0.1, + "grad_clip": 1.0 + }, + { + "name": "sft", + "budget_fraction": 0.5, + "peak_lr": 0.001, + "tokens_per_step": 16384, + "micro_tokens": 16384, + "seq_len": 1024, + "warmup_fraction": 0.01, + "min_lr_ratio": 0.05, + "weight_decay": 0.1, + "grad_clip": 1.0 + } + ], + "arch": { + "total_params": 50328836, + "active_params": 14939396, + "active_union_upper": 22902020, + "params_source": "measured (meta-device count)", + "hidden_size": 384, + "physical_layers": 5, + "recurrent_groups": 3, + "recurrent_depth": 4, + "virtual_layers": 14, + "experts": 18, + "top_k": 2, + "expert_width": 384, + "heads": "6/2" + }, + "scaling": { + "chosen_lr": 0.003, + "chosen_batch_tokens": 32768 + }, + "memory": { + "level": "none", + "ram_gb": 128.0, + "target_gb": 76.8, + "micro_tokens": 16384, + "rows_per_micro": 16, + "accumulation_steps": 2, + "training_peak_gb": 13.59, + "training_peak_label": "estimated", + "routed_expert_mb_bf16": 75.9, + "ram_budget_mb": null, + "kv_cache_dtype": "auto", + "router_scope": "per_iteration", + "activation_checkpointing": false, + "optimizer_paging": false + } + } +} \ No newline at end of file diff --git a/chronos/mlx/training/recipes/enzh_50m_72h.json b/demos/translation/recipes/enzh_50m_72h.json similarity index 90% rename from chronos/mlx/training/recipes/enzh_50m_72h.json rename to demos/translation/recipes/enzh_50m_72h.json index 0d8b082..dc54cdd 100644 --- a/chronos/mlx/training/recipes/enzh_50m_72h.json +++ b/demos/translation/recipes/enzh_50m_72h.json @@ -1,7 +1,7 @@ { - "run_dir": "runs/enzh_50m_v1", - "shards_dir": "Translation Training Data/shards_v1", - "tokenizer_dir": "Translation Training Data/tokenizer_v1", + "run_dir": "../../../runs/enzh_50m_v1", + "shards_dir": "../../../Translation Training Data/shards_v1", + "tokenizer_dir": "../../../Translation Training Data/tokenizer_v1", "model_config": { "architecture_version": 3, "num_hidden_layers": 6, @@ -73,7 +73,7 @@ "seed": 1234, "dtype": "bfloat16", "extra": { - "raw_root": "Translation Training Data/raw", + "raw_root": "../../../Translation Training Data/raw", "params": { "total": 49691717, "active": 12090437, diff --git a/demos/translation/scripts/make_docmix_packages.py b/demos/translation/scripts/make_docmix_packages.py new file mode 100644 index 0000000..80112ec --- /dev/null +++ b/demos/translation/scripts/make_docmix_packages.py @@ -0,0 +1,405 @@ +"""Self-contained MLX training packages for the doc-mix sets (A: 15%/4k/24h, B: 5%/1k/8h, C: 1%/1k/1h). + +Each package carries its data, tokenizer, eval sets, Chronos source (no +third-party kernel since 0.3.2), a recipe with relative paths, pinned requirements, launch/monitor +scripts and SHA256SUMS. Usage:: + + python demos/translation/scripts/make_docmix_packages.py OUT_DIR [A B C] + +The repository root defaults to three folders above this script (override with +``CHRONOS_REPO``); the planner output is ``recipes/docmix_plan.json`` (written by +``scripts/plan_docmix.py``). +""" +import json +import os +import shutil +import sys +import time + +DEMO = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +REPO = os.path.abspath(os.environ.get("CHRONOS_REPO") or os.path.dirname(os.path.dirname(DEMO))) +sys.path[:0] = [REPO, DEMO] +from chronos_translate.bundle.builder import TOKENIZER_FILES, FLORES_REL, FLORES_FILES, sha256_file # noqa: E402 +from chronos.config_schema import model_config_kwargs # noqa: E402 + +DATA = os.path.join(REPO, "Translation Training Data") +DOCMIX = os.path.join(DATA, "docmix_v1") +RAW = os.path.join(DATA, "raw") +TOKENIZER = os.path.join(DATA, "tokenizer_v1") +PLAN = os.path.join(DEMO, "recipes", "docmix_plan.json") +SKIP = {"__pycache__", ".DS_Store"} +# The extension's own recipes and tests are not needed inside a package. +SKIP_SRC = {os.path.join("demos", "translation", "recipes"), os.path.join("demos", "translation", "tests")} + +# Measured on the built sets (docmix_manifest.json, trial_lengths.py); live run: 2.79 pretrain / ~1.67 SFT passes. +PACKAGES = { + "A": dict(name="chronos_docmix_A_sci15_ctx4k_24h", set="sci15_ctx4096", hours=24.0, ctx=4096, + validate_every_s=7200.0, checkpoint_every_s=1800.0, bleu_samples=100, final_eval_samples=1012, + eval_reserve_fraction=0.06, doc_eval_docs=16, final_doc_eval_docs=1 << 30, tensor_stats_every_s=1800.0, + probe_samples=16, lengths={"p50": 139, "p95": 1826, "p99": 3568, "max": 4071}), + "B": dict(name="chronos_docmix_B_sci5_ctx1k_8h", set="sci5_ctx1024", hours=8.0, ctx=1024, + validate_every_s=3600.0, checkpoint_every_s=1200.0, bleu_samples=100, final_eval_samples=1012, + eval_reserve_fraction=0.08, doc_eval_docs=16, final_doc_eval_docs=1 << 30, tensor_stats_every_s=1800.0, + probe_samples=16, lengths={"p50": 138, "p95": 695, "p99": 943, "max": 1014}), + "C": dict(name="chronos_docmix_C_sci1_ctx1k_1h", set="sci1_ctx1024", hours=1.0, ctx=1024, + validate_every_s=1200.0, checkpoint_every_s=600.0, bleu_samples=50, final_eval_samples=200, + eval_reserve_fraction=0.12, doc_eval_docs=8, final_doc_eval_docs=40, tensor_stats_every_s=900.0, + probe_samples=8, lengths={"p50": 140, "p95": 696, "p99": 944, "max": 1013}), +} +TARGET_PASSES = {"pretrain": 4.0, "sft": 3.0} +# Exact versions resolved from the environment the packages were tested in (pip metadata walk). +REQUIREMENTS = """\ +annotated-types==0.7.0 +anyio==4.15.1 +certifi==2026.4.22 +click==8.2.1 +exceptiongroup==1.3.0 +fastapi==0.115.9 +filelock==3.18.0 +fsspec==2025.3.0 +h11==0.16.0 +hf-xet==1.4.3 +httpcore==1.0.9 +httpx==0.28.1 +huggingface-hub==1.10.2 +idna==3.20 +jinja2==3.1.6 +lxml==5.4.0 +markdown-it-py==3.0.0 +markupsafe==3.0.2 +mdurl==0.1.2 +mlx==0.32.4 +mlx-metal==0.32.4 +mpmath==1.3.0 +networkx==3.4.2 +numpy==1.26.4 +packaging==24.2 +portalocker==4.4.2 +psutil==7.2.2 +pyarrow==23.0.1 +pydantic==2.11.5 +pydantic-core==2.33.2 +pygments==2.19.1 +pyyaml==6.0 +regex==2026.4.4 +rich==14.0.0 +sacrebleu==2.6.0 +safetensors==0.5.3 +shellingham==1.5.4 +starlette==0.45.3 +sympy==1.14.0 +tabulate==0.10.0 +tokenizers==0.22.2 +torch==2.10.0 +tqdm==4.67.1 +transformers==5.5.0 +typer==0.16.0 +typing-extensions==4.16.0 +typing-inspection==0.4.1 +uvicorn==0.34.3 +""" + + +def _ignore(folder, names): + out = {n for n in names if n in SKIP or n.endswith((".pyc", ".egg-info"))} + for n in names: + if os.path.relpath(os.path.join(folder, n), REPO) in SKIP_SRC: + out.add(n) + return out + + +def _version(module): + import importlib + return getattr(importlib.import_module(module), "__version__", "unknown") + + +def _copytree(src, dst): + shutil.copytree(src, dst, ignore=_ignore, dirs_exist_ok=False) + + +def _copy(src, dst): + os.makedirs(os.path.dirname(dst), exist_ok=True) + shutil.copy2(src, dst) + + +def _write(path, text, mode=0o644): + os.makedirs(os.path.dirname(path), exist_ok=True) + with open(path, "w", encoding="utf-8") as fh: + fh.write(text) + os.chmod(path, mode) + + +def _json(path, obj): + _write(path, json.dumps(obj, ensure_ascii=False, indent=2) + "\n") + + +def _download_manifest(src, dst): + m = json.load(open(src, encoding="utf-8")) + for f in m.get("files", []): + f.pop("local", None) # local absolute/relative paths of this machine + _json(dst, m) + + +def recipe(key, cfg, plan, docmix): + model = dict(plan["model"]) + model.update(max_position_embeddings=cfg["ctx"], rope_theta=1e6, bos_token_id=1, eos_token_id=2, + extra_metadata={"docmix_package": cfg["name"]}) + model = model_config_kwargs(model) + assert model["num_experts"] == 18 and model["max_position_embeddings"] == cfg["ctx"] + assert model["rope_theta"] == 1e6 and model["eos_token_id"] == 2 + phases = [dict(p) for p in plan["phases"]] + for p in phases: + p["seq_len"] = cfg["ctx"] + train = docmix["splits"]["train"] + extra = { + "raw_root": "data/raw", "micro_fit": "auto", "micro_fit_fraction": 0.7, + "target_passes": TARGET_PASSES, "doc_eval_docs": cfg["doc_eval_docs"], + "package": cfg["name"], + "params": {k: plan["arch"][k] for k in ("total_params", "active_params", "active_union_upper", + "virtual_layers", "experts", "top_k", "expert_width")}, + "data": {"set": cfg["set"], "ctx_len": cfg["ctx"], "train_rows": train["rows"], "sft_records": train["records"], + "pretrain_tokens": train["pretrain_tokens"], "sft_tokens": train["sft_tokens"], + "sft_supervised_tokens": train["sft_supervised_tokens"], "record_len_tokens": cfg["lengths"], + "selection": docmix["selection"]}, + "planner": {"memory_estimate": plan["memory"], "scaling": plan["scaling"], + "windows": {"sliding_window_size": model["sliding_window_size"], + "cluster_locality_window": model["cluster_locality_window"], + "rule": "SWA = pow2 ≥ p95/4 (min 128, ≤ ctx); cluster = pow2 nearest p50"}}, + "note": ("target_passes: live 72h run reached 2.79 pretrain / ~1.67 SFT passes; +1 pass each, rounded. " + "A phase ends at its target or its time budget, whichever comes first."), + } + if cfg["final_doc_eval_docs"] < (1 << 30): + extra["final_doc_eval_docs"] = cfg["final_doc_eval_docs"] + return { + "_comment": f"Chronos doc-mix package {key}: paths are relative to this file.", + "run_dir": "run", "shards_dir": "data/shards", "tokenizer_dir": "data/tokenizer", + "model_config": model, "phases": phases, "budget_hours": cfg["hours"], + "eval_reserve_fraction": cfg["eval_reserve_fraction"], "log_every_steps": 20, + "validate_every_s": cfg["validate_every_s"], "checkpoint_every_s": cfg["checkpoint_every_s"], + "bleu_samples": cfg["bleu_samples"], "final_eval_samples": cfg["final_eval_samples"], "seed": 1234, + "dtype": "bfloat16", "schedule": "time", "tensor_stats_every_s": cfg["tensor_stats_every_s"], + "probe_samples": cfg["probe_samples"], "export_prefix": "chronos_docmix", "extra": extra, + } + + +def shards_manifest(cfg, docmix): + """Small summary the monitor shows under "data" (``shards_manifest.json`` in shards_dir).""" + tr, va = docmix["splits"]["train"], docmix["splits"]["valid"] + return {"format": "chronos-docmix-v1", "set": cfg["set"], "tokenizer_dir": "../tokenizer", + "tokenizer_fingerprint": docmix.get("tokenizer_fingerprint"), "created_utc": docmix.get("created_utc"), + "sft_max_len": cfg["ctx"], "pretrain_train_tokens": tr["pretrain_tokens"], + "pretrain_valid_tokens": va["pretrain_tokens"], "sft_train_records": tr["records"], + "sft_valid_records": va["records"], "sft_train_tokens": tr["sft_tokens"], + "sft_train_supervised_tokens": tr["sft_supervised_tokens"], "prompts": docmix.get("prompts"), + "size_share_records": tr.get("size_share_records"), "dir_share_records": tr.get("dir_share_records"), + "token_share_by_len": tr.get("token_share_by_len"), "ordered_records": tr.get("ordered_records"), + "random_concat_records": tr.get("random_concat_records"), "spec": docmix.get("spec")} + + +LAUNCH = r"""#!/bin/bash +# Chronos doc-mix training package: venv + pinned deps + resumable MLX run. +# ./launch.sh full run (rerun the same command to resume from run/checkpoints/latest.state.pkl) +# ./launch.sh --smoke 2 updates per phase + short eval in run_smoke/