From f61bb9ddb9405b925996a50871e00c98a76bf05c Mon Sep 17 00:00:00 2001 From: Ashish Kumar Singh Date: Thu, 1 Aug 2024 10:32:19 +0000 Subject: [PATCH] feat: tpu training with cc12m dataset --- .gitignore | 3 + Diffusion flax linen on TPUs.ipynb | 3349 +++------------------- Diffusion flax linen.ipynb | 105 +- datasets/cc12m downloader.sh | 8 + datasets/data pipeline experiments.ipynb | 1911 ++++++++++++ datasets/gcsfuse.sh | 52 + flaxdiff/models/attention.py | 213 +- flaxdiff/models/simple_unet.py | 223 +- test.json | 1 + 9 files changed, 2857 insertions(+), 3008 deletions(-) create mode 100755 datasets/cc12m downloader.sh create mode 100644 datasets/data pipeline experiments.ipynb create mode 100755 datasets/gcsfuse.sh create mode 100644 test.json diff --git a/.gitignore b/.gitignore index 3d72a83..e01ff25 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,6 @@ good models .env .env tensorboard +wandb +gcs_mount +datacache \ No newline at end of file diff --git a/Diffusion flax linen on TPUs.ipynb b/Diffusion flax linen on TPUs.ipynb index f1f508e..2218a23 100644 --- a/Diffusion flax linen on TPUs.ipynb +++ b/Diffusion flax linen on TPUs.ipynb @@ -66,19 +66,15 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, "outputs": [ { - "name": "stderr", + "name": "stdout", "output_type": "stream", "text": [ - "2024-07-30 05:28:11.108435: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:485] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n", - "2024-07-30 05:28:11.123716: E external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:8454] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n", - "2024-07-30 05:28:11.128369: E external/local_xla/xla/stream_executor/cuda/cuda_blas.cc:1452] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n", - "2024-07-30 05:28:12.038387: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT\n", - "/home/mrwhite0racle/.local/lib/python3.10/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", - " from .autonotebook import tqdm as notebook_tqdm\n" + "The dotenv extension is already loaded. To reload it, use:\n", + " %reload_ext dotenv\n" ] } ], @@ -112,20 +108,52 @@ "import functools\n", "from tensorflow_datasets.core.utils import gcs_utils\n", "gcs_utils._is_gcs_disabled = True\n", - "\n", + "import json\n", "# For CLIP\n", - "from transformers import AutoTokenizer, FlaxCLIPTextModel" + "from transformers import AutoTokenizer, FlaxCLIPTextModel, CLIPTextModel" ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "!ulimit -n 65535" + ] + }, + { + "cell_type": "code", + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "jax.distributed.initialize() " ] }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[TpuDevice(id=0, process_index=0, coords=(0,0,0), core_on_chip=0),\n", + " TpuDevice(id=1, process_index=0, coords=(1,0,0), core_on_chip=0),\n", + " TpuDevice(id=2, process_index=0, coords=(0,1,0), core_on_chip=0),\n", + " TpuDevice(id=3, process_index=0, coords=(1,1,0), core_on_chip=0)]" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "jax.devices()" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -135,7 +163,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -186,16 +214,19 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ - "def defaultTextEncodeModel():\n", + "def defaultTextEncodeModel(backend=\"jax\"):\n", " modelname = \"openai/clip-vit-large-patch14\"\n", - " model = FlaxCLIPTextModel.from_pretrained(modelname, dtype=jnp.float16)\n", + " if backend == \"jax\":\n", + " model = FlaxCLIPTextModel.from_pretrained(modelname, dtype=jnp.bfloat16)\n", + " else:\n", + " model = CLIPTextModel.from_pretrained(modelname)\n", " tokenizer = AutoTokenizer.from_pretrained(modelname, dtype=jnp.float16)\n", " return model, tokenizer\n", - "\n", + " \n", "def encodePrompts(prompts, model, tokenizer=None):\n", " if model == None:\n", " model, tokenizer = defaultTextEncodeModel()\n", @@ -203,88 +234,95 @@ " tokenizer = AutoTokenizer.from_pretrained(\"openai/clip-vit-large-patch14\")\n", "\n", " # inputs = tokenizer(prompts, padding=\"max_length\", max_length=tokenizer.model_max_length, truncation=True, return_tensors=\"np\")\n", - " inputs = tokenizer(prompts, padding=\"max_length\", max_length=12, truncation=True, return_tensors=\"np\")\n", - "\n", - " outputs = model(**inputs)\n", + " inputs = tokenizer(prompts, padding=\"max_length\", max_length=tokenizer.model_max_length, truncation=True, return_tensors=\"np\")\n", + " outputs = model(input_ids=inputs['input_ids'], attention_mask=inputs['attention_mask'])\n", + " # outputs = infer(inputs['input_ids'], inputs['attention_mask'])\n", + " \n", " last_hidden_state = outputs.last_hidden_state\n", " pooler_output = outputs.pooler_output # pooled (EOS token) states\n", - " embed_pooled = pooler_output.astype(jnp.float16)\n", - " embed_labels_full = last_hidden_state.astype(jnp.float16)\n", + " embed_pooled = pooler_output#.astype(jnp.float16)\n", + " embed_labels_full = last_hidden_state#.astype(jnp.float16)\n", " \n", - " return embed_pooled, embed_labels_full" + " return embed_pooled, embed_labels_full\n", + "\n", + "class CaptionProcessor:\n", + " def __init__(self, tensor_type=\"pt\", modelname=\"openai/clip-vit-large-patch14\"):\n", + " self.tokenizer = AutoTokenizer.from_pretrained(modelname)\n", + " self.tensor_type = tensor_type\n", + " \n", + " def __call__(self, caption):\n", + " # print(caption)\n", + " tokens = self.tokenizer(caption, padding=\"max_length\", max_length=self.tokenizer.model_max_length, truncation=True, return_tensors=self.tensor_type)\n", + " # print(tokens.keys())\n", + " return {\n", + " \"input_ids\": tokens[\"input_ids\"],\n", + " \"attention_mask\": tokens[\"attention_mask\"],\n", + " \"caption\": caption,\n", + " }\n", + " \n", + " def __repr__(self):\n", + " return self.__class__.__name__ + '()'" ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ - "def load_labels_oxford_flowers102(path):\n", - " def load_labels():\n", - " with open(path, \"r\") as f:\n", - " textlabels = [i.strip() for i in f.readlines()]\n", - " return textlabels\n", + "def data_source_tfds(name):\n", + " return tfds.data_source(name, split=\"all\", try_gcs=False)\n", + "\n", + "def data_source_cc12m(source=\"/home/mrwhite0racle/research/FlaxDiff/datasets/gcs_mount/arrayrecord/cc12m/\"):\n", + " cc12m_records_path = source\n", + " cc12m_records = [os.path.join(cc12m_records_path, i) for i in os.listdir(cc12m_records_path) if 'array_record' in i]\n", + " ds = pygrain.ArrayRecordDataSource(cc12m_records)\n", + " return ds\n", + "\n", + "def labelizer_oxford_flowers102(path):\n", + " with open(path, \"r\") as f:\n", + " textlabels = [i.strip() for i in f.readlines()]\n", + " textlabels = tf.convert_to_tensor(textlabels)\n", + " def load_labels(sample):\n", + " return textlabels[sample['label']]\n", " return load_labels\n", "\n", + "def labelizer_cc12m(sample):\n", + " return sample['txt']\n", + "\n", "# Configure the following for your datasets\n", - "dataToLabelGenMap = {\n", - " \"oxford_flowers102\": load_labels_oxford_flowers102(\"/home/mrwhite0racle/tensorflow_datasets/oxford_flowers102/2.1.1/label.labels.txt\"),\n", + "datasetMap = {\n", + " \"oxford_flowers102\": {\n", + " # \"source\":data_source_tfds(\"oxford_flowers102\"),\n", + " \"labelizer\":labelizer_oxford_flowers102(\"/home/mrwhite0racle/tensorflow_datasets/oxford_flowers102/2.1.1/label.labels.txt\"),\n", + " },\n", + " \"cc12m\": {\n", + " \"source\":data_source_cc12m(),\n", + " \"labelizer\":labelizer_cc12m,\n", + " }\n", "}" ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "def get_dataset(data_name=\"oxford_flowers102\", batch_size=64, image_scale=256):\n", - " if os.path.exists(f\"./datacache/{data_name}_labels.pkl\"):\n", - " print(\"Loading labels from cache\")\n", - " with open(f\"./datacache/{data_name}_labels.pkl\", \"rb\") as f:\n", - " import pickle\n", - " embed = pickle.load(f)\n", - " embed_labels = embed[\"embed_labels\"]\n", - " embed_labels_full = embed[\"embed_labels_full\"]\n", - " null_labels = embed[\"null_labels\"]\n", - " null_labels_full = embed[\"null_labels_full\"]\n", - " else:\n", - " print(\"No cache found, generating labels\")\n", - " textlabels = dataToLabelGenMap[data_name]()\n", + "def get_dataset_tf(data_name=\"oxford_flowers102\", batch_size=64, image_scale=256, text_encoders=defaultTextEncodeModel()):\n", + " dataset = datasetMap[data_name]\n", + " labelizer = dataset[\"labelizer\"]\n", " \n", - " model, tokenizer = defaultTextEncodeModel()\n", + " model, tokenizer = text_encoders\n", "\n", - " embed_labels, embed_labels_full = encodePrompts(textlabels, model, tokenizer)\n", - " embed_labels = embed_labels.tolist()\n", - " embed_labels_full = embed_labels_full.tolist()\n", - " \n", - " null_labels, null_labels_full = encodePrompts([\"\"], model, tokenizer)\n", - " null_labels = null_labels.tolist()[0]\n", - " null_labels_full = null_labels_full.tolist()[0]\n", - " \n", - " os.makedirs(\"./datacache\", exist_ok=True)\n", - " with open(f\"./datacache/{data_name}_labels.pkl\", \"wb\") as f:\n", - " import pickle\n", - " pickle.dump({\n", - " \"embed_labels\": embed_labels,\n", - " \"embed_labels_full\": embed_labels_full,\n", - " \"null_labels\": null_labels,\n", - " \"null_labels_full\": null_labels_full\n", - " }, f)\n", - " \n", - " embed_labels = tf.convert_to_tensor([np.array(i, dtype=np.float16) for i in embed_labels])\n", - " embed_labels_full = tf.convert_to_tensor(np.array([np.array(i, dtype=np.float16) for i in embed_labels_full]))\n", - " null_labels = np.array(null_labels, dtype=np.float16)\n", - " null_labels_full = np.array(null_labels_full, dtype=np.float16)\n", + " null_labels, null_labels_full = encodePrompts([\"\"], model, tokenizer)\n", + " null_labels = np.array(null_labels[0], dtype=np.float16)\n", + " null_labels_full = np.array(null_labels_full[0], dtype=np.float16)\n", " \n", - " def labelizer(labelidx:int) -> np.array:\n", - " label_pooled = embed_labels[labelidx]\n", - " label_seq = embed_labels_full[labelidx]\n", - " return label_pooled, label_seq\n", + " caption_processor = CaptionProcessor(tensor_type=\"tf\")\n", " \n", " def augmenter(image_scale=256, method=\"area\"):\n", - " @tf.function()\n", + " # @tf.function()\n", " def augment(sample):\n", " image = (\n", " tf.cast(sample[\"image\"], tf.float32) - 127.5\n", @@ -297,10 +335,20 @@ " image = tf.image.random_brightness(image, 0.2)\n", "\n", " image = tf.clip_by_value(image, -1.0, 1.0)\n", - " labelidx = sample[\"label\"]\n", - " label, label_seq = labelizer(labelidx)\n", - " # image, label = move2gpu(image, label)\n", - " return {'image':image, 'label':label, 'label_seq':label_seq}\n", + " caption = labelizer(sample)\n", + " \n", + " @tf.py_function(Tout=[tf.int32, tf.int32])\n", + " def process_caption(caption):\n", + " caption = caption.numpy().decode('utf-8')\n", + " results = caption_processor(caption)\n", + " return results['input_ids'][0], results['attention_mask'][0]\n", + " \n", + " input_ids, attention_mask = process_caption(caption)\n", + " return {\n", + " \"image\": image,\n", + " \"input_ids\": input_ids,\n", + " \"attention_mask\": attention_mask,\n", + " } \n", " return augment\n", "\n", " # Load CelebA Dataset\n", @@ -328,103 +376,77 @@ " \"batch_size\": batch_size,\n", " \"null_labels\": null_labels,\n", " \"null_labels_full\": null_labels_full,\n", - " \"embed_labels\": embed_labels,\n", - " \"embed_labels_full\": embed_labels_full,\n", - " \n", + " \"model\": model,\n", + " \"tokenizer\": tokenizer,\n", " }" ] }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ - "def get_dataset_grain(data_name=\"oxford_flowers102\", batch_size=64, image_scale=256, method=jax.image.ResizeMethod.LANCZOS3):\n", - " data_source = tfds.data_source(data_name, split=\"all\", try_gcs=False)\n", - " \n", - " # gpu_device = jax.devices(\"gpu\")[0]\n", - " # cpu_device = jax.devices(\"cpu\")[0]\n", + "import struct as st\n", + "\n", + "def unpack_dict_of_byte_arrays(packed_data):\n", + " unpacked_dict = {}\n", + " offset = 0\n", + " while offset < len(packed_data):\n", + " # Unpack the key length\n", + " key_length = st.unpack_from('I', packed_data, offset)[0]\n", + " offset += st.calcsize('I')\n", + " # Unpack the key bytes and convert to string\n", + " key = packed_data[offset:offset+key_length].decode('utf-8')\n", + " offset += key_length\n", + " # Unpack the byte array length\n", + " byte_array_length = st.unpack_from('I', packed_data, offset)[0]\n", + " offset += st.calcsize('I')\n", + " # Unpack the byte array\n", + " byte_array = packed_data[offset:offset+byte_array_length]\n", + " offset += byte_array_length\n", + " unpacked_dict[key] = byte_array\n", + " return unpacked_dict\n", + "\n", + "def get_dataset_grain(data_name=\"oxford_flowers102\", batch_size=64, image_scale=256, text_encoders=defaultTextEncodeModel(), method=jax.image.ResizeMethod.LANCZOS3):\n", + " dataset = datasetMap[data_name]\n", + " data_source = dataset[\"source\"]\n", + " labelizer = dataset[\"labelizer\"]\n", " \n", - " # print(f\"Gpu Device: {gpu_device}, Cpu Device: {cpu_device}\")\n", - " \n", - " def preprocess(image):\n", - " # image = jax.device_put(image, device=jax.devices(\"cpu\")[0])\n", - " image = (image - 127.5) / 127.5\n", - " image = jax.image.resize(image, (image_scale, image_scale, 3), method=method)\n", - " image = jnp.clip(image, -1.0, 1.0)\n", - " # image = jax.device_put(image, device=jax.devices(\"gpu\")[0]) \n", - " return image\n", + " import cv2\n", " \n", - " preprocess = jax.jit(preprocess, backend=\"cpu\")\n", - "\n", - " augments = augmax.Chain(\n", - " augmax.HorizontalFlip(0.5),\n", - " augmax.RandomContrast((-0.05, 0.05), 1.),\n", - " augmax.RandomBrightness((-0.2, 0.2), 1.)\n", - " )\n", + " model, tokenizer = text_encoders\n", "\n", - " augments = jax.jit(augments, backend=\"cpu\")\n", - " \n", - " if os.path.exists(f\"./datacache/{data_name}_labels.pkl\"):\n", - " print(\"Loading labels from cache\")\n", - " with open(f\"./datacache/{data_name}_labels.pkl\", \"rb\") as f:\n", - " import pickle\n", - " embed = pickle.load(f)\n", - " embed_labels = embed[\"embed_labels\"]\n", - " embed_labels_full = embed[\"embed_labels_full\"]\n", - " null_labels = embed[\"null_labels\"]\n", - " null_labels_full = embed[\"null_labels_full\"]\n", - " else:\n", - " print(\"No cache found, generating labels\")\n", - " textlabels = dataToLabelGenMap[data_name]()\n", - " \n", - " model, tokenizer = defaultTextEncodeModel()\n", + " null_labels, null_labels_full = encodePrompts([\"\"], model, tokenizer)\n", + " null_labels = np.array(null_labels[0], dtype=np.float16)\n", + " null_labels_full = np.array(null_labels_full[0], dtype=np.float16)\n", "\n", - " embed_labels, embed_labels_full = encodePrompts(textlabels, model, tokenizer)\n", - " embed_labels = embed_labels.tolist()\n", - " embed_labels_full = embed_labels_full.tolist()\n", - " \n", - " null_labels, null_labels_full = encodePrompts([\"\"], model, tokenizer)\n", - " null_labels = null_labels.tolist()[0]\n", - " null_labels_full = null_labels_full.tolist()[0]\n", - " \n", - " os.makedirs(\"./datacache\", exist_ok=True)\n", - " with open(f\"./datacache/{data_name}_labels.pkl\", \"wb\") as f:\n", - " import pickle\n", - " pickle.dump({\n", - " \"embed_labels\": embed_labels,\n", - " \"embed_labels_full\": embed_labels_full,\n", - " \"null_labels\": null_labels,\n", - " \"null_labels_full\": null_labels_full\n", - " }, f)\n", - " \n", - " embed_labels = [np.array(i, dtype=np.float16) for i in embed_labels]\n", - " embed_labels_full = [np.array(i, dtype=np.float16) for i in embed_labels_full]\n", - " null_labels = np.array(null_labels, dtype=np.float16)\n", - " null_labels_full = np.array(null_labels_full, dtype=np.float16)\n", - " \n", - " def labelizer(labelidx:int) -> jnp.array:\n", - " label_pooled = embed_labels[labelidx]\n", - " label_seq = embed_labels_full[labelidx]\n", - " return label_pooled, label_seq\n", - "\n", - " class augmenter(pygrain.RandomMapTransform):\n", - " def random_map(self, element: Dict[str, Any], rng: np.random.Generator) -> Dict[str, jnp.array]:\n", - " image = element['image']\n", - " image = preprocess(image)\n", - " image = augments(rng.integers(0, 2**32, [2], dtype=np.uint32), image) \n", - " labelidx = element['label']\n", - " label, label_seq = labelizer(labelidx)\n", - " # image, label = move2gpu(image, label)\n", - " return {'image':image, 'label':label, 'label_seq':label_seq}\n", + " class augmenter(pygrain.MapTransform):\n", + " def __init__(self, *args, **kwargs):\n", + " super().__init__(*args, **kwargs)\n", + " self.caption_processor = CaptionProcessor(tensor_type=\"np\")\n", + " \n", + " def map(self, element) -> Dict[str, jnp.array]:\n", + " element = unpack_dict_of_byte_arrays(element)\n", + " image = np.asarray(bytearray(element['jpg']), dtype=\"uint8\")\n", + " image = cv2.imdecode(image, cv2.IMREAD_UNCHANGED)\n", + " image = cv2.cvtColor(image , cv2.COLOR_BGR2RGB)\n", + " image = cv2.resize(image, (image_scale, image_scale), interpolation=cv2.INTER_AREA)\n", + " # image = (image - 127.5) / 127.5\n", + " caption = labelizer(element).decode('utf-8')\n", + " results = self.caption_processor(caption)\n", + " return {\n", + " \"image\": image,\n", + " \"input_ids\": results['input_ids'][0],\n", + " \"attention_mask\": results['attention_mask'][0],\n", + " } \n", "\n", " sampler = pygrain.IndexSampler(\n", " num_records=len(data_source),\n", " shuffle=True,\n", " seed=0,\n", " num_epochs=None,\n", - " shard_options=pygrain.ShardByJaxProcess(),\n", + " shard_options=pygrain.NoSharding(),\n", " )\n", "\n", " transformations = [augmenter(), pygrain.Batch(batch_size, drop_remainder=True)]\n", @@ -433,37 +455,32 @@ " data_source=data_source,\n", " sampler=sampler,\n", " operations=transformations,\n", - " worker_count=0,\n", - " read_options=pygrain.ReadOptions(8, 500),\n", - " worker_buffer_size=5\n", + " worker_count=32,\n", + " read_options=pygrain.ReadOptions(64, 50),\n", + " worker_buffer_size=20\n", " )\n", + " \n", + " def get_trainset():\n", + " return loader\n", + " \n", " return {\n", - " \"loader\": loader,\n", + " \"train\": get_trainset,\n", + " \"train_len\": len(data_source),\n", + " \"batch_size\": batch_size,\n", " \"null_labels\": null_labels,\n", " \"null_labels_full\": null_labels_full,\n", - " \"embed_labels\": embed_labels,\n", - " \"embed_labels_full\": embed_labels_full,\n", - " \"length\": len(data_source), \n", - " \"batch_size\": batch_size,\n", - " \"image_size\": image_scale\n", - " }\n" + " \"model\": model,\n", + " \"tokenizer\": tokenizer,\n", + " }" ] }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 9, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Loading labels from cache\n" - ] - } - ], + "outputs": [], "source": [ - "data = get_dataset(\"oxford_flowers102\", batch_size=32, image_scale=128)" + "data = get_dataset_grain(\"cc12m\", batch_size=64, image_scale=128)" ] }, { @@ -476,15 +493,43 @@ "for batch in data['train']():\n", " # print(batch.shape)\n", " plotImages(batch['image'], dpi=300)\n", + " print(batch)\n", " a = batch\n", - " print(batch['label'].shape, batch['label_seq'].shape)\n", + " # print(batch['label'].shape, batch['label_seq'].shape)\n", " # time.sleep(0.1)\n", " break" ] }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 0%| | 0/1000 [00:00 10\u001b[0m samples \u001b[38;5;241m=\u001b[39m \u001b[43msampler\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgenerate_images\u001b[49m\u001b[43m(\u001b[49m\u001b[43mnum_images\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mlen\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mprompts\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdiffusion_steps\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m200\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstart_step\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m1000\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mend_step\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;241;43m0\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpriors\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mNone\u001b[39;49;00m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmodel_conditioning_inputs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mlabels_seq\u001b[49m\u001b[43m,\u001b[49m\u001b[43m)\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 11\u001b[0m plotImages(samples, dpi\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m300\u001b[39m)\n", + "Cell \u001b[0;32mIn[129], line 136\u001b[0m, in \u001b[0;36mDiffusionSampler.generate_images\u001b[0;34m(self, num_images, diffusion_steps, start_step, end_step, steps_override, priors, rngstate, model_conditioning_inputs)\u001b[0m\n\u001b[1;32m 133\u001b[0m next_step \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mscale_steps(steps[i\u001b[38;5;241m+\u001b[39m\u001b[38;5;241m1\u001b[39m] \u001b[38;5;28;01mif\u001b[39;00m i\u001b[38;5;241m+\u001b[39m\u001b[38;5;241m1\u001b[39m \u001b[38;5;241m<\u001b[39m \u001b[38;5;28mlen\u001b[39m(steps) \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;241m0\u001b[39m)\n\u001b[1;32m 134\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m i \u001b[38;5;241m!=\u001b[39m \u001b[38;5;28mlen\u001b[39m(steps) \u001b[38;5;241m-\u001b[39m \u001b[38;5;241m1\u001b[39m:\n\u001b[1;32m 135\u001b[0m \u001b[38;5;66;03m# print(\"normal step\")\u001b[39;00m\n\u001b[0;32m--> 136\u001b[0m samples, rngstate \u001b[38;5;241m=\u001b[39m \u001b[43msample_step\u001b[49m\u001b[43m(\u001b[49m\u001b[43mrngstate\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msamples\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcurrent_step\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnext_step\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 137\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 138\u001b[0m \u001b[38;5;66;03m# print(\"last step\")\u001b[39;00m\n\u001b[1;32m 139\u001b[0m step_ones \u001b[38;5;241m=\u001b[39m jnp\u001b[38;5;241m.\u001b[39mones((num_images, ), dtype\u001b[38;5;241m=\u001b[39mjnp\u001b[38;5;241m.\u001b[39mint32)\n", + "Cell \u001b[0;32mIn[129], line 116\u001b[0m, in \u001b[0;36mDiffusionSampler.generate_images..sample_step\u001b[0;34m(state, samples, current_step, next_step)\u001b[0m\n\u001b[1;32m 115\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21msample_step\u001b[39m(state:RandomMarkovState, samples, current_step, next_step):\n\u001b[0;32m--> 116\u001b[0m samples, state \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msample_step\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcurrent_samples\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msamples\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 117\u001b[0m \u001b[43m \u001b[49m\u001b[43mcurrent_step\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcurrent_step\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\n\u001b[1;32m 118\u001b[0m \u001b[43m \u001b[49m\u001b[43mmodel_conditioning_inputs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmodel_conditioning_inputs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 119\u001b[0m \u001b[43m \u001b[49m\u001b[43mstate\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstate\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnext_step\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mnext_step\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 120\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m samples, state\n", + "Cell \u001b[0;32mIn[129], line 64\u001b[0m, in \u001b[0;36mDiffusionSampler.sample_step\u001b[0;34m(self, current_samples, current_step, model_conditioning_inputs, next_step, state)\u001b[0m\n\u001b[1;32m 62\u001b[0m current_step \u001b[38;5;241m=\u001b[39m step_ones \u001b[38;5;241m*\u001b[39m current_step\n\u001b[1;32m 63\u001b[0m next_step \u001b[38;5;241m=\u001b[39m step_ones \u001b[38;5;241m*\u001b[39m next_step\n\u001b[0;32m---> 64\u001b[0m pred_images, pred_noise, _ \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msample_model\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcurrent_samples\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcurrent_step\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mmodel_conditioning_inputs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 65\u001b[0m \u001b[38;5;66;03m# plotImages(pred_images)\u001b[39;00m\n\u001b[1;32m 66\u001b[0m pred_images \u001b[38;5;241m=\u001b[39m clip_images(pred_images)\n", + " \u001b[0;31m[... skipping hidden 11 frame]\u001b[0m\n", + "Cell \u001b[0;32mIn[129], line 37\u001b[0m, in \u001b[0;36mDiffusionSampler.__init__..sample_model\u001b[0;34m(x_t, t, *additional_inputs)\u001b[0m\n\u001b[1;32m 35\u001b[0m text_labels_seq, \u001b[38;5;241m=\u001b[39m additional_inputs\n\u001b[1;32m 36\u001b[0m text_labels_seq \u001b[38;5;241m=\u001b[39m jnp\u001b[38;5;241m.\u001b[39mconcatenate([text_labels_seq, jnp\u001b[38;5;241m.\u001b[39mbroadcast_to(null_labels_seq, text_labels_seq\u001b[38;5;241m.\u001b[39mshape)], axis\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0\u001b[39m)\n\u001b[0;32m---> 37\u001b[0m model_output \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmodel\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mapply\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mparams\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mnoise_schedule\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtransform_inputs\u001b[49m\u001b[43m(\u001b[49m\u001b[43mx_t_cat\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mc_in_cat\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mt_cat\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtext_labels_seq\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 38\u001b[0m \u001b[38;5;66;03m# Split model output into unconditional and conditional parts\u001b[39;00m\n\u001b[1;32m 39\u001b[0m model_output_cond, model_output_uncond \u001b[38;5;241m=\u001b[39m jnp\u001b[38;5;241m.\u001b[39msplit(model_output, \u001b[38;5;241m2\u001b[39m, axis\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0\u001b[39m)\n", + " \u001b[0;31m[... skipping hidden 6 frame]\u001b[0m\n", + "Cell \u001b[0;32mIn[96], line 115\u001b[0m, in \u001b[0;36mUnet.__call__\u001b[0;34m(self, x, temb, textcontext)\u001b[0m\n\u001b[1;32m 113\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 114\u001b[0m padded_context \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m--> 115\u001b[0m x \u001b[38;5;241m=\u001b[39m \u001b[43mTransformerBlock\u001b[49m\u001b[43m(\u001b[49m\u001b[43mheads\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mattention_config\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mheads\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdtype\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mattention_config\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mdtype\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mjnp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfloat32\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 116\u001b[0m \u001b[43m \u001b[49m\u001b[43mdim_head\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdim_in\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m/\u001b[39;49m\u001b[38;5;241;43m/\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mattention_config\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mheads\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 117\u001b[0m \u001b[43m \u001b[49m\u001b[43muse_flash_attention\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mattention_config\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mflash_attention\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 118\u001b[0m \u001b[43m \u001b[49m\u001b[43muse_projection\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mattention_config\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43muse_projection\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 119\u001b[0m \u001b[43m \u001b[49m\u001b[43muse_self_and_cross\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mattention_config\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43muse_self_and_cross\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 120\u001b[0m \u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43mf\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mdown_\u001b[39;49m\u001b[38;5;132;43;01m{\u001b[39;49;00m\u001b[43mi\u001b[49m\u001b[38;5;132;43;01m}\u001b[39;49;00m\u001b[38;5;124;43m_attention_\u001b[39;49m\u001b[38;5;132;43;01m{\u001b[39;49;00m\u001b[43mj\u001b[49m\u001b[38;5;132;43;01m}\u001b[39;49;00m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\u001b[43m(\u001b[49m\u001b[43mx\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mpadded_context\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 121\u001b[0m \u001b[38;5;66;03m# print(\"down residual for feature level\", i, \"is of shape\", x.shape, \"features\", dim_in)\u001b[39;00m\n\u001b[1;32m 122\u001b[0m downs\u001b[38;5;241m.\u001b[39mappend(x)\n", + " \u001b[0;31m[... skipping hidden 2 frame]\u001b[0m\n", + "Cell \u001b[0;32mIn[95], line 234\u001b[0m, in \u001b[0;36mTransformerBlock.__call__\u001b[0;34m(self, x, context)\u001b[0m\n\u001b[1;32m 231\u001b[0m context \u001b[38;5;241m=\u001b[39m projected_x \u001b[38;5;28;01mif\u001b[39;00m context \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;28;01melse\u001b[39;00m context\n\u001b[1;32m 233\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39muse_self_and_cross:\n\u001b[0;32m--> 234\u001b[0m projected_x \u001b[38;5;241m=\u001b[39m \u001b[43mAttentionBlock\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 235\u001b[0m \u001b[43m \u001b[49m\u001b[43mquery_dim\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43minner_dim\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 236\u001b[0m \u001b[43m \u001b[49m\u001b[43mheads\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mheads\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 237\u001b[0m \u001b[43m \u001b[49m\u001b[43mdim_head\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdim_head\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 238\u001b[0m \u001b[43m \u001b[49m\u001b[43mname\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43mf\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mAttention\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m 239\u001b[0m \u001b[43m \u001b[49m\u001b[43mprecision\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mprecision\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 240\u001b[0m \u001b[43m \u001b[49m\u001b[43muse_bias\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[1;32m 241\u001b[0m \u001b[43m \u001b[49m\u001b[43mdtype\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdtype\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 242\u001b[0m \u001b[43m \u001b[49m\u001b[43muse_flash_attention\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43muse_flash_attention\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 243\u001b[0m \u001b[43m \u001b[49m\u001b[43muse_cross_only\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\n\u001b[1;32m 244\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\u001b[43m(\u001b[49m\u001b[43mprojected_x\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcontext\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 245\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39muse_flash_attention \u001b[38;5;241m==\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m:\n\u001b[1;32m 246\u001b[0m projected_x \u001b[38;5;241m=\u001b[39m EfficientAttention(\n\u001b[1;32m 247\u001b[0m query_dim\u001b[38;5;241m=\u001b[39minner_dim,\n\u001b[1;32m 248\u001b[0m heads\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mheads,\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 253\u001b[0m dtype\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mdtype,\n\u001b[1;32m 254\u001b[0m )(projected_x, context)\n", + " \u001b[0;31m[... skipping hidden 2 frame]\u001b[0m\n", + "Cell \u001b[0;32mIn[95], line 187\u001b[0m, in \u001b[0;36mAttentionBlock.__call__\u001b[0;34m(self, hidden_states, context)\u001b[0m\n\u001b[1;32m 185\u001b[0m residual \u001b[38;5;241m=\u001b[39m hidden_states\n\u001b[1;32m 186\u001b[0m hidden_states \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mnorm2(hidden_states)\n\u001b[0;32m--> 187\u001b[0m hidden_states \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mattention2\u001b[49m\u001b[43m(\u001b[49m\u001b[43mhidden_states\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcontext\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 188\u001b[0m hidden_states \u001b[38;5;241m=\u001b[39m hidden_states \u001b[38;5;241m+\u001b[39m residual\n\u001b[1;32m 190\u001b[0m \u001b[38;5;66;03m# feed forward\u001b[39;00m\n", + " \u001b[0;31m[... skipping hidden 2 frame]\u001b[0m\n", + "Cell \u001b[0;32mIn[95], line 49\u001b[0m, in \u001b[0;36mEfficientAttention.__call__\u001b[0;34m(self, x, context)\u001b[0m\n\u001b[1;32m 47\u001b[0m context \u001b[38;5;241m=\u001b[39m x \u001b[38;5;28;01mif\u001b[39;00m context \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;28;01melse\u001b[39;00m context\n\u001b[1;32m 48\u001b[0m query \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mquery(x)\n\u001b[0;32m---> 49\u001b[0m key \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mkey\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcontext\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 50\u001b[0m value \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mvalue(context)\n\u001b[1;32m 52\u001b[0m \u001b[38;5;66;03m# print(query.shape, key.shape, value.shape)\u001b[39;00m\n\u001b[1;32m 53\u001b[0m \n\u001b[1;32m 54\u001b[0m \u001b[38;5;66;03m# hidden_states = jax.experimental.pallas.ops.tpu.flash_attention.mha_reference(\u001b[39;00m\n\u001b[1;32m 55\u001b[0m \u001b[38;5;66;03m# query, key, value, None\u001b[39;00m\n\u001b[1;32m 56\u001b[0m \u001b[38;5;66;03m# )\u001b[39;00m\n", + " \u001b[0;31m[... skipping hidden 2 frame]\u001b[0m\n", + "File \u001b[0;32m~/.local/lib/python3.10/site-packages/flax/linen/linear.py:164\u001b[0m, in \u001b[0;36mDenseGeneral.__call__\u001b[0;34m(self, inputs)\u001b[0m\n\u001b[1;32m 158\u001b[0m expanded_batch_shape \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mtuple\u001b[39m(\n\u001b[1;32m 159\u001b[0m inputs\u001b[38;5;241m.\u001b[39mshape[ax] \u001b[38;5;28;01mif\u001b[39;00m ax \u001b[38;5;129;01min\u001b[39;00m batch_dims \u001b[38;5;28;01melse\u001b[39;00m \u001b[38;5;241m1\u001b[39m\n\u001b[1;32m 160\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m ax \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mrange\u001b[39m(inputs\u001b[38;5;241m.\u001b[39mndim)\n\u001b[1;32m 161\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m ax \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m axis\n\u001b[1;32m 162\u001b[0m )\n\u001b[1;32m 163\u001b[0m kernel_shape \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mtuple\u001b[39m(inputs\u001b[38;5;241m.\u001b[39mshape[ax] \u001b[38;5;28;01mfor\u001b[39;00m ax \u001b[38;5;129;01min\u001b[39;00m axis) \u001b[38;5;241m+\u001b[39m features\n\u001b[0;32m--> 164\u001b[0m kernel \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mparam\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 165\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mkernel\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mkernel_init_wrap\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mbatch_shape\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m+\u001b[39;49m\u001b[43m \u001b[49m\u001b[43mkernel_shape\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mparam_dtype\u001b[49m\n\u001b[1;32m 166\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 168\u001b[0m batch_ind \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mtuple\u001b[39m(\u001b[38;5;28mrange\u001b[39m(n_batch_dims))\n\u001b[1;32m 169\u001b[0m contract_ind \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mtuple\u001b[39m(\u001b[38;5;28mrange\u001b[39m(n_batch_dims, n_axis \u001b[38;5;241m+\u001b[39m n_batch_dims))\n", + " \u001b[0;31m[... skipping hidden 1 frame]\u001b[0m\n", + "File \u001b[0;32m~/.local/lib/python3.10/site-packages/flax/core/scope.py:982\u001b[0m, in \u001b[0;36mScope.param\u001b[0;34m(self, name, init_fn, unbox, *init_args, **init_kwargs)\u001b[0m\n\u001b[1;32m 977\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m val, abs_val \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mzip\u001b[39m(value_flat, abs_value_flat):\n\u001b[1;32m 978\u001b[0m \u001b[38;5;66;03m# NOTE: We could check dtype consistency here as well but it's\u001b[39;00m\n\u001b[1;32m 979\u001b[0m \u001b[38;5;66;03m# usefuleness is less obvious. We might intentionally change the dtype\u001b[39;00m\n\u001b[1;32m 980\u001b[0m \u001b[38;5;66;03m# for inference to a half float type for example.\u001b[39;00m\n\u001b[1;32m 981\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m jnp\u001b[38;5;241m.\u001b[39mshape(val) \u001b[38;5;241m!=\u001b[39m jnp\u001b[38;5;241m.\u001b[39mshape(abs_val):\n\u001b[0;32m--> 982\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m errors\u001b[38;5;241m.\u001b[39mScopeParamShapeError(\n\u001b[1;32m 983\u001b[0m name, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mpath_text, jnp\u001b[38;5;241m.\u001b[39mshape(abs_val), jnp\u001b[38;5;241m.\u001b[39mshape(val)\n\u001b[1;32m 984\u001b[0m )\n\u001b[1;32m 985\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 986\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mis_mutable_collection(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mparams\u001b[39m\u001b[38;5;124m'\u001b[39m):\n", + "\u001b[0;31mScopeParamShapeError\u001b[0m: Initializer expected to generate shape (768, 64) but got shape (64, 64) instead for parameter \"kernel\" in \"/down_1_attention_1/Attention/Attention2/to_k\". (https://flax.readthedocs.io/en/latest/api_reference/flax.errors.html#flax.errors.ScopeParamShapeError)" ] } ], "source": [ - "textEncoderModel, textTokenizer = defaultTextEncodeModel()" + "prompts = [\n", + " 'water tulip',\n", + " 'a water lily',\n", + " 'a water lily', \n", + " 'a photo of a rose'\n", + " ]\n", + "pooled_labels, labels_seq = encodePrompts(prompts, textEncoderModel, textTokenizer)\n", + "\n", + "sampler = EulerAncestralSampler(trainer.model, trainer.get_state().ema_params, karas_ve_schedule, model_output_transform=trainer.model_output_transform, guidance_scale=2, null_labels_seq=data['null_labels_full'])\n", + "samples = sampler.generate_images(num_images=len(prompts), diffusion_steps=200, start_step=1000, end_step=0, priors=None, model_conditioning_inputs=(labels_seq,))\n", + "plotImages(samples, dpi=300)\n" ] }, { diff --git a/Diffusion flax linen.ipynb b/Diffusion flax linen.ipynb index 2d63f7c..28696a3 100644 --- a/Diffusion flax linen.ipynb +++ b/Diffusion flax linen.ipynb @@ -200,6 +200,109 @@ " return embed_pooled, embed_labels_full" ] }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def get_dataset_tf(data_name=\"oxford_flowers102\", batch_size=64, image_scale=256):\n", + " import tensorflow as tf\n", + "\n", + " if os.path.exists(f\"./datacache/{data_name}_labels.pkl\"):\n", + " print(\"Loading labels from cache\")\n", + " with open(f\"./datacache/{data_name}_labels.pkl\", \"rb\") as f:\n", + " import pickle\n", + " embed = pickle.load(f)\n", + " embed_labels = embed[\"embed_labels\"]\n", + " embed_labels_full = embed[\"embed_labels_full\"]\n", + " null_labels = embed[\"null_labels\"]\n", + " null_labels_full = embed[\"null_labels_full\"]\n", + " else:\n", + " print(\"No cache found, generating labels\")\n", + " textlabels = dataToLabelGenMap[data_name]()\n", + " \n", + " model, tokenizer = defaultTextEncodeModel()\n", + "\n", + " embed_labels, embed_labels_full = encodePrompts(textlabels, model, tokenizer)\n", + " embed_labels = embed_labels.tolist()\n", + " embed_labels_full = embed_labels_full.tolist()\n", + " \n", + " null_labels, null_labels_full = encodePrompts([\"\"], model, tokenizer)\n", + " null_labels = null_labels.tolist()[0]\n", + " null_labels_full = null_labels_full.tolist()[0]\n", + " \n", + " os.makedirs(\"./datacache\", exist_ok=True)\n", + " with open(f\"./datacache/{data_name}_labels.pkl\", \"wb\") as f:\n", + " import pickle\n", + " pickle.dump({\n", + " \"embed_labels\": embed_labels,\n", + " \"embed_labels_full\": embed_labels_full,\n", + " \"null_labels\": null_labels,\n", + " \"null_labels_full\": null_labels_full\n", + " }, f)\n", + " \n", + " embed_labels = tf.convert_to_tensor([np.array(i, dtype=np.float16) for i in embed_labels])\n", + " embed_labels_full = tf.convert_to_tensor(np.array([np.array(i, dtype=np.float16) for i in embed_labels_full]))\n", + " null_labels = np.array(null_labels, dtype=np.float16)\n", + " null_labels_full = np.array(null_labels_full, dtype=np.float16)\n", + " \n", + " def labelizer(labelidx:int) -> np.array:\n", + " label_pooled = embed_labels[labelidx]\n", + " label_seq = embed_labels_full[labelidx]\n", + " return label_pooled, label_seq\n", + " \n", + " def augmenter(image_scale=256, method=\"area\"):\n", + " @tf.function()\n", + " def augment(sample):\n", + " image = (\n", + " tf.cast(sample[\"image\"], tf.float32) - 127.5\n", + " ) / 127.5\n", + " image = tf.image.resize(\n", + " image, [image_scale, image_scale], method=method, antialias=True\n", + " )\n", + " image = tf.image.random_flip_left_right(image)\n", + " image = tf.image.random_contrast(image, 0.999, 1.05)\n", + " image = tf.image.random_brightness(image, 0.2)\n", + "\n", + " image = tf.clip_by_value(image, -1.0, 1.0)\n", + " labelidx = sample[\"label\"]\n", + " label, label_seq = labelizer(labelidx)\n", + " # image, label = move2gpu(image, label)\n", + " return {'image':image, 'label':label, 'label_seq':label_seq}\n", + " return augment\n", + "\n", + " # Load CelebA Dataset\n", + " data: tf.data.Dataset = tfds.load(data_name, split=\"all\", shuffle_files=True)\n", + " train_len = len(data)\n", + " final_data = (\n", + " data\n", + " .cache() # Cache after augmenting to avoid recomputation\n", + " .map(\n", + " augmenter(image_scale, method=\"area\"),\n", + " num_parallel_calls=tf.data.AUTOTUNE,\n", + " )\n", + " .repeat() # Repeats the dataset indefinitely\n", + " .shuffle(4096) # Ensure this is adequate for your dataset size\n", + " .batch(batch_size, drop_remainder=True)\n", + " .prefetch(tf.data.experimental.AUTOTUNE)\n", + " )\n", + " \n", + " def get_trainset():\n", + " return final_data.as_numpy_iterator()\n", + " \n", + " return {\n", + " \"train\": get_trainset,\n", + " \"train_len\": train_len,\n", + " \"batch_size\": batch_size,\n", + " \"null_labels\": null_labels,\n", + " \"null_labels_full\": null_labels_full,\n", + " \"embed_labels\": embed_labels,\n", + " \"embed_labels_full\": embed_labels_full,\n", + " \n", + " }" + ] + }, { "cell_type": "code", "execution_count": 4, @@ -8709,7 +8812,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.6" + "version": "3.10.12" } }, "nbformat": 4, diff --git a/datasets/cc12m downloader.sh b/datasets/cc12m downloader.sh new file mode 100755 index 0000000..db2aa96 --- /dev/null +++ b/datasets/cc12m downloader.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +img2dataset --url_list ./datacache/cc12m.csv --input_format "csv"\ + --url_col "image_url" --caption_col "caption" --output_format arrayrecord\ + --output_folder gs://flaxdiff-datasets/arrayrecord/cc12m --processes_count 240 --thread_count 64 --image_size 256\ + --enable_wandb True --disallowed_header_directives '[]' --compute_hash None --max_shard_retry 3 --timeout 60 + +./gcsfuse.sh DATASET_GCS_BUCKET=flaxdiff-datasets MOUNT_PATH=gcs_mount \ No newline at end of file diff --git a/datasets/data pipeline experiments.ipynb b/datasets/data pipeline experiments.ipynb new file mode 100644 index 0000000..391abf2 --- /dev/null +++ b/datasets/data pipeline experiments.ipynb @@ -0,0 +1,1911 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/home/mrwhite0racle/.local/lib/python3.10/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\n", + " from .autonotebook import tqdm as notebook_tqdm\n" + ] + } + ], + "source": [ + "import webdataset as wds\n", + "import wids\n", + "import jax\n", + "import jax.numpy as jnp\n", + "import torch\n", + "import augmax\n", + "import matplotlib.pyplot as plt\n", + "\n", + "import torchvision.transforms.v2 as tv\n", + "import grain.python as pygrain\n", + "from typing import Any, Dict, List, Tuple\n", + "import numpy as np\n", + "from torch.utils.data import DataLoader as TorchDataLoader, default_collate\n", + "from functools import partial\n", + "import tqdm\n", + "\n", + "import fsspec\n", + "import json\n", + "\n", + "import os\n", + "from transformers import AutoTokenizer, FlaxCLIPTextModel, CLIPTextModel" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[TpuDevice(id=0, process_index=0, coords=(0,0,0), core_on_chip=0),\n", + " TpuDevice(id=1, process_index=0, coords=(1,0,0), core_on_chip=0),\n", + " TpuDevice(id=2, process_index=0, coords=(0,1,0), core_on_chip=0),\n", + " TpuDevice(id=3, process_index=0, coords=(1,1,0), core_on_chip=0)]" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "jax.devices()" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(0, 1)" + ] + }, + "execution_count": 61, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "jax.process_index(), jax.process_count()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "denormalizeImage = lambda x: (x + 1.0) * 127.5\n", + "\n", + "def plotImages(imgs, fig_size=(8, 8), dpi=100):\n", + " fig = plt.figure(figsize=fig_size, dpi=dpi)\n", + " imglen = imgs.shape[0]\n", + " for i in range(imglen):\n", + " plt.subplot(fig_size[0], fig_size[1], i + 1)\n", + " plt.imshow(jnp.astype(denormalizeImage(imgs[i, :, :, :]), jnp.uint8))\n", + " plt.axis(\"off\")\n", + " plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "def flaxTextEncodeModel():\n", + " modelname = \"openai/clip-vit-large-patch14\"\n", + " model = FlaxCLIPTextModel.from_pretrained(modelname, dtype=jnp.float16)\n", + " tokenizer = AutoTokenizer.from_pretrained(modelname, dtype=jnp.float16)\n", + " return model, tokenizer\n", + "\n", + "def torchTextEncodeModel():\n", + " modelname = \"openai/clip-vit-large-patch14\"\n", + " model = CLIPTextModel.from_pretrained(modelname)\n", + " tokenizer = AutoTokenizer.from_pretrained(modelname)\n", + " return model, tokenizer\n", + "\n", + "def encodePrompts(prompts, model, tokenizer=None):\n", + " if model == None:\n", + " model, tokenizer = flaxTextEncodeModel()\n", + " if tokenizer == None:\n", + " tokenizer = AutoTokenizer.from_pretrained(\"openai/clip-vit-large-patch14\")\n", + "\n", + " # inputs = tokenizer(prompts, padding=\"max_length\", max_length=tokenizer.model_max_length, truncation=True, return_tensors=\"np\")\n", + " inputs = tokenizer(prompts, padding=\"max_length\", max_length=12, truncation=True, return_tensors=\"np\")\n", + "\n", + " outputs = model(**inputs)\n", + " last_hidden_state = outputs.last_hidden_state\n", + " pooler_output = outputs.pooler_output # pooled (EOS token) states\n", + " embed_pooled = pooler_output.astype(jnp.float16)\n", + " embed_labels_full = last_hidden_state.astype(jnp.float16)\n", + " \n", + " return embed_pooled, embed_labels_full" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "class CaptionProcessor:\n", + " def __init__(self, tensor_type=\"pt\", modelname=\"openai/clip-vit-large-patch14\"):\n", + " self.tokenizer = AutoTokenizer.from_pretrained(modelname)\n", + " self.tensor_type = tensor_type\n", + " \n", + " def __call__(self, json_data: Dict[str, Any]):\n", + " # Given a caption string, generate clip embeddings for it\n", + " caption = json_data['caption']\n", + " tokens = self.tokenizer(caption, padding=\"max_length\", max_length=self.tokenizer.model_max_length, truncation=True, return_tensors=self.tensor_type)\n", + " return {\n", + " \"input_ids\": tokens[\"input_ids\"].squeeze(),\n", + " \"attention_mask\": tokens[\"attention_mask\"].squeeze(),\n", + " \"caption\": caption,\n", + " }\n", + " \n", + " def __repr__(self):\n", + " return self.__class__.__name__ + '()'\n", + "\n", + "def get_torch_dataloader(source_url: str = \"gs://flaxdiff-datasets/webdatasets/cc12m/{00000..01242}.tar\", \n", + " batch_size: int = 64, image_size: int = 256, \n", + " num_workers: int = 64, prefetch_factor: int = 100):\n", + "\n", + " class Preprocess:\n", + " def __call__(self, x):\n", + " x = x.permute(1, 2, 0)\n", + " x = (x / 127.5) - 1.0\n", + " return x\n", + "\n", + " def __repr__(self):\n", + " return self.__class__.__name__ + '()'\n", + "\n", + " train_transforms = tv.Compose([\n", + " tv.Resize(image_size, interpolation=3),\n", + " tv.RandomCrop(image_size, padding=4, padding_mode=\"reflect\"),\n", + " tv.RandomHorizontalFlip(),\n", + " # tv.ColorJitter(args.color_jitter, args.color_jitter, args.color_jitter),\n", + " # tv.RandomErasing(args.random_erasing, value=\"random\"),\n", + " tv.PILToTensor(),\n", + " Preprocess(),\n", + " ])\n", + "\n", + " def collate_and_shuffle(batch: list[Any], repeats: int = 1) -> Any:\n", + " return default_collate(sum([batch[i::repeats] for i in range(repeats)], []))\n", + "\n", + " dataset = wds.DataPipeline(\n", + " wds.SimpleShardList(source_url, seed=0),\n", + " \n", + " wds.shuffle(100),\n", + " wds.split_by_worker,\n", + " wds.tarfile_to_samples(handler=wds.ignore_and_continue),\n", + " wds.shuffle(1000),\n", + " # this decodes the images and json\n", + " wds.decode(\"pil\", handler=wds.ignore_and_continue),\n", + " wds.to_tuple(\"jpg\", \"json\"),\n", + " # wds.map(preprocess_sample),\n", + " wds.map_tuple(train_transforms, CaptionProcessor()),\n", + " )\n", + " train_dataloader = TorchDataLoader(\n", + " dataset,\n", + " batch_size=batch_size,\n", + " num_workers=num_workers,\n", + " collate_fn=partial(collate_and_shuffle, repeats=2),\n", + " drop_last=True,\n", + " prefetch_factor=prefetch_factor,\n", + " persistent_workers=True,\n", + " )\n", + " return train_dataloader" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/lib/python3.10/multiprocessing/popen_fork.py:66: RuntimeWarning: os.fork() was called. os.fork() is incompatible with multithreaded code, and JAX is multithreaded, so this will likely lead to a deadlock.\n", + " self.pid = os.fork()\n", + "100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [00:18<00:00, 52.64it/s]\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Process Process-55:\n", + "Process Process-34:\n", + "Process Process-63:\n", + "Process Process-49:\n", + "Process Process-56:\n", + "Process Process-59:\n", + "Process Process-52:\n", + "Process Process-41:\n", + "Process Process-51:\n", + "Process Process-48:\n", + "Process Process-36:\n", + "Process Process-64:\n", + "Process Process-32:\n", + "Process Process-27:\n", + "Process Process-7:\n", + "Process Process-12:\n", + "Process Process-29:\n", + "Process Process-50:\n", + "Process Process-62:\n", + "Process Process-44:\n", + "Process Process-26:\n", + "Process Process-40:\n", + "Process Process-13:\n", + "Process Process-53:\n", + "Process Process-38:\n", + "Process Process-31:\n", + "Process Process-45:\n", + "Process Process-22:\n", + "Process Process-28:\n", + "/usr/lib/python3.10/multiprocessing/popen_fork.py:66: RuntimeWarning: os.fork() was called. os.fork() is incompatible with multithreaded code, and JAX is multithreaded, so this will likely lead to a deadlock.\n", + " self.pid = os.fork()\n", + "Process Process-1:\n", + "Process Process-57:\n", + "Process Process-43:\n", + "Process Process-20:\n", + "Process Process-6:\n", + "Process Process-58:\n", + "Process Process-23:\n", + "Process Process-61:\n", + "Process Process-14:\n", + "Process Process-47:\n", + "Process Process-18:\n", + "Process Process-2:\n", + "Process Process-3:\n", + "Process Process-9:\n", + "Process Process-10:\n", + "Process Process-54:\n", + "Process Process-39:\n", + "Process Process-30:\n", + "Process Process-35:\n", + "Process Process-8:\n", + "Process Process-33:\n", + "Process Process-60:\n", + "Process Process-17:\n", + "Process Process-5:\n", + "Process Process-21:\n", + "Process Process-42:\n", + "Process Process-24:\n", + "Process Process-37:\n", + "Process Process-15:\n", + "Process Process-19:\n", + "Process Process-16:\n", + "Process Process-25:\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Process Process-46:\n", + "Process Process-11:\n", + "Process Process-4:\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + "Traceback (most recent call last):\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + "Traceback (most recent call last):\n", + "Traceback (most recent call last):\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + "Traceback (most recent call last):\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/process.py\", line 317, in _bootstrap\n", + " util._exit_function()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 360, in _exit_function\n", + " _run_finalizers()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 300, in _run_finalizers\n", + " finalizer()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/util.py\", line 224, in __call__\n", + " res = self._callback(*self._args, **self._kwargs)\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/multiprocessing/queues.py\", line 199, in _finalize_join\n", + " thread.join()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1096, in join\n", + " self._wait_for_tstate_lock()\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + "KeyboardInterrupt\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + "KeyboardInterrupt\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + "KeyboardInterrupt\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + " File \"/usr/lib/python3.10/threading.py\", line 1116, in _wait_for_tstate_lock\n", + " if lock.acquire(block, timeout):\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n", + "KeyboardInterrupt\n" + ] + } + ], + "source": [ + "train_dataloader = get_torch_dataloader(num_workers=64)\n", + "dataset = iter(train_dataloader)\n", + "\n", + "for _ in tqdm.tqdm(range(1000)):\n", + " batch = next(dataset)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Make a WID compatible json descriptor for the dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "def get_dataset_stats(source_url: str = \"gs://flaxdiff-datasets/webdatasets/cc12m/\", output_dir: str='./') -> str:\n", + " \"\"\"\n", + " Dataset descriptions are JSON files. They must have the following format;\n", + "\n", + " {\n", + " \"wids_version\": 1,\n", + " # optional immediate shardlist\n", + " \"shardlist\": [\n", + " {\"url\": \"http://example.com/file.tar\", \"nsamples\": 1000},\n", + " ...\n", + " ],\n", + " # sub-datasets\n", + " \"datasets\": [\n", + " {\"source_url\": \"http://example.com/dataset.json\"},\n", + " {\"shardlist\": [\n", + " {\"url\": \"http://example.com/file.tar\", \"nsamples\": 1000},\n", + " ...\n", + " ]}\n", + " ...\n", + " ]\n", + " }\n", + " \"\"\"\n", + " # First read all the json stats files in the dataset\n", + " fs, output_path = fsspec.core.url_to_fs(source_url, use_listings_cache=False)\n", + " stats_files = [i for i in fs.glob(output_path + \"*.json\") if 'global' not in i]\n", + " \n", + " wids_shardlist = []\n", + " total_samples = 0\n", + "\n", + " for stats_file in tqdm.tqdm(stats_files):\n", + " with fs.open(stats_file, \"r\") as f:\n", + " try:\n", + " stats = json.load(f)\n", + " shard_name = stats_file.replace(\"_stats.json\", \".tar\")\n", + " shard_name = shard_name.split(\"/\")[-1]\n", + " nsamples = stats[\"successes\"]\n", + " total_samples += nsamples\n", + " wids_shardlist.append({\"url\": shard_name, \"nsamples\": nsamples})\n", + " except Exception as err: # pylint: disable=broad-except\n", + " print(f\"failed to parse stats file {stats_file}\", err)\n", + " wids_stats = {\"wids_version\": 1, \"shardlist\": wids_shardlist}\n", + " \n", + " # Save the global stats in the source_url\n", + " global_stats_file = os.path.join(output_dir, \"global_stats/global_stats.json\")\n", + " with fsspec.open(global_stats_file, \"w\") as f:\n", + " json.dump(wids_stats, f)\n", + " \n", + " return global_stats_file, wids_shardlist, total_samples" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1243/1243 [01:37<00:00, 12.76it/s]\n" + ] + } + ], + "source": [ + "global_stats_file, wids_shardlist, total_samples = get_dataset_stats(\"gs://flaxdiff-datasets/arrayrecord/cc12m/\")" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "8329829" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "total_samples" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Copying gs://flaxdiff-datasets/webdatasets/cc12m/global_stats/global_stats.json...\n", + "/ [1 files][ 48.6 KiB/ 48.6 KiB] \n", + "Operation completed over 1 objects/48.6 KiB. \n", + "gs://flaxdiff-datasets/webdatasets/cc12m/global_st base: gs://flaxdiff-datasets/webdatasets/cc12m/ name: None nfiles: 1243 nbytes: 0 samples: 8408499 cache: /tmp/_wids_cache\n" + ] + } + ], + "source": [ + "global_stats_file = \"gs://flaxdiff-datasets/webdatasets/cc12m/global_stats/global_stats.json\"\n", + "data_source = wids.ShardListDataset(global_stats_file, base=\"gs://flaxdiff-datasets/webdatasets/cc12m/\", cache_size=10)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Copying gs://flaxdiff-datasets/webdatasets/cc12m/00000.tar...\n", + "| [1 files][178.7 MiB/178.7 MiB] \n", + "Operation completed over 1 objects/178.7 MiB. \n" + ] + }, + { + "data": { + "text/plain": [ + "{'.jpg': ,\n", + " '.json': {'caption': 'Couple watching the sunset in the sea. Couple in love watching the colorful sunset in the sea stock images',\n", + " 'url': 'https://thumbs.dreamstime.com/b/couple-watching-sunset-sea-couple-love-watching-colorful-sunset-sea-161540574.jpg',\n", + " 'key': '000000117',\n", + " 'status': 'success',\n", + " 'error_message': None,\n", + " 'width': 256,\n", + " 'height': 256,\n", + " 'original_width': 800,\n", + " 'original_height': 534,\n", + " 'exif': '{\"Image XResolution\": \"72\", \"Image YResolution\": \"72\", \"Image ResolutionUnit\": \"Pixels/Inch\", \"Image YCbCrPositioning\": \"Centered\", \"Image Copyright\": \"| Dreamstime.com\"}'},\n", + " '.txt': 'Couple watching the sunset in the sea. Couple in love watching the colorful sunset in the sea stock images',\n", + " '__key__': '000000117',\n", + " '__shard__': 'gs://flaxdiff-datasets/webdatasets/cc12m/00000.tar',\n", + " '__shardindex__': 1,\n", + " '__dataset__': None}" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "data_source[1]" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2024-07-31 15:38:39.853800: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:485] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n", + "2024-07-31 15:38:39.868309: E external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:8454] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n", + "2024-07-31 15:38:39.873026: E external/local_xla/xla/stream_executor/cuda/cuda_blas.cc:1452] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n", + "2024-07-31 15:38:40.700456: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT\n" + ] + } + ], + "source": [ + "from array_record.python.array_record_module import ArrayRecordWriter" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Experimentation with Array Records" + ] + }, + { + "cell_type": "code", + "execution_count": 191, + "metadata": {}, + "outputs": [], + "source": [ + "import struct \n", + "\n", + "def pack_dict_of_byte_arrays(data_dict):\n", + " \"\"\"\n", + " Pack a dictionary of byte arrays into a single byte array.\n", + " \n", + " Args:\n", + " data_dict (dict): Dictionary where keys are strings and values are byte arrays.\n", + " \n", + " Returns:\n", + " bytes: Packed byte array.\n", + " \"\"\"\n", + " packed_data = bytearray()\n", + " \n", + " for key, byte_array in data_dict.items():\n", + " # Ensure the key is a string\n", + " if not isinstance(key, str):\n", + " raise ValueError(\"Keys must be strings\")\n", + " \n", + " # Convert the key to bytes\n", + " key_bytes = key.encode('utf-8')\n", + " \n", + " # Pack the key length and key bytes\n", + " packed_data.extend(struct.pack('I', len(key_bytes)))\n", + " packed_data.extend(key_bytes)\n", + " \n", + " # Pack the byte array length and byte array\n", + " packed_data.extend(struct.pack('I', len(byte_array)))\n", + " packed_data.extend(byte_array)\n", + " \n", + " return bytes(packed_data)\n", + "\n", + "def unpack_dict_of_byte_arrays(packed_data):\n", + " \"\"\"\n", + " Unpack a single byte array into a dictionary of byte arrays.\n", + " \n", + " Args:\n", + " packed_data (bytes): Packed byte array.\n", + " \n", + " Returns:\n", + " dict: Dictionary where keys are strings and values are byte arrays.\n", + " \"\"\"\n", + " unpacked_dict = {}\n", + " offset = 0\n", + " \n", + " while offset < len(packed_data):\n", + " # Unpack the key length\n", + " key_length = struct.unpack_from('I', packed_data, offset)[0]\n", + " offset += struct.calcsize('I')\n", + " \n", + " # Unpack the key bytes and convert to string\n", + " key = packed_data[offset:offset+key_length].decode('utf-8')\n", + " offset += key_length\n", + " \n", + " # Unpack the byte array length\n", + " byte_array_length = struct.unpack_from('I', packed_data, offset)[0]\n", + " offset += struct.calcsize('I')\n", + " \n", + " # Unpack the byte array\n", + " byte_array = packed_data[offset:offset+byte_array_length]\n", + " offset += byte_array_length\n", + " \n", + " unpacked_dict[key] = byte_array\n", + " \n", + " return unpacked_dict\n", + "\n", + "class ArrayRecordSampleWriter:\n", + " \"\"\"ArrayRecordSampleWriter is a writer to ArrayRecord format\"\"\"\n", + "\n", + " def __init__(\n", + " self,\n", + " shard_id,\n", + " output_folder,\n", + " save_caption,\n", + " oom_shard_count,\n", + " schema,\n", + " encode_format,\n", + " ):\n", + " self.oom_shard_count = oom_shard_count\n", + " self.encode_format = encode_format\n", + " self.save_caption = save_caption\n", + " shard_name = \"{shard_id:0{oom_shard_count}d}\".format( # pylint: disable=consider-using-f-string\n", + " shard_id=shard_id, oom_shard_count=oom_shard_count\n", + " )\n", + " self.output_file = f\"{output_folder}/{shard_name}.array_record\"\n", + " self.tmp_file = f\"/tmp/{shard_name}.array_record\"\n", + " self.writer = ArrayRecordWriter(self.tmp_file, options=f\"group_size:1\")\n", + " \n", + " def write(self, img_str, key, caption, meta):\n", + " \"\"\"Write sample to ArrayRecord\"\"\"\n", + " if img_str is not None:\n", + " sample = {\n", + " \"key\": self._bytes_feature(key.encode()),\n", + " self.encode_format: self._bytes_feature(img_str),\n", + " }\n", + " if self.save_caption:\n", + " sample[\"txt\"] = caption.encode() if caption is not None else b\"\"\n", + " for k, v in meta.items():\n", + " if isinstance(v, np.ndarray):\n", + " meta[k] = v.tolist()\n", + " sample[\"meta\"] = json.dumps(meta).encode()\n", + " # tf_example = self._Example(features=self._Features(feature=sample))\n", + " self.writer.write(pack_dict_of_byte_arrays(sample))\n", + " \n", + " \n", + " def _bytes_feature(self, value):\n", + " if value is None:\n", + " value = \"\"\n", + " if isinstance(value, str):\n", + " value = value.encode()\n", + " return value\n", + " \n", + " def close(self):\n", + " self.writer.close()" + ] + }, + { + "cell_type": "code", + "execution_count": 192, + "metadata": {}, + "outputs": [], + "source": [ + "a = ArrayRecordSampleWriter(0, \"./\", True, 5, \"jpg\", \"jpg\")" + ] + }, + { + "cell_type": "code", + "execution_count": 161, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 10000/10000 [00:17<00:00, 555.74it/s]\n" + ] + } + ], + "source": [ + "for i in tqdm.tqdm(range(0, 10000)):\n", + " a.write(data_source[1]['.jpg'].tobytes(), 'key', 'caption', {'meta': 'data'})\n", + "a.close()" + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 10000/10000 [00:17<00:00, 562.15it/s]\n" + ] + } + ], + "source": [ + "for i in tqdm.tqdm(range(0, 10000)):\n", + " a.write(data_source[1]['.jpg'].tobytes(), 'key', 'caption', {'meta': 'data'})\n", + "a.close()" + ] + }, + { + "cell_type": "code", + "execution_count": 98, + "metadata": {}, + "outputs": [], + "source": [ + "img = data_source[1]['.jpg']\n", + "image_data = img.tobytes()" + ] + }, + { + "cell_type": "code", + "execution_count": 87, + "metadata": {}, + "outputs": [], + "source": [ + "import tensorflow as tf\n", + "import PIL" + ] + }, + { + "cell_type": "code", + "execution_count": 254, + "metadata": {}, + "outputs": [], + "source": [ + "cc12m_records_path = \"/home/mrwhite0racle/research/FlaxDiff/datasets/gcs_mount/arrayrecord/cc12m/\"\n", + "cc12m_records = [os.path.join(cc12m_records_path, i) for i in os.listdir(cc12m_records_path) if 'array_record' in i]\n", + "ds = pygrain.ArrayRecordDataSource(cc12m_records)\n", + "\n", + "class ParseFeatures(pygrain.MapTransform):\n", + " def map(self, _features):\n", + " _features = unpack_dict_of_byte_arrays(_features)\n", + " image = np.asarray(bytearray(_features['jpg']), dtype=\"uint8\")\n", + " image = cv2.imdecode(image, cv2.IMREAD_UNCHANGED)\n", + " image = cv2.cvtColor(image , cv2.COLOR_BGR2RGB)\n", + " # image = PIL.Image.frombytes('RGB', (256,256), _features['jpg'], 'raw')\n", + " # image = np.array(image)\n", + " # image = (image / 127.5) - 1.0\n", + " caption = _features['txt']\n", + " return image, caption\n", + "\n", + "sampler = pygrain.IndexSampler(\n", + " num_records=8329829, \n", + " shard_options=pygrain.NoSharding(),\n", + " seed=0,\n", + " shuffle=True,\n", + " )\n", + "loader = pygrain.DataLoader(\n", + " data_source=ds,\n", + " operations=[ParseFeatures(), pygrain.Batch(1)],\n", + " sampler=sampler,\n", + " worker_buffer_size=100,\n", + " worker_count=4,\n", + " read_options=pygrain.ReadOptions(64, 100),\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 255, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 10000/10000 [00:12<00:00, 801.81it/s]\n" + ] + } + ], + "source": [ + "dataset = iter(loader)\n", + "\n", + "for _ in tqdm.tqdm(range(10000)):\n", + " batch = next(dataset)" + ] + }, + { + "cell_type": "code", + "execution_count": 226, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "SharedMemoryArray([b'\\xff\\xd8\\xff\\xe0\\x00\\x10JFIF\\x00\\x01\\x01\\x00\\x00\\x01\\x00\\x01\\x00\\x00\\xff\\xdb\\x00C\\x00\\x02\\x01\\x01\\x01\\x01\\x01\\x02\\x01\\x01\\x01\\x02\\x02\\x02\\x02\\x02\\x04\\x03\\x02\\x02\\x02\\x02\\x05\\x04\\x04\\x03\\x04\\x06\\x05\\x06\\x06\\x06\\x05\\x06\\x06\\x06\\x07\\t\\x08\\x06\\x07\\t\\x07\\x06\\x06\\x08\\x0b\\x08\\t\\n\\n\\n\\n\\n\\x06\\x08\\x0b\\x0c\\x0b\\n\\x0c\\t\\n\\n\\n\\xff\\xdb\\x00C\\x01\\x02\\x02\\x02\\x02\\x02\\x02\\x05\\x03\\x03\\x05\\n\\x07\\x06\\x07\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\xff\\xc0\\x00\\x11\\x08\\x01\\x00\\x01\\x00\\x03\\x01\"\\x00\\x02\\x11\\x01\\x03\\x11\\x01\\xff\\xc4\\x00\\x1f\\x00\\x00\\x01\\x05\\x01\\x01\\x01\\x01\\x01\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\t\\n\\x0b\\xff\\xc4\\x00\\xb5\\x10\\x00\\x02\\x01\\x03\\x03\\x02\\x04\\x03\\x05\\x05\\x04\\x04\\x00\\x00\\x01}\\x01\\x02\\x03\\x00\\x04\\x11\\x05\\x12!1A\\x06\\x13Qa\\x07\"q\\x142\\x81\\x91\\xa1\\x08#B\\xb1\\xc1\\x15R\\xd1\\xf0$3br\\x82\\t\\n\\x16\\x17\\x18\\x19\\x1a%&\\'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz\\x83\\x84\\x85\\x86\\x87\\x88\\x89\\x8a\\x92\\x93\\x94\\x95\\x96\\x97\\x98\\x99\\x9a\\xa2\\xa3\\xa4\\xa5\\xa6\\xa7\\xa8\\xa9\\xaa\\xb2\\xb3\\xb4\\xb5\\xb6\\xb7\\xb8\\xb9\\xba\\xc2\\xc3\\xc4\\xc5\\xc6\\xc7\\xc8\\xc9\\xca\\xd2\\xd3\\xd4\\xd5\\xd6\\xd7\\xd8\\xd9\\xda\\xe1\\xe2\\xe3\\xe4\\xe5\\xe6\\xe7\\xe8\\xe9\\xea\\xf1\\xf2\\xf3\\xf4\\xf5\\xf6\\xf7\\xf8\\xf9\\xfa\\xff\\xc4\\x00\\x1f\\x01\\x00\\x03\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x08\\t\\n\\x0b\\xff\\xc4\\x00\\xb5\\x11\\x00\\x02\\x01\\x02\\x04\\x04\\x03\\x04\\x07\\x05\\x04\\x04\\x00\\x01\\x02w\\x00\\x01\\x02\\x03\\x11\\x04\\x05!1\\x06\\x12AQ\\x07aq\\x13\"2\\x81\\x08\\x14B\\x91\\xa1\\xb1\\xc1\\t#3R\\xf0\\x15br\\xd1\\n\\x16$4\\xe1%\\xf1\\x17\\x18\\x19\\x1a&\\'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz\\x82\\x83\\x84\\x85\\x86\\x87\\x88\\x89\\x8a\\x92\\x93\\x94\\x95\\x96\\x97\\x98\\x99\\x9a\\xa2\\xa3\\xa4\\xa5\\xa6\\xa7\\xa8\\xa9\\xaa\\xb2\\xb3\\xb4\\xb5\\xb6\\xb7\\xb8\\xb9\\xba\\xc2\\xc3\\xc4\\xc5\\xc6\\xc7\\xc8\\xc9\\xca\\xd2\\xd3\\xd4\\xd5\\xd6\\xd7\\xd8\\xd9\\xda\\xe2\\xe3\\xe4\\xe5\\xe6\\xe7\\xe8\\xe9\\xea\\xf2\\xf3\\xf4\\xf5\\xf6\\xf7\\xf8\\xf9\\xfa\\xff\\xda\\x00\\x0c\\x03\\x01\\x00\\x02\\x11\\x03\\x11\\x00?\\x00\\xfd\\xfc\\xa2\\x8a(\\x00\\xa2\\x8a(\\x00\\xa2\\x8a(\\x00\\xa2\\x8a(\\x00\\xa2\\x8a(\\x00\\xa2\\x8a(\\x00\\xa2\\x8a(\\x00\\xa2\\x8a(\\x00\\xa2\\x8a(\\x00\\xa2\\x8a(\\x00\\xa2\\x8a(\\x00\\xa2\\x8a(\\x00\\xa2\\x8a(\\x00\\xa2\\x8a(\\x00\\xa2\\x8a(\\x00\\xa2\\x8a(\\x00\\xa2\\x8a(\\x00\\xa2\\x8a(\\x00\\xa2\\x8a(\\x00\\xa2\\x8a(\\x00\\xa2\\x8a(\\x00\\xa2\\x8a(\\x00\\xa2\\x8a(\\x00\\xa2\\x8a(\\x00\\xa2\\x8a(\\x00\\xa2\\x8a(\\x00\\xa2\\x8a(\\x00\\xa2\\x8a(\\x00\\xa2\\x8a(\\x00\\xa2\\x8a(\\x00\\xa2\\x8a(\\x00\\xa2\\x8a(\\x03\\xf3\\x12}\\x14\\x95>X9\\xcf\\xa5g\\xde\\xe9\\xd3C\\x9c\\xa6}\\x87z\\xee_J\\x00eTT2\\xe8\\x91K\\xfe\\xb61\\x9e\\xdcW;\\x84JSg\\x9eK\\x08c\\x89\\x10\\x8ej\\xa5\\xdd\\x8a\\x9c\\x98\\x86\\x0f~s^\\x81w\\xe0\\xf8\\'\\x19\\x11\\xe0\\xf6\\xc0\\xac\\x8dC\\xc17\\x11\\x8f6\\x01\\xd2\\xb3pE\\xaa\\x8e\\xe7\\x0f4\\x170\\x9c\\x15\\xe3\\xb1\\xcdG\\x8692\\x12\\x06+r\\xee\\xd2\\xe2\\t\\x0crA\\xc8\\xeeEej\\x8d\\r\\xb4\\x0f,\\x92\\xa4`u\\xdep\\x05\\'\\x1b\\x1a)6T\\x9aT#\\x19\\xc5g\\xdd\\xdd\\xaclB\\x1a\\x82[\\xf6\\xbb$\\xda\\xdc\\xc7\"\\x83\\x82Q\\xc1\\xfeU\\x12E,\\xcd\\xb1\\x81\\xaeJ\\x92\\xbb\\xb1\\xbccm\\xc57\\xbb\\xf8\\xdc=\\xcdG$\\xbb\\xf8\\xfdj\\xc8\\xd2f\\xc8\\x18\\xe6\\xa7\\x87I\\xf9rG#\\xda\\xb3\\xe5l\\xab\\xa4f\"I\\xb8`\\xf1\\xefV \\x87\\xb1\\xc1\\'\\xa5_\\x16\\x01\\x0e6\\x13\\xf8S\\x85\\xa8\\xdd\\x8d\\xbcw\\xaa\\x8d)\\\\\\x974S019\"\\x8f!\\xb6\\xe4\\x81\\x9fJ\\xb6\\xd0*\\x9c\\x8e\\x98\\xa3\\xcbP7\\xd7D`\\x91\\r\\xdc\\xaa\\xb1\\x13\\x9c\\xd4\\x91\\xc3\\x8e*P\\xa1F\\xd3J\\xaawm\\xc6\\rj\\x95\\x84$Q\\x12A\\xcdXH3\\xd4\\nj(\\x18N\\xfe\\xb54`/?\\x85)\\x01$P\\xa8\\x0418\\xa9\\x161\\xbb\\xa9 Q\\x1a\\xf9\\x83\\x03\\xa7J\\x96\\x18\\xfem\\xa4\\xf7\\xac\\xa6\\xc6\\xb7,[)\\x03\\x84\\xe6\\xad\\xc2\\x1c\\x9e\\x00\\xfaTv\\xb1\\xed\\xe0\\x01\\x9fSVUX\\x1c\\x91\\xf4\\xac\\x84\\xf5\\x168\\x98\\x8eMXH\\xcf\\xa526\\x07\\x8c\\x0f\\xce\\xa4Y\\x0f\\xf0\\x8eiip\\'\\x8a2\\xa0/\\xe7S\"\\x022\\xd8\\xfaUo5\\xc7-\\x8cR\\xac\\xe3\\x04\\x92H\\xa6\\x05\\xb2\\xc0\\x0f\\xbf\\xc58J\\x08\\xeb\\xf8W)\\xe3\\x9f\\x12x\\xa7B\\xd2\\xd2\\x7f\\nxRMR\\xe2I\\xc4e\\x04\\xa1DJs\\xfb\\xc2\\t\\xcb\\x01\\xe89\\xe6\\xb3\\xbe\\x12_\\xfcc\\xf1\\n6\\xb1\\xf1\\n\\xdfN\\xb2\\x82@D6v\\x89\\xb9\\xd4\\x83\\x8c\\x97\\xdc}\\x0f\\x18\\xe3=\\xe9)%+\\x15\\xca\\xeds\\xd0\\xa2a\\x9ejp\\xe0.\\x00\\xaa\\x88J\\x8cg\\x9f\\xa5K\\x199\\xdd\\xbb\\x8cs\\xcdk\\xa9/DfO.~\"\\xe9\\xea[\\xefh\\xd7Y\\x1f\\xf6\\xd6\\n\\xdc,@ \\x1e=+\\x9e\\xbb\\x91\\x17\\xe2N\\x9cH\\xff\\x00\\x985\\xdf\\xfe\\x8d\\xb7\\xad\\xef5$lc\\x02\\xb4\\x83Z\\x91\\'uc\\xbbm7\\'\\x01p}\\x85Ft\\xff\\x00,\\x12R\\xbaqmcp>\\\\u\\xedQ\\\\\\xe9\\x00\\x12@\\x0c;W{I\\x9c\\xb6\\xd4\\xe5\\x05\\xad\\xc8\\xeb<-\\x9e\\xa8P\\xae?\\x1c\\x9f\\xe5U\\xaf\\xb7\\xda\\xc5\\xba\\xe2\\xd5\\x82\\x9e7/\\xce?N\\x9f\\x8e+\\xa3\\xbb\\xd3\\x90\\xe7\\xe5\\xfa\\xf1YwZl\\x81\\xb7 #\\xd0\\xd4\\xbaW\\xd8g\\t\\xac\\xe9\\xebx\\xed=\\xae\\xd2\\xa7\\xae\\xd3\\x91\\\\\\xd7\\x88|\\x0b\\xa4j\\xda=\\xe5\\x96\\xb5jLS[H\\x86m\\xe5\\x1a\\x12T\\x81\"\\xb7\\xf0\\xb2\\xf5\\x07\\xa7\\xaf\\x19\\xaf^\\xb6\\x89D\\x99\\xbf\\xd3\\xad\\xae\\x97\\xa1\\x17\\x11s\\x8f\\xf7\\x86\\x18~u{X\\xfd\\x8e\\xfcY\\xf1\\xa6\\xce-WD\\xf0\\x8c_c\\x0e\\xea\\xb0OzR1\\xf2\\x8e\\xa2F\\xc9\\xc9=pk\\x9a\\xb4\\xa5\\x04\\xd5\\xaf\\xe87>]R>[\\xf85\\xf0R\\xcb\\xc2\\xde\\x05\\xd3\\xa4\\x8f\\xc4\\x97Z\\xc8\\x92\\xc6#\\x05\\xe5\\xc3n\\xc2\\x95\\x0cUNX\\x95\\xde\\\\\\x8c\\xb3\\x10\\x0e3\\x81\\x8a\\xeaO\\x84.cp\\xc2\\xd0\\xa0\\x1f\\xc5&G\\xe9\\xd7\\xf9W\\xbb\\xf8\\'\\xf6}\\xf1\\xcf\\xec\\xcd\\xa67\\x855\\x0f\\x83Q\\xbe\\x91\\xa89\\x8e\\x19,LM\\xf6YNJl\\x91I\\n\\x84\\xf0T\\x85\\xe0\\x93\\x96\\xed\\xc7\\xf8\\xd2\\xda\\xfe\\rE\\xad\\xaf\\xf4\\x9f\\xb0\\x9d\\xd8Ta\\x9c\\xff\\x00\\xc0\\xba\\x1f\\xc2\\xb8\\xe8\\xca2|\\xbc\\xb6\\xb7s\\xa1\\xd5\\x94\\xfd\\xe6y\\xac\\xb6R[\\xfc\\xb2*\\xb0\\xcf\\\\`\\x8ad\\x9a\\x7f\\x96w\\xa1\\x1f\\x85tZ\\x8e\\x87\\x14\\x85\\xa4\\xc9\\xcf\\xadfKb\\xf0\\xb7RG\\xa1\\xad\\x9c\\xb9Qi\\xa6e4#\\xa1O\\xc6\\x98\\xf0\\xe4\\xe0\\x7f*\\xd0\\x96<\\xf2W\\xa7j\\xaf \\\\\\xe0\\xf1\\xe9MI4;\\x14d\\x8c\\x9c\\x829\\xedLX\\x8e2p*\\xc4\\xc0.I\\xfd*\\x1d\\xc0\\xa6*\\x95\\x84Dc!\\x89\\xa4\\x0e\\xa8r?\\x95$\\xb36v\\xa9\\x1c\\xf7\\xa8\\xbc\\xc1\\xd0v5d\\xa9&\\xcb*\\xc1\\x86\\xec\\xf2=jX\\xc8\\x03\\xf1\\xaabp\\x0f4\\xf4\\xb9\\xcf\\x19\\xa9\\x91F\\x8cn\\x08\\xe35<2\\x00wdqY\\xd1\\xdd\\x05^\\x0e3S%\\xc8R0\\xd8\\xf6\\xacf4\\xae\\xcd\\x98\\xa4l`\\x1cT\\x82m\\xa7\\x04\\xe4\\xd6Tw\\x9d\\xcb\\x11\\xf4\\xa9\\x16\\xf9GV\\xe7\\xe9Y\\x8f\\x94\\xd6\\x8eBy*3\\x9e8\\xa9\\x91\\x8e\\xec\\xe0`\\xfa\\xd6\\\\z\\x82\\x91\\x9c\\xf4\\xa9\\xe3\\xbf\\x04p@\\xfch\\x15\\x9a4\\x95rr[\\xe9NU\\x8dFI\\xe0u\\xac\\xf1z\\x14|\\xc4S\\x96\\xf89\\xc9~\\x07\\xb54\\x9b\\x11\\xa5\\x08G!\\xca\\xf4\\xfb\\xa0\\xff\\x00:\\x83\\xc3\\xb7*\\x9a,A1\\xf7\\x9f\\xff\\x00C5[\\xfbU\\x07\\xca\\x1a\\xa8xsT_\\xecX\\x8bH0K\\xf7\\xff\\x00l\\xd5%\\xefh\\x16\\xd0\\xe8\\xfe\\xd5\\xce3\\xd7\\xb5I\\xf6\\xa2\\x84\\xe5\\xbf\\n\\xc6]Z,`KK\\xfd\\xa8I\\xf9A?E\\xabH\\x96\\xc9&G\\x9f\\xc6\\xf6\\xda\\x80\\x9d@\\x87I\\xb8R\\xa4\\xf2\\xdb\\xa5\\x83\\xa7\\xe5Z\\xabxUs\\x8a\\xe4\\xee.\\xee[\\xc6\\x96\\xad\\x1c-\\xff\\x00 \\xab\\x81\\xf7\\xc0\\xff\\x00\\x96\\xb0v\\xefZ\\x82\\xe6\\xf0\\xfd\\xe0\\x00\\xf74\\xa3t\\xd8\\xe5\\xaaGW\\xa2\\xfcP\\xf1\\x05\\x86\\x16I\\xe3\\xbaA\\xd4H6\\xb0\\xfcG\\x1f\\xa5u\\xdaO\\xc5}2\\xe5B\\xdfy\\x96\\xcd\\xff\\x00MW+\\xff\\x00}\\x0e+\\xc8/<1\\xe2\\x8b\\t\\x10\\xe8\\x9a\\xa8\\x962N\\xf4\\xbf_3`\\xc7PF\\x18\\xf3\\x8e\\xadW-\\xaf\\xf5k#\\xb6\\xebNn:\\xb4\\x0f\\xb8\\x1f\\xc0\\xe0\\x8f\\xd6\\xa9U\\xabM\\xd8q\\xa5Jh\\xf7k]GM\\xd5\"Y!\\x9d\\x1c\\x1f\\xe2V\\x074\\xe9t\\x86\\xb8\\x89\\xda\\xd0\\xa9`\\xb9\\x1b\\x86G\\xe9^/a\\xe2\\xa8\\xa0\\x90}\\x9a\\xe0\\xc3/\\xa4lcb\\x7f\\xdd8\\xcf\\xe4ksF\\xf8\\xcd\\xaai\\x17C\\xce\\x99f\\x00\\xe1\\x95\\xc6\\xd6#\\xf9~\\x95\\xd1\\x1cl>\\xd2\\xb1\\x0f\\r+\\xe8\\xce\\xde=\\x0bS\\x8a\\xe4]]_\\xf49A\\x12b\\xbb\\x9f\\x87?\\x19\\xfc_\\xf0\\xf1^\\xd7Fu\\x9e\\xdd\\xdb2[\\\\\\xa9e-\\xd3#\\x04\\x10\\x7f\\x1a\\xf3\\r/\\xe3\\xde\\x8fs$67\\x9aco\\x0c@\\x04\\x83\\xc1\\xad\\xcb/\\x16\\xe9\\xfa\\x98W\\xb7\\xb1\\x08Y\\x88\\xc9a\\xd3\\xf2\\xa9u)T\\xf8\\x07\\xec$\\x9f\\xbc\\xce\\xcb\\xe2\\xbf\\xed\\x07\\xe3\\xcf\\x88\\x1aI\\xd0\\xd8CclHfK<\\xabH\\xc0\\xe4e\\x89\\'\\x00\\xfd?\\x1a\\xf1\\x9f\\x11M\\xa9j(\\xd1^\\xde\\xb4\\x84\\x8ce\\x86s\\xfe5\\xd9\\xdej\\xf1O\\x19\\x1fg\\x84\\x1fV\\xe7\\xf1\\xaeoW\\x8a\\xdaF2Ip\\x99?\\xdcAI\\xd2\\x94\\x9d\\xe4\\x85xGfy\\xde\\xa1\\xa7\\xf8\\x8e\\xc6l\\xe9\\xf3+\\xa1<\\x82\\xc3\\x1f\\x88=?\\nI\\x95\\xc4Jn\\x8ay\\x9b~}\\x83\\x8c\\xfbf\\xba\\x9b\\xeb[\\x15$\\xeec\\xef\\x8a\\xca\\xb9\\x8e\\xc8p\\xb6\\xdb\\xbd\\xcd\\'E\\xdfQ{C\\x98\\xb8\\x0b\\x9e\\x16\\xa8\\xcf\\x1b\\x92JD\\xc7\\xf0\\xae\\xa2\\xe0\\xa08H\\x14b\\xa8\\xce\\xcex\\n\\x01\\xa5\\xec\\xe2\\xb7\\x0fh\\xcenXn\\x88\\xcf\\x92\\x7f*\\x85\\xad\\xee\\xd7\\xaaq[\\x97q\\\\>pq\\xf4\\xc5S\\xfb\\x14\\xc4\\xfe\\xf5\\xff\\x00Z\\xa4\\x92\\x17;3\\x06\\x9du.X\\xb2\\x81\\xd6\\x90\\xe9N\\xc7\\xe6\\x9c\\x02=\\x16\\xb5\\r\\xba/@~\\x99\\xa64\\x00\\xf3\\xb3>\\x95<\\xc8\\x14[\\xd4\\xcb}4F\\xbb\\xdas\\xf4\\x15\\x8b\\xa9kGN\\xbckWQ\\xb7\\xa8l\\xd7S=\\xba\\xb81\\xb2\\xf0\\xc0\\x82+\\x8b\\xd4,\\xe5\\xbb\\xbd\"t\\x07\\xcb%G\\xbdaVrL\\xda\\x11\\xd0\\xbdo\\xe2\\x08X\\x06\\xe4\\xfb\\xd5\\xb4\\xd67\\x8c\\xa2\\x1f\\xcb5\\x9ba`\\x11\\x82\\x85Q\\x9fZ\\xe9t\\xbf\\x0e\\xdd\\xdcD$H\\x98\\xafM\\xc1:\\x9a\\xc7\\x99\\xb7\\xab.\\xc54\\xd4.X\\x1d\\x91\\x1fn*X\\xa5\\xd4$\\xf9\\xb0\\x05n\\xd9\\xfc9\\xf1-\\xf5\\xb9\\xba\\xd3\\xfc?{q\\x1e\\xecy\\xb1Z1\\\\\\xfdq\\x8a\\xb3a\\xf0\\xd3\\xc6\\x17w\\x11\\xd9\\xc1\\xe1\\xbb\\x8d\\xee\\xc1Q]\\xd1rO\\x1d\\xda\\xaa\\xd0\\x8e\\xec-\\'\\xb1\\x85m\\x05\\xfb\\x1c\\xb4\\xca\\x07\\xe3W\\xa0\\xb3|\\x8d\\xd7?\\x92\\xd6\\xae\\xb3\\xe1\\rW\\xc2Z\\xbc\\xba\\x16\\xbbh\"\\xb9\\x84\\r\\xe8\\xb3+\\x8c\\x11\\x91\\xca\\x92)\\xb0\\xdbFp6\\x0c\\xfd+e(\\xb5tCM=J\\x8bdX\\x85\\xf3\\x9c\\x92;\\n\\x95l\\x14.\\x00s\\xef\\x9a\\xb1\\x1ayrJ\\xdd\\xc2\\x0f\\xebRCky\"\\x06k\\xc3\\xc8\\xe7b\\x01\\xfc\\xf3O\\x9bQ\\x15\\x06\\x9e3\\xcc\\'\\xf1jn\\x8d\\xa2\\xc9k\\xa7\\xc5\\x0c\\x91\\xa0m\\xbb\\x89\\xf6o\\x98~\\x86\\xb4\\x97H\\x91\\x892^\\xce\\xd9\\xed\\xb8/\\xf2\\x02\\x9b\\xa6\\xe8\\xb1Ol\\x8d,\\x939\\x03o3\\xb8\\xe9\\xc7L\\xe3\\xb5\\'\\x7fh\\xbf\\xae\\xc1u\\xca5l\\xd9F\\x06?\\x05\\xa9<\\x88\\xa3\\x19\\x96\\xe9Tw\\xc9\\x02\\xad\\xa7\\x86t\\xf3\\xcbY#\\x1f\\xf6\\xc6\\x7f\\x9d\\\\\\xd3|/\\xa7\\xc2\\xe5m\\xf4\\xd8S\\'?$ s\\xeb\\xc5]\\x9b\\xd8\\xce\\xea\\xe7.\\xe7J\\x9f\\xc5Vw\\x11\\xdf\\xc7\"\\xad\\x85\\xca\\xb3G( \\x12\\xf0\\xf1\\xc5k\\x17\\xd3\\x87\\xdcI\\x18v+\\x0b\\x9f\\xe4+\\xa0\\x1e\\x19\\x99\\xf5\\x8bb\\x91\\r\\xc2\\xdal/|e\\t\\xfd\\x14\\xd5\\xa94\\x19S;\\xe3\\xfd*b\\xb7\\xfe\\xbb\\x17\\xd8\\xd6\\xf1\\xff\\x00\\x874\\xcbm|\\xe8\\xfaLOm\\x14\\x91!\\x19\\xcb\\x14-\\xdc\\x02s\\xf9\\xd6\\xca|\\n\\xbb\\xb8\\xb4Yt\\xcdj\\xde]\\xc3\\xe5K\\x9513\\xfe\\x1f0\\xfdEW\\xf1\\xfd\\xa3C\\xe3\\x98mQ0Z8\\x00\\x05\\x08\\xeb\\xecy\\xafQ\\xf0\\xb6\\x93w=\\x92\\x98c;z3 *\\xbf\\x8b\\xb7\\'\\xf0\\xae\\x9eX9\\xb4\\xcc\\xa3t\\x95\\x8f\\x1b\\xd7\\xbe\\x08\\xf8\\xa2\\xda6K\\xff\\x00\\r\\xb4\\x8a\\x07>Z\\t\\x06?\\xe0;\\x85|\\xe5\\xf1\\x8a\\xc7\\xc7\\xbe\\x03\\xf1$\\xa6\\xc6\\xf2\\xe2\\xce\\x05\\xbb\\x8a;hT,\\x91:\\xbe2\\xcc\\xad\\x9c`\\xe7\\x80A\\xe2\\xbfE,\\xb4;\\x7f+o\\xdaY\\x80\\xea\\xb0\\x8d\\xaa\\x0f\\xb9<\\x9a\\xf9\\xfb\\xf6\\x9d\\xf0\\xce\\x9f\\xe2\\x1f\\x13Im{!\\x91\"\\x8e%M\\xeb\\x9d\\xb8\\x94\\xe3\\x1f\\x99\\xae,e(B\\x84\\xa6\\x9e\\xc7n\\x1aR\\x95h\\xc6\\xdb\\x9e\\r\\xf0\\xd2\\xff\\x00^\\xd7t\\x1d7\\xc4\\xfa\\xec\\xb1\\xbd\\xc4\\xac\\xe2O\\xb3FcQ\\xb6FN\\x85\\x8f\\xf7}k\\xd9|<\\x1a+\\x15\\xcb\\x1c\\xe3\\x1c\\x9e\\xe7\\xadr>\\x00\\xf03i^\\n\\xd3\\xedF\\x1c\\'\\x98K\\x01\\x8e\\xb21?\\xce\\xa7\\xf0\\xdf\\xc7?\\x85z\\xa7\\xc5\\xcb\\x9f\\x80\\x8b\\xe2\\x16\\x83\\xc5V\\x88\\x8c\\x9am\\xc5\\xac\\x88n\\x83Bff\\x89\\xb1\\xb5\\x95Prr9\\xe0g\\x07\\x1c\\xf8:\\x8b\\x96-\\xf57\\xc4R\\x92\\x94\\x92\\xe9s\\xd0cB\\xb1v\\xe9\\xd8U\\rC$\\x1f\\x9b\\x9fz\\xb5\\xab\\xdf\\xa6\\x87\\xa5\\xdc__F\\xd8\\xb7\\x85\\xa4`\\xa3\\x92\\x00\\xcf\\x15\\xccM\\xabj\\x9a\\x86\\xa15\\x9c\\x13Z\\xc6\\xf0\\xf2\\xeb\\xe7\\x86e\\x07\\xa6q^\\xc2\\x9ah\\xf2\\x9ah\\xb1x1\\xfc]\\xeb:EV\\x0c1\\xd6\\x99se\\xe2I>\\xf5\\xfd\\xb8\\xcfM\\xaaO?\\x9dy\\xbf\\xc5o\\x88\\x1e-\\xf8w\\xe3/\\x0chK=\\xbd\\xc4:\\xed\\xd4\\xf1NLD\\x18\\xf6D\\\\\\x10s\\xea=:TNj1\\xbb\\x12M\\xc8\\xefn\\x117u\\xaaS\\x18\\xf9\\xcb\\xd6+i\\xbe#\\xbd\\xd1?\\xb7\\xef\\xfco\\xf6h\\x8d\\xb0\\x9eA\\x05\\x82\\xfe\\xedq\\x93\\xcb1\\xcf\\x1e\\xd5\\xe7\\x1f\\x0b>1\\xe9\\xdf\\x14V\\xacd\\xa0\\xb7;\\tS\\x03 qP:\\xed?7~\\xb8\\xabn\\xa7\\x8d\\xdcU{\\x85\\xe7\\'\\x1c\\xd5\\xa6hEn7\\xdeDz\\x02\\xe2\\x9d\\xf0\\x96\\xc7D\\x9f\\xc7wq\\xeb\\xfa|76\\xc2\\xdel\\xa4\\xd1\\x86\\nr\\x00l\\x1e\\xe2\\x8bU\\xc5\\xecm\\x8e\\x8e\\t\\xab\\xbf\\x084G\\xd6\\xbcsyc\\x1ba\\x9e\\xd6b\\x98\\x1c\\x8c\\x10\\x7f\\xa5a\\\\\\xd6\\x92\\xbb:M3\\xc5\\xbe\\x1f\\xf0\\xe5\\xec\\xb6\\x91i\\xf6\\x11\\xcdo1F\\x0b\\n\\xf5S\\x8fJ\\xf4\\x8f\\x87_\\xb5\\x1f\\x85\\xbc(n\\'\\xd6\\xbe\\x1bh\\xda\\xd5\\xc4\\xaa\\xa2;\\x8b\\xa8\\x86\\xf8\\xc0\\x18\\xc0%O\\x1e\\xc3\\x15\\xe4~-\\xf8Wu\\xa4\\xfcC\\xbd\\xd3/\\xda\\x1dAc\\x98m\\xbb\\xb0c\\xb2U\\xc0\\x00\\x8e88\\x1c\\xfb\\xfa\\xf5\\xafY\\xf8C\\xf0\\xbf\\xe0\\xf4\\xfau\\xd4\\xde4\\xd3\\xf5;\"\\x91\\x01\\x07\\xd9m|\\xf3#s\\x9c\\xb3\\x10\\x07l\\x0cz\\xf3\\\\\\x1c\\xd5/\\xa7\\xf5\\xf7\\x9d\\x9c\\x90\\xb6\\xa7\\x1b\\xf1\\x0f\\xf6\\x98\\xd6u}B\\xea\\xe7L\\xb4\\xb6\\xb0\\x86\\xe2R\\xff\\x00c\\xd3\\xe0\\x11D\\xbc\\x01\\xc0\\x03\\x93\\x809=j\\x0f\\x85\\x1e6\\xd65-K\\xfboSa\\xcc\\x9e]\\xa2\\xb7@z\\x17\\xfdp?\\x1a\\xb9\\xe2\\xef\\x86z,\\xae\\xe3I\\xf0\\xb9\\x81W;e\\x96L\\xb3{\\x90\\x08\\x00\\xfb\\n\\xc2\\xf0g\\x87.\\xbc5\\xe2\\x00\\xf7.L9\\xe2.\\x83vx\\xeei\\xa6\\xf9\\xd5\\xc5\\x18\\xa5\\x16_\\xf8\\xbdl\\xc9\\xe3\\xc9\\xcc\\x8eK\\xb5\\xb4\\x0c\\xec{\\xb1A\\x93\\\\\\xfcv\\xd8#\\x9c\\xfb\\xd7K\\xf1Jt\\xbd\\xf1\\xc5\\xc4\\x91\\x90@\\x82\\x15\\xc89\\xfe\\x01X\\xd0\\xc1\\xd8/5\\xe8S\\xf8\\x11\\xc5S\\xe2)Kd\\xd3\\x0b\\x98\\xc7\\x05\\xa1\\xc0\\xf6\\xe0\\xd5\\xdd\\'F\\x86\\xd6\\xdda\\xb7\\x8c\\xaa\\xf5\\xc1bz\\xfdj[{`f\\x9c\\xe7\\xa4k\\x9e?\\xde\\xad[K]\\xa8\\x00\\x03\\xa5i\\x18\\xa92\\x1e\\xc4\\x10\\xe9\\xe1\\xba\\xafJM\\x1fM1\\xd9*c8f\\xff\\x00\\xd0\\x8du~\\x0f\\xf0V\\xaf\\xe2\\xedZ\\r\\x13C\\xb2k\\x8b\\xab\\x96\\xdb\\x0cJ\\xc0\\x168$\\xf2H\\x03\\x81\\xd4\\xd7K\\xe2O\\x80~;\\xf8w\\xa5[\\\\\\xf8\\xbbD\\x16\\x82\\xe1\\x9cF\\x16\\xe29ps\\x9c\\x12\\x84\\xe0\\xe0\\xd5Y)\\n\\xde\\xe9\\xc0\\xdb\\xe9\\xa5\\xd8q\\x8czWM\\xe0\\xaf\\x08\\xb6\\xbf\\xe2\\x0b\\x1d\\x1e.\\r\\xd5\\xdaD\\x08\\x1d7\\x1cg\\xf5\\xa8\\x05\\x8a\\xc0\\xdc\\x8a\\xdf\\xf0V\\xb9\\x17\\x85|K\\xa7\\xebo\\x01\\x91mo\\x12R\\x80\\xe0\\xb6\\xd3\\x9c{t\\xad\\x0c\\xed\\xefj}a\\xa1\\xfc\\x0b\\xf8M\\xa0\\xacf\\xcb\\xc0zkK\\x1a\\x05\\x173\\xdb,\\x92\\x9c\\x0c}\\xe6\\xc9\\xf5\\xfc\\xeb\\xe7\\xff\\x00\\x8e\\x9f\\x0ft\\x8f\\x0ex\\xe3Q\\xb1\\xd2l\\x92\\x1b}\\xeb$Q \\xc0P\\xca\\x18\\x81\\xed\\x92k\\xd2\\x9f\\xf6\\xc1\\xd0\\xbc\\xbf\\xf4_\\x07\\xdc3\\x0e\\x9ee\\xd2\\xa8\\xfd\\x14\\xd7\\x95|G\\xf8\\x89/\\x8e|As\\xaf=\\xa8\\x80\\xceWlA\\xf7\\x05\\x01B\\x81\\x9e3\\xd2\\xaa\\xab\\x8b\\x8f\\xba\\xb5&<\\xefvr\\xbe6\\xd3\\xa0?\\x11 y#?*\\xc1\\x84(W\\xbf\\xa6I\\xafT\\xd1!3[!\\xdd\\x1eA\\xf9N\\xf3+~C\\x81^[\\xad2j^3\\x8a\\xe6\\xdd\\x06\\xd0\"\\x1f*\\xed\\xc6\\x0f\\xa1\\'\\x1f\\x9dz\\xd6\\x8d\\x7f\\x12X\\xaa\\x9b\\xdcr@V\\x9e4\\x07\\xfe\\xf9\\xe4\\xd4\\xa9\\xafk+\\x9bF\\x0f\\x913Z\\xda\\xdeD\\x1b\\xe7\\x8d\\xba\\xf0\\xf3`\\x0f\\xc1ExG\\xc7\\xeb\\'\\xbe\\xd7\\xee\\x12\\xceH\\xdeY\\'\\x8dc3\\xc8\"L\\xf9\\xc3\\x00\\xb1\\xe1G\\xb9\\xe0W\\xd0z\\x1cv\\xd2\\x02$\\xd4-\\xc9#\\xf8r\\xe7\\xf3\\xaf\\x15\\xf8\\xe5\\xe1&\\xd7\\xefu\\x16K\\xeeRE\\x03\\x7f\\x19!\\xd5\\xb8\\xfc\\xeb\\x9b0\\x9a\\xfa\\x9c\\xff\\x00\\xae\\xe7f\\n-b\\xe0\\xce?\\xc3\\xde\\x0e\\xf1V\\x95\\xe1x-<[\\xa0\\xd8Z\\xdd\\xa3\\xb6\\xe84\\xedf+\\xd8\\x9f/\\x84Q,x\\xeb\\xf2\\xf5\\x00\\x8d\\xdd+\\xd0|\\x01\\xf0;G\\xf1\\\\\\xb1j1Ae\\r\\xda\\xc0\\xf1A\\xae5\\x92Is\\x86\\xfb\\xc6\"\\xc3\\xe5L\\xfa\\x92\\x0e\\x07\\x04`\\xd7\\x1d,&\\x01\\xa0\\xe8\\x1e`a\\xa9\\\\Ln\\x0ey\\xdb\\x00\\xdd\\xdb\\xa6w\\xe3=\\x8e+\\xdb>\\x1ejka\\x1ca\\x18p\\x07=+\\xcd\\xc2\\xb7($\\xf6G~!r\\xbb\\xf5g\\x1b\\x1f\\xec\\x13\\xadxO\\xc0:\\xef\\xfc$\\x9f\\x1f\\xb5?\\x10,\\xdb\\xee :\\xa5\\x8a\\x83i\\x1f\\x97\\xf3\"\\xb6\\xe6f\\x1d\\xfec\\xd7\\xa6\\x05x\\'\\x8a>\\x16i\\xde\\n\\xd4o\\xb4\\xbf\\x06\\xea\\x82\\xd7W\\xbb\\x8c\\xdc\\xdeZ\\xc9!y\\x1c\\x10\\x1c\\xec-\\x9d\\xa7\\x04`t\\xe4t\\x15\\xf6\\xb7\\xc4\\x0f\\x19\\xef\\xf8}\\xac[\\x99>\\xf6\\x95p8?\\xf4\\xcd\\xab\\xe5\\x7f\\x1b\\xf8yn|k?\\x8b4\\xbf*\\xfe\\xfbO\\x8cG\\x1d\\xa6\\xf2\\x8d\\xe6In\\xa7\\xe7bq\\xb7k\\xf6\\x1dEu\\xd4\\xa8\\x95H\\xc2\\x0b\\xcb\\xcf\\xce\\xc75\\n*\\xa5)\\xca\\xab\\xb5\\xb5\\xf2\\xbe\\x96\\xbf\\xdep\\xff\\x00\\xd9^\"\\xd3\\x99d\\xf1&\\xabk\\xf6X]|\\xc6Q\\xca`\\x1e2\\xc3-\\x96\\xdb\\xc8\\xc7S\\xe83\\xe4\\x1f\\xb4\\xce\\xa9\\xa0k\\xbf\\x11~\\x1e\\\\\\xe87\\xe9:&\\xabx\\x92\\x98\\xd8\\xfc\\xad\\xf6W8 \\xf2\\x0f\\x15\\xec\\x1e\\x10\\xfe\\xdd\\xf1\\xbf\\xf6\\xd7\\x86<|\\xf6\\x89uep\\x89t\\x96\\x0cP&\\xf8\\x8b\\x1c19\\xf9r0\\xd8\\x1c\\x8c\\xd7\\x88\\xfch\\xd1\\xbc+\\xa2\\xf8\\xd7\\xe1\\xf6\\x9d\\xe1x\\xee\\x18&\\xb3rnng\\r\\xfb\\xe7k9\\x8eF\\xee\\xb8\\xc7^\\x9d1\\x9a\\xd9\\xce\\xf4\\xd7.\\xcf\\xbb\\xd7O\\xeb\\xe4p:N2|\\xdd;-5\\xfe\\xb4\\xee3\\xe2\\x1f\\x8b\\xbe<\\xdb\\xf8\\x87E\\xf0\\xd7\\xc3M\\t\\x97Mm:\\'\\x92\\xeaKa$S1\\x031\\xb1\\xdaq\\x80\\x08\\xea0\\t=\\xaa\\x87\\x88\\xfe\\x1b\\xf8\\xa7\\xc3?\\x12b\\xbe\\xf8w\\xa1\\x1b9n\\x9c\\xc9$\\xb01ee\\x04\\x06\\x1b\\x8eB\\xe0\\xb0\\xc8\\xc6\\x08\\xeak\\xd2\\x8e\\x99\\xf1\\x17P\\xf0\\xd9\\x8fI\\x86\\xda;E\\xb5\\xb5[\\t\\xd6b%I\\x19\\\\;\\x10\\x0e8\\xc8\\xe3\\x9e\\x14\\x9es\\x8a\\xc1\\xf1\\xe5\\xcf\\x8a\\xbe\\x19\\x88\\xaf\\xed\"i\\xb6\\x97)\\xa8_\\xf8k[\\xd9\\xa8]i\\x96f\\xe1\\x82\\xee\\x16\\xcb\\x11\\xc3\\xc8\\x07v\\xda\\xf8\\xe9\\xc6\\xdf\\xadw\\xd7\\xd7\\xe7S\\xd3.4\\xe1>\\xd1<\\r\\x18n\\xbbw\\x023\\xfa\\xd7\\x9f-\\xe7\\x89\\xb4\\x88~\\xcb\\xa7x\\x1a\\xce7\\x11\\x08\\xa5\\xba[\\xb6/:\\xa8\\xdb\\xf3dt \\x9c\\x8fS^\\x82\\x8d9K\\xde9#S\\xd9\\xc5\\xb4\\xf78/\\x85\\x9e\\x1a\\xbb\\xd4\\x1fV\\xba\\xd4uK\\x8f\\xed\\x19di.\\x16\\xe62\\xa1\\xd6D8\\xe4\\x1d\\xa7 \\xee\\xc8\\xc9\\x01\\x94c\\x00g\\x82\\xfd\\xa4\\xbc;\\x16\\x87\\xe3o\\x87\\x16\\xcdm\\x1cr\\x7fm\\xde4\\xde\\\\\\x8c\\xf9cg1\\xfb\\xcd\\xcb}x\\xfaW\\xa7\\xf8\\xb5\\xc6\\r\\x02\\xfak\\x8cA+;J\\x1e\\t\"\\x0b\\xc8\\x18\\xe5\\xf3\\x9fj\\xd2\\x9c\\xadK\\x91/C\\x8a\\xb5\\xa5>{\\xeb\\xd4\\xbfm\\xa3\\xde\\xeb\\xfe\\x0f\\xb1\\x82]Bx4\\xebX-\\xe6\\x95b\\x90\\xa3N\\xd8\\x95v3\\x0e@\\x00\\xa9\\xe0\\x8a\\xf9\\xeb\\xe2W\\xc7\\xaf\\x14i^7\\xd55_\\x00\\xf8f-LGx\\xdat:c\\xa7\\xc9\\xe4\\xa4bV\\x94\\x81\\x82\\xd9\\r\\x90\\x07v\\xf6\\xafs\\xb7\\xd7>(h\\x9a\\x0c\\x9e\\x18\\x1e\\t\\xd3\\xee\\xa2\\xf2\\xd5\\x04\\xe3R*\\xce\\x14\\x1eq\\xb7\\x8e\\xb5\\xc1\\xe9\\xbe\\x0e\\xf1\\x0e\\x85t\\xb7\\x92\\xfc\\x1c\\xb0\\xba\\x9cA$R\\xde\\x1dT\\t\\xa5F\\x91\\x9dT\\x9d\\xb8P\\xbb\\xb6\\xfb\\x80=1N\\xa3m\\xab#\\x18$\\x9d\\xdb9\\xaf\\x0ex/\\xe25\\xd0\\xd1~3\\xfc/\\xf1u\\xcd\\xa5\\x9e\\xb1\\x142\\xeb^\\x14\\xd6\\xe7-\\x1cP\\x13\\xfb\\xd5\\x89\\xd4`\\xba\\x82\\xdbw\\x0f\\x9b\\x03/\\x8cc\\xb3\\xfd\\x9bdF\\xf8ok\\xb5\\xf2\\x0c\\xd3\\x1c\\xe3\\xaf\\xef^\\xa5\\xd3\\xfcI\\xe3m#M\\x8f@\\xb4\\xf8D \\xb4\\x82\\xdb\\xc9\\xb7\\x11j\\xd1\\x90\\xa3\\xd3\\x04\\x0fZw\\xc1\\xcf\\r\\xeb\\x1e\\x0b\\xf0]\\xb6\\x8f\\xad\\x84\\x17\\n\\xce\\xd2*\\x1c\\x81\\xb9\\xd9\\xba\\xfe51pu\\x12\\xf2-E\\xa8\\xdc\\xef^R\\x13\\x83\\xcfzib\\xc79\\xe3\\xd2\\xa9\\xb5\\xd1\\x081\\xde\\x9bs\\xa8Kij\\xf3\\xa2o*\\xb9\\n;\\xd6\\xdc\\xacF\\x95\\x88&\\xfa?\\xf7\\xf8\\xa3I\\xb8\\x1ao\\x88nn\\xf7m+\\x1c\\x9c\\x83\\x8e\\xd5_\\xc2z\\xb0\\xd5\\x9a\\xd6\\xf4[4BV\\x04$\\x9fy}\\x8f\\xbdC\\xaf\\xdc\\xfd\\x95\\xef\\xe5\\xde\\xab\\xc3\\r\\xccp\\x06x\\xac\\xeaiJEC\\xf8\\x89\\x1a\\xbf\\x10\\xfcB\\x976^\\x07\\xb4l\\x83o,\\x8c\\x08<|\\xd7\\xad\\xfe\\x15\\xde|7\\xd7\\xfc\\xaf\\x19\\xac\\x84\\x92\\x10J\\xc7\\x9fHX\\xd7\\x89\\xf8\\xdfX\\xb9{\\x8f\\t\\xc6`X\\xe2\\x0c@\\x90\\x93\\xb9\\xc8\\xbbbF\\x08\\xc6\\x06\\xe1\\xc8\\'\\xa9\\xe9\\x8e{\\xbf\\x08k\\x8fa\\xaf\\xdd]n\\x8f\\xf7qJ\\x0f\\x99!Q\\x86\\x88\\xa99\\xc1\\xe7\\x07\\x81\\xdc\\xf1\\x91\\xd6\\x9e\\x9e\\xd6\\x8d\\xbb#I+R\\x9f\\xcc\\xfb\\xcf\\xc3\\xda\\xfc\\xd0\\xf8_OQbH\\xfb*\\x10\\xdeh\\x15\\xf1\\xaf\\xed\\xc3\\xe29\"\\xf8\\x8b\\xa7]@\\x83\"\\x1b\\x8e\\x19\\x80\\xc2\\xfc\\xc4\\x8f\\xe9_Wi:\\xce\\x97\\xff\\x00\\x08\\xf5\\x8c1\\xea6\\xe0\\xfd\\x8a,\\x8f=\\x7f\\xb8=\\xeb\\xe2\\xcf\\xdb*\\xc4x\\xdf\\xe2\\x1a\\xe8v\\xba\\x8bA,6S\\xbc\\x12\\xa0\\x0c\\x03\\xab\\x8d\\xb9\\x1d\\xd7\\x9e\\xd8>\\xf5\\xe8\\xe3\\':XY\\xca+T\\x8e\\x1c,!S\\x11\\x18\\xcfk\\xeay\\x9f\\xecA9\\x7f\\x86\\x1a\\xa3\\x82?\\xe4q\\xd6\\x0eA\\xce\\x7f\\xd3e\\xafjI\\x1c\\xb0\\x04w\\xaf*\\xfd\\x94\\xbc\\x07}\\xf0\\xdf\\xe1\\xfd\\xef\\x86\\xf5MI.\\xe7}r\\xee\\xeaIc\\x88\\xa0\\xcc\\xd24\\xb8\\x00\\x92F7\\xe3\\xf0\\xafU\\x88\\x8cc\\x15\\xe5`y\\xa3\\x84\\x82\\x92\\xd6\\xc7f*1\\x96\"\\\\\\xbb\\\\\\x93L#\\xed\\x97Q\\x9f\\xf9\\xe3\\x1f\\xf3z\\xd7\\x88\\x03\\x9e;\\xe6\\xb14\\xe9Uu+\\xa0\\x7f\\xe7\\xde3\\xfa\\xc9O\\xf1g\\x8c|;\\xe0_\\x0f\\xdd\\xf8\\xb3\\xc5z\\xb46\\x1au\\x94FK\\xab\\xb9\\xdb\\n\\x8b\\xd3?\\x99\\x03\\x03\\x92H\\x15\\xd2\\xe7\\nqr\\x9b\\xb2W\\xd4\\xc5E$t0\\xb2\\x820{\\xf6\\xf4\\xabp\\x9cc\\x04b\\xbc\\xcb\\xe1\\x87\\xed-\\xf0k\\xe2\\xd6\\x9bq\\xabx\\'\\xc7V\\xb3\\xc3h\\xa5\\xa7k\\x95k}\\xa8\\t\\x05\\xff\\x00z\\x17*\\x0fR2\\x07z\\xec\\xf4/\\x1dxC\\\\\\xbe\\x1af\\x91\\xe2\\xad>\\xee\\xe4\\xa6\\xef\\xb3\\xdb^\\xc6\\xef\\xb4u;T\\x93\\x8a\\xe5\\xa5\\x98\\xe0q0R\\xa5R-=\\xac\\xd6\\xa0\\xa7\\x06\\xb4gJ\\x87\\xf7`~\\x14\\xf2H\\x9e\\x10O\\xfc\\xb5?\\xfa\\x03TV\\xc7\\xe5\\x00\\xf4=\\xaaW O\\x03\\x1f\\xf9\\xec\\x7f\\xf4\\x06\\xae\\x97\\xb1ks\\x96\\xf1\\x17\\x8c\\xfcW\\xe2?\\x17M\\xf0\\xcf\\xe1\\xabGmuk\\x12K\\xabkw0\\x89\"\\xb2V\\xce\\xd4T\\xfe9[\\xa8\\x04\\x80\\x00$\\xf5\\x15\\xb2\\xff\\x00\\x0c\\xbcKw\\xa2\\xdbi\\xd2\\xfcZ\\xd7\\x92\\xe2\\t\\x03\\xb5\\xec\\x0bl\\x8f/<\\x86\\x1eQR\\xa7\\xa61\\xc5g\\xfc2\\x8aC\\xe3\\x7f\\x18\\xde<.\\x12MN\\x00\\x8e\\xcap\\xd8\\x84d\\x03\\xdc\\x0c\\x83\\xc7\\xadw7:\\xc6\\x99\\xa5$O\\xa9j0[\\xac\\x8f\\xb1\\x1ayU\\x037\\\\\\x0c\\x9eO\\xb5L[dJn/\\x95\\x18_\\x11\\xca\\xdax\\xd2H\\x84~_\\xc8\\x87h\\x8bf:\\xf6\\xc9\\xc7\\xe7^\\xa9\\xe1E\\xbb\\x93A\\x8aI\\'\\xb8)\\xce\\x19\\x929\\xd7\\xf3^k\\xc3\\xfcK\\xafX\\xea:\\xb4\\x9a\\xd5\\xd5\\xccV\\xf0\\xf07\\xc8V0\\x00\\xef\\x80H\\x1dz\\xf4\\xad[\\xdf\\xdaC\\xc3:\\x0e\\x8b-\\xae\\x81\\xafX\\xc9z\\x8b\\x88\\\\\\xd9\\xb3\\x0c\\xfb\\xb4\\x0c\\x7f\\xf4\\x1a\\xb8W\\xa5\\n\\xd3\\x94\\x9e\\x8c\\xb7F\\xa4\\xa9\\xa4\\xba\\x1e\\xd2b\\xb7\\x97>TV\\xf38\\xea\\x12F\\x89\\xbf#_:~\\xd7z\\x80\\xd3ui\\x19\\xe3x\\xf3i\\x16\\x16F\\xc9\\xff\\x00Y\\xfa\\xd4\\x1a\\xc7\\xed\\x8d\\xaei\\xd7\\x86\\xe7\\\\\\xd7^h\\xcd\\xb3\\xca\\x960Z\\x00\\xa64,2Y\\xd5J\\xf0T\\x90\\x18\\xb08\\xed\\x8a\\xf2m_\\xe2\\xa0\\xfd\\xa4\\xbe*\\xdexn\\xe5.,,\\xed4\\xb8\\x9e\\xe6t\\x9b\\xcdc\"\\xb2?\\x96\\xaa\\xccvq\\'\\'$\\x1e\\xc3\\xd7\\x1cv&\\x95|4\\xa9\\xc3\\xe2z#\\\\$%F\\xbcjOdE\\x17\\x88\\x92_\\x8c~\\x05\\x81[\\xa6\\x9b\\xab\\x13\\xff\\x00|i\\xc3\\xfa\\xd7?\\xe1\\xbf\\xdb\\xe3H\\xf0g\\xc5\\x0b\\xfd\\x03\\xe2w\\x8a\\xb4\\xd7\\xd1\\xe6\\xd5%\\x8a\\xde\\xe2 \"m65r\\xaa\\x1f\\'2t\\\\\\xe0\\x127\\x13\\xd0b\\xbd\\x03X\\xf0w\\xc2\\x1f\\x02\\x88>$\\xea\\xc3[\\x96_\\x0e\\xd8\\xdd\\x94\\x92{\\xf8\\xa3\\x85c\\x91a23a3\\x80-\\xd0\\x8ex\\xf9\\xbdk\\xf2\\xa7\\xe3\\xaf\\x8an>&x\\xae\\xe6\\xfa9#\\'U\\xbci T\\x8cp\\xb3M\\xb9FH\\xc9# g\\xbe:s^^\\x17\\x0bV\\x9a\\xe5\\x9e\\x8d\\x1e\\x86#\\x17N\\xa4\\xaf\\rQ\\xfa\\x91\\xe2?\\xdb7\\xc5ZO\\xc47\\xbek\\x9b\\xab{\\x1bks\\x0f\\xf6yh\\xc5\\xa0%r\\xae\\xe7\\xcb\\xde\\xbc\\xed\\xf9\\xb7\\x1e3\\x85\\xa9m\\xbf\\xe0\\xa004\\xd3i\\xde-\\xf0i\\xb0\\xb9\\xb6\\x07\\xed\\x91\\xb5\\xda\\x1d\\x84rq\\x95\\x19\\x18\\xe7>\\x95\\xf3\\xd7\\xc7}n8|P\\xf6\\x11]\\xc8\\xd0\\x1c\\xac\\xd1\\xdb\\x9f\\x9flcs\\x1c\\xa8\\xe3\\xe5\\r\\xcf`=\\xab\\xc1\\xae\\xfcis\\xf1\\x83\\xc2\\xb3\\xcfmp\\xf6\\xfa\\xe7\\x87d\\xfd\\xda\\xc8\\xc4}\\xa2\\xd7;@|c%T\\xfe\\x01\\x88\\xe3\\xcb\\xaf\\xcfs\\xfc\\xeb:\\xcb\\xb10\\x96\\x1a\\xb5\\xa2\\xaf\\xcc\\x9aMk\\xb7\\x9a\\xdbF\\x9e\\x9dV\\xc7\\xdadYVY\\x99a\\xa7\\x1a\\xf4\\x9f5\\xd7+M\\xad\\x97\\xbdml\\xda\\xbd\\xedk\\xbe\\x8fF~\\x8c|\\x1f\\xfd\\xa3<%\\xf1jMv\\xe3G\\x98\\\\%\\xb6\\xa2\\x9e\\\\\\x97\\x16\\xea\\x17cD6\\x84\\xfcU\\x89\\xfa\\xd7I\\xaf\\xf8\\x97I\\xd34\\xdb\\x8dcR\\x86\\x08\\xed\\xed\\xe1ifq\\x10\\xe1Td\\x9e=\\xab\\xe2\\x7f\\xd8@Mc\\x06\\xb7\\xa2[\\xf8\\x80\\xc6\\xd1Io#o\\x83y$\\xab/\\x03r\\xed\\x03o@03^\\xcb\\xfbIx\\xbfP\\xd0\\xfe\\x1e?\\x87\"\\xd7\\xc4\\xf7\\xba\\xa5\\xbb:\\xa2\\xdb\\xec\"(\\xe4\\x8f\\xcc<\\xb1\\x1f\\xc6\\xa3\\xe8O\\xa5}f\\x07>\\xa9\\x0e\\x13\\xfe\\xd1\\xaa\\xd4\\xa7\\xca\\xdd\\xedd\\xdd\\xda^\\x9a\\xd9\\x1f3\\x8c\\xc9\\xe2\\xf8\\x93\\xea\\x10\\x8b\\x8cy\\x92\\xb5\\xee\\xd2\\xb2o_K\\x9d4\\x1f\\xb4o\\xc2/\\x15\\xf8J\\xfbW\\xd3\\xb5\\xebK+\\xabH\\x7f\\xd2\\xado\\x1dR[ge%w\\x0c\\x90s\\xd7##\\x15\\x1d\\xff\\x00\\xc6\\xcf\\x82\\xcdbo\\xe0\\xd7\\x03!Pc-\\xe6\\r\\xf9\\xe9\\x8e\\xc75\\xf0\\x8b\\x7fo\\xfcU\\xf1\\xc4?\\x0c,\\x04\\xd6\\xd6l\\x92]k\\x17\\xc3\\xab[\\xa1\\x1b\\x80\\xeeY\\x89T\\x04\\x8e\\x99=\\xabw\\xe2\\xfe\\xa1\\xff\\x00\\x087\\x83\\xb5}r\\xd2r\\x91iV&8\\x15_%\"@B\\xb0\\xc9\\xf9\\x98/\\xa9\\xe4\\xf3\\xf5\\xe1\\xe1\\xee!\\xcd\\xb3\\\\*\\xa9\\x89\\x8cR\\xd95\\xf6\\xad\\xbc\\xbc\\xae\\xf6F\\xf9\\xf6I\\x97\\xe5x\\x9feFN\\xfb\\xb4\\xfe\\xcd\\xf5J\\xfdl\\xba\\x9c\\xaf\\x8a\\xbfo\\xef\\x16x\\x9b\\xe26\\xb1\\xa2x\\x97Q\\xbe\\xd0\\xd6\\xca\\xe6H\\xdfO\\xd3/\\x1eHcQ\\xf2\\x85\\x0c\\xa7,r\\x0ey\\xc6O\\x1cp$\\xf8\\x13\\xfbbx\\xab^\\xf1\\x84\\xfa\\'\\x85\\xf5\\rR\\tl\\xacD\\xd7I\\xa9N$\\x8aV-\\xb7n\\xcd\\xc7\\x1e\\xb9\\xc8>\\x95\\xf2\\xb2\\xebz\\xb6\\xb3,\\x9b\\xb5\\t\\x1aW\\x90\\xb4\\xd2\\x02\\xc3\\xccs\\xcb\\x0c\\x90GV\\xe9\\xff\\x00\\xd7\\xae\\xaf\\xf6r\\xd4\\x9fD\\xf1\\xe5\\xdd\\xcf\\xd9.\\x1a;\\xa8\\xa3G\\xbd\\xb7\\x88\\xb0\\x88!\\'\\xe6\\xe3\\x90\\xdb\\x80\\xf6\\xc6k\\x97\\x89\\xb8w\\x0f\\x87\\xc2b3:5&\\xab%x\\xfb\\xee\\xd1\\x95\\xf5\\xb2\\xfb\\xf4=\\xde\\x11\\xe2lV;\\x1f\\x85\\xcakS\\xa7\\xec\\x1b\\xb4\\xbd\\xc5y+u\\x7f-\\xf7?M>\\x0e|c\\xff\\x00\\x85\\x93\\xe1\\xdf\\xed+\\x98c\\xb7\\xb9\\x8ag\\x8ax\\x16\\\\\\xfc\\xcb\\x8c\\x91\\x9eG^\\x86\\xb6n\\xfe+\\xe9:n\\xa1\\xabi\\xad2\\xbc\\xba]\\x92L\\xc9\\x92\\x0b;G4\\x9b?\\xef\\x88I\\xfck\\xe7\\xbf\\xd9\\xb2\\xefP\\xb7\\xf1L\\xdaq\\xbd\\xb71\\xddJf\\x86S8\\x01\\x9b\\x00l\\xed\\xce\\x00\\xc6@\\xe9X\\x1f\\x1d>*\\xc7\\xe0\\x9f\\x8b~&\\xb7\\x8a\\xedDZ\\x86\\x80.\\xe2\\x90\\x10\\xc0\\xb4V\\xf2\\xdbc\\xf1\\xf3%\\xff\\x00\\xbe}\\xab\\xd8\\xe1l\\xf5\\xe6y\\x15:\\xb5\\'\\xcd5\\xee\\xc9\\xe9\\xba\\xef\\xf9\\x9e\\x07\\x19\\xe4\\xf0\\xc8\\xf3\\xea\\xb4a\\x1eZm\\xf3G\\xb5\\x9foM\\xbeG\\xd8\\x9e\\x08\\xf1\\xde\\x9f\\xad\\xf8\\x85,\\xa3\\x91AV\\x88\\xaa\\xe7\\x92Y\\x11\\xcf\\xe0\\x04\\x89\\xf9\\xd4\\xbf\\x13n\\x8c\\x1a\\x0e\\xad>8\\x08r\\x7f\\x11^\\x07\\xfb-\\xf8\\xeeo\\x12\\xfch\\xf1J\\xc9*\\x94\\xd3\\xf5\\x8bK\\x0bu\\xcfO,\\x18$\\xfc\\xfc\\x845\\xed\\x7f\\x19\\xaf\\x84\\x1e\\x0b\\xd6\\x9eW\\xda\\xbeX\\x05\\x82\\xe7h.\\xa38\\x1dz\\xd7\\xd39\\xfbL4\\x9f\\xa9\\xf3\\x14\\xff\\x00\\x88\\x99\\xe5\\xad\\xe2\\xd8\\xf5?\\x8d3i1K+=\\xa4Z{\\xc8\\xa6\\\\\\xa8\\x0f4\\x98\\xc2\\xe3\\xe5\\xfb\\xa7\\'\\xbf\\xe1]\\'\\xedG\\xf1\\x83\\xfe\\x14\\xdf\\xc1\\xdf\\x11x\\xfd-\\xe4\\x98\\xd8\\xcdg\\xfb\\xb8\\x8f\\xccw\\xcf\\nq\\xff\\x00}W\\x9cx\\xe6\\xf3U\\xf8O\\xe3M\\x07\\xe2\\x1d\\xf5\\x84ri>0\\xb9\\xb6\\xb5{\\x88&>u\\x9f\\xd9\\xa6\\xc1gB>h\\xc9\\x9b\\xaa\\x9c\\x8ct<\\xe2\\xd7\\xedg\\x17\\x86\\xfe?\\xfc\\x15\\xd6~\\x15xOW7\\x17\\x9a\\xeb\\xdb\\xaf\\xee\\x90\\x91\\x0f\\x93\"N\\xce\\xfb\\xc0\\xda\\x98\\x84\\x8c\\xf2w2\\x8e\\xf4A\\xc9V\\xa4\\xfd\\r\\xdc\\xa3\\xc9+\\xf9\\x9es\\xe0\\x8f\\xf8)\\xc6\\x85\\xaaN\\xfa~\\xab\\xa1\\\\\\xdb\\xf9V\\xfed\\x93C~J\\xaa\\x0c\\x06v,\\xc3\\x00g\\xa0\\xe4\\x92\\x00\\x04\\xf1^\\xd7\\xfb8\\xfe\\xd3>\\x01\\xf8\\xdb\\xe3/\\xb0\\xf8G\\\\\\x9e\\xee[{Y\\xe4q,\\x12\\x01\\xb4\\x98\\xfa;\\x0c\\x1e\\xbd3_./\\xfc\\x13\\x0f\\xe3G\\xec\\xff\\x00\\xf0\\xebV\\xf1\\x7f\\xc4\\x7f\\x08_]xB[8\\xe5\\xd6\\xa1\\xd1\\x12\\x07\\xba\\x8e\\x06x\\xcb\\\\D\\xe5K+.\\x15\\x88\\x1dUH\\xef\\x9a\\xeb?\\xe0\\x9d\\xf6\\x1f\\x00\\xec\\xbe4\\xdc\\xcf\\xf0\\x8b\\xc4\\x9e.\\xba\\x9a=\\x1e\\xe1e\\xb6\\xd74\\xf8\\xe3\\x89#\\xf3#\\xf9\\xf7*\\xa9\\x04\\x9009\\xeas\\xda\\xbbs\\\\MjqP\\xe5\\xba}Rz\\x13\\x82\\xc3\\xe1\\xe7\\x17QJ\\xcdt\\xb9\\xf5w\\xc0\\xef\\xda\\xb7\\xe1w\\xc4{\\xfb\\xed\\x17N\\x9a\\xf2\\xd2\\xf6\\x19C^\\xc1wj\\xc3\\xec\\xa7\\x05p\\xec\\x01Q\\x92\\x8d\\x83\\x92=\\xc5z\\xc6\\xbd\\xe3\\x1f\\r\\xf8GC\\x7f\\x13x\\x9b]\\xb6\\xb2\\xd3\\xe1\\xd8e\\xbd\\xb8\\x94,h\\x18\\x80\\xa4\\xb7@\\t#\\x93\\xc75\\xf9q\\xfbJX\\xea\\xde\\n\\xf8\\x97\\xf1\\x06\\xc7\\xc3\\xf7\\x97\\x167\\x0b,\\xd705\\xbc\\xa5\\x1bg\\x9a&\\x0b\\x90z\\x15|c\\xd35\\xe9\\xbf\\xb2\\xd7\\xfc\\x14\\x07\\xc4_\\x0f?g\\xebs\\xe3a>\\xa3\\xa7i\\x0b$O\\xb6%\\x96FM\\xf9\\xd8\\xdb\\xb0Yp\\xc3\\x1f0\\xc0\\xe3\\xb5r\\xd3\\xba\\xa4\\xacc)\\xaew\\xcc}\\xf5\\xa4x\\xaf\\xc3\\xba\\xa5\\xc5\\xcd\\xcd\\x9e\\xbb\\x0b\\xc7-\\xa4/\\x14\\xd1I\\x95e\\xcc\\x98 \\x8e\\x08\\xac\\xcf\\x8b\\xbf\\t\\xfe\\x19\\xfcp\\xf0>\\xa5\\xf0\\xfb\\xc6\\xfa\\xa3O\\xa7jp\\x84\\xb9\\x87\\xedL2\\xca\\xc1\\xd5\\xb7)\\x0e\\xa42\\xa9\\xf9]zc\"\\xbet\\xf8C\\xa8x\\x0f\\xf6\\xa1\\xf8w\\xac\\xfcZ\\xfd\\x8en.\\xbc\\x15\\xe2\\x0b[\\x88\\xe2\\x97Mb\"\\xb0\\x9e}\\xc5\\xdf\\xcd\\xb6\\xc3\\xc4w\\xa6p\\xea\\xa0\\x82y<\\x13X\\x1e\\x13\\xff\\x00\\x82\\x85x\\x9b\\xc2q\\xdci?\\x1a>\\x12\\xcd-\\xe5\\x9b\\xc9\\x14\\x97:\\x0c\\x9d$@r$\\x85\\xb2\\xc8\\x01\\x04\\x16R\\xd8\\xc7\\xdd\\xa9\\x9b\\x8bN3[\\x8e\\xcbK3\\xcc~?x\\x13\\xe2\\x17\\xec\\xd3\\xa8\\xdd\\x7f\\xc2I\\xfb/\\xebZ\\xd7\\x86\\xadcqo\\xe2/\\x00\\xf8\\xa2\\xe6HL%p7\\xc5(\\xb8h98*\\xca\\x07\\x1c1\\xac\\xff\\x00\\xd9\\x17\\xe2G\\x88\\xbcM\\xaf%\\xef\\xc1O\\xd8\\xfb\\xc7\\xda\\x9cq\\xea+-\\x86\\xb1\\xe2\\x1f\\x110\\x8dJ\\xff\\x00\\x0e\\xf1o\\x14`r\\t\\xdc\\xc4c\\xf2\\xac\\xef\\x88\\xdf\\x13\\xff\\x00n/\\xdb~\\x1dB\\xc7\\xe1\\x0f\\x8c,%\\xd0\\xc4\\xbeT\\xbe\\x1e\\xf0\\x8d\\xdc-$_7\\xc9\\xe7\\x87\\x1ex9\\x00a\\x80\\x07\\xb7\\x06\\xad\\xfe\\xcdw_\\xf0Q?\\xd9&\\xf6\\x0f\\x07_xn\\xe2\\xebE\\xb9\\xba2\\xa5\\x86\\xa7\\xa7\\xc6c\\x9d\\x88PN\\xf0\\x16A\\xc0^A\\xc7#\\x8a\\xf8\\x1cN]\\x93B\\xab\\x9a\\xa6\\xd5\\x9d\\xfe\\x15ug{\\xa5k_\\xf1>\\xeb\\x05\\x83\\xc1U\\x855<5\\t>\\x8f\\x99\\xa8\\xb7\\xfd\\xe6\\x9e\\x9fz\\xf5G\\xe9\\xdf\\x804o\\x1bK\\xe1\\xebk\\x9f\\x13x\\xae\\r6\\xfaX\\xc3\\\\\\xe9\\xfa|\\xcb7\\x13\\t\\xd2\\xc5\\xca2I;\\xb5e\\xb2\\xd7\\xa3\\xbb\\xd3\\xb3\\xbb5\\xff\\x00fm+F\\xd2l5\\xab\\x8b\\x1b\\xa0nn\\xf50\\xf7\\xc8\\xed\\xcbL\\xb1\\xa6\\xf9>\\xf1\\xe5\\x99\\xb7\\x1e\\x9c\\x9f\\\\\\xd6\\xb7\\xc5\\x1f\\rxO\\xe2\\x0f\\x88\\xb4[m}\\xf5d\\xff\\x00\\x84_W\\x8bR\\x80\\xe9\\xd7\\xad\\x08y\\x82\\x8c\\x02\\x03/\\x98\\x02\\xb1\\xe0\\xf1\\x82Gs^K\\xfb,\\xeb\\xbe\\x14\\xd3/u\\x9b7\\x9fS\\xd5\\xee\\x12\\xf5\\xc5\\xd3\\xea{\\x9c\\xc3\\xf78\\x0c\\xa1X\\xe0l\\xc9\\xc9\\xceA\\xe0\\xe6\\xbdv\\xd9\\x13W\\xd6.o\\xf4h4\\xf8\\xe2\\x11n\\x86\\xccN\\xc6YX\\x05\\xc9\\xc1%\\x87\\x1cc\\xda\\xba/hhsN\\xde\\xd2\\xe7\\x0be\\xe0\\xbbX4\\xb7\\xb2d@\\xf7\\x04y\\xed\\x1ac*:\\x0c\\x92MI\\x17\\x83t\\xc8#\\xff\\x00H\\x96i\\x02\\xf6i\\x88\\x1f\\x92\\xe2\\xbai|5\\xac\\xdb\\xdc=\\xb1\\x88Hc?1\\x89\\x81\\xed\\xd7\\x9cV]\\xc5\\xe4\\x11\\xbb[\\x9b9K)\\xc1\\xf3[n\\x0f\\xa6\\x07\\xf8\\xd7$\\xbd\\xcfu\\x9d0\\\\\\xce\\xe7\\xc1_\\xb5G\\xed\\x83\\xf1\\xe7\\xe1\\xee\\xbf\\xaeiz?\\xec\\xd1\\x16\\x9d\\xa9\\xe8wR\\xd9i\\xfa\\x97\\x9a\\xd7v\\xd7V\\xb7>Z\\x82\\xce\\x816\\xca\\x7ftTd\\x8c\\xb1R\\x01\\xe6\\xbe\\x83\\xfd\\x99>-\\xf8z?\\x00x{\\xc6?\\x18\\xed|;\\xa5x\\xf3\\xc5v\\xed\\xf6\\xebI\\xaf\\x0c2\\xcd\"9\\x8bdq\\xf9\\xa7\\x1cF\\x99\\x0b\\x9f\\x9b#&\\xbc\\xc7\\xf6\\x99\\xf0\\x17\\x8b\\xfc_\\xf1;^\\x8a\\xdf\\xe1\\xcc\\xda\\x95\\x94\\xb3\\xdb\\xcbj\\xc1\\xe2\\xf2\\xcb\\xc6\\x88U\\xb0\\xf2\\x02\\x08u\\xcf=\\xc5|c\\xaa\\xfe\\xc4\\xff\\x00\\xb7\\x1f\\x8a~/X\\xde\\xcb\\xe1\\xfb\\xa6\\x84\\xea\\n\\xef\\x7f%\\xec-\\x15\\xa4L\\xc1\\xb9\\x05\\xf71S\\xbb \\x02=\\x0f5\\xe5F\\xbdjU%$\\xae\\xd7\\x7f\\xf8o\\x922\\xc6G\\x11F)\\xd3\\xf7\\xef\\xd3\\xb1\\xfb\\x1fo\\xe3\\x9d2;\\x16\\xb4\\x9f\\xc1\\xdam\\xc4r\\xa9\\x12$\\xf1\\x19\\x03\\x03\\xfe\\xfe\\xee\\xd4\\xb6\\xbe+\\xd0 \\xc2\\xc3\\xf0\\xff\\x00JE\\xec\\xb1[\\x84\\x03\\xf0\\x02\\xb8M3I_\\x0e\\xe8\\x16\\x96\\xfa\\xb7\\x8c&\\x8d\\xa1\\xb6H\\xde\\xe6\\xf2x\\xf7HB\\x81\\xb9\\x8b\\x0e\\xa7\\xa9\\xf75N\\xcf\\xc5\\xd6Z\\xb6\\xb3\\xfd\\x83\\xe1\\xef\\x19\\xc7yp\\xb1\\x97e\\x16\\xe1\\x95Tc\\xab\\x00\\x07~\\xc6\\xbd8\\xe6\\x18iME\\xee\\xcd\\x1e\\x12\\xbcb\\xe4\\xb4H\\xec\\xfcCo\\xf0\\xb3_\\xc5\\x9d\\xf7\\xc2-#\\xcc\\xb8b\\xaf:Y\\xc6H\\x05Inv\\x822\\x01\\x1d{\\xd7\\x1b\\xa2~\\xcb?\\xb2o\\x87\\xf5\\x995\\xed3\\xe0\\xac\\x11]\\xca\\x18I(\\xbc\\x90\\x82\\x18\\x10F\\xdd\\xdbz\\x12:w\\xabs/\\x8c\\xa2\\x904Z\\x95\\xae\\x14\\xe4\\x83ly\\xe3\\x1f\\xdf\\xa8\\xdb]\\xf1m\\xb3~\\xf6\\xd2\\xcaP9\\'\\xce)\\xfd\\r]\\\\>\\x06\\xb6\\xb5)\\'\\xd3X\\xa7\\xa7a\\xd3\\xc4b\\xe9iN\\xa3^\\x8d\\xa3c\\xc3\\xbf\\x06\\xff\\x00g\\xef\\nj-\\xaa\\xf8c\\xe1\\xdc\\x16\\x17.\\x9bZX\\xb2\\x0e\\xde\\xb8\\xfb\\xde\\xd5\\x99\\xf1W\\xe0?\\x80>$^Z\\xeb\\x06\\xce\\xf7\\xedvv\\xf2\\xc1o=\\xad\\xd3\\xa8Tq\\x86VS\\x95 \\x8fQ\\x9fB+sD\\xf1_\\x86\\xed\\xe2Y5=6i\\xe6\\x00o\\x0b*\\x94S\\xe8\\x07\\x7f\\xc6\\xb7?\\xe1`xjt\\xf2\\xcaI\\x12\\xf6]\\x83\\x8f\\xca\\x89\\xe5\\xb9}L#\\xc3\\xbaQ\\xf6o\\xec\\xd9[\\xee*8\\xfcuK\\xf8_\\xfb\\x11\\xfcV\\xf0o\\xc4\\xddo\\xc4W\\xba\\x96\\x8e\\xdam\\xe5\\x81\\xb4\\xb7i$s9P\\xc4\\xa9\\xc0R\\xaa\\x08f\\xdc2r@\\xf4\\xac\\xcf\\x8f\\x1f\\xb1\\x1f\\xc6\\x1f\\x1fx\\x0bW\\xf0\\xbf\\x87\\xae4h\\xae\\xaf\\xed$\\x86+\\x8b\\x9b\\xa9<\\xb1\\x94*\\t\\xc4d\\xf0\\x18\\xf6=\\x00\\xaf\\xb1\\x87\\x88<79\\x1b55R{:\\x91\\xfc\\xc52[\\xbd\\x12s\\xb55X\\x08\\xf4\\xf3\\x05r\\xe12|\\x0e\\x03\\x0f\\x1a4SQ\\x8e\\xda\\xf9\\xdc\\xd3\\x17\\x99\\xe2\\xf1\\xd5\\xe5Z\\xb3\\xbc\\xa5\\xbf\\xddc\\xf2\\x87\\xc4?\\xf0M\\xaf\\xda\\xf3\\xc2Z{\\xc1\\xa5x_H\\xd5\\x8a\\xc5\\xb1E\\x86\\xac\\x9bW\\xb9`\\xb3\\x08\\xf98\\xc5}\\xf7\\xf0\\x0b\\xe0\\xf7\\x81\\xbe\\x13|.\\xd2\\xbc1\\xe1\\xdf\\x03i\\xd6\\x07\\xfb>\\x16\\xd4\\x13\\xec\\xea\\xd2Kpc\\x1ecH\\xdc\\x97m\\xd9\\xc9$\\xfa\\x0e\\x00\\x15\\xec&\\xc6\\xc2a\\xbd&\\x8d\\xbd6\\xb0\\xac\\xef\\x11k\\xfa\\x16\\x83jE\\xf0I$pvD\\x00%\\xbf\\xc0Ws\\x8a\\x9e\\x8c\\xf3c\\xcd\\x07x\\xb3\\xe5\\x8f\\xda\\xcfL\\xf0\\xfe\\x9b\\xe3O\\x08\\xdfxs\\xc3\\xd6\\xfau\\xc4\\x9a\\x9b\\xad\\xdc\\x9adI\\x0bL\\xaaca\\x9c\\x0c1\\x1dF{\\x03_\\r\\xfe\\xd7~1:\\'\\xc4\\xa85(\\x0b\\xe6\\xebBDuf;]Z\\xe2\\xe58\\xcf\\x7f\\x9c\\x92?\\xd9\\xaf\\xd0\\xdf\\x8e\\xf6\\xde\\x1e\\xf1\\x0e\\x81}\\xe2\\xddf\\x05\\x81t\\x18g\\xbe\\xb7\\x8e\\xd5v\\x80\\xe2&\\x01\\x9b\\x03-\\x81\\x9f\\xff\\x00U~P\\xfe\\xda\\xff\\x00\\x1b4\\xfb\\xbf\\x8a)\\xe0\\xadgM\\x92\\xc9t+H\\xe3\\x8a\\xee\\x04\\x12\\xfd\\xa4J\\xab0~J\\xe0.\\xf2\\x00\\xe7\\xbf5\\xe2\\xc3*\\x95\\x0cF\"\\xa58\\xa4\\xa6\\xe2\\xd2^QI\\xe8z\\x19\\xd6cW\\x1f\\x96a\\xe9]\\xb9SMk\\xe7&\\xd6\\xaf\\xb2>\\xeb\\xff\\x00\\x82}j\\xb0j\\xdf\\x10\\xfcm\\xae[\\xb3\\xb2\\xde|S\\xbb\\x8dX\\x83\\x82\\x88\\xe5\\x86\\x0f\\xfd\\xb4\\xfdE}\\x1d\\xfbY\\xeb\\xf2\\xf8_\\xe0\\x8f\\x8a\\xf5\\xdbx\\xa3w\\x82\\xc4\\x15\\x12\\xbe\\xd0I\\x91\\x07_\\xc7\\xa7z\\xf9s\\xfe\\t;\\xae\\xdax\\xab\\xe1\\xd6\\x8b\\xa8\\xe9\\xd1\"[\\xbf\\x88\\xe7s}sp\\xab-\\xfc\\xad!w\\x99\\xa3<\\xa7/\\xb4\\x0c\\xb7\\t\\xd7\\xb5}5\\xfb]\\xeb\\x9e\\x05\\xd5~\\x12\\xf8\\xc7\\xc2\\xb7\\xba\\xa6\\x99,\\xc7By\\xe2\\xb4\\x96\\xed\\x04\\xa5\\x93k\\xa3m\\xdd\\x9f\\xe1\\x04\\x0cs^\\xc5\\x1an\\x9e\\x1b\\x91\\xf6<\\xfa)\\xc61<\\'\\xe3\\'\\xc4g\\xf8\\xa5\\xe1/\\x87\\xda\\xac\\xfaM\\xa6\\x97\\xb2)R\\x1d>\\xc3y\\x8c \\xbb\\x1f3\\xb3\\x1d\\xd29 \\xe5\\xce:`*\\xae\\x14v?\\xb3\\xad\\x83_\\xfc]\\x92\\xce\\xe72\\xa3\\xda\\\\F\\xa8\\xc7 f\\xd9\\xb8\\xaf?\\xd6t/\\xb4|3\\xf8gw\\x12\\xa8Y\\x16\\xf4\\r\\xcf\\x82v^\\x8c\\xf0~\\xbd\\x05z\\xd7\\xec\\xc9\\xa70\\xf8\\xd7\\x03*\\x96WwV\\x04\\xf4\\x06\\x12+\\xab\\xe2\\xafE\\xbe\\xc8\\xda\\xcb\\xd9T\\xf9\\x9f\\xa5^\\x1e\\x86\\xcbR\\xf0.\\x99g}k\\x14\\xd0\\xcf\\xa5\\xc4\\x92\\xc7,a\\x95\\xd7`\\x04\\x10z\\x8a\\xf8\\xa7\\xe2\\xef\\x85>\\x1b|\\x1e\\xfd\\xa8\\x12O\\x0bx;K\\xd2_[\\xd1\\xde)\\x05\\x95\\xba\\xc2\\xb7,<\\x83\\xb0\\x85\\x00g\\xd3\\xb885\\xf7\\x1f\\x82t4\\x97\\xc0ZE\\xc1\\x9b\\xe66J\\n\\xef\\xe83\\xfe\\x15\\xf0G\\xfc\\x15\\x11\\x06\\x91\\xf1O\\xc3\\xb7\\xb6\\x93\\x95\\x92\\x18\\xe5*I\\x03?\\xb9\\x83?\\xa85\\xe9\\xe29}\\x84\\xaf\\xb5\\x8e:/\\xf7\\xaa\\xc7\\xcd\\x1f\\xb7\\x8f\\xc1\\xef\\x12Y|E\\x7f\\x8bzu\\x97\\xda<7\\xac\\xda\\xad\\x8d\\xdd\\xdcG\\x98\\'6\\xe5Ud\\x1f\\xc3\\xb8*\\x00zd\\x11\\xd7\\x19\\xf9g\\xe0\\x8d\\xcf\\xf6\\x97\\xc2\\xaf\\x15x6g\\xcc\\x909R\\x84\\xff\\x00y\\x19\\x7f\\x9aW\\xe87\\xc6\\rJ\\xc3\\xe2\\'\\xec\\xfd\\xe1\\x1d&[\\xfc\\x9f\\x16x\\xefM\\xb2\\xb8\\t\\x90\\xdf0ec\\xc8\\xc6x\\xcf~M|\\x1b\\xe1\\xef\\x86\\x9e/\\xf8s\\xf1\\xa3\\xc76v\\xda,\\xb3xm..\\xa2\\xb6\\xd6\\x19\\xd0,\\xe6+\\x95\\x8f;wn\\x07,GN\\xbf\\x9dy\\x10\\x92I\\xc7\\xb1\\xbdh\\xbenn\\xe4\\x1f\\xb1\\xbf\\xed\\xad\\xf1[\\xf6Z\\xf0\\x87\\x894\\xff\\x00\\x87\\xba\\x0c\\x9a\\xab\\xde_ZI5\\xa4v\"\\xe0\\xa2\\xa2\\xcc\\xa5\\xf6\\xe4\\x102T\\x12\\x0fq[\\xbf\\x10\\xbf\\xe0\\xa8\\xfaO\\x8c\\xaf\\x86\\xaf\\xf1\\x1b\\xf6r}\\'[k\\x90\\xf2\\xeb\\xfa=\\xac\\x96\\xb2J:0\\x96&fII\\x1f\\xc4\\n\\xb7\\x1dH\\xe2\\xbcK\\xe1\\xef\\x87\\xfcy\\xa8\\xfcb\\xd4>\\x1c\\xfc7\\xbb\\xb3\\xb7\\xd5\\xf5f\\x9a\\xde\\xcb\\xed\\xeeV\\x16!\\x84\\xb8b\\x01#*\\x84\\x03\\x8e\\xa4R|i\\xfd\\x9f\\xff\\x00j\\xff\\x00\\x04M\\xf6o\\x1f\\xf8\\x0bN\\x99d\\xcf\\x975\\xb5\\xea4r\\xff\\x00\\xba\\xc5\\x87\\xe5\\xd6\\xb6\\xe4\\xa77\\xefu3N|\\xbal}1\\xe1\\xcb_\\x83\\x7f\\x1e\\xf4\\xd5\\xf8\\x8d\\xf0\\xf6\\xeaK]AQL\\x9a\\xb6\\x94\\xedmw\\x01\\xe87\\x94\\xc3/ \\x8c7\\x15\\xd9x3\\xc5\\x1f\\xb4\\xff\\x00\\xc1\\x9dHk\\xde\\x12\\x96?\\x88\\xfa\\x06\\x9ftf\\x1e\\x1c\\xf1\\x06\\xa1\\xf6K\\xc2X\\x0c\\xb2\\xcd\\x19\\xd9#|\\xa3\\xe7q\\xc9Q\\xc5~xx7_\\xf8\\xed\\xf0c\\xc4\\xab\\xe2_\\x06\\xd9^i\\x17H\\x08f\\xb4\\xb9VW^\\xea\\xeb\\xb8\\xab\\xa9\\xfe\\xeb\\x02+\\xeb\\x0f\\xd9\\x87\\xf6\\xe3\\x8f\\xc4o\\x0e\\x9f\\xf1R\\xce\\xdfK\\xbe\\x82\\\\K,\\x8f\\xb2)\\x81\\xc8\\x0c\\xb9\\xfb\\xa4n\\xc1\\x1e\\xdf\\x85s\\xd5\\xc3\\xa4\\xae\\xd72EB\\xb4\\x9a\\xb3v>\\xd2\\xf0g\\xfc\\x14\\xab\\xf6@\\xd4\\xf4\\xd8\\xe2\\xf8\\xddi\\xac\\xfc>\\xd5\\x82\\x03>\\x8f\\xe2;{\\x99\\x15N\\xed\\xbf,\\x90\\x86\\x0c\\xb9\\xee\\xc1r\\x088\\xae\\xf6/\\xdb\\x8b\\xf6\\x10\\xd5t{\\x8d\\x0bO\\xf8\\xe7\\xe1X-\\xef\\xa2hn!{\\xaf)YY\\n\\x9c\\x87\\x03\\xb1\\xaf\\x12\\xf1W\\xc3\\x8f\\x04|J\\xd0b\\xbe\\xd4tm3W\\xb0\\x98\\x07\\x86G\\x86;\\x88I#=y\\x00\\xfe\\xb5\\xe5\\x9e,\\xfd\\x97~\\x1a+\\x17\\x8b\\xe1\\x8e\\x8aN\\t\\xc2\\xe9\\xe8\\xb9\\xfcT\\n\\xaeh\\xb4]\\xd9\\xf5\\xf7\\xec\\xeb\\xfbS~\\xcc\\x9a\\x1e\\x97\\xaa\\xaf\\xfc4W\\x84\\xd5/\\xb5O6\\x1bI\\xb5\\xcbh\\xfc\\xb5\\x11\"\\xa8\\x19\\x94\\x93\\x8c\\x1eORMw\\xf3\\xfe\\xd3?\\x07uK\\xc9\\xact\\x9f\\x8a~\\x1a\\xbb\\x86I#d{mz\\xdd\\xcf\\t\\x82\\x14\\xab\\x9cu\\xe7\\xfd\\xd1_\\x9f:\\x1f\\xec\\x97\\xf0\\x1bQ\\xfd\\xc6\\xb9\\xf0\\xb2\\xda\\'o\\xeeI,\\x7f\\xfa\\x0b\\x8a\\xd9O\\xf8\\'\\x17\\xec\\xe9\\xe2\\x1cIm\\xe0I\\xad\\xc7yb\\xd5\\xeeF?\\x03!\\xcdR\\xe4\\x92\\xb5\\xd9\\x9c\\xa5g\\xaa>\\xe5\\xd7>8kw\\xd1\\x16\\xb9\\x85\\xf2\\x0eUV\\xe0\\x05?\\x82\\xb7\\xf4\\xaefo\\x89\\xf7\\x1aln\\xf0i\\x92 f2d\\xea\\x8f\\x8c\\x93\\x93\\xfc~\\xa4\\xd7\\x91j~#\\xd6\\xe2\\x91\\x95&l\\xb1\\xcb\\x10F\\x07N\\xf5\\x81\\xabx\\x87_\\x99\\x91%\\x91\\x8b`gk\\x1c\\x1f\\xcc\\xfa\\x7fZ\\xf9\\xf9\\xe2\\xaaI\\xdd\\xb3\\xe8cB\\th\\x8f`\\xbd\\xf8\\xd9\\x1b^\\x1f\\xf8\\x97\\xabn\\x7f\\xf5\\x8ft\\xe7\\'\\xfe\\xfa\\xfdk\\'V\\xf8\\xcbe9)&\\x97m/\\xcb\\xc9\\x92v#>\\x98\\xdf\\xcdx\\xd6\\xb1\\xe2k\\xdb(B\\xb3\\x95\\xdd\\xc18\\xe4\\x1f\\xc3\\xda\\xb8M{\\xc7\\x1a\\x86Z\\x01\\x0b\"\\xe3\\xe5<\\x8e9\\xf5\\xac\\xf9\\x94\\xf7\\x1f\\xb3\\x8cOt\\xd4\\xfe2\\xe9\\x96\\xc0yz\\x0e\\x80\\x8c\\xccv\\x89-\\x17q\\xc7pJ\\x9f\\xeb\\\\\\xee\\xa1\\xfbP\\xeb\\xbal\\xed\\x1e\\x9d\\xaei\\xf6c\\x03\"\\xd6<\\x9cv\\x1c\\x04\\xc5|\\xff\\x00\\xaa\\xea\\x9a\\xae\\xa8\\xc6Y.Y\\x18\\xb7\\xee\\xdc7\\'\\x9f\\xd3\\xf0\\xac+\\xdbMN)I\\x9a\\xe9\\xd5F~\\xff\\x00\\\\z\\x7f\\x9c\\xd6\\xb0\\x82\\x8e\\xda\\x19\\xceW\\xdc\\xf7\\x8dO\\xf6\\xa5\\xf1\\x85\\xda\\xe1\\xbcq!,\\x08P-\\xb0O\\xb67\\xf1YO\\xf1\\xa3\\xc4Z\\xac\\xb1\\xa9\\xf1=\\xf4\\xad\\'\\x0c\\x1aUM\\xbf@\\xa3?\\xadx\\xad\\x8c\\x00K\\xb0\\xce\\xef#0X\\xa2E.\\xcc\\xc7\\xb0\\x1f\\x8d{\\xff\\x00\\xc1o\\xd8\\xa3\\xe2\\x7f\\xc4\\t\\xed\\xb5/\\x11\\xc9\\x1f\\x85\\xf4\\xe9\\x14\\x157eZ\\xea`y\\x01a\\xdc\\x19\\x7f\\xe0[}\\xb3Z\\xb8\\xca]Y\\x974V\\xad\\x1d\\x0f\\xc0_\\x1ej\\x1a\\xc7\\xc4\\xfd:\\xda\\xc6\\xea\\xeeY\\x92|\\xcc\\xa2\\xe6G\\xfd\\xde\\xd3\\xbf*X\\x826\\xe7\\xaf\\xb7q\\x9a\\xfaj_\\x10\\xda#|\\xe92\\xfb\\xb4\\x0e?\\xa5y\\xf6\\x81\\xe0\\x7f\\x04\\xfe\\xcdW2h\\xde\\x1d\\xf8k\\xad\\xdf\\xcd$j\\'\\xd7!\\xb6Y\\x9al\\x9f\\xbb\\x9d\\xc3h\\xcf\\xf0\\x80:s\\x9e\\xb5\\x1d\\xc7\\xedQ\\xf0\\xa6\\xc5A\\xf1\\x10\\xd6\\xb4\\x86<\\x1f\\xedO\\r\\xdeD\\xab\\xf5s\\x16\\xc1\\xf9\\xd7E\\x17*1\\xb5\\xcc*\\xb8\\xd4\\x95\\xd2;\\xef\\xf8H\\xb4\\xf9\\xa4\\xda/\\x90g\\xb1\\x93\\x07\\xf2\\xa6I|\\xae\\x08I\\x83\\x0ff\\xae?G\\xf8\\xf7\\xf0C\\xc5\\xae-t_\\x8a\\x1e\\x1f\\xba\\x95\\xb1\\x8bq\\xa9\\xc5\\xe6\\x7f\\xdf\\x04\\xee\\xfd+\\xa0K\\r\\x02\\xf1D\\xb0\\xc7\\x03n\\xe8\\xd1c\\x9f\\xc4Wj\\x9c\\xd7S\\x95\\xc4\\x96\\xe2\\xed\\xc6\\xef,\\x95n\\x83i\\xac\\xcb[\\xfb\\x89\\xae\\xda\\xd6Y\\x8c\\x92\\xaeH\\x05\\xb2@\\xfa\\xfdj\\xd4\\xfe\\x1b\\xb1\\x963\\xe5\\\\\\xce\\x84\\x8e\\xa9r\\xdc~f\\xa9Z\\xa5\\x87\\x85\\xedd.\\xcd$\\x92HDa\\xdf2L\\xde\\xe4\\xf3\\x81\\xfa\\nU*\\xa5\\x1b\\xcbA\\xc6\\x17v[\\x98\\x1f\\x14\\xf4v\\xf1\\x07\\x82\\xb5/\\x08[\\xde4\\x17\\x1a\\xdd\\xa4\\xd6\\xc2tP\\xc6\\x14a\\xb4\\xbe\\t\\x00\\xe3w\\x1e\\xa4\\x8e\\xd9\\xaf\\xc6\\xcf\\xf8(\\x9f\\x80a\\xf0O\\xc6\\xc5\\xf0\\xc7\\x86\\xbcV\\xba\\xf1\\xb4\\xb1\\x10^\\xde\\x05ee\\x91\\x1d\\x94\\xa3\\x16\\xe1\\xd8t%I^1\\x9c\\x83\\x8f\\xd4O\\xdb\\x03\\xe3\\xe6\\xaf\\xf0\\xf3\\xc3W>\\x12\\xf0n\\xa7oq\\xe2\\x0b\\xcbY\\x1eV\\x0c\\xaa\\xdam\\xb9S\\x89\\x02\\xe7v\\xe6\\xe8\\xbd\\xb8$\\xe7\\x18?\\x94_\\x19\\xe4\\xd4u\\xbf\\x1cK5\\xfd\\xb4\\xcd\\xe5\"\\xa2\\xc9(f\\xdf\\xdd\\x88=\\xfeby\\xa8\\xc3b9\\xab^O\\xd1\\x18c%N\\x92P{\\x9f^\\xff\\x00\\xc1=\\xbfi\\xcf\\x0e|+\\xf0\\x9f\\x82\\xfc\\x1d\\x7f\\xf0\\xf6\\xfa\\x7f\\xb1\"\\x13sk}\\x19\\x12\\xc8\\\\\\xb3\\x12\\xa5F\\xdeN:\\x9e\\x95\\xe9\\xbf\\x15\\xbco/\\x8e|W\\xaex\\xbbQ\\x8be\\xc5\\xfcr~\\xec\\x10DQ\\x90\\x02\\xa0\\xc7e@\\x17\\xf0\\xaf\\x94\\x7fdi\\x04\\xc9\\xa5\\xc3yf\\x02\\xdb\\xea\\x81awLd\\x13\\xb8\\xf5\\x19\\xe0\\x93_K5\\xa3\\xeaZ\\xc4\\xd1\\xc1 f\\xf2\\xcf\\xc8Gz\\xe8\\xaa\\xe3wa\\xd3\\xd5#\\xd3\\xa4\\xf1\\xa7\\x835\\xcf\\x06\\xfc?\\xf0\\x83]\\\\\\xae\\xa1\\xa1M\\x1b\\x97\\xc2\\xdam\\x8a\\xea\\xb0\\xa3\\xc3e\\x1a\\xb2\\xc8\\xc8:\\x01\\xea\\xd5\\xf0\\xef\\xfc\\x14\\xb3Q\\x87X\\xf8\\x95\\xa2\\xdc[\\xbcw+,S\\x85\\x03\\xe6R@OC\\xfeqV!\\xf8\\x9d\\xa3hP,\\x1a\\x96\\xb5s\\x06\\x17\\x84\\x92\\xd9gO\\xae\\xe0\\x7f\\xa5y\\xaf\\xc7\\xbf\\x1exC\\xc4ZE\\x8e\\xb9w\\xaeE\\x11\\xd3f\\x94g\\xcb!Ye\\xda\\x01\\xe0\\x0cr?_j\\xf51)\\xfd^V\\xec\\xce\\n_\\xc4G\\x86x\\xb3\\xf6\\x88\\xf1^\\x8d\\xe3\\x8f\\x85_\\x0f\\xee\\xac\\xb4\\xd4\\xb2\\xd3M\\xf1Mm\\xa5\\xe9Z\\xbe\\xa4\\x03r\\xacM\\x93\\x058\\xe7\\xf8\\xa3S\\xd2\\xb9O\\xd9\\x8e\\xccjW\\xd7:\\xe7\\x8a<3-\\xd3_\\xf8\\xafH\\x90X\\x88\\x94\\x9b\\xa8\\x9dn\\xa6!VB\\xa1\\x83\\x00\\x08\\xc9\\x00\\x83\\xd6\\xbcXF.\\n^\\x87d\\xef\\xcc\\xe2y\\xcf\\xc6\\x8b?\\x14\\xfe\\xce\\x1f\\xb4\\xba\\xdf\\xde\\'\\x95{\\xa6_Eul\\xf9*\\xb7\\n:8?\\xddls\\xe9\\x92\\x0f\"\\xbdKR\\xff\\x00\\x82\\x9b\\x8f\\x18xj_\\x0b\\xf8\\xef\\xe0\\xe6\\x99\\xa8Z\\xcf\\x19\\x04\\xc7|\\xc8\\xc8{0\\xca\\x9c\\x11\\xeb^\\xb9\\xa8\\x0f\\x83\\xbf\\x14|\\x7f\\xa9\\xe8\\xfa\\xd7\\xc3\\xf9f\\x87E\\xd3\\xae\\xe1\\xb2\\xd3\\xc6\\x933\\x9b+\\x97x\\xd5D\\x9eN|\\x91\\xf2\\xb8%\\x88Nz\\xd7\\xcbZ\\xc7\\xec\\x83\\xe0Y\\xfc;\\x7f\\xe3\\xbd3\\xc6z}\\xbc\\xa9\\xaa\\xb5\\xbc\\x1e\\x1f\\x96\\xf5\\x96}\\x84\\x83\\xb83\\xb8\\\\\\r\\xdd\\x0f<\\x0e\\xdc\\xd6\\xb1p\\x9a\\\\\\xdd\\x08jp\\xba\\x8b\\xd0\\xe4\\xf5\\xaf\\x89\\xd6\\x1a\\xeb;\\xb6\\x8f\\x14`\\x93\\x8cI\\x9e;v\\xaeSU{\\x1dQ\\xcb-\\xae\\xd3\\xd9\\x91\\xc05\\xedv\\x1f\\xb1\\x9f\\xc3\\xb1\\xe1\\xbf\\x18\\xf8\\x96\\x0f\\x14kW\\x07\\xc3\\x17\\x96k\\x04>r\\xa4s\\xc1;m\\xde\\xc3i`FW\\xa1\\xc75\\x0f\\xc7/\\xd8\\x93\\xc4\\x9e\\x01\\xf8M\\xa5|d\\xf0}\\xdcs\\xe97\\x02\\x06\\xbcG\\xbd-*,\\xcc\\xaa\\xa0+ \\x1c3`\\x9d\\xc7\\xe9[\\xa9Gdd\\xd3\\xeayw\\xc3o\\x8a\\xff\\x00\\x13\\xbe\\x0ej\\xa7V\\xf8y\\xe2\\xddCLw\\x18\\x9a8\\\\4S\\xaf\\xf7d\\x8c\\xe5\\\\}E}{\\xf0\\x03\\xf6\\xfe\\xf0\\x8f\\x8f\\xac\\xed\\x11\\xa7\\xeb\\x8c\\x82\\x11r\\xf1\\xe2\\x0b\\xc7?( \\xff\\x00\\xcb69\\xe8x\\xcfC\\xda\\xbcCN\\xfd\\x89\\xbce-\\xad\\xad\\xf5\\xe4z\\xda\\xdb\\xeaQ,\\xfa}\\xd1\\xd2\\xf6\\xa1\\x89\\x940l\\xb6\\x11\\xc1\\x07\\xae\\xf5\\xfaV\\x16\\xbb\\xfb+\\xf8\\xef\\xc3\\xc2\\x1dn\\xc7X\\x8a\\xe2\\x08\\xae[/$\\x067F\\x8d\\xc8?u\\x98\\x13\\x95=\\x0f\\xe3Y\\xcf\\xd9\\xcc\\xa5\\xce\\xb6?N\\xbe\\x1dI\\xe1O\\x1e[\\x81m\"H\\x13\\x86B>e\\xfa\\x1a\\xf4=3\\xc0\\xd6vq\\xf9ZlaW\\xfb\\xa7\\xae~\\xb5\\xf2\\x9f\\xfc\\x13\\xd6\\xcb\\xc4\\x9au\\x90\\x93Y\\x9ab\\x92N\\xcd\\x1a\\xcaO\\x0b\\x9e\\xd9\\xed\\xd6\\xbe\\xd6\\xd2\\xed\\xf2\\xa0\\xe3>\\xf5\\xcd\\x18\\xb8=\\n\\x99\\xe0> \\xd3\\xd7D\\xd5$\\xb2\\xd4-Y\\x19K$\\xaaN\\n08\\xc61\\xeb\\\\\\xc6\\xa3\\x0c72\\xac0\\xcaHb\\x08lc\\xb7j\\xfa\\x07\\xf6\\x93\\xd0<;\\xab\\xe8\\xd6\\x9e;\\xf0\\xe5\\xe43n\\x90Cw-\\xbb\\xe5YO\\n\\xf9\\x1d\\xc3a}\\xf2=+\\xc3\\xef\\xec\\x90\\xab\"\\x80Gg|\\xe0\\x8e\\xfcv\\xaf\\x06\\xbd7J\\xa3\\x8b>\\x8a\\x8dER\\t\\x9c>\\xbf\\x0c\\xd6\\xd6{Dcr\\xfd\\xe6\\xdc\\x00?\\x9f\\xd2\\xb8\\xad_|\\xe8e\\x8dNzd\\x002z\\x13]\\xfe\\xbfih[\\xec\\xec\\xcer\\x0b\\xe4\\x13\\xdb\\xd4w\\xae;PEiL\\xa3r)\\'\\xdf\\xe75\\'\\xec\\x95\\xe1\\xb6\\x9a\\xf3V\\xf1$W\\xc2\\xd7Q\\xb8O&\\xca\\xf0\\x8c\\xf9,\\xcb\\x9c\\xe3\\xeb\\x80}\\xab\\xa6\\x9c\\x96\\xec\\xc2\\xa2oD}A\\xfb8\\xfe\\xcb\\x9f\\x0f>\\x04\\xe9\\xd1\\xf8\\x8b_\\x96\\xdfS\\xf13(\\xdf}rB\\xad\\xb9\\xc7\\xdd\\x85\\x0fN\\xbfx\\x8c\\x9fn\\x95k\\xe3\\xc7\\xc6o\\tx\\x13Amk\\xc4\\x97\\x92Go\\xe7\\xc7\\x14Ik\\x16\\xf9e\\x91\\xd8*\\xa2(\\xc1f$\\xf4\\xf4\\xc9$`\\x91\\xf2_\\xc5?\\xda\\x8f\\xc7\\xff\\x00\\x04\\xbcP4\\x8f\\x88\\xfa>\\xa3\\xe6\\x06\\x1eU\\xc4\\x91\\x9f\"q\\xeb\\x1b\\x80|\\xc1\\xd3\\xa75\\xaf\\xf02\\x7f\\x88_\\xb4\\x17\\xc4+?\\x8d\\xdf\\x17\\x99\\xe1\\xdd\\x04\\xef\\xf0\\xb6\\x8f~\\x86/>S\\xc7\\xdaZ6\\xe4\\x9e\\x063\\xc0\\xfc\\xeb\\xd1\\xd5\\xc7Edp\\xbb\\'w\\xab>\\xe2\\xd5>.K7\\x84`\\xd7.<=\\xfd\\x99\\xe6\\xdb\\xabGkv\\xc2Ic\\x18\\xe09\\x1c\\x06\\xc7P3\\x8fSN\\xf8{kw\\xe3/\\x05\\xc3\\xadx\\xa6\\xc9L\\xd7RJ\\xf6\\xea\\xf1\\x00L[\\xbeS\\x81\\xed\\xfaW\\x9b\\xf8=uo\\x8d\\x9e3\\x8fF\\x9e\\xe9\\xce\\x9dj\\x04\\xb7\\xaf\\x19\\xe3\\xcb\\x1d\\xbe\\xa7\\xee\\x8f\\xa9=\\x8d}\\t\\xf6k(!\\x82\\xda\\xca\\x11\\x0c1\\xa8X\\xd3h\\xda\\xa0\\x0c\\x00\\x00\\xedY\\xaa\\x8er\\xba\\xd9\\x04\\xa0\\xa1\\x1bug\\x98x\\xc3\\xe0/\\xc2\\xdf\\x15\\xee\\xb4\\xf1/\\x81\\xecn\\xc4\\x8b\\xb5\\x96k(\\xdfr\\xe7\\xaf\\xae\\x01\\xc5r\\x9f\\xf0\\xc6\\x9f\\x05t\\xd8Y<;\\xe1\\xf94\\x96\\xcf-\\xa3^\\xcfh\\xc3\\xa0\\xc8\\x10\\xba\\xf4\\xff\\x00\\x1a\\xf7i\\x92\\x19\\xa2e\\x04\\r\\xdf($\\xf0[\\x1e\\x95B\\xebM\\x89$g\\xde\\xc8\\x17\\xef\\x1c\\xe46==;v\\xf5\\xad42\\xbb<\\xa7@\\xf8\\'u\\xe1x#\\x1aO\\x8c\\xb5\\xc6\\x8e\\x16c\\xb2\\xff\\x00V\\x92\\xe7xbN\\xd2ef\\xe0t\\x1d\\xc0\\xc0\\xc9\\xaek\\xe3\\xa7\\x8f\\xf4\\x0f\\xd9\\xdf\\xc1\\x92\\xf8\\xcb\\xc5\\xfa\\xb9\\xd5\\xb5y?q\\xa3ZI\\xb5\\x1a\\xe6r\\x00\\xd8\\x81W\\n\\xa0nf|\\x1c.s\\xd8W\\xabx\\xf7\\xc6\\x9aO\\xc3\\xef\\r^\\xf8\\xab\\xc4\\xda\\xe2\\xda\\xd9X\\xdb\\xbc\\xf3JYH\\xd8\\xa3q\\x00p[ c\\x1drx\\xaf\\xcd\\x0f\\xda\\x13\\xe2\\xf6\\xbd\\xfbE\\xfcJ}~\\xf6\\xd2}>K\\xb8\\xda\\r:\\xd8\\xb6\\x7f\\xb3\\xec\\x81\\xe7\\xa0\\xc0y1\\x96\\xf78\\xce\\x14P\\xa8F\\xb4\\xb5\\xd8\\xa7VT\\xd6\\x87\\'\\xaa\\xfcS\\xd5\\xfc[6\\xbd\\xe2\\x7f\\x13^\\x0b\\x8b\\xadb\\xe2V\\x17\\x92\\xfd\\xfb\\xa6\\xc6\\x0fA\\xf7@\\xc2\\xa8\\x1d\\x15ExG\\xc5k\\xe9\\xe7\\xd4-\\xf4\\xeb\\x99\\x9e\\x1cZ\\xc6\\xd1\\x86\\xe5H,\\xfc\\xfbW\\xaf|C\\xd3.c\\xd4t]*\\x0b-\\xb1\\xc7;\\x04x\\x07\\x00\\x00\\xb9\\xc8\\xfag\\xa5p_\\x14\\xbc)6\\xaf\\xe3\\x19\\x9e8\\x89H4\\xb4V\\x1b\\x7f\\x88\\x96#\\xb7\\xa5m\\xec\\xe9Nm[k~G\\x1e\"\\x92\\x958\\xb7\\xad\\xff\\x00\\xcc\\xd5\\xfd\\x9e\\xa7\\xba\\xd2\\xf5\\xd1\\xa5+\\r\\xba\\x7f\\x88Z5#\\x95(\\\\\\x9e?3_T\\xf8\\x01\\xa0\\xd5\\xfcbm\\x15N\\xf3\\x0c\\x98\\xd8A\\xdcB\\xd7\\xcb\\xdf\\x07\\xf4\\xe9\\xb4\\xef\\x1ej\\x96d\\x9f-\\xb5X.\\x13\\'\\xa1nO\\xf5\\xaf\\xa7~\\x05\\xda\\xc9{\\xf1^\\x08mX\\xe4\\xc51$\\x1e\\xb8\\x8d\\xbbV\\x95\\x17\\xee\\xdb*\\x8e\\xe8\\xdc\\xff\\x00\\x84\\xb28~2i\\x9a\\x08\\xbdB\\xd3][\\xfe\\xe9\\xbb\\x00\\xe3\\x9c\\xfe\\x1d+\\xde\\xbe,\\xc9&\\x99\\xe0\\xab\\xb9\\xe3\\xb7c\\x1b\\x15,\\xc1\\xb8\\xea?*\\xf9\\xdf\\xc5^\\r\\xd1m~3Zj\\xfa\\xb5\\xdc\\xd6\\x97vS\\xa4\\x88\\xaa\\xb9\\x12*\\xbe@\\xcd}#\\xaeY\\xea\\xbf\\x13\\xfe\\x15Oe\\xe1L13#L\\xf2Fp\\x00\\xea3Y:\\xa9N\\x9c\\x97K\\x1d0\\x83\\xe4\\x9c_S\\xc6,~)i\\xcb\\x19\\xb7\\xb8\\x9fi\\x03\\x0c7\\x85e\\xfc\\xba\\xd7-\\xf1\\xaa-C\\xc5\\x7f\\x0eu\\x1bM\\x0bY!\\xde%h\\xfc\\xbb\\x82\\xb8!\\x83z\\xf1\\xd2\\xba_\\x1b|\\x0f\\xd7\\xd6\\xda;\\xb8\\x0cQ\\xcd\\x1a\\x90\\xfb$\\xca\\xbf\\xe1\\x8c\\x8f\\xcc\\xd7\\x98\\xf8\\xafJ\\xf1F\\x84\\xa6\\xda\\xfe\\xc9\\xe3L\\x9c\\x95\\'i\\xe0\\xf4\\xafbx\\xaas\\xa4\\xd2w8!Bq\\x9amX\\xe0\\xbe\"\\xbd\\xf5\\x8d\\xaf\\x87\\xfcdgI\\xee\\xbf\\xb1/m\\x1c$\\x83-#Z:*\\xe4\\x902Y\\x80\\xab\\xdf\\xb3w\\x8b\\xbc\\x15\\xe2\\xef\\x0cx;\\xc1\\xfe.\\xb5\\xb4\\x17\\x9a}\\xda\\xdbk\\r|\\xab\\xe5\\xdcEok!\\xb6\\xdf\\xbb\\x83\\xb5&\\n3\\xe8=\\xab\\x13F7?\\xf0\\xaco\\xd6\\xfe\\xf1|\\xdd7\\xc4\\x86+|\\x8c\\x9d\\x8e\\x07A\\\\\\xb7\\xc2\\xd3\\xe1M\\x13\\xe2\\xd7\\x85\\xa7\\xf1\\x0e\\x94\\xb7\\x1aL\\xd6w\\xd7s\\xdaG\\xa6\\xbd\\xc2n\\xfb-\\xbcYh\\xe3\\x04\\x90\\x18\\xe78\\xc0\\xae?u\\xd3\\xb2.M\\xa9\\x9fG~\\xca\\xfaG\\x875\\x0f\\x89^1\\xbf\\x81\\x0cQ[\\xddo\\xb2Kk\\xc9\"@\\xbed\\xa7n\\xd8\\xd8\\x07\\\\\\x01\\xf2\\xb0#\\xda\\xbc\\x83U\\xb8\\xf8\\x81\\xff\\x00\\n\\xef\\xc52Y\\xf8\\xda\\xf2\\xcbF\\xba\\xd6\\xbe\\xc96\\x9f\\x0b\\xc4\"\\x98\\xa5\\xbc3\\r\\xea\\xcaK|\\xcc\\xc4\\x1c\\x8cb\\xb5\\x7fd\\xef\\x16\\xf8j\\xdf\\xc7^\"\\x9fT\\xd1,\\xe5\\xbd\\xb7\\xb2\\x96M6\\xe1\\xef#Im\\xb1k#\\x11\\x1cd\\xee`C\\x00J\\xf0;\\xf4\\xaeN\\xfa}p\\xf8+U\\x92\\xe3Py4\\x9dC\\xc4\\xef#\\x8b\\x88\\x07\\x95e:\\xa7\\x97\\xb1_8m\\xe3\\xef+\\x01\\x83\\x18\\xc198-\\xef\\xb5\\xe8$\\xdf!\\xd1\\xfc1\\xf1G\\x8c\\xa2\\xf0\\xef\\xc4\\x8d9&\\x1a\\xc6\\x97u\\xe1}\\'\\xed\\xd3\\xb2 \\x9a\\xd2H\\xd2\\xde@\\xff\\x00(\\x00\\xa0,#\\x00\\xda\\xf8\\x8e\\xfc$\\x92-\\xfc\\xeb*\\x94\\xcf\\xcc\\\\9\\xff\\x00\\xd0\\xab\\xbf\\xf0\\xb5\\x9c~:\\xff\\x00\\x82sIa\\x1b\\xac\\xbb\\xfc\\x1f\\xa9(\\x03\\xa8x\\xdaVP}\\xfeQ\\\\/\\xfc\\x13GS\\xfe\\xd9\\xf8\\x01\\xadh\\xcc\\xdb\\x9bO\\xd6\\x98\\x91\\xdc\\x07A\\x8f\\xfd\\x02\\xa6\\x9a\\x8b\\xb8+\\xc5X\\xf5\\xff\\x00\\x85^\\x16\\x8fC\\xd6\\xe2D\\x87h*\\x07N\\x95\\xef:D@(\\x04t\\xaf:\\xd0t\\xe8\\x97R\\xb4e\\x8ce\\x88\\x04\\xd7\\xa7i\\xb0l\\x1d;TN*#\\xa9\\xd0\\xe4~ \\xeav\\t\\xe0\\x17\\xf0\\xd5\\xbd\\xa8\\x0f2G\\x15\\xb4h\\x9fwk)\\xdd\\xf4\\x18\\xcek\\xc4\\xef\\xed\\xa5\\x91JK\\x9d\\xbc\\x16b\\xc0g\\x9e\\xd9\\xe9^\\x8b\\x06\\xa5\\xab\\xfc@\\x12G\\xa1i\\xb7&HT\\xbc\\xd0*d\\x05\\xed\\xf3t\\'\\xe9\\\\v\\xa5h\\xd6\\xcd$2\\x02\\xae\\x18\\x9f\\x9dy\\x07<\\xf6\\xaf\\x9f\\xafUV\\x975\\xcf\\xa2\\xa3MB6\\xb1\\xc2\\xeb1\\xe2i\\x19\"9L\\x86`y#\\x1f\\xe7\\xb5p\\xfa\\x85\\x8a\\xa4R\\x19\\xe0W\\xe4\\x95}\\xc7$g\\xdb\\x81\\xc1\\x15\\xe8\\x1e&\\x11\\x961\\xcb6p\\xa7%[\\x93\\xd3\\x02\\xb8\\x8d`\\xcb\\x1d\\xc4\\xe0\\x92c|l|\\xf4\\xc7\\xf9\\xf7\\xae^c\\xa1E4r\\x1a\\x9cI;\\xbcR0!\\xc1\\x04\\xaf\\xb8\\xe8\\x7f\\xcfj\\xab\\xe0\\x99\\xf5\\x0f\\x03\\xea-$%\\x85\\xb9 \\x82\\xa8_ p\\x0e\\xd5\\x1b\\x81\\x00\\x01\\xc0\\xed\\xd8\\xf5\\xe8.a\\x87hW\\x0c\\xcc\\xa7\\x18\\x0b\\x92~\\xbf\\x9f\\xd2\\xb9_\\x13\\xea\\x06)\\xfc\\xab\\'\\xc3\\x83\\xc1#\\x90~\\xbf\\x95i\\x1a\\x8a\\xf6fR\\x85\\xd5\\xcfj\\x83\\xe2\\x94B\\xc1\\x12B\\x0c\\x8e\\xb9!\\x92T\\x0b\\x81\\xc9;\\xd4c\\xff\\x00\\xaf\\\\\\xd5\\xf7\\xc4xu\\xbdz\\xcb\\xc3G[\\xb2\\xb5\\x93Q\\xd4 \\xb1\\xb6y\\xeeB\\xab\\xcd4\\x81\\x117d\\x8c\\xe7\\xa62q\\xdb\\xbdd\\xfc\\x10\\xfd\\x99\\xbe \\xfc^\\xb9\\x8bU\\xd7\\xae\\xae\\xac40\\xe3}\\xf3\\x82<\\xd5\\xcf\"0~\\xf7N\\xbd\\x07\\xd7\\x00\\xf7\\x1f\\xb6\\x97\\xec\\xf7\\xe1\\x01\\xfb7\\xcfe\\xf0\\xe6\\xcf\\xfb/Z\\xf0m\\xed\\xb7\\x88t9\\xe5\\x8cg\\xed6\\xe5L\\x85\\xa5\\x00\\x97,\\x85\\x862F@\\xf4\\xae\\xb8^J\\xed\\xd9\\x1c\\xb3q\\x8b\\xd1]\\x9fM\\xfc:\\xf0^\\x9d\\xf0\\xcb\\xc2\\xc9\\xa2hw\\r%\\xd4\\x87\\xcc\\xba\\xb8`P\\xce\\xd8\\xc6@\\xc7*;\\x0e\\xc3\\xdc\\xf3\\xb3s|\\x96\\xb6\\xca\\xf2La\\x0c~q,Xbs\\x82\\t\\x04\\xf7\\x1f\\x8fn\\xa2\\xb0<)\\xe3\\xfbO\\x14\\xf87M\\xd7\\xad\"70j6\\x91N\\xb3[\\xcc8\\x0c\\x03c;\\xb2G8\\xf6\\xc7J\\xd0k\\xf8v\\xb4\\xe1\\xe2`\\xcc\\x15\\xbc\\xdc\\x86#<\\xe4\\x0fO\\xa1\\xfc8\\xad\\xe3*|\\xa9\\xc7c\\x9eQ\\x9d\\xdf1\\x1c\\xba\\x8d\\xfd\\xbaH\\xf67RC\\xb20\\x03\\x17?\\xc4G\\xccF\\x08\\xc8\\xf4\\xe4z\\xd3_X\\xf1\"\\xd9\\xac\\xb7:\\xbd\\x91e<\\x13o\\x9d\\xc0\\x9c\\xe0\\x8c\\x82\\t\\xe3\\xb9\\xfc+\"k\\xbbG\\xd6\\x16\\xf6\\x08\\x16\\xe3j\\xe1\\x1e\\x07\\x93\\x01\\xb7(\\x00\\xa8\\xca\\xe7\\xe6\\xc6p\\x08\\xeb\\xc75\\xf3\\x7f\\xed\\xe5\\xfbU]x\\x0fD?\\x06\\xfe\\x17jb\\xd7\\xc5\\x1a\\xaa\\x07\\xd6n\\xad\\xc8\\xf3\\xf4\\xabN\\xbb\\xbd\\x12IG\\x0b\\xddT\\xb3`|\\xa6\\x88\\xde\\xa4\\xb9b\\xc2V\\x82\\xe6\\x91\\xe6\\xff\\x00\\xb6\\xef\\xc7\\xeb\\xaf\\x8b\\xfe,\\x9f\\xe1\\xb7\\x85n\\xde\\x1f\\x0b\\xf8r\\xf1\\xe2\\x95\\xe1%\\x06\\xa1}\\x1b\\x15y\\x0f9)\\x19\\x04/\\xa9\\x19\\xfe\\x11^-\\xe1y-\\xad\\xaef\\xbb{\\xd3,\\xed\\xf2\\xb4\\xad\\xcfN\\x83\\'\\xb5D\\xe6\\xd0xse\\x85\\xb9E\\x86%\\x18F#\\r\\xf5\\xefT\\xbc4\\xfe}\\x83\\xbe9\\x05\\xb7+\\xf5\\xcek\\xd4\\xa4\\xa3\\x18\\xd9\\x1c2\\x9f;\\xbb:\\xdb\\xe5\\xb4\\xd5\\x19/Z(\\x8c\\x91\\x82\\x13k\\xf5\\xf5\\xfaW\\'\\xa8\\xe9ze\\xc5\\xe6\\xa5{:\\xb8\\x12\\xc4\\x80+\\xa9\\xc7\\xca\\x8c:\\x8fs\\x9a\\xd0\\xd1\\'}\\xf2\\xa36\\x7fv\\xd8^\\xc0\\xe2\\xb1n.f\\xbb\\x82[BB#\\x8c`\\x13V\\xd2z\\x10\\xe4\\xad\\xa9\\xb3\\xe1\\x7f\\n\\xc3\\'\\x89a\\xd6\\xe0o%&\\x82-\\xca:n\\x01q\\xfc\\xab\\xdd\\xbfd\\xe6\\xb7?\\x18\\x8a\\xfd\\xac1\\x16s\\x82\\x1d\\x089\\xdb^\\x11\\xe0\\x95:z\\xdbD\\x8c\\xce\"?\\'\\xcd\\xc8\\x02\\xbdW\\xf6t\\x92\\xf3Y\\xf8\\xa4\\xb6\\xdaM\\xc2\\xa5\\xd1\\x8e@\\x1aS\\x8c\\xe4`\\xe7\\x1dk:\\x91j\\x9c\\x8d)|J\\xc7W\\xfbH|O\\xb3\\xf8\\xa1\\xf1\\xado,\\x95mc\\xb5D\\x80\\xa5\\xba\\x90\\x18\\xaf\\x19 w\\xeb_x\\x7f\\xc16\\xfc?\\xf0z\\xe7\\xe1\\xee\\xafk\\xe3Mz+i\\x8cA\\xa1Y\\'B]\\xb1\\x8cla\\x81\\xc9\\xaf\\xcc\\xcf\\x89~\\x1e\\xd7\\xf4\\x7f\\x17\\xea\\x05\\xaf\\xa2\\x95\\xc5\\xeb\\x04U\\xc3\\x13\\x86\\xea\\x0f\\xf9\\xeb^\\x8d\\xf0_\\xf6\\x8e\\xf8\\xb3\\xf0\\x8bL\\x928\\xbc7\\x1c\\xd6\\xd3\\xae\\xc7ya,H\\xe7\\xa3s\\x8e?\\x95a*\\x13t\\xe3\\xcatS\\xac\\xa3Q\\xf3u=S\\xf6\\xa7\\xbb\\xff\\x00\\x84G\\xc5\\xda\\xb5\\xb7\\x85ut\\xb8\\xb17\\x0cT0\\xe9\\x82zc\\xfck\\xc0\\xf4\\r_X\\xf1\\xc7\\x88\\x06\\x85\\x7f*\\xacB\\x19\\x18\\x87c\\x8c\\xed8\\xae\\x9f\\xe2\\x1f\\x8a\\xfck\\xaf[X\\xde\\xf8\\x86$\\xb7\\x8a\\xf7\\xcc\\x9ddE\\\\\\xb3\\x11\\x802>\\xf0\\x18\\xe9\\x9c~u\\xc6\\x98\\xeet\\xcb)u\\xbd4\\xc6W\\x05K\\xa7$\\x1f\\xafn)\\xaaR\\xa7\\x05\\xdc\\x9759\\xf9\\x1ek\\xaa\\xc3\\x0e\\x89\\xe0\\x1f\\x16\\xdb\\\\my-\\x81\\xe2H\\xad\\x185\\xbc\\x92\\x86!\\x08\\x05&\\x8c\\xab\\xaf\\xd3\\x0c\\xdf\\x8ek\\xd0\\x84$\\xa3\\xae\\xe7\\x04\\xdc]K\\xad\\x8fd\\xf8!o\\xabX\\xfc9\\xf1\\x17\\x8d\\xb4\\xff\\x00\\x143i3\\xead>\\x99mf\\x92\\x19JE\\x12\\xeeY\\x17\\xe7\\xea\\x84m\\x19\\xce+\\'\\xc5\\xde\\x14A\\xfb<\\xcd\\xe2-s\\xe1\\xa7\\x84\\xef\\x9e\\x7f\\x17^L\\xd73\\xce`\\xd4\\x966\\x9am\\xaa\\xe0\\xa1\\xca\\x11\\x829\\x1cm\\xf5\\xae2o\\x8b\\x17\\xba7\\xc3\\xcf\\x1a\\xfc:\\xd3\\xa00\\xdb\\xdbZ\\xfd\\xbd/\\x16B\\x1bt\\xad\\n\\x05\\x00t\\xe5\\x9c\\xe7<\\xe4U\\x8d?\\xf6\\x8c\\xf0\\x82\\xfe\\xcb\\x16\\x9a&\\x91x\\xcd\\xe3\\x0b;\\xaf\\xf4\\x8b\\xd9\\xe3\\x0e\\xd2#<\\x87\\x07vC\\x80\\n\\x8e})8\\xc9;\\xf9\\x874mc\\xcb\\xf4-B\\xea\\xc7\\xc5\\xb1-\\xd0\\x11\\xfd\\xabE\\x02\\x08\\x18\\x82\\x06\\x1bh\\x19\\x1f\\xeeg\\xe9_H\\xfc&\\xf8\\xf1\\xf0\\xb3G\\xf0\\xe7\\x88>\\x17|E\\xf8cg$W:e\\xcb\\xd9_\\xcd\\xa7Df\\xb0\\xbch\\x98DU\\xd7$\\xa1*2:\\xab`\\xf7j\\xf2\\x0f\\n|M\\xb6\\xf1\\x1f\\x8et\\xad#\\xc5~\\x10\\xd0\\xefb\\xba\\x86\\xdf\\xce\\xba\\x1aj\\xc723\\xc8A*\\xcaTq\\x90q\\xf5\\xf5\\xae\\xc7\\xe2D\\xdf\\x0b4\\xdf\\x89:\\xae\\x99\\xadh\\xba\\xa7\\xdam|\\xa8\\xde\\xf7O\\xbdR$\\xdd\\x12\\xb8\\xf9\\x1cv\\xdf\\x8e\\xbc\\xe2\\xaaz\\xbb1Gk\\xa6}+\\xfb#x\\xbf\\xc6?\\x05\\x7fg\\xeb;\\xf9\\xe5\\xfe\\xd4\\xf0\\x17\\x8aL\\xf6\\x84\\xdc3\\x06\\xd1\\xa7\\x98\\x9c\\xabg?\\xbbp\\xf9\\x07\\xb3dzn\\xdb\\xff\\x00\\x82K\\\\\\xf9\\x8b\\xe3\\xbf\\x07M \\xdeR\\xde\\xe59\\xe3\\xe5,\\x87\\xff\\x00B\\x15\\xc3~\\xc9\\x9f\\xb5g\\xc3\\xc9\\xfc\\x07\\x0f\\xec\\xee<5/\\x88,\\xf5\\rk\\xc9\\x16z\\x99\\x16\\xb2N\\xec\\x80\\x18wr\\x84\\x9c\\x02\\xa7+\\xcfL\\x92+\\xab\\xfd\\x91t[\\xef\\x83\\xff\\x00\\xb4_\\x88\\xf4\\xed\\x02D\\t47\\x10\\xb6\\x935\\xd0k\\xab\\x7f-\\xcb\\x98\\xe4^\\x0e\\xe0\\xab\\xcbc\\x04\\x8a\\xc1\\xb7\\x1b\\xf74j\\xfb\\x1fhi6\\xad\\x1d\\xed\\x8e\\xe4\\xc1\\xf3\\x06G\\xe3^\\x8df\\x85rMy\\xef\\x865k\\x7f\\x10ZiW\\xd1.\\xd7i>u\\xee:\\x1a\\xf4{d\\xc6N:\\xd6r\\x976\\xa2\\x97A4\\x9f\\r\\xe8\\x1e\\r\\xd2\\xa3\\xb3\\xd2-#\\xb5\\xb7\\x8f%a\\x862\\t<\\xe4\\xe4s\\x9e:\\x9c\\xf7\\xaf\\x96?\\xe0\\xaa\\x1f\\xb4\\x14\\x9f\\xb3\\xaf\\x814\\x1f\\x17xK\\xc2\\x1am\\xd6\\xaf\\xaa\\xeb\\xa2\\xc9\\xa1\\xbagQ$>Y,IB>a\\x94\\xe7\\x9f~\\xd5\\xf5\\x86\\xa9i%\\xe1\\xc4n\\xe1\\x13$\\xe2A\\x86\\xe0\\xf0\\xc4\\x8c\\xf2O\\xe9_\\x9f\\xdf\\xf0T}\\x0fS\\xf8\\xc7\\xfbF\\xfc*\\xf8\\x07\\xa7Lg\\x9e\\xeaI&\\x95a\\xc3\\x043\\xc8\\xb1o\\x03\\x8e\\x89\\x1b\\xb7?\\xca\\xbc\\x0eh9%ot\\xf7\\xe2\\xa4\\x95\\xef\\xa9\\xe8\\xff\\x00\\x03\\xbe\\x19\\xf8\\x93\\xe3o\\xc1\\r#\\xe2\\xcf\\x88\\\\h\\x97z\\xb5\\x8b]\\xc3\\xa4C\\x01\\x9c${\\x8e\\xc6.J}\\xf5\\xda\\xc0c?7\\xb5S\\xf1\\x07\\xc1\\x03kj\\x8fw\\xe2GY]rm\\xd6\\xd1A\\xc8$`\\x1d\\xc7\\'\\xf0\\xef_W\\xf8w\\xc2z&\\x89\\xe1\\xfb_\\x0e\\xd9Y-\\xb46\\xd6K\\x05\\xac\\x11\\xe0\\x98\\xd1\\x10\\x00\\x9e\\x9c\\x0c\\x0fJ\\xf3\\x8f\\x8a\\x9e\\x02M2\\x16\\x92;\\xc2-\\xa6\\x1c\\x1d\\xfc\\x0e\\x84\\xf3\\x9c\\x8c|\\xdc\\xe6\\xb9\\'\\x08\\xadN\\x98\\xcd\\xec|\\xebs\\xf0\\x7fM\\x8c\\\\=\\xd0\\xd4\\xee\\xe3P\\xad\\x18\\x82\\xe2%YW*\\x1b\\xe6l\\x05*I\\xce{\\x0e+\\xe3\\xcf\\xf8(w\\x88>#\\xfc\\x0e\\xf8\\xb7\\xa2\\xe9~\\x12\\xd6.4\\xbd\\x0fP\\xd3\\x16\\xe0\\xd9\\xa2\\xabH\\xb2+a\\xd4\\xccWsgnx8\\xc1\\xf4\\xaf\\xba\\xa7K\\x98%\\xbc\\xb1\\xd4\\xa1\\x8ex\\xb6\\xe6\\t\\xe4@\\x1f$.\\xe48P\\x06y!\\xb3\\xce\\t\\xc0\\xc8\\xcf\\xc8_\\xf0SO\\x87\\xc3R\\xf8/\\xe1\\x7f\\x1f\\xc1\\xa5_Z\\x8d7Z\\xb8\\xb46\\xfa\\x92\\xaf\\x9f\\x04O\\xb7ll\\xca\\xed\\xb9T\\xa3m>\\x84\\n\\xbc\\x0c\\xa2\\xb1qOT\\xf43\\xc5\\'*\\r\\xad\\xcf\\xbb4\\xcf\\x18_\\x1d>\\rX\\xdf\\x13g:\\x05\\x08\\xd1F\\x11s\\x9c\\x02x;pc\\xfd:\\xf3W\\xb5\\x1f#\\xc41\\xae\\x81\\xa9\\xe9\\xb0\\xcb\\x0c\\x8b\\xb6X\\xe4\\xcb\\x899\\xff\\x00Vd\\x1d\\xba\\x11+&\\xa3\\xa1Y\\xbc\\xab\\xe6\\xaa\\x92\\xa6 \\x1ce\\x86\\x18\\x10W\\x82\\x06\\x06\\t#\\x83]o\\x87\\x7f\\xe2[\\x0bZ]#\\xa3\\xc4\\x03I\\x97\\xf9\\xdfw\\xef\\x01%p\\xa4\\xf0\\x0e\\xe3\\xd4\\xe7\\xb8\\xac*b*\\xdd\\xc7\\x98\\xda\\x14i\\xda\\xf6.xw\\xc5>\\x19\\xf0F\\x90<1\\xa4h\\xd7VvVV\\xc9\\xe4\\xdb\\xc5\\x010\\xa2\\x96?u\\x97\\x81\\x8c7 g\\x18npMt\\xda/\\x8c\\xa5\\xba\\xb7\\x90\\xc9\\x15\\xbc\\x91\\xa4\\x81#\\x9aI\\x89%X\\xf03\\x8c\\xabp\\x07=r99&\\xb1,\\xf4\\x9dS_\\x91V\\x08\\x9c\\xb6G\\xd9\\xe4?#(\\x04\\x91\\xbb\\x8e\\x08\\'\\x1c\\x0c\\x10Fx5\\xc7\\xfe\\xd1\\x9f\\x15\\xbc#\\xfb:x\\x02\\x7f\\x8a\\x1e.\\x9c]N\\xe8m\\xecm\"\\x8d\\xd5\\xf59\\x9f~\\xc8\\x089\\xe1H\\x0f\\xb8r6\\xbd:U\\xeb\\xb9(\\xc3RgJ\\x92NR1?l\\x7f\\xda\\xcbN\\xf8\\x1b\\xe0\\xf8\\xf4\\x1f\\x07\\xdcIw\\xe3\\x8dZ\\x10\\xba-\\xa5\\xc7!\\x00*\\x1e\\xe6@\\xb8\\xf9@\\xdd\\x80O$q\\xd4\\xd7\\xc17\\x8b\\xaf\\xcb\\xa9\\xcb\\xad\\xebZ\\xfd\\xd6\\xa9\\xaa^M\\xf6\\x8d_Q\\xbebe\\xb8\\x94\\xe0d\\x93\\xd0\\x00\\x00\\x03\\xb0\\x00U\\x9b\\xcd[\\xc7~5\\xf1\\xc5\\xc7\\xc4\\x7f\\x1f\\x16\\xba\\xd45\\x02\\xad4\\xdb\\xc1\\x10D8HP\\x9e\\x88\\xaa\\x00\\x1e\\xbd\\xf9\\xab\\xb6\\xfa\\xcc#Z\\xf2\\xe2\\xb0\\x13!\\x1bs$\\x99\\xcd}n\\x16\\x83\\xa3O]\\xfa\\x9f?\\x88\\xa8\\xeaKM\\x8d}/\\xfb3R\\xd2.\\xe0y\\x04*\"\\x0c\\x03\\x83\\xdb\\x9a\\xe6|7\\xaa\\xad\\xd5\\xb1\\xb8U;\\x1eBT\\x9fL\\xf1\\xfaV\\xe4\\xbe$\\xd2\\xa6\\x13\\xe9\\xb1\\xda\\xa42\\x14`\\xc8\\xc0\\xe1\\xb8\\xe4qT\\xbc\\x11j-ttI\\xadmeQ\\xd4$\\x85s\\xf9\\xe6\\xab\\x97\\x95\\xb3\\x9e[\"{K\\xd8\\xe1\\x95\\x80]\\xdb\\xd0\\x8c/Q\\x9a\\xcft\\xb7L\\xb2\\xf1\\x96\\xe7vk\\xa1k\\r\\x12\\xeds\\xf6\\x07\\xb7*\\x7f\\xd6$\\xc1\\xb1M\\x1a\\x0e\\x95|\\xbbM\\xe9F\\'!\\xdc\\xa8?\\xcf\\x9ai\\x8a\\xcd\\x99\\x9a\\x04\\x92E{\\x1c\\xb1\\xcaB\\x86\\xce\\x0fC]\\xc7\\xc1\\xef\\x11_\\xf8{\\xc7\\x0f\\xe2\\x1b\\\\\\xee\\x827t\\xdb\\xc9\\x03\\xa5a\\xc1\\xe1\\t\\xad\\x19\\\\N&Q\\xf7HB\\x0e0y\\xab\\xde\\x04\\xd3\\x1e\\xd3^\\x95\\xc4\\xb8o\\xb39\\x079\\xc7\\xd7\\xd2\\xad\\xd9\\xc1\\xa3H^\\x16=\\x0b\\xc1\\xfav\\xab\\xaf_I\\xe2[-\\x08j&;\\x8f2h\\xae\\x01e`y \\x9a\\xe8\\xc7\\x89uv\\xbf\\xb8\\x9fI\\xd1\\xe1\\x8dn\\x10\\xa4\\xdau\\x8boU\\xc7\\x19\\nH\\xe7\\x19\\xedX\\xbf\\x0e\\xb5\\x0f\\x13A\\x0c\\x9an\\x8fp\\xdbn\\x07\\xefbE\\x0c\\x8e1\\xdc~9\\xfa\\xe2\\xbe\\x9f\\xf8?\\xfb3\\xf8\\xd7\\xc5\\xbe\\x01}M4\\xa8\\'\\xf3>\\xeb=\\xb8V\\x0b\\xd0\\x10\\xdc\\xe3\\x9c\\xfe\\x02\\xb0\\x95H\\xd3\\xb76\\xc6\\xb0\\x84\\xaa?t\\xf9\\x07\\xc5\\x12kWz\\x83\\xe8\\xb2Gv\\xb6\\xf1\\xb9u\\x8aV\\xda\\x10\\x9e\\xb8S\\xca\\xe7\\xb8\\x07\\x1e\\xd5w\\xc1W\\x96W\\x1e\\x07\\xd5\\xbc\\x1f*\\x86w\\x95^0F\\x19\\t\\xe0\\xe3\\xd4\\x11]\\xd7\\xc6\\xbf\\x85\\xfe+\\xf0\\xc7\\x89.\\xb4]ZYm\\xafa\\x95\\x95^F*\\x10\\x0ep3\\xd4b\\xb8O\\x07\\xd8\\xea6\\xde\"\\x11\\xea(\\xae\\xcc0YO\\xde\\x00\\xf7\\xc7J*8\\xd5\\xa7t\\xc7\\x0b\\xc2vg\\xc7\\xbe>\\x92\\x11\\xe2\\x0b\\xf8\\xac\\xee\\x8f\\xc9t\\xea\\x8d\\xbb\\xfb\\xac{\\xfe\\xbf\\x857V\\xd35\\xedo\\xe1\\xd3^\\xc1\\xaa\\xa4\\xd2\\xda\\xcb\\x1b\\x96I\\x95\\xf6\\x06%@8<\\x1c\\xf6\\xae\\x87\\xe3\\x97\\x81\\xe5\\xf0\\x8f\\xc5\\xeds\\xc3s\\xda\\xb2B\\xb7R<-\\xd7(\\xdf2\\x92:\\xf4#\\xa5p\\x9a\\x0e\\xa1\\x7f\\xe1?\\x0c\\xf8\\xb7II\\xbf\\xe3\\xf6\\xca\\xdf\\xc9n\\x0f\\xcd\\x1d\\xca?\\x1f\\x80?\\x86k\\xb3\\x99\\xbai\\xaf/\\xd0\\xe1zI\\xdc\\xb3\\xe3-j\\xf2\\xd7\\xc3\\xbe \\xb3\\xb5\\xd2\\xc4\\xb2j\\xba%\\xa2\\xc9)\\x97kG\\xb6\\xe1Kv9\\xce\\x07~=\\xeb\\xcb-5\\x8d&\\xd1\\x18?\\x9d\\x1b\\x1f\\xba$\\x8b8\\xf6\\xc8\\xafO\\xd6o\\xa5\\xd4tuk\\x85\\xc3O\\xa1\\x86bN7\\x15u\\'\\xf1\\xe6\\xbc\\xcbP\\x9a\\xe6{}\\xb6\\xe41L\\x82\\n\\x8d\\xd8\\xadbCn\\xe7K\\xe1\\xcf\\x15\\xf9\\x1e\\'\\xb7\\xf1%\\xb7)m\\x14K\\x88\\x86\\xec\\x14 \\xe7\\x15\\xbfq\\xf1\\x02\\x0f\\x12k\\xd7Z\\xad\\xc5\\xda\\xf9\\xb7W;\\xbepT\\x90\\x00Q\\xd7\\xd8\\n\\xe0\\xbe\\x1f\\xea\\xd2\\xa5\\xdc\\x9asB\\x1c\\xbeX\\xb7B1[~\\x14xn\\xbcK\\x05\\x95\\xe4\\n\\xc2[\\xa5#r\\xe7\\x92\\xd9\\xa1\\xae\\xa0\\x8e\\xd3\\xc0Z\\xc4\\x96v\\x12\\xde\\xa0u+\\xab\\xb3\\x87\\x07\\xee\\x90\\xc3\\x9a\\xfa\\x9f\\xf66\\xf8\\x91\\xad\\xf8\\x83\\xf6\\xc2\\xd0\\xbcY\\xe2]NK\\xab\\xcdbG\\x82\\xea\\xe6Ln\\x99\\x9e\\x13\\x1e\\xe6\\xf5$rOS\\xc9<\\x9a\\xf9\\x13\\xc2\\x17/\\xe1\\xef6\\xe6\\xf1\\x8bi\\x9a\\x85\\xec\\xf8\\'\\x91\\x0c\\x85\\x98~F\\xbd#\\xc1Z\\xef\\x89\\xbe\\x1d\\xa5\\x9f\\xc4o\\r\\xeb\\t%\\xd5\\x89-m\\x0b3C$L~Ut\\x90g,\\x0bg\\x04\\x0e\\x83\\x9a\\xcaqN\\xf7.:\\x1f\\xb1\\x1e\\x08\\xd3\\xed\\xec|b\\xfeR\\xedH\\xe1\\x8eA\\x18 1\u001b[0m image \u001b[38;5;241m=\u001b[39m \u001b[43mnp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43masarray\u001b[49m\u001b[43m(\u001b[49m\u001b[43mbatch\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mjpg\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdtype\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43muint8\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m\n", + "\u001b[0;31mValueError\u001b[0m: invalid literal for int() with base 10: b'\\xff\\xd8\\xff\\xe0\\x00\\x10JFIF\\x00\\x01\\x01\\x00\\x00\\x01\\x00\\x01\\x00\\x00\\xff\\xdb\\x00C\\x00\\x02\\x01\\x01\\x01\\x01\\x01\\x02\\x01\\x01\\x01\\x02\\x02\\x02\\x02\\x02\\x04\\x03\\x02\\x02\\x02\\x02\\x05\\x04\\x04\\x03\\x04\\x06\\x05\\" + ] + } + ], + "source": [ + "image = np.asarray(bytearray(batch['jpg']), dtype=\"uint8\")" + ] + }, + { + "cell_type": "code", + "execution_count": 228, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([255, 216, 255, ..., 15, 255, 217], dtype=uint8)" + ] + }, + "execution_count": 228, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "image" + ] + }, + { + "cell_type": "code", + "execution_count": 230, + "metadata": {}, + "outputs": [], + "source": [ + "import cv2" + ] + }, + { + "cell_type": "code", + "execution_count": 244, + "metadata": {}, + "outputs": [], + "source": [ + "img = cv2.imdecode(image, cv2.IMREAD_UNCHANGED)\n", + "img = cv2.cvtColor(img , cv2.COLOR_BGR2RGB)" + ] + }, + { + "cell_type": "code", + "execution_count": 245, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 245, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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ewq94OrRo0ePHnsKe1JwfeYzn8ErX/lKFEWBW2+9Fd/61reu9iVdFfz7f//vIYTo/Lzuda8L75dliWPHjmH//v0Yj8d497vffVETz580fPWrX8U/+2f/DNdeey2EEPjf//t/d953zuG3f/u3ceTIEQwGA9x222344Q9/2Dnm3LlzeM973oO1tTVsbGzg137t1zCbzV7Eu3jh8Ezj8773ve+iOfWOd7yjc8xP6vjcddddeNOb3oTJZIKDBw/i53/+53H8+PHOMc9mTT3++ON417veheFwiIMHD+KjH/0otNYv5q28YHg2Y/TWt771ojn0wQ9+sHPMcx2jPSe4/uf//J/4yEc+gk984hP4q7/6K7zhDW/A29/+9k5jypcS/t7f+3s4ceJE+Pna174W3vuN3/gN/J//83/wR3/0R7jvvvvw1FNP4Rd/8Rev4tW+8JjP53jDG96Az3zmM7u+/+lPfxr/7b/9N/ze7/0evvnNb2I0GuHtb387yrIMx7znPe/Bgw8+iHvuuQd33303vvrVr+IDH/jAi3ULLyieaXwA4B3veEdnTv3hH/5h5/2f1PG57777cOzYMXzjG9/APffcg6ZpcPvtt2M+n4djnmlNGWPwrne9C3Vd4+tf/zp+//d/H5/73Ofw27/921fjlp53PJsxAoD3v//9nTn06U9/Orz3vIyR22P42Z/9WXfs2LHwtzHGXXvtte6uu+66ild1dfCJT3zCveENb9j1vQsXLrg0Td0f/dEfhdf++q//2gFw999//4t0hVcXANwXvvCF8Le11h0+fNj9p//0n8JrFy5ccHmeuz/8wz90zjn3gx/8wAFw//f//t9wzJ/+6Z86IYR78sknX7RrfzGwOj7OOffe977X/dzP/dwlP/NSGp9Tp045AO6+++5zzj27NfUnf/InTkrptra2wjG/+7u/69bW1lxVVS/uDbwIWB0j55z7x//4H7t/82/+zSU/83yM0Z6yuOq6xre//W3cdttt4TUpJW677Tbcf//9V/HKrh5++MMf4tprr8WNN96I97znPXj88ccBAN/+9rfRNE1nrF73utfhFa94xUt2rB555BFsbW11xmR9fR233nprGJP7778fGxsb+Jmf+ZlwzG233QYpJb75zW++6Nd8NXDvvffi4MGDeO1rX4sPfehDOHv2bHjvpTQ+29vbAIDNzU0Az25N3X///bjllltw6NChcMzb3/527Ozs4MEHH3wRr/7FweoYefzBH/wBDhw4gJtvvhl33nknFotFeO/5GKM9RbJ75swZGGM6NwwAhw4dwt/8zd9cpau6erj11lvxuc99Dq997Wtx4sQJfPKTn8Q/+kf/CA888AC2traQZRk2NjY6nzl06BC2trauzgVfZfj73m3++Pe2trZw8ODBzvtJkmBzc/MlMW7veMc78Iu/+Iu44YYb8PDDD+O3fuu38M53vhP3338/lFIvmfGx1uLDH/4w3vzmN+Pmm28GgGe1pra2tnadX/69nyTsNkYA8Cu/8iu4/vrrce211+J73/sePvaxj+H48eP44z/+YwDPzxjtKcHVo4t3vvOd4ffXv/71uPXWW3H99dfjf/2v/4XBYHAVr6zHXsU//+f/PPx+yy234PWvfz1e9apX4d5778Xb3va2q3hlLy6OHTuGBx54oBMz7tHFpcYojnfecsstOHLkCN72trfh4Ycfxqte9arn5bv3lKvwwIEDUEpdlMVz8uRJHD58+Cpd1d8dbGxs4Kd+6qfw0EMP4fDhw6jrGhcuXOgc81IeK3/fTzd/Dh8+fFGij9Ya586de0mO24033ogDBw7goYceAvDSGJ877rgDd999N77yla/g5S9/eXj92aypw4cP7zq//Hs/KbjUGO2GW2+9FQA6c+i5jtGeElxZluGNb3wjvvSlL4XXrLX40pe+hKNHj17FK/u7gdlshocffhhHjhzBG9/4RqRp2hmr48eP4/HHH3/JjtUNN9yAw4cPd8ZkZ2cH3/zmN8OYHD16FBcuXMC3v/3tcMyXv/xlWGvDAnwp4YknnsDZs2dx5MgRAD/Z4+Ocwx133IEvfOEL+PKXv4wbbrih8/6zWVNHjx7F97///Y5wv+eee7C2toabbrrpxbmRFxDPNEa74bvf/S4AdObQcx6jK0wmuWr4H//jf7g8z93nPvc594Mf/MB94AMfcBsbG50MlZcKfvM3f9Pde++97pFHHnF/8Rd/4W677TZ34MABd+rUKeeccx/84AfdK17xCvflL3/Z/eVf/qU7evSoO3r06FW+6hcW0+nUfec733Hf+c53HAD3n//zf3bf+c533GOPPeacc+53fud33MbGhvviF7/ovve977mf+7mfczfccINbLpfhHO94xzvcT//0T7tvfvOb7mtf+5p7zWte4375l3/5at3S84qnG5/pdOr+7b/9t+7+++93jzzyiPvzP/9z9w/+wT9wr3nNa1xZluEcP6nj86EPfcitr6+7e++91504cSL8LBaLcMwzrSmttbv55pvd7bff7r773e+6P/uzP3PXXHONu/POO6/GLT3veKYxeuihh9ynPvUp95d/+ZfukUcecV/84hfdjTfe6N7ylreEczwfY7TnBJdzzv33//7f3Ste8QqXZZn72Z/9WfeNb3zjal/SVcEv/dIvuSNHjrgsy9zLXvYy90u/9EvuoYceCu8vl0v3r//1v3b79u1zw+HQ/cIv/II7ceLEVbziFx5f+cpXHICLft773vc65ygl/t/9u3/nDh065PI8d29729vc8ePHO+c4e/as++Vf/mU3Ho/d2tqa+1f/6l+56XR6Fe7m+cfTjc9isXC33367u+aaa1yapu76669373//+y9SCn9Sx2e3cQHgPvvZz4Zjns2aevTRR9073/lONxgM3IEDB9xv/uZvuqZpXuS7eWHwTGP0+OOPu7e85S1uc3PT5XnuXv3qV7uPfvSjbnt7u3Oe5zpGfVuTHj169Oixp7CnYlw9evTo0aNHL7h69OjRo8eeQi+4evTo0aPHnkIvuHr06NGjx55CL7h69OjRo8eeQi+4evTo0aPHnkIvuHr06NGjx55CL7h69OjRo8eeQi+4evTo0aPHnkIvuHr06NGjx55CL7h69OjRo8eeQi+4evTo0aPHnsL/DzEN3RXic2JeAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.imshow(img)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/datasets/gcsfuse.sh b/datasets/gcsfuse.sh new file mode 100755 index 0000000..de6235f --- /dev/null +++ b/datasets/gcsfuse.sh @@ -0,0 +1,52 @@ +#!/bin/bash + +# Copyright 2023 Google LLC +# +# 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 +# +# https://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. + +# Description: +# bash setup_gcsfuse.sh DATASET_GCS_BUCKET=maxtext-dataset MOUNT_PATH=dataset + +set -e + +# Set environment variables +for ARGUMENT in "$@"; do + IFS='=' read -r KEY VALUE <<< "$ARGUMENT" + export "$KEY"="$VALUE" + echo "$KEY"="$VALUE" +done + +if [[ -z ${DATASET_GCS_BUCKET} || -z ${MOUNT_PATH} ]]; then + echo "Please set arguments: DATASET_GCS_BUCKET and MOUNT_PATH" + exit 1 +fi + +if [[ "$DATASET_GCS_BUCKET" =~ gs:\/\/ ]] ; then + DATASET_GCS_BUCKET="${DATASET_GCS_BUCKET/gs:\/\//}" + echo "Removed gs:// from GCS bucket name, GCS bucket is $DATASET_GCS_BUCKET" +fi + +if [[ -d ${MOUNT_PATH} ]]; then + echo "$MOUNT_PATH exists, removing..." + fusermount -u $MOUNT_PATH || rm -rf $MOUNT_PATH +fi + +mkdir -p $MOUNT_PATH + +# see https://cloud.google.com/storage/docs/gcsfuse-cli for all configurable options of gcsfuse CLI +# Grain uses _PROCESS_MANAGEMENT_MAX_THREADS = 64 (https://github.com/google/grain/blob/main/grain/_src/python/grain_pool.py) +# Please make sure max-conns-per-host > grain_worker_count * _PROCESS_MANAGEMENT_MAX_THREADS + +gcsfuse -o ro --implicit-dirs --http-client-timeout=5s --max-conns-per-host=0 --max-idle-conns-per-host=10000 \ + --experimental-enable-json-read --kernel-list-cache-ttl-secs=-1 -o ro --config-file=$HOME/gcsfuse.yml \ + --log-file=$HOME/gcsfuse.json "$DATASET_GCS_BUCKET" "$MOUNT_PATH" \ No newline at end of file diff --git a/flaxdiff/models/attention.py b/flaxdiff/models/attention.py index 0d70b2f..992d68d 100644 --- a/flaxdiff/models/attention.py +++ b/flaxdiff/models/attention.py @@ -109,49 +109,57 @@ def chunk_scanner(chunk_idx, _): return jnp.concatenate(res, axis=-3) # fuse the chunked result back + class EfficientAttention(nn.Module): """ - Simple implementation of memory efficient attention. + Based on the pallas attention implementation. """ query_dim: int heads: int = 4 dim_head: int = 64 dtype: Any = jnp.float32 + precision: Any = jax.lax.Precision.HIGHEST + use_bias: bool = True + kernel_init: Callable = lambda : kernel_init(1.0) def setup(self): inner_dim = self.dim_head * self.heads # Weights were exported with old names {to_q, to_k, to_v, to_out} - self.query = nn.DenseGeneral(inner_dim, use_bias=False, dtype=self.dtype, name="to_q") - self.key = nn.DenseGeneral(inner_dim, use_bias=False, dtype=self.dtype, name="to_k") - self.value = nn.DenseGeneral(inner_dim, use_bias=False, dtype=self.dtype, name="to_v") - - self.proj_attn = nn.DenseGeneral(self.query_dim, dtype=self.dtype, name="to_out_0") + self.query = nn.DenseGeneral(inner_dim, use_bias=False, precision=self.precision, + kernel_init=self.kernel_init(), dtype=self.dtype, name="to_q") + self.key = nn.DenseGeneral(inner_dim, use_bias=False, precision=self.precision, + kernel_init=self.kernel_init(), dtype=self.dtype, name="to_k") + self.value = nn.DenseGeneral(inner_dim, use_bias=False, precision=self.precision, + kernel_init=self.kernel_init(), dtype=self.dtype, name="to_v") + self.proj_attn = nn.DenseGeneral(self.query_dim, use_bias=False, precision=self.precision, + kernel_init=self.kernel_init(), dtype=self.dtype, name="to_out_0") + # self.attnfn = make_fast_generalized_attention(qkv_dim=inner_dim, lax_scan_unroll=16) @nn.compact - def __call__(self, x, context=None): + def __call__(self, x:jax.Array, context=None): # x has shape [B, H * W, C] context = x if context is None else context query = self.query(x) key = self.key(context) value = self.value(context) - flatten_latent_dim = query.shape[-3] - if flatten_latent_dim % 64 == 0: - query_chunk_size = int(flatten_latent_dim / 64) - elif flatten_latent_dim % 16 == 0: - query_chunk_size = int(flatten_latent_dim / 16) - elif flatten_latent_dim % 4 == 0: - query_chunk_size = int(flatten_latent_dim / 4) - else: - query_chunk_size = int(flatten_latent_dim) - - hidden_states = jax_memory_efficient_attention( - query, key, value, query_chunk_size=query_chunk_size, key_chunk_size=4096 * 4 + # print(query.shape, key.shape, value.shape) + + # hidden_states = jax.experimental.pallas.ops.tpu.flash_attention.mha_reference( + # query, key, value, None + # ) + + hidden_states = nn.dot_product_attention( + query, key, value, dtype=self.dtype, broadcast_dropout=False, dropout_rng=None, precision=self.precision ) - + # hidden_states = self.attnfn( + # query, key, value, None + # ) + proj = self.proj_attn(hidden_states) return proj + class NormalAttention(nn.Module): """ Simple implementation of the normal attention. @@ -187,6 +195,7 @@ def setup(self): dtype=self.dtype, name="to_out_0", kernel_init=self.kernel_init() + # kernel_init=jax.nn.initializers.xavier_uniform() ) @nn.compact @@ -196,13 +205,175 @@ def __call__(self, x, context=None): query = self.query(x) key = self.key(context) value = self.value(context) - + hidden_states = nn.dot_product_attention( query, key, value, dtype=self.dtype, broadcast_dropout=False, dropout_rng=None, precision=self.precision ) proj = self.proj_attn(hidden_states) return proj +class AttentionBlock(nn.Module): + # Has self and cross attention + query_dim: int + heads: int = 4 + dim_head: int = 64 + dtype: Any = jnp.float32 + precision: Any = jax.lax.Precision.HIGHEST + use_bias: bool = True + kernel_init: Callable = lambda : kernel_init(1.0) + use_flash_attention:bool = False + use_cross_only:bool = False + + def setup(self): + if self.use_flash_attention: + attenBlock = EfficientAttention + else: + attenBlock = NormalAttention + + self.attention1 = attenBlock( + query_dim=self.query_dim, + heads=self.heads, + dim_head=self.dim_head, + name=f'Attention1', + precision=self.precision, + use_bias=self.use_bias, + dtype=self.dtype, + kernel_init=self.kernel_init + ) + self.attention2 = attenBlock( + query_dim=self.query_dim, + heads=self.heads, + dim_head=self.dim_head, + name=f'Attention2', + precision=self.precision, + use_bias=self.use_bias, + dtype=self.dtype, + kernel_init=self.kernel_init + ) + + self.ff = nn.DenseGeneral( + features=self.query_dim, + use_bias=self.use_bias, + precision=self.precision, + dtype=self.dtype, + kernel_init=self.kernel_init(), + name="ff" + ) + self.norm1 = nn.RMSNorm(epsilon=1e-5, dtype=self.dtype) + self.norm2 = nn.RMSNorm(epsilon=1e-5, dtype=self.dtype) + self.norm3 = nn.RMSNorm(epsilon=1e-5, dtype=self.dtype) + self.norm4 = nn.RMSNorm(epsilon=1e-5, dtype=self.dtype) + + @nn.compact + def __call__(self, hidden_states, context=None): + # self attention + residual = hidden_states + hidden_states = self.norm1(hidden_states) + if self.use_cross_only: + hidden_states = self.attention1(hidden_states, context) + else: + hidden_states = self.attention1(hidden_states) + hidden_states = hidden_states + residual + + # cross attention + residual = hidden_states + hidden_states = self.norm2(hidden_states) + hidden_states = self.attention2(hidden_states, context) + hidden_states = hidden_states + residual + + # feed forward + residual = hidden_states + hidden_states = self.norm3(hidden_states) + hidden_states = nn.gelu(hidden_states) + hidden_states = self.ff(hidden_states) + hidden_states = hidden_states + residual + + return hidden_states + +class TransformerBlock(nn.Module): + heads: int = 4 + dim_head: int = 32 + use_linear_attention: bool = True + dtype: Any = jnp.float32 + precision: Any = jax.lax.Precision.HIGH + use_projection: bool = False + use_flash_attention:bool = True + use_self_and_cross:bool = False + + @nn.compact + def __call__(self, x, context=None): + inner_dim = self.heads * self.dim_head + B, H, W, C = x.shape + normed_x = nn.RMSNorm(epsilon=1e-5, dtype=self.dtype)(x) + if self.use_projection == True: + if self.use_linear_attention: + projected_x = nn.Dense(features=inner_dim, + use_bias=False, precision=self.precision, + kernel_init=kernel_init(1.0), + dtype=self.dtype, name=f'project_in')(normed_x) + else: + projected_x = nn.Conv( + features=inner_dim, kernel_size=(1, 1), + kernel_init=kernel_init(1.0), + strides=(1, 1), padding='VALID', use_bias=False, dtype=self.dtype, + precision=self.precision, name=f'project_in_conv', + )(normed_x) + else: + projected_x = normed_x + inner_dim = C + + context = projected_x if context is None else context + + if self.use_self_and_cross: + projected_x = AttentionBlock( + query_dim=inner_dim, + heads=self.heads, + dim_head=self.dim_head, + name=f'Attention', + precision=self.precision, + use_bias=False, + dtype=self.dtype, + use_flash_attention=self.use_flash_attention, + use_cross_only=False + )(projected_x, context) + elif self.use_flash_attention == True: + projected_x = EfficientAttention( + query_dim=inner_dim, + heads=self.heads, + dim_head=self.dim_head, + name=f'Attention', + precision=self.precision, + use_bias=False, + dtype=self.dtype, + )(projected_x, context) + else: + projected_x = NormalAttention( + query_dim=inner_dim, + heads=self.heads, + dim_head=self.dim_head, + name=f'Attention', + precision=self.precision, + use_bias=False, + )(projected_x, context) + + + if self.use_projection == True: + if self.use_linear_attention: + projected_x = nn.Dense(features=C, precision=self.precision, + dtype=self.dtype, use_bias=False, + kernel_init=kernel_init(1.0), + name=f'project_out')(projected_x) + else: + projected_x = nn.Conv( + features=C, kernel_size=(1, 1), + kernel_init=kernel_init(1.0), + strides=(1, 1), padding='VALID', use_bias=False, dtype=self.dtype, + precision=self.precision, name=f'project_out_conv', + )(projected_x) + + out = x + projected_x + return out + class FlaxGEGLU(nn.Module): r""" Flax implementation of a Linear layer followed by the variant of the gated linear unit activation function from diff --git a/flaxdiff/models/simple_unet.py b/flaxdiff/models/simple_unet.py index 56a4aa6..4c90d7f 100644 --- a/flaxdiff/models/simple_unet.py +++ b/flaxdiff/models/simple_unet.py @@ -4,7 +4,7 @@ from typing import Dict, Callable, Sequence, Any, Union import einops from .common import kernel_init -from .attention import NormalAttention +from .attention import TransformerBlock class WeightStandardizedConv(nn.Module): """ apply weight standardization https://arxiv.org/abs/1903.10520 @@ -115,6 +115,8 @@ class SeparableConv(nn.Module): use_bias:bool=False kernel_init:Callable=kernel_init(1.0) padding:str="SAME" + dtype: Any = jnp.bfloat16 + precision: Any = jax.lax.Precision.HIGH @nn.compact def __call__(self, x): @@ -123,12 +125,16 @@ def __call__(self, x): features=in_features, kernel_size=self.kernel_size, strides=self.strides, kernel_init=self.kernel_init, feature_group_count=in_features, use_bias=self.use_bias, - padding=self.padding + padding=self.padding, + dtype=self.dtype, + precision=self.precision )(x) pointwise = nn.Conv( features=self.features, kernel_size=(1, 1), strides=(1, 1), kernel_init=self.kernel_init, - use_bias=self.use_bias + use_bias=self.use_bias, + dtype=self.dtype, + precision=self.precision )(depthwise) return pointwise @@ -138,6 +144,8 @@ class ConvLayer(nn.Module): kernel_size:tuple=(3, 3) strides:tuple=(1, 1) kernel_init:Callable=kernel_init(1.0) + dtype: Any = jnp.bfloat16 + precision: Any = jax.lax.Precision.HIGH def setup(self): # conv_type can be "conv", "separable", "conv_transpose" @@ -147,6 +155,8 @@ def setup(self): kernel_size=self.kernel_size, strides=self.strides, kernel_init=self.kernel_init, + dtype=self.dtype, + precision=self.precision ) elif self.conv_type == "w_conv": self.conv = WeightStandardizedConv( @@ -154,8 +164,9 @@ def setup(self): kernel_size=self.kernel_size, strides=self.strides, padding="SAME", - dtype=jnp.float32, - param_dtype=jnp.float32 + param_dtype=self.dtype, + dtype=self.dtype, + precision=self.precision ) elif self.conv_type == "separable": self.conv = SeparableConv( @@ -163,6 +174,8 @@ def setup(self): kernel_size=self.kernel_size, strides=self.strides, kernel_init=self.kernel_init, + dtype=self.dtype, + precision=self.precision ) elif self.conv_type == "conv_transpose": self.conv = nn.ConvTranspose( @@ -170,6 +183,8 @@ def setup(self): kernel_size=self.kernel_size, strides=self.strides, kernel_init=self.kernel_init, + dtype=self.dtype, + precision=self.precision ) def __call__(self, x): @@ -179,6 +194,8 @@ class Upsample(nn.Module): features:int scale:int activation:Callable=jax.nn.swish + dtype: Any = jnp.bfloat16 + precision: Any = jax.lax.Precision.HIGH @nn.compact def __call__(self, x, residual=None): @@ -191,6 +208,8 @@ def __call__(self, x, residual=None): features=self.features, kernel_size=(3, 3), strides=(1, 1), + dtype=self.dtype, + precision=self.precision )(out) if residual is not None: out = jnp.concatenate([out, residual], axis=-1) @@ -200,6 +219,8 @@ class Downsample(nn.Module): features:int scale:int activation:Callable=jax.nn.swish + dtype: Any = jnp.bfloat16 + precision: Any = jax.lax.Precision.HIGH @nn.compact def __call__(self, x, residual=None): @@ -207,7 +228,9 @@ def __call__(self, x, residual=None): "conv", features=self.features, kernel_size=(3, 3), - strides=(2, 2) + strides=(2, 2), + dtype=self.dtype, + precision=self.precision )(x) if residual is not None: if residual.shape[1] > out.shape[1]: @@ -220,55 +243,6 @@ def l2norm(t, axis=1, eps=1e-12): denom = jnp.clip(jnp.linalg.norm(t, ord=2, axis=axis, keepdims=True), eps) out = t/denom return (out) - -class AttentionBlock(nn.Module): - heads: int = 4 - dim_head: int = 32 - use_linear_attention: bool = True - dtype: Any = jnp.float32 - precision: Any = jax.lax.Precision.HIGH - use_projection: bool = False - - @nn.compact - def __call__(self, x): - inner_dim = self.heads * self.dim_head - B, H, W, C = x.shape - normed_x = nn.RMSNorm(epsilon=1e-5, dtype=self.dtype)(x) - if self.use_projection == True: - if self.use_linear_attention: - projected_x = nn.Dense(features=inner_dim, use_bias=False, precision=self.precision, dtype=self.dtype, name=f'project_in')(normed_x) - else: - projected_x = nn.Conv( - features=inner_dim, kernel_size=(1, 1), - strides=(1, 1), padding='VALID', use_bias=False, dtype=self.dtype, - precision=self.precision, name=f'project_in_conv', - )(normed_x) - else: - projected_x = normed_x - inner_dim = C - - projected_x = NormalAttention( - query_dim=inner_dim, - heads=self.heads, - dim_head=self.dim_head, - name=f'Attention', - precision=self.precision, - use_bias=False, - )(projected_x) - - if self.use_projection == True: - if self.use_linear_attention: - projected_x = nn.Dense(features=C, precision=self.precision, dtype=self.dtype, use_bias=False, name=f'project_out')(projected_x) - else: - projected_x = nn.Conv( - features=C, kernel_size=(1, 1), - strides=(1, 1), padding='VALID', use_bias=False, dtype=self.dtype, - precision=self.precision, name=f'project_out_conv', - )(projected_x) - - out = x + projected_x - return out - class ResidualBlock(nn.Module): conv_type:str features:int @@ -280,9 +254,11 @@ class ResidualBlock(nn.Module): res:int=2 norm_groups:int=8 kernel_init:Callable=kernel_init(1.0) + dtype: Any = jnp.float32 + precision: Any = jax.lax.Precision.HIGHEST @nn.compact - def __call__(self, x:jax.Array, temb:jax.Array, extra_features:jax.Array=None): + def __call__(self, x:jax.Array, temb:jax.Array, textemb:jax.Array=None, extra_features:jax.Array=None): residual = x out = nn.GroupNorm(self.norm_groups)(x) out = self.activation(out) @@ -293,10 +269,16 @@ def __call__(self, x:jax.Array, temb:jax.Array, extra_features:jax.Array=None): kernel_size=self.kernel_size, strides=self.strides, kernel_init=self.kernel_init, - name="conv1" + name="conv1", + dtype=self.dtype, + precision=self.precision )(out) - temb = nn.DenseGeneral(features=self.features, name="temb_projection")(temb) + temb = nn.DenseGeneral( + features=self.features, + name="temb_projection", + dtype=self.dtype, + precision=self.precision)(temb) temb = jnp.expand_dims(jnp.expand_dims(temb, 1), 1) # scale, shift = jnp.split(temb, 2, axis=-1) # out = out * (1 + scale) + shift @@ -311,7 +293,9 @@ def __call__(self, x:jax.Array, temb:jax.Array, extra_features:jax.Array=None): kernel_size=self.kernel_size, strides=self.strides, kernel_init=self.kernel_init, - name="conv2" + name="conv2", + dtype=self.dtype, + precision=self.precision )(out) if residual.shape != out.shape: @@ -321,15 +305,17 @@ def __call__(self, x:jax.Array, temb:jax.Array, extra_features:jax.Array=None): kernel_size=(1, 1), strides=1, kernel_init=self.kernel_init, - name="residual_conv" + name="residual_conv", + dtype=self.dtype, + precision=self.precision )(residual) out = out + residual out = jnp.concatenate([out, extra_features], axis=-1) if extra_features is not None else out return out - -class SimpleUNet(nn.Module): + +class Unet(nn.Module): emb_features:int=64*4, feature_depths:list=[64, 128, 256, 512], attention_configs:list=[{"heads":8}, {"heads":8}, {"heads":8}, {"heads":8}], @@ -337,24 +323,32 @@ class SimpleUNet(nn.Module): num_middle_res_blocks:int=1, activation:Callable = jax.nn.swish norm_groups:int=8 + dtype: Any = jnp.bfloat16 + precision: Any = jax.lax.Precision.HIGH @nn.compact - def __call__(self, x, temb): + def __call__(self, x, temb, textcontext=None): # print("embedding features", self.emb_features) temb = FourierEmbedding(features=self.emb_features)(temb) temb = TimeProjection(features=self.emb_features)(temb) + + _, TS, TC = textcontext.shape + # print("time embedding", temb.shape) feature_depths = self.feature_depths attention_configs = self.attention_configs - conv_type = "conv" + conv_type = up_conv_type = down_conv_type = middle_conv_type = "conv" + # middle_conv_type = "separable" x = ConvLayer( - "conv", + conv_type, features=self.feature_depths[0], kernel_size=(3, 3), strides=(1, 1), - kernel_init=kernel_init(1.0) + kernel_init=kernel_init(1.0), + dtype=self.dtype, + precision=self.precision )(x) downs = [x] @@ -364,19 +358,30 @@ def __call__(self, x, temb): # dim_in = dim_out for j in range(self.num_res_blocks): x = ResidualBlock( - conv_type, + down_conv_type, name=f"down_{i}_residual_{j}", features=dim_in, kernel_init=kernel_init(1.0), kernel_size=(3, 3), strides=(1, 1), activation=self.activation, - norm_groups=self.norm_groups + norm_groups=self.norm_groups, + dtype=self.dtype, + precision=self.precision )(x, temb) if attention_config is not None and j == self.num_res_blocks - 1: # Apply attention only on the last block - x = AttentionBlock(heads=attention_config['heads'], + B, H, W, _ = x.shape + if H > TS: + padded_context = jnp.pad(textcontext, ((0, 0), (0, H - TS), (0, 0)), mode='constant', constant_values=0).reshape((B, 1, H, TC)) + else: + padded_context = None + x = TransformerBlock(heads=attention_config['heads'], dtype=attention_config.get('dtype', jnp.float32), dim_head=dim_in // attention_config['heads'], - name=f"down_{i}_attention_{j}")(x) + use_flash_attention=attention_config.get("flash_attention", True), + use_projection=attention_config.get("use_projection", False), + use_self_and_cross=attention_config.get("use_self_and_cross", True), + precision=attention_config.get("precision", self.precision), + name=f"down_{i}_attention_{j}")(x, padded_context) # print("down residual for feature level", i, "is of shape", x.shape, "features", dim_in) downs.append(x) if i != len(feature_depths) - 1: @@ -385,37 +390,47 @@ def __call__(self, x, temb): features=dim_out, scale=2, activation=self.activation, - name=f"down_{i}_downsample" + name=f"down_{i}_downsample", + dtype=self.dtype, + precision=self.precision )(x) # Middle Blocks middle_dim_out = self.feature_depths[-1] middle_attention = self.attention_configs[-1] - for j in range(self.num_middle_res_blocks): x = ResidualBlock( - conv_type, + middle_conv_type, name=f"middle_res1_{j}", features=middle_dim_out, kernel_init=kernel_init(1.0), kernel_size=(3, 3), strides=(1, 1), activation=self.activation, - norm_groups=self.norm_groups + norm_groups=self.norm_groups, + dtype=self.dtype, + precision=self.precision )(x, temb) if middle_attention is not None and j == self.num_middle_res_blocks - 1: # Apply attention only on the last block - x = AttentionBlock(heads=attention_config['heads'], - dim_head=middle_dim_out // attention_config['heads'], - use_linear_attention=False, name=f"middle_attention_{j}")(x) + x = TransformerBlock(heads=middle_attention['heads'], dtype=middle_attention.get('dtype', jnp.float32), + dim_head=middle_dim_out // middle_attention['heads'], + use_flash_attention=middle_attention.get("flash_attention", True), + use_linear_attention=False, + use_projection=middle_attention.get("use_projection", False), + use_self_and_cross=False, + precision=attention_config.get("precision", self.precision), + name=f"middle_attention_{j}")(x) x = ResidualBlock( - conv_type, + middle_conv_type, name=f"middle_res2_{j}", features=middle_dim_out, kernel_init=kernel_init(1.0), kernel_size=(3, 3), strides=(1, 1), activation=self.activation, - norm_groups=self.norm_groups + norm_groups=self.norm_groups, + dtype=self.dtype, + precision=self.precision )(x, temb) # Upscaling Blocks @@ -427,27 +442,51 @@ def __call__(self, x, temb): # kernel_size = (1 + 2 * (j + 1), 1 + 2 * (j + 1)) kernel_size = (3, 3) x = ResidualBlock( - conv_type,# if j == 0 else "separable", + up_conv_type,# if j == 0 else "separable", name=f"up_{i}_residual_{j}", features=dim_out, kernel_init=kernel_init(1.0), kernel_size=kernel_size, strides=(1, 1), activation=self.activation, - norm_groups=self.norm_groups + norm_groups=self.norm_groups, + dtype=self.dtype, + precision=self.precision )(x, temb) if attention_config is not None and j == self.num_res_blocks - 1: # Apply attention only on the last block - x = AttentionBlock(heads=attention_config['heads'], + B, H, W, _ = x.shape + if H > TS: + padded_context = jnp.pad(textcontext, ((0, 0), (0, H - TS), (0, 0)), mode='constant', constant_values=0).reshape((B, 1, H, TC)) + else: + padded_context = None + x = TransformerBlock(heads=attention_config['heads'], dtype=attention_config.get('dtype', jnp.float32), dim_head=dim_out // attention_config['heads'], - name=f"up_{i}_attention_{j}")(x) + use_flash_attention=attention_config.get("flash_attention", True), + use_projection=attention_config.get("use_projection", False), + use_self_and_cross=attention_config.get("use_self_and_cross", True), + precision=attention_config.get("precision", self.precision), + name=f"up_{i}_attention_{j}")(x, padded_context) # print("Upscaling ", i, x.shape) if i != len(feature_depths) - 1: x = Upsample( features=feature_depths[-i], scale=2, activation=self.activation, - name=f"up_{i}_upsample" + name=f"up_{i}_upsample", + dtype=self.dtype, + precision=self.precision )(x) + + # x = nn.GroupNorm(8)(x) + x = ConvLayer( + conv_type, + features=self.feature_depths[0], + kernel_size=(3, 3), + strides=(1, 1), + kernel_init=kernel_init(0.0), + dtype=self.dtype, + precision=self.precision + )(x) x = jnp.concatenate([x, downs.pop()], axis=-1) @@ -459,18 +498,22 @@ def __call__(self, x, temb): kernel_size=(3,3), strides=(1, 1), activation=self.activation, - norm_groups=self.norm_groups + norm_groups=self.norm_groups, + dtype=self.dtype, + precision=self.precision )(x, temb) x = nn.GroupNorm(self.norm_groups)(x) x = self.activation(x) - output = ConvLayer( - "conv", + noise_out = ConvLayer( + conv_type, features=3, - kernel_size=(3,3), + kernel_size=(3, 3), strides=(1, 1), # activation=jax.nn.mish - kernel_init=kernel_init(0.0) + kernel_init=kernel_init(0.0), + dtype=self.dtype, + precision=self.precision )(x) - return output#, attentions \ No newline at end of file + return noise_out#, attentions \ No newline at end of file diff --git a/test.json b/test.json new file mode 100644 index 0000000..6759d2d --- /dev/null +++ b/test.json @@ -0,0 +1 @@ +{"successes": 1000} \ No newline at end of file