{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "73ee24e1",
   "metadata": {},
   "source": [
    "# Record and analyze\n",
    "\n",
    "**What you'll learn / who it's for (simulation).** The recording API tour: tap spikes with a `spike_recorder` and analog signals with a `multimeter`, read the data back, and analyze it — firing rate, raster, spike times in two formats, and the inter-spike-interval (ISI) coefficient of variation.\n",
    "\n",
    "Ported from `examples/nest_like/recording_demo.py`. Recording is **in memory** — there is no file backend yet — so NEST's `record_to` backend axis collapses to the in-memory equivalent."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "016f1521",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-17T09:13:15.941909Z",
     "iopub.status.busy": "2026-06-17T09:13:15.941703Z",
     "iopub.status.idle": "2026-06-17T09:13:20.317343Z",
     "shell.execute_reply": "2026-06-17T09:13:20.316488Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "An NVIDIA GPU may be present on this machine, but a CUDA-enabled jaxlib is not installed. Falling back to cpu.\n"
     ]
    }
   ],
   "source": [
    "import jax\n",
    "jax.config.update('jax_enable_x64', True)\n",
    "import brainstate\n",
    "brainstate.environ.set(precision=64)\n",
    "\n",
    "import numpy as np\n",
    "import brainunit as u\n",
    "import matplotlib.pyplot as plt\n",
    "from brainpy import state as bp"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9dd2a88b",
   "metadata": {},
   "source": [
    "## A trivial network to record from\n",
    "\n",
    "A single `poisson_generator` drives one `iaf_psc_exp`. We attach two recorders: a `spike_recorder` for spikes and a `multimeter` recording `V_m` at the simulation resolution. The high (1 MHz) drive saturates the neuron so it fires every refractory period — a steady stream of spikes to analyze."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "fe341696",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-17T09:13:20.319641Z",
     "iopub.status.busy": "2026-06-17T09:13:20.319201Z",
     "iopub.status.idle": "2026-06-17T09:13:24.451176Z",
     "shell.execute_reply": "2026-06-17T09:13:24.449947Z"
    }
   },
   "outputs": [],
   "source": [
    "dt = 0.1\n",
    "sim = bp.Simulator(dt=dt * u.ms)\n",
    "neuron = sim.create(bp.iaf_psc_exp, 1)\n",
    "pg = sim.create(bp.poisson_generator, 1, rate=1_000_000. * u.Hz, rng_seed=0)\n",
    "sr = sim.create(bp.spike_recorder)\n",
    "mm = sim.create(bp.multimeter, record_from=['V_m'], interval=dt * u.ms)\n",
    "\n",
    "sim.connect(pg, neuron, weight=10. * u.pA, delay=1.0 * u.ms)\n",
    "sim.connect(neuron, sr)             # spike tap\n",
    "sim.connect(mm, neuron)             # reversed: the multimeter observes the neuron\n",
    "\n",
    "res = sim.simulate(100. * u.ms)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4ef175d1",
   "metadata": {},
   "source": [
    "## Spike statistics: rate and event count\n",
    "\n",
    "`res.rate(sr)` is the mean firing rate (Hz) and `res.n_events(sr)` the total spike count."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "3578cf82",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-17T09:13:24.453520Z",
     "iopub.status.busy": "2026-06-17T09:13:24.453087Z",
     "iopub.status.idle": "2026-06-17T09:13:24.536186Z",
     "shell.execute_reply": "2026-06-17T09:13:24.535393Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "firing rate: 450.00 spks/s\n",
      "n_events:    45\n"
     ]
    }
   ],
   "source": [
    "print(f'firing rate: {res.rate(sr):.2f} spks/s')\n",
    "print(f'n_events:    {res.n_events(sr)}')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bfd5cfbc",
   "metadata": {},
   "source": [
    "## Spike times in two formats\n",
    "\n",
    "NEST's `time_in_steps` axis is reproduced post-hoc: the recorded spikes are the per-step spike matrix, which we convert either to integer step indices or to times in ms."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "a8f125ee",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-17T09:13:24.538194Z",
     "iopub.status.busy": "2026-06-17T09:13:24.537965Z",
     "iopub.status.idle": "2026-06-17T09:13:24.573412Z",
     "shell.execute_reply": "2026-06-17T09:13:24.572541Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "first 8 spike steps : [ 22  45  68  90 112 134 156 178]\n",
      "first 8 spike times : [ 2.2  4.5  6.8  9.  11.2 13.4 15.6 17.8] ms\n"
     ]
    }
   ],
   "source": [
    "spk = np.asarray(res.spikes(sr)).reshape(-1)     # (n_steps,) for one neuron\n",
    "steps = np.nonzero(spk > 0)[0]\n",
    "t_ms = np.asarray(u.get_mantissa(res.times / u.ms))\n",
    "spike_times = t_ms[steps]\n",
    "print('first 8 spike steps :', steps[:8])\n",
    "print('first 8 spike times :', np.round(spike_times[:8], 1), 'ms')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "16be280d",
   "metadata": {},
   "source": [
    "## Analog recording and the ISI coefficient of variation\n",
    "\n",
    "The `multimeter` trace is read with `res.trace(mm, 'V_m')`. From the spike times we compute the ISI CV (std/mean of inter-spike intervals) — a refractory-limited regular train has a small CV."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "fcc1d304",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-06-17T09:13:24.575011Z",
     "iopub.status.busy": "2026-06-17T09:13:24.574852Z",
     "iopub.status.idle": "2026-06-17T09:13:24.735619Z",
     "shell.execute_reply": "2026-06-17T09:13:24.734515Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "V_m trace: 1000 samples, min -70.00 mV, max -55.14 mV\n",
      "ISI CV: 0.009  (mean ISI 2.20 ms)\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxYAAAHqCAYAAACZcdjsAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAWuZJREFUeJzt3XeUFFX6//FPT2SAGeIwA0gaEBAwIAgGFBQUWcMimAMgxgVXF8MKJkAWATHs6rqKAXBXv4sBXRVFBQmCIBIMJAHJkiXNkCbW7w9/3aebCUxXdXf17X6/zuE009PP3Hu7qqvuc2/dao9lWZYAAAAAwIEEtysAAAAAwHwkFgAAAAAcI7EAAAAA4BiJBQAAAADHSCwAAAAAOEZiAQAAAMAxEgsAAAAAjpFYAAAAAHCMxAIAAACAYyQWAOLagAED1LRp00q9dsSIEfJ4POGtEOKCx+PRiBEjfD97963ffvvNvUoBgEMkFgDg58iRIxoxYoTmzJnjdlUCLFiwQCNGjNCBAwciVuZnn30W0PkFTiRaPz8AIoPEAgD8HDlyRCNHjiyzY/TYY4/p6NGjka+Ufk8sRo4cGfHEYuTIkRErL54cPXpUjz32mNvVCLmKPj8AYh+JBQBUUlJSkqpUqeJ2NULqyJEjIfk7RUVFKigoCMnfCqdu3bppwIABbldDVapUUVJSkqt1sCzLtUQ5WIcPH3a7CgAqgcQCQNTxXm++du1a3XzzzapRo4YyMzP1+OOPy7Isbd26VX/84x+VkZGh7OxsPfvsswHxkydPlsfj0aZNmwKenzNnjjweT7mjqZs2bVJmZqYkaeTIkfJ4PAHXwpe1xsLj8eiee+7Re++9pzZt2igtLU3nnHOOli9fLkmaMGGCWrRooSpVqqhbt26l6iRJixYt0qWXXqoaNWqoatWq6tq1q7755puA9+Ohhx6SJDVr1sxXL/+/9dZbb6lDhw5KS0tT7dq1df3112vr1q0B5XTr1k3t2rXT0qVLdcEFF6hq1ap65JFHynwvBgwYoJdeesnXRu8/7/vk8Xj0zDPP6O9//7uaN2+u1NRUrVq1SgUFBXriiSfUoUMH1ahRQ9WqVdP555+v2bNnlyqjpKRE//jHP3TqqaeqSpUqyszM1KWXXqolS5YEvK4ybQu3wsJCjRw5UieffLKqVKmiOnXqqEuXLpoxY4bvNQMGDFD16tW1YcMG9ezZU9WqVVODBg305JNPyrKsgL93/BqLsmzevFktWrRQu3bttGvXLknSgQMH9Je//EWNGjVSamqqWrRooXHjxqmkpOSEbWjatKkuv/xyffHFF+rYsaPS0tI0YcIESdKkSZN00UUXqV69ekpNTVWbNm308ssvl/obS5YsUc+ePVW3bl2lpaWpWbNmGjhwoKQTf34k6eeff9bVV1+t2rVrq0qVKurYsaM+/vjjgDK8n9+5c+dq0KBBqlevnk466aQTtg+A+9wdLgGAClx33XU65ZRTNHbsWH366af629/+ptq1a2vChAm66KKLNG7cOL399tt68MEHddZZZ+mCCy5wVF5mZqZefvll/elPf9JVV12lPn36SJJOO+20CuPmzZunjz/+WIMHD5YkjRkzRpdffrn++te/6l//+pcGDRqk/fv36+mnn9bAgQM1a9YsX+ysWbPUq1cvdejQQcOHD1dCQoKvkzdv3jx16tRJffr00dq1a/Xf//5Xzz//vOrWreurrySNHj1ajz/+uK699lrdfvvt2rNnj1588UVdcMEF+v7771WzZk1feXv37lWvXr10/fXX6+abb1ZWVlaZbbrrrru0fft2zZgxQ//5z3/KfM2kSZN07Ngx3XnnnUpNTVXt2rWVm5ur119/XTfccIPuuOMO5eXl6Y033lDPnj313Xff6YwzzvDF33bbbZo8ebJ69eql22+/XUVFRZo3b56+/fZbdezYMei2hdOIESM0ZswY3X777erUqZNyc3O1ZMkSLVu2TBdffLHvdcXFxbr00kt19tln6+mnn9bnn3+u4cOHq6ioSE8++WSly1u/fr0uuugi1a5dWzNmzFDdunV15MgRde3aVdu2bdNdd92lxo0ba8GCBRo2bJh27Nihv//97yf8u2vWrNENN9ygu+66S3fccYdatWolSXr55ZfVtm1bXXnllUpKStInn3yiQYMGqaSkxLdf7969W5dccokyMzM1dOhQ1axZU5s2bdIHH3wg6cSfn5UrV+q8885Tw4YNNXToUFWrVk3vvvuuevfuralTp+qqq64KqOugQYOUmZmpJ554ghkLwBQWAESZ4cOHW5KsO++80/dcUVGRddJJJ1kej8caO3as7/n9+/dbaWlpVv/+/X3PTZo0yZJkbdy4MeDvzp4925JkzZ492/dc//79rSZNmvh+3rNnjyXJGj58eLn18ifJSk1NDShrwoQJliQrOzvbys3N9T0/bNiwgHqVlJRYJ598stWzZ0+rpKTE97ojR45YzZo1sy6++GLfc+PHjy+zTZs2bbISExOt0aNHBzy/fPlyKykpKeD5rl27WpKsV155pVTbyjJ48OBS7bUsy9q4caMlycrIyLB2794d8LuioiIrPz8/4Ln9+/dbWVlZ1sCBA33PzZo1y5Jk3XvvvaX+vve9CKZtldW1a9eAfaWyTj/9dOuyyy6r8DX9+/e3JFl//vOffc+VlJRYl112mZWSkmLt2bPH9/zx+5h339qzZ4+1evVqq0GDBtZZZ51l7du3z/eaUaNGWdWqVbPWrl0bUO7QoUOtxMREa8uWLRXWr0mTJpYk6/PPPy/1uyNHjpR6rmfPnlZOTo7v5w8//NCSZC1evLjcMir6/HTv3t069dRTrWPHjvmeKykpsc4991zr5JNP9j3n/fx26dLFKioqqrBNAKILl0IBiFq333677/+JiYnq2LGjLMvSbbfd5nu+Zs2aatWqlTZs2OBGFSVJ3bt3D7hlbefOnSVJffv2VXp6eqnnvXX94YcftG7dOt14443au3evfvvtN/322286fPiwunfvrq+//vqEl7h88MEHKikp0bXXXuuL/+2335Sdna2TTz651CVIqampuvXWW0PRbPXt29c3a+KVmJiolJQUSb9f6rRv3z4VFRWpY8eOWrZsme91U6dOlcfj0fDhw0v9Xe8lV8G27XiFhYUBcb/99psKCwuVn59f6vkTvc81a9bUypUrtW7duhO+L/fcc09AW+655x4VFBRo5syZJ4xdsWKFunbtqqZNm2rmzJmqVauW73fvvfeezj//fNWqVSug7j169FBxcbG+/vrrE/79Zs2aqWfPnqWeT0tL8/3/4MGD+u2339S1a1dt2LBBBw8elCTf7NC0adNUWFh4wrL87du3T7NmzdK1116rvLw8X9337t2rnj17at26ddq2bVtAzB133KHExMSgygHgLi6FAhC1GjduHPBzjRo1VKVKFd+lQP7P7927N5JVC1BWPSWpUaNGZT6/f/9+SfJ1Uvv371/u3z548GBA5/J469atk2VZOvnkk8v8fXJycsDPDRs29HX8nWrWrFmZz7/55pt69tln9fPPPwd0QP1fv379ejVo0EC1a9cu9+8H27bjffPNN7rwwgtLPb9gwQJNmTIl4LmNGzdW+H0mTz75pP74xz+qZcuWateunS699FLdcsstpS6TS0hIUE5OTsBzLVu2lKQy19cc74orrlBWVpa++OILVa9ePeB369at008//VQqmfPavXv3Cf9+edvsm2++0fDhw7Vw4cJSC/oPHjyoGjVqqGvXrurbt69Gjhyp559/Xt26dVPv3r114403KjU1tcJyf/nlF1mWpccff1yPP/54ufVv2LDhCesKIHqRWACIWmWNVpY3gmn5LY4t70vsiouLQ1OxStbpRHX1jpKPHz8+YO2Bv+M7l8crKSmRx+PR9OnTyyzv+Hj/kWmnyvpbb731lgYMGKDevXvroYceUr169ZSYmKgxY8Zo/fr1Qf39YNt2vNNPPz1gcbUkPfDAA8rOzvYthvfKzs6u8G9dcMEFWr9+vT766CN9+eWXev311/X888/rlVdeCZhZc6pv375688039fbbb+uuu+4K+F1JSYkuvvhi/fWvfy0z1pvAVKSsbbZ+/Xp1795drVu31nPPPadGjRopJSVFn332mZ5//nnffurxePT+++/r22+/1SeffKIvvvhCAwcO1LPPPqtvv/22wu3h/RsPPvhgmTMmktSiRYsT1hVAdCOxABBzvCP8x3/nw+bNm08YG8lv1m7evLkkKSMjQz169KjwteXVq3nz5rIsS82aNatUxzIYdt6L999/Xzk5Ofrggw8C4o+/5Kl58+b64osvtG/fvnJnLZy2rVatWqXe11q1aql+/fonfL/LUrt2bd1666269dZbdejQIV1wwQUaMWJEQGJRUlKiDRs2BNR37dq1klSpb3gfP368kpKSNGjQIKWnp+vGG2/0/a558+Y6dOiQrbpX5JNPPlF+fr4+/vjjgNm38i41O/vss3X22Wdr9OjR+r//+z/ddNNNmjJlim6//fZy9xnvLE5ycnLI6w8gerDGAkDM8XbY/a85Ly4u1quvvnrC2KpVq0oqnZSEQ4cOHdS8eXM988wzOnToUKnf79mzx/f/atWqlVmvPn36KDExUSNHjix1S1PLshxdIlZemRXxziz412XRokVauHBhwOv69u0ry7LK/AI+b2w42xas48uqXr26WrRoofz8/FKv/ec//+n7v2VZ+uc//6nk5GR17979hOV4PB69+uqruvrqq9W/f/+AW7Fee+21Wrhwob744otScQcOHFBRUVEwTfIpa5sdPHhQkyZNCnjd/v37S20H70yb930o7/NTr149devWTRMmTNCOHTtK1cF/XwdgLmYsAMSctm3b6uyzz9awYcN8I+JTpkypVMcrLS1Nbdq00TvvvKOWLVuqdu3aateundq1axfyeiYkJOj1119Xr1691LZtW916661q2LChtm3bptmzZysjI0OffPKJpN+TEEl69NFHdf311ys5OVlXXHGFmjdvrr/97W8aNmyYNm3apN69eys9PV0bN27Uhx9+qDvvvFMPPvigrfp5y7z33nvVs2dPJSYm6vrrr68w5vLLL9cHH3ygq666Spdddpk2btyoV155RW3atAlIni688ELdcssteuGFF7Ru3TpdeumlKikp0bx583ThhRfqnnvuCWvbgtWmTRt169ZNHTp0UO3atbVkyRK9//77AQu1pd+/+O7zzz9X//791blzZ02fPl2ffvqpHnnkkXLXRhwvISFBb731lnr37q1rr71Wn332mS666CI99NBD+vjjj3X55ZdrwIAB6tChgw4fPqzly5fr/fff16ZNm0qtP6qMSy65RCkpKbriiit011136dChQ3rttddUr169gCTgzTff1L/+9S9dddVVat68ufLy8vTaa68pIyNDf/jDHyRV/Pl56aWX1KVLF5166qm64447lJOTo127dmnhwoX69ddf9eOPPwZddwBRJtK3oQKAE/G/9aa//v37W9WqVSv1+q5du1pt27YNeG79+vVWjx49rNTUVCsrK8t65JFHrBkzZpzwdrOWZVkLFiywOnToYKWkpATcOrO8280OHjw44Dnv7VjHjx8f8Lz3drfvvfdewPPff/+91adPH6tOnTpWamqq1aRJE+vaa6+1vvrqq4DXjRo1ymrYsKGVkJBQ6tazU6dOtbp06WJVq1bNqlatmtW6dWtr8ODB1po1ayp8nypSVFRk/fnPf7YyMzMtj8fja3t57bOs328f+tRTT1lNmjSxUlNTrfbt21vTpk0r830uKiqyxo8fb7Vu3dpKSUmxMjMzrV69ellLly4NeF1l2lZZdm83+7e//c3q1KmTVbNmTSstLc1q3bq1NXr0aKugoMD3Gu/+uX79euuSSy6xqlatamVlZVnDhw+3iouLA/6eKrjdrNeRI0esrl27WtWrV7e+/fZby7IsKy8vzxo2bJjVokULKyUlxapbt6517rnnWs88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zJkzlZWVpTPOOEOjRo3Sww8/rBEjRiglJSXs9XRDSUmJPB6PK4kFX5AHAAAAr6AuhZo+fbr69++vnJwcJScnq2rVqsrIyFDXrl01evRobd++PSyVXLZsmbZt26aEhAS1b99e9evXV69evQJmLBYuXKhTTz1VWVlZvud69uyp3NxcrVy5sty/nZ+fr9zc3IB/JiksLFRycrLjxMLO7AOXQgEAAMCrUonFhx9+qJYtW2rgwIFKSkrSww8/rA8++EBffPGFXn/9dXXt2lUzZ85UTk6O7r77bu3ZsyekldywYYMkacSIEXrsscc0bdo01apVS926ddO+ffskSTt37gxIKiT5ft65c2e5f3vMmDGqUaOG71+jRo1CWvdwKywsVEpKimtrLAAAAACpkpdCPf3003r++efVq1cvJSSUzkWuvfZaSdK2bdv04osv6q233tKQIUNO+HeHDh2qcePGVfia1atX+zqwjz76qPr27StJmjRpkk466SS99957uuuuuyrTjDINGzZM999/v+/n3Nxco5KLgoICJScnS3KWHDiN9Xg8QccDAAAgdlQqsVi4cGGl/ljDhg01duzYShf+wAMPaMCAARW+JicnRzt27JAUuKYiNTVVOTk52rJliyQpOztb3333XUDsrl27fL8rT2pqakTWiYSL0xkLEgsAAACEQqUXbz/44IO6/fbb1bp165AVnpmZqczMzBO+rkOHDkpNTdWaNWvUpUsXSb93qDdt2qQmTZpIks455xyNHj1au3fvVr169SRJM2bMUEZGRkBCEmu8MxZuJxYAAACIb5VevP3RRx+pbdu2OvfcczVx4kQdPnw4nPUKkJGRobvvvlvDhw/Xl19+qTVr1uhPf/qTJOmaa66RJF1yySVq06aNbrnlFv3444/64osv9Nhjj2nw4MFGz0icSEFBgetrLEgsAAAAUOnEYt26dZo9e7Zatmyp++67T9nZ2Ro4cKAWLFgQzvr5jB8/Xtdff71uueUWnXXWWdq8ebNmzZqlWrVqSZISExM1bdo0JSYm6pxzztHNN9+sfv366cknn4xI/dziveUvMxYAAABwU1DfY3HBBRfoggsu0EsvvaR33nlHkyZNUpcuXdSqVSvddtttuuWWW0rdmSlUkpOT9cwzz+iZZ54p9zVNmjTRZ599Fpbyo1VBQQGJBQAAAFwX1PdYeFWrVk0DBw7UvHnztHbtWvXp00djxoxR48aNQ10/nEB+fr7vUig7nHyPhTehILEAAACArcTC6/Dhw5o3b57mzp2r/fv3KycnJ1T1QiU5nbFgjQUAAABCwVZiMX/+fA0cOFD169fXvffeq5YtW2revHlavXp1qOuHE/CfseBSKAAAALil0mssduzYoTfffFOTJ0/W2rVrdfbZZ+u5557T9ddfr+rVq4ezjqiAd8bi2LFjJBYAAABwTaUTi0aNGqlOnTq65ZZbdNttt+mUU04JZ71QSd4Zi/z8fBILAAAAuKbSicW7776rK6+8UklJQd1ICmHmnbE4dOgQaywAAADgmkpnCX369An4effu3dq9e3epuwmddtppoakZKoU1FgAAAIgGQU8/LF26VP3799fq1at9HUpvp9bj8fhGwBEZofoeCzu3myWxAAAAgFfQicXAgQPVsmVLvfHGG8rKyrL9/QkIDb55GwAAANEg6MRiw4YNmjp1qlq0aBGO+iBI+fn5Sk9Pd/V7LAAAAICgv8eie/fu+vHHH8NRF9gQqkuh7MTyzdsAAADwCnrG4vXXX1f//v21YsUKtWvXTsnJyQG/v/LKK0NWOZwYi7cBAAAQDYJOLBYuXKhvvvlG06dPL/U7Fm9HnpszFiUlJUpISCCxAAAAQPCXQv35z3/WzTffrB07dqikpCTgH0lF5DmdsXC6xiIxMZHEAgAAAMEnFnv37tWQIUOUlZUVjvogSN4ZCynylzORWAAAAASyLEsHDx60FfvKK6+EuDaRFXRi0adPH82ePTscdYENoVpjYfd7LOwmFgUFBUHHSNLEiRO1atWqoOP27t2rX375xVaZKN/KlSvdrkKl5Obm6r///a/b1QDgkvfeey+ig2Bff/213nzzzYiVFy/mzJljK+7111/X7t27g46bPn26Pv3006Dj1qxZo7vvvjvoOEl6/vnnbcVFi6ATi5YtW2rYsGEaMGCAnn32Wb3wwgsB/xBZbq+xsJtYdO/e3VZy8cMPP+jXX38NOm727NmaPHly0HFO/OEPf4hoeXYdPnxYkyZNshV79dVX24qbOXOm7dEcO3799Ve9++67tmLtvjeILlOmTLEVl5ubayvu//7v//Ttt9/airWjpKREb731VsTKM83IkSNVVFQUsfK2b9+ujRs3Rqw8J2bPnq39+/dHrLyCggLNnz/fVuyf/vQnW3EzZszQ9u3bg47bsGGDNmzYEHRcQUGBCgsLg46TZPyygqATi9dff13Vq1fX3Llz9c9//lPPP/+879/f//73MFQRFXH6BXlurbHIzc219eHxruexE2e3jXY7B+vXr7cV99FHH2nHjh1Bx82YMUP/+c9/go7bs2eP3nnnnaDjJNk+UU+aNMnWDNLKlSv1ww8/BB1nd7+RpHHjxtmKQ/m2bt2qPXv2BB2Xm5urJUuW2Cpz+PDhtuL69u2rvXv3Bh23evVqbd26Nei4wsJCW528goICPfPMM0HHueHAgQO2OmvFxcWaOnWqrTIty4rojIXdY05xcbG++eabMNSofP/+97/1888/Bx23ceNGW7PWW7Zs0dixY4OOk+x3up30HSIZJ8VhYrFx48Zy/9k5UMCZgoICV283azexsHuQj/SH/LffftPDDz8cdJy3TDtt/OSTT2x1unfs2GGrI+PkAGg3sbC7/efPn2/rUkwnnQq7B/nly5fbHrGyY+3atbr33nsjVp4Tb731Vpl3FjyRn376ydb1x5Zl2d6O+fn5traj3c/VvHnzNHLkyIiV54avv/5aEyZMCDouNzfXdvJk9/15+umnbX13l93ydu7cqccffzzoOEm66667bMXZPT7Onj1b06ZNi1h5kv1zTqT7Dm60MVoEnVggujidsXD6BXl2E4tIf1gjPdPhtExTDoCMHpVvxIgRWrduXdBxH374oT777LOg43Jzc/Xbb78FHecGu58ru/uqk3080vtcYWGhrY6Fkzbed999ys/PDzruX//6lxYvXhx0nJMZZLufY7uxmzZtsjVj5cbxeO7cubbiTDkfS5EfzHKjjXExYzF27FgdPXq0Un9w0aJFtha6wB7/xdt2uPU9FqZ0nt04kZkymyNFPrEw6URmt/O0adMmbdmyJei4SF/q4YRJiaUpHRInbVy4cKGtxGL9+vXatWtX0HFudLrj4Zxjymi+Secck9oYLSqVWKxatUqNGzfWoEGDNH369IBrY4uKivTTTz/pX//6l84991xdd911Sk9PD1uFEcjp4m231liY8iF3I7EwJU6KjxNZPLTxuuuusxX3wQcfVHrQyZ9J740pdaWNFTMl0eNYVTFTEgsuhTqBf//735o5c6YKCwt14403Kjs7WykpKUpPT1dqaqrat2+viRMnql+/fvr55591wQUXhLve+P9CdbtZ1liENk6KfBvdGiEzYTtyuVfF7FxDLkmvvvqqdu7cGXScSe+NKfuqSW2Mh+3oVqc71o/Hkb4UyqQEMVokVfaFp59+ul577TVNmDBBP/30kzZv3qyjR4+qbt26OuOMM1S3bt1w1hPlCNXtZu1+cGJ9jYVJU+9utdGyrKAvxTPpIB8PiUWkRzojfXkRn+PwlGnKcdxJrCn7uH9sLB+PTTlWuXHOiRaVTiy8EhISdMYZZ+iMM84IQ3UQLFNnLEw5yJt0ImNWJvTlSYyQhaNMU+Ikc7ZjPByr3EieTNn+/rEJCcHdl8eU90aKj4Ee0xML7gplOG/nnjUW0RXnJNbEE1msxknmjJBxeUHo45zEmvLeSPGxQN2UunI8PnGsCdvRyWeKxAJRwbQZi3g4yMdDG02pK2ssKsaMRfSUyexq6OPcKJM2lo+Zp9DHRRMSixjhJLFwEhvslKt/bCwfHNwo06QOiUnbkcQi9GWa8tlwUiZtjJ44N8rkeBz6ODfKNOm9iRYkFjHCSXLgZNbBlEuhWPRZvlAsFgyWKe+NFB+dblO+j8SkzpopcW6UyXYsn0nHY7Zj6OOcbP9oQWIRI5yssUhKSmKNRYjjnMSa0ll3o0y3TpwmdIJJnkMfJ5mTBJn0OTap0812jJ44yZzt4aSe3nhTBX1XqGPHjunFF1/U7NmztXv37lJv+LJly0JWOVSe0xkLux841liULx7aaEpdnR7kvft6sLEmJE/xsP1pY8VM2efYjtFVpkltNGkf9z4Ge86JFkEnFrfddpu+/PJLXX311erUqVPQ90tG6JSUlPjefzcuhSop+X2NhQmjsiYdAE15b5zEmrIdvXU0oa7xsI+7MdJtSl1ZEBtdZXI8Dn153thY3o5OzjnRIujEYtq0afrss8903nnnhaM+CIL3y/Ek9xILUy6FMulkbcp74yTWlPfGf/QokmWaECdxeUksxLlRpkmdblPi3CiTgZ7wxPk/mijoNRYNGzZUenp6OOqCIOXn5ztOLFhjEZ44N8p0q3NgQl1JLEIf50aZbnRISZ6iJy4eBkFMaqMb76n/Y6TKjPR74/9ooqATi2effVYPP/ywNm/eHI76IAgFBQVKSUnx/Wx3JzYpsTDl5CDFfofEW0cTDtZuHORNOpHFeoeUNkZXmSa10ZTjsRtlmjTQY8p2jIXEIuhLoTp27Khjx44pJydHVatWVXJycsDv9+3bF7LKoWKhmLFwmhyweDt6yjTpAGjS9vd/DIZJbYz1fTweLmmMh+1oUhtNSvRNmunwfww21pT3xv/RREEnFjfccIO2bdump556SllZWSzedpH/jIVpiQUH+dDHRXo0Px6ud3Wjjaac5J2UaUqcG2W6sR4s1mdX3SiTNoY+zqRzTjxfChV0YrFgwQItXLhQp59+ejjqgyCwxiL8cXS6Ko7zf4xUmaYc5E3ajqaMkLLGIvRxbpRp0nY05b1xUqZJcf6PkSrTlDZGi6DXWLRu3VpHjx4NR10QpFDOWNg9ALLGonyx3iFx4yDPYsHwxElmjALGQ6ebNpbPjU63KcdjyZzZTjeOxyadj/0fTRR0YjF27Fg98MADmjNnjvbu3avc3NyAf4gc1lhEb5y3fSbUlU53xXH+j5EqM9Inef/HSJVJ8hQdcW6UGQ9tdOvafBO2BzPI5YvLNRaXXnqpJKl79+4Bz1uWJY/Ho+Li4tDUDCd0/PdY2FFSYtZdoTjIV1ymKWssTOmQxkMb/U/Wkfp2cTe3Y7DHSlOOVVxCE11lmjQIYsqxijUWZgg6sZg9e3Y46gEb8vPzHV8K5XSNRaS/edukOP/HSJVJG8tm0giZSVPvJu6rCQnBTdSbtB3tdkZMukwk0m00cR+PZJm0MfRx/o8mCjqx6Nq1a6VeN2jQID355JOqW7du0JVC5cTjN2+bcg2pSSMrHOQrjvN/jFSZsd5GNzqy/o+RKtOE7e9GmfEwg8wgSOjLc+Nz7Na+avKlUEGvsaist956izUXYRaKGQsnyYGTcmP9ZB0vHRn/x0iUadKJzJR9lSQ4fGWaEOdGmSZ1uuOhQxoP29GUfTwWZizClliYnG2Zwu3F23bLdWNhMx3S8rHGonycrE8ca0KcSdsx0tvfSZkmxfk/RqpMU9rI8Tj0cfG8xiJsiQXCLxS3m3WyxsLLTmIhcZAPdZkkT+UzaaQzHvbVeGijW5d7mbLP0SENfZz/Y6TKpI2hj/N/NBGJhcFCOWNhdye2czcqkzprrLGoOM7/MVJl0sbQx/k/BsOUy0RMOubEw75q0vY3LbE0Yfub9Dk26ZK2aEFiYbBQfkGenViPx2P7Uij/x2DEwwGQNpaPDknoyzNpX6XTVXGc/2MwTOp0sf3Lj/N/jESZHKvCE+f/aCKjEotPP/1UnTt3VlpammrVqqXevXsH/N7b0fX/N2XKFHcqGwHHjh1TWlqaJGeJhZNLoeyUywGwYqaMkLLGIjxlmnQiM6WN8bAd46GNHI/LZ9LxOB6uBIjnNRaVvt3sihUr1K5du0r/4ZtvvlkZGRm2KlWWqVOn6o477tBTTz2liy66SEVFRVqxYkWp102aNMn3JX6SVLNmzZDVIdocO3ZMWVlZktxbY2FKYmHSicyNg3WsjwLSxorL838MNtaUOP/HSJRp0mCGSduRpKv8OP/HSJVpShtNSRDjKrE47bTTdNZZZ+n222/X9ddfr/T09Apf//LLLzuunFdRUZHuu+8+jR8/Xrfddpvv+TZt2pR6bc2aNZWdnR2ysqPZ0aNHVaVKFUlm3RUqHg4OnMjCV6YpbWRfja44/8dgmDKaa7eNpt1Mw/v+BLO+j8QyfGWa8jk2ZTvG1RqLuXPnqm3btnrggQdUv3599e/fX/PmzQtn3XyWLVumbdu2KSEhQe3bt1f9+vXVq1evMmcsBg8erLp166pTp06aOHHiCTdOfn6+cnNzA/6Z4tixY64mFt6DeyyvsWAUuOI4/8dIlUkbQx/n/xiJMpldC0+c/2O447wxbhxXY3mW3KR9nOSpfPF8KVSlE4vzzz9fEydO1I4dO/Tiiy9q06ZN6tq1q1q2bKlx48Zp586dYavkhg0bJEkjRozQY489pmnTpqlWrVrq1q2b9u3b53vdk08+qXfffVczZsxQ3759NWjQIL344osV/u0xY8aoRo0avn+NGjUKWztCLVRrLEyasYiHA2A8jHSbsliUfTV8ZZqyr8Z6G027Nt//MZjy/B+DjTUlzv8xGKbMysXD5ziuEguvatWq6dZbb9XcuXO1du1aXXPNNXrppZfUuHFjXXnllUH9raFDh5a54Nr/388//+x7gx999FH17dtXHTp00KRJk+TxePTee+/5/t7jjz+u8847T+3bt9fDDz+sv/71rxo/fnyFdRg2bJgOHjzo+7d169Zg3xLXhGLGwrvGwu5ObEpiYdLBIR5GVkxpIyey8JVpQhu9+00st9G07e//WFkmJU8kzxXH+T8GIx62Y7So9BqLsrRo0UKPPPKImjRpomHDhunTTz8NKv6BBx7QgAEDKnxNTk6OduzYISlwTUVqaqpycnK0ZcuWcmM7d+6sUaNGBXzfw/FSU1PL/V20808sJPsHFJNmLNwazQ32ml43DvKMdIcnzv8xUmWakiCacrJ22iE15b3xfwx3nDfGhO3oRhtN2f5OyzRh+zsp06TtGC1sJxZff/21Jk6cqKlTpyohIUHXXnttwMLqysjMzFRmZuYJX9ehQwelpqZqzZo16tKliySpsLBQmzZtUpMmTcqN++GHH1SrVi1jE4cTcXuNhd1yTRtZ8T4mJibairNTpilx/o+RKtOUNsZ6p9tpmSa00bQBAv/HcMd5Y+y2MdYTCydxsT6DHA/HqnheYxFUYrF9+3ZNnjxZkydP1i+//KJzzz1XL7zwgq699lpVq1YtXHVURkaG7r77bg0fPlyNGjVSkyZNfJc4XXPNNZKkTz75RLt27dLZZ5+tKlWqaMaMGXrqqaf04IMPhq1ebgvVXaHs3m7W7hfkmTTqwDW95WONRfjKjPWTtSmLt03b/v6P4Y7zxkSy8xwPx2P/NkbqzleR/jxyaWrFcf6PJqp0YtGrVy/NnDlTdevWVb9+/TRw4EC1atUqnHULMH78eCUlJemWW27R0aNH1blzZ82aNUu1atWSJCUnJ+ull17SkCFDZFmWWrRooeeee0533HFHxOoYaaFcY2HKpVCmfMhNGulmjUXFcf6PwXBje0Q6QTTlZB1vHdJIxEnmHI9NbSOz5KXj/B+DYcoMclytsUhOTtb777+vyy+/PKidPVSSk5P1zDPP6Jlnninz95deemnAF+PFg3i8K5QpI9amdUi9sdF+b3iTTmSmJE8mtZEBgorj/B/DHSfRxnDE2U0sTEueTDkem7KPR5NKJxYff/xxOOsBG1hjEZk4/8dwx3lj3GgjiUXZcf6PkSqTNoY+zv+xskwbIPB/DHecN8aE7UgbTxxrSpz/Y6TKNOFzHE2Cvt0sosexY8d8C9NNSixMGnWIh0soTOp0mfLeSOZMvZv2eaTTXX6c/2O447wxJnS6TDpWxcM5x6RLU03Z/tGExMJglmUpIeH3TRjMSLM/J99j4R3h5lKo0MVJ5lxj70YbWSwYnjj/x8oy6b2Jl86a/2Mw5fk/BhtLG0Mf5/8Y7jjJvUTfhHOOKds/mpBYGMz/Q+LWjMXx9ahsmf6Pwcaa8CHnEooTx5oS5/8YqTJNaKN3X4vlNprWkfF/DHecNybWtyPH4/DE+T+GO84bE8uf42hCYhEj3LjdrN1yTRrpNOkASBsrjpPMSIK5TCg8cf6P4Y7zxpjQRifHY1M6XfGQIHJePXGsCcdxEgu4yv/yp0jPWHhfH+trLOLhAMiJLPRx3hgT4ri8pHzMPJ44lu0Y+jj/x3DHeWNMaKNp2zGSx+NoQmJhqON3OiffY2E3sUhISLC1tsOk0aN46HSZtMYi0m2MdJxkzkneje0f6bUyfI5PHEvyVDaT9tV4+DzGwzqSaEFiYaiioiIlJyf7frabWEhSQkKCo8TChBNZPHS6TGpjrHdIWH9w4thYbyOf49DHmZQ8sR0rjvN/DHec97MY6/tqtCCxMNTRo0d9t5qVnCUWdpMDu4lFPIzmcgnFiWNN2I68N6GP88bQxtDH+T+GO84bQxtDH+f/WFnxcF41baDHTpkkFnDN0aNHVa1aNd/PThMLOzu/STMWdLorjvN/rCxOZKGPk8xZvB0P2582njjWhFmZeGgj55zQl+eNMaGN0YTEwlBHjhxR1apVfT+bNGPhRqeLg3zFcf6P4Y5zazbHTpmmnchM2P7emEgPLPg/BlOe/2OwsZFOLP0fK8ukNpq0r5rURlPWvJmWWPo/hjsumpBYGCpeE4t46JDEy0E+lk/Wbo102ynTpH3clO0vMQgSjjiTkqd4aKMpn0e33hv/x2DK8380EYmFoUKZWNhZvO0kseDyghOXyUG+/FgTOl208cSxsfzeeGNoY+jj/B/DHeeNoY2hj/N/jNY4b4wpfYdoQWJhqGiYsfB4PMbMWJjS6fbGxPIBMB5Gj0w6kZnWRhP2cW9ZJrSR7XjiMmO9jZG+Y1I8nHPc+DxGCxILQ0VDYsEai9DHeWNi+QDo5mVCsdzpjpfkyYT3xhsTy59jb0ystzHWL9szac2bW0mXCdsxmpBYGOr4xEKyP3VmUmIRDx2SSI8exUuH1E6ZJq0/MCl5ivXOmhT5Nkb6BgXemFjfjrF+zjHpeGxSG1ljAeO4PWNhWfa/II9p6dDHSfFxkDelQxIPJ2uTFqibth1N2P7emFjvrMX6duR4fOJYE/oO0YTEwlChTizsfFBNmrGIhwNgpNto0knepKn3eOiQ0MbwxPk/hjvOG2NCG+NhMMu07W+nTJPOOW5sj2hBYmEot2cs3Eos7LazpKQk5hMLUw6AbrXRbgLt/xjuOG8MJ+vQlulGh9SUBbHxkFi4MWBjWZY8Hk/QcfHwOXZjoMdu38HJdkxISLC1r9qJiyYkFoYyPbFISkqynVjYPQAmJAS/uzs5ONhpo5ODirfzHCzLspSYmBix7Wi3PG+Zdg/yiYmJEaur046M3bhIJvpOBwicfI4juR3tfh7t7uPey0ztxJmyrzr5HEfyeOx9L01po53PlUnHYyfnVTvlSfYvSYr0eTWakFgYKlq+x0Kyt47AzgfOe8KNZGLhpK6RPqg4SZ5MOsgnJiYGHRfpujrZjk5O8nbr6v8Y7jjJ3jFHcva5ivR2dJI8RTp5TkpKsrU93Eie7NTV6SCICeccJ/u4G8fjSJ9zIt1Zj/RgVjQhsTCU6TMWTk6Adg+Ake50R/qgEulOt1vJkx2RrqtbHdJI1tWtNprSIXE6KxPJfdVux9Kk5ImBntDGeWPtbsdInnOcJM92ufF5jBYkFoYqK7Gwy5RLodyaso10Z83JCFmk2xjpUWC7Il1Xp6NOdvdxUxILJzOPkayrk+1oShvdSixMGOhxso87Gcwy5XNs0jkn0p31SM+uRRMSC0NFw4yFk2/edqPTzUG+bCatsbDLjVmZSJ/ITNpXI93pdmM7OhkEMWUGMdKXprqRWNod6XZjNN9OXZ0O2EX6ci9TZgEiPbsWTUgsDBUNiYV3xiJYpk1Lm3KSd2MU0KSDfKzPyriRINrtdLkxmm/KGgtT1pE4WfPmxlqpeBjMivRovknnHJNmybkUCq44dOiQq99j4T2puLHGwpQ7rUR6tCIekie7TFpjYVekP1dOToBuLN42aY1FpBMEuyPdpsyuujFj5cZovimDIJE+55g0S+7G9gg1EgtDHTp0SOnp6b6f3bicKdJrLJwe5OPhtnimjJCZ0uk26eRg0kinN95OjAmdbin211iEYs1btN/5yMnn2I0bhnCsCm2cEyYNvIUaiYWh8vLyQpJYJCYmOrrdrEmJhQnX9Do9kdnh1i0cTRg9ipcRMjcuE7LDjdk1J7MykUws3BjpdnI8juQxx43jsZPBLFNuUGCXSTOPdrmRsEcLEgtDFRUVKSkpyfezG7MOdmNNW38Q65cJmTQrY1e8jJCZ0FlzwqTtaPdyL1MSRKfHYxMSBKeLt00555iysJljlRlILGKESYmFG5m8k5HnSF5/blJiYVLyxAhZxXFurD+we429CcmTZVmuLN42obMumTNL6rSTF+kvAXRj5tGU77Gw23eIdBvdOHeEGolFjLDTwS8uLnYtsXBjhMyEa3O5hCY8TOp022VSGy3Lsj0KbEIbnS5sNqGNbhyPTbrcK9b3cclZG02ZebTbRpMG3kKNxMJABQUFSk5ODnjOycyBSYmFk2t6TUgs3JgGdWP00O7lBXZFuq5uJRamXCZil5MOqd07H7lxN6FI390p0qPAJh2PnXyOI71A3ZTPsSmzck5EOnmOJiQWBjr+jlCS80uh7HxQTVpjIcmImQeTDoAmJU+RrqtJM0+RvvTCCVNGOu3eEchbpgltdCN5MiXOy84CfjfayBqL0DNpe4QaiYWBjr8jlOTOGgsnt6p1o7NmwuyKSYmFSYsFTbqEwi43rs2Oh8TCbnkmJRaxvnjbrbu7RfKcY9Lx2LTtaIdJSVCokVgYKC8vT9WrVw94LtJrLLwjcqassZDsjR5FeubBpMuE4iF5Munk4MaINYvwy4+zm1iY1EYn1+ZHsoPoVvIc6XOOKZ9jN845pgxmcSkUXFHWpVBS8N9j4P2wxcP3WEj2p6VNukzIhETPtBOZSW00IXny3jHJjki30Uknz8mMhQnb0emMhSnHYzcuhTKpjXaYcnc3J0xKgkKNxMJA0XIplGlrLCJ5vaubtzc0YVbGlGlpN/ZVU25v6MZovimfR6fJU6QvE7G76NvJ7KoJnWeTzjluHo+jfXYlHgazogmJhYFMTyycnKxNud410gdOr0iOkJl0Ta8bHUu7nS7LivwtHGM9sXCjI2NSG+3G2f12ccmcgR437gpl0uJtu1c8RPKc48Zglkk3cAk1EgsDHTx4UBkZGQHPufU9FpK90QpGj0Ib5xXpNpp0Ta9Jl7TZYcp6IP/1WcEy5fPoJLFw4zIRJ4mFHR6Px3aH1KS7u8VD8mTKOceUO1+xxgKu2Ldvn+rUqRPwHN9jcWLxcJmQKSNksT4tbdqJLNJ3k7Kzn0rmJE9OZyxMuEzEafJk5zbnbixsN+mc48ZAD+ec0Jbpxrkj1EgsDLR3717Vrl074Ll4+R6LxMTEoGL8xcNlQpE8kTkZsTYleXKjIxvpa/MjPQroRqfbtDUWJgyCONmOUnwsbDahjW7Myrixr5qUWHApFCJu7969IZuxMG2Nhd2TtcQai4rKjHTH0pTkyY2OjEnX5sdDGyOdPEn2Fzabsh2l+LhMyJTRfFPuthgPayyc3hQhGpBYGKi8S6GCFYo1FpE+cJpyIjNthMyEDqmXKaOAdmdz3JixMOUSmnhoo2RGp9vpQI8pxypT1lhwzgl9nFckB1Cd1jUakFgYKJQzFqH4HotgmXSyNuWabq9YP5G5sejTlAWxplxe4KRDakobnR6rTJldjXQbI72w3Y3kKdKj8vEyK+Nk+5uQPEUTEgsDhWONhd3RqkivsXDjLiQmXNPtFcnt4cYaC7uLPiM9mutGZy3SszJuzViYcAmFSR1SkwZ63NjHTWqjKXe+Mm2AwIQBu2hCYmGgwsJCpaSkBDzHGovKxUb7qIP3fY30tLQJayy8+1k8rLGI5VFAt5Ink9ZY0Okuv8xID/SYNPPEGovQx0V6ANWN9SChRmIRI9z6HgvWWIQ+zo07X5mwxsKyLEejRyaN5ptyjb0bnTWTtqNdphyrTGqjSQmiCQMEXqZsRyfb34QBu2hiRGIxZ84cX9Z4/L/Fixf7XvfTTz/p/PPPV5UqVdSoUSM9/fTTLtY6PA4cOFDqy/Gk+Pkei3g4yMdDG03pdDvprNu9TMzbRhOusaezVn6cKW10uq/anUVmO5ZfZjzMWHDOCW1cNElyuwKVce6552rHjh0Bzz3++OP66quv1LFjR0lSbm6uLrnkEvXo0UOvvPKKli9froEDB6pmzZq688473ah2WKxfv17Nmzcv9byb32MRqRFSJwd5u2ssnI7mFhUVBR0X6VvqmrLGwsm0dKRH8510ur1tjGRdTVm8LUV+H3djjYUb3w9kd1+1e8mGKccqU9bKeOOKi4uDjrNzXvXWz4TtSGIRWUYkFikpKcrOzvb9XFhYqI8++kh//vOffR/6t99+WwUFBZo4caJSUlLUtm1b/fDDD3ruuedILMrhdNYhXtZYxMNorpM2Bps8uTEt7Uany6Sp93gYBeZzHPo42lgxN25TWlhYGHSc3cTClMuEWGMRWUZcCnW8jz/+WHv37tWtt97qe27hwoW64IILAhY19+zZU2vWrNH+/fvdqGZYbNiwQTk5OaWed7LGwuntZrkUKrRxTkaPuN419GUy9R76OO8+bufkacp7w7GqYqYcq0xqYyS3o1vHqng455i+xsKIGYvjvfHGG+rZs6dOOukk33M7d+5Us2bNAl6XlZXl+12tWrXK/Fv5+fnKz8/3/ZybmxuGGlfe/PnzNXXq1HJ/P2fOHL3wwgulnk9ISNCyZcs0ZMiQSpe1fft2ZWRkKCEhQbNmzQoqdu3atercubMSEhL0wQcfaOPGjZWOXbp0qc4++2x9//33QZW5c+dOValSRYcPHw4qTvo9iUpMTNTo0aNL3aq3IqtXr9bpp5+u//73v1qxYkWl4xYtWqQuXbrou+++C6quv/76qzIzM3XgwIGg4ryjR4mJiRo+fHiZ63DK88svv+jss8/Wv//974A1Sycyf/58XXjhhZo5c2ZQdd20aZNycnK0e/fuoOIKCwt9bXzkkUdUtWrVSsdu2bJFycnJeuONN/T1119XOm7OnDm6+OKLNWPGjKDq+ssvv+iUU07Rli1bgoo7evSor40PPfRQqbu/VWTXrl1KSkrSyy+/rM8//7zScfPnz1evXr305Zdf6siRI5WOW716tU477TStX78+qDbm5eX52jhkyJCgZiH379+vxMREvfDCC/rwww8rHffdd9/piiuu0Keffqq9e/dWOm758uU688wztXr16qDauH//fiUkJKi4uDjoY9WhQ4eUmJioZ599VvXr16903Pfff6+mTZvqf//7n7Zu3RpUXKdOnfTTTz8FVdfdu3crISFBx44dC7qN+fn5SkxM1NixY1W3bt1Kx61YsUKnnHKK3n33Xa1du7bScYsXL9a5556rpUuXBn2OTE9PV25ubtBt9HYQR40apZo1a1Y6bu3aterQoYPefvtt/fjjj5WO8w6ufvvtt0HVdcuWLWrYsKH27t0bVJx3YDIxMVFPPPGEqlevXunYjRs3qkuXLpo8ebIWLlxY6bh58+bpoosuCrq/smHDBrVs2VLbt28PKi4/P9/XxqFDh6pKlSqVjv3111+VnJys1157TbNmzap03Ndff61LLrmkzPPqqFGjgnqf3eKxXJxvGTp0qMaNG1fha1avXq3WrVv7fv7111/VpEkTvfvuu+rbt6/v+UsuuUTNmjXThAkTfM+tWrVKbdu21apVq3TKKaeU+fdHjBihkSNHlnr+4MGDQXXOQmXr1q1avXp1ub9PSEhQ165dlZycHPB8UVGR5s6dG/T1la1atVJmZqbmz58fdF1PP/10paam6rvvvgs6tmPHjvr++++Drm/Lli21Z8+eoGehMjMzlZ6erg0bNgQVl5ycrFNPPVXLli0LKk6SzjrrLC1dujTokYfWrVtrx44dOnjwYFBx2dnZSk1N1ebNm4OKS01N1SmnnKIffvghqDjp9zYuWbIk6JHntm3bavPmzTp06FBQcQ0aNFBiYmJQHSdJSktL08kn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pX///lbDhg2tadOmWRs3brQ++OADq27dutZf//pX32vYB2JPXl6e9f3331vff/+9Jcl67rnnrO+//97avHmzZVmV2+aXXnqp1b59e2vRokXW/PnzrZNPPtm64YYb3GqSRWIRZV588UWrcePGVkpKitWpUyfr22+/dbtKCBNJZf6bNGmS7zVHjx61Bg0aZNWqVcuqWrWqddVVV1k7duxwr9IIu+MTC/aB+PDJJ59Y7dq1s1JTU63WrVtbr776asDvS0pKrMcff9zKysqyUlNTre7du1tr1qxxqbYItdzcXOu+++6zGjdubFWpUsXKycmxHn30USs/P9/3GvaB2DN79uwy+wH9+/e3LKty23zv3r3WDTfcYFWvXt3KyMiwbr31VisvL8+F1vzOY1l+X+sIAAAAADawxgIAAACAYyQWAAAAABwjsQAAAADgGIkFAAAAAMdILAAAAAA4RmIBAAAAwDESCwAAAACOkVgAAAAAcIzEAgAAAIBjJBYAgEqbM2eOPB6PDhw44Er5X331lU455RQVFxeHrYyzzz5bU6dODdvfB4BY5bEsy3K7EgCA6NOtWzedccYZ+vvf/+57rqCgQPv27VNWVpY8Hk/E69ShQwfdf//9uummm8JWxrRp0zRkyBCtWbNGCQmMvwFAZXHEBABUWkpKirKzs11JKubPn6/169erb9++YS2nV69eysvL0/Tp08NaDgDEGhILAEApAwYM0Ny5c/WPf/xDHo9HHo9HmzZtKnUp1OTJk1WzZk1NmzZNrVq1UtWqVXX11VfryJEjevPNN9W0aVPVqlVL9957b8DlS/n5+XrwwQfVsGFDVatWTZ07d9acOXMqrNOUKVN08cUXq0qVKr7nRowYoTPOOEMTJ05U48aNVb16dQ0aNEjFxcV6+umnlZ2drXr16mn06NG+GMuyNGLECDVu3Fipqalq0KCB7r33Xt/vExMT9Yc//EFTpkwJzZsJAHEiye0KAACizz/+8Q+tXbtW7dq105NPPilJyszM1KZNm0q99siRI3rhhRc0ZcoU5eXlqU+fPrrqqqtUs2ZNffbZZ9qwYYP69u2r8847T9ddd50k6Z577tGqVas0ZcoUNWjQQB9++KEuvfRSLV++XCeffHKZdZo3b55uvPHGUs+vX79e06dP1+eff67169fr6quv1oYNG9SyZUvNnTtXCxYs0MCBA9WjRw917txZU6dO1fPPP68pU6aobdu22rlzp3788ceAv9mpUyeNHTvW4bsIAPGFxAIAUEqNGjWUkpKiqlWrKjs7u8LXFhYW6uWXX1bz5s0lSVdffbX+85//aNeuXapevbratGmjCy+8ULNnz9Z1112nLVu2aNKkSdqyZYsaNGggSXrwwQf1+eefa9KkSXrqqafKLGfz5s2+1/srKSnRxIkTlZ6e7itrzZo1+uyzz5SQkKBWrVpp3Lhxmj17tjp37qwtW7YoOztbPXr0UHJysho3bqxOnToF/M0GDRpo69atKikpYZ0FAFQSR0sAgCNVq1b1JRWSlJWVpaZNm6p69eoBz+3evVuStHz5chUXF6tly5aqXr2679/cuXO1fv36css5evRowGVQXk2bNlV6enpAWW3atAlICPzLv+aaa3T06FHl5OTojjvu0IcffqiioqKAv5mWlqaSkhLl5+cH+W4AQPxixgIA4EhycnLAzx6Pp8znSkpKJEmHDh1SYmKili5dqsTExIDX+Scjx6tbt67279/vuPxGjRppzZo1mjlzpmbMmKFBgwZp/Pjxmjt3ri9u3759qlatmtLS0ipqOgDAD4kFAKBMKSkpYfm+iPbt26u4uFi7d+/W+eefH1TcqlWrQlKHtLQ0XXHFFbriiis0ePBgtW7dWsuXL9eZZ54pSVqxYoXat28fkrIAIF6QWAAAytS0aVMtWrRImzZtUvXq1VW7du2Q/N2WLVvqpptuUr9+/fTss8+qffv22rNnj7766iuddtppuuyyy8qM69mzp958803H5U+ePFnFxcXq3LmzqlatqrfeektpaWlq0qSJ7zXz5s3TJZdc4rgsAIgnrLEAAJTpwQcfVGJiotq0aaPMzExt2bIlZH970qRJ6tevnx544AG1atVKvXv31uLFi9W4ceNyY2666SatXLlSa9ascVR2zZo19dprr+m8887TaaedppkzZ+qTTz5RnTp1JEnbtm3TggULdOuttzoqBwDiDd+8DQAwxkMPPaTc3FxNmDAhbGU8/PDD2r9/v1599dWwlQEAsYgZCwCAMR599FE1adLEtxA7HOrVq6dRo0aF7e8DQKxixgIAAACAY8xYAAAAAHCMxAIAAACAYyQWAAAAABwjsQAAAADgGIkFAAAAAMdILAAAAAA4RmIBAAAAwDESCwAAAACOkVgAAAAAcOz/AeGGtzlxJ3rMAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 800x500 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "v = np.asarray(u.get_mantissa(res.trace(mm, 'V_m') / u.mV)).reshape(-1)\n",
    "print(f'V_m trace: {v.shape[0]} samples, min {v.min():.2f} mV, max {v.max():.2f} mV')\n",
    "\n",
    "isi = np.diff(spike_times)\n",
    "if isi.size:\n",
    "    cv = float(isi.std() / isi.mean())\n",
    "    print(f'ISI CV: {cv:.3f}  (mean ISI {isi.mean():.2f} ms)')\n",
    "\n",
    "fig, (a0, a1) = plt.subplots(2, 1, figsize=(8, 5), sharex=True)\n",
    "a0.plot(t_ms, v, color='k', lw=0.6); a0.set_ylabel('V_m (mV)')\n",
    "a1.plot(spike_times, np.ones_like(spike_times), 'k|', ms=10)\n",
    "a1.set_xlabel('time (ms)'); a1.set_yticks([])\n",
    "a0.set_title('multimeter trace + spike raster')\n",
    "fig.tight_layout()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ed184672",
   "metadata": {},
   "source": [
    "## See also\n",
    "\n",
    "- [Devices](../devices.rst) — the full recorder / detector catalog.\n",
    "- [Model anatomy](../../concepts/model-anatomy.ipynb) — how a neuron exposes its state and spikes.\n",
    "- [Validation status](../validation-status.rst) — the spike-count and distributional parity categories."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.13.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
