diff --git a/.gitignore b/.gitignore index 25ea1bf22a5..dfc1fee8063 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,4 @@ tests/data/ work/ .github/CODEOWNERS-tmp *.un~ +*.nf-test* diff --git a/modules/sanger/bioinfotongli/cellpose/main.nf b/modules/sanger/bioinfotongli/cellpose/main.nf index 3fc9d563c1a..47d0a9888a0 100644 --- a/modules/sanger/bioinfotongli/cellpose/main.nf +++ b/modules/sanger/bioinfotongli/cellpose/main.nf @@ -1,21 +1,14 @@ -container_version = "0.1.0" -params.debug = false -params.cellpose_model_dir = "./" - process BIOINFOTONGLI_CELLPOSE { tag "${meta.id}" - debug params.debug - cache true - label "gpu" label "medium_mem" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - "quay.io/bioinfotongli/tiled_cellpose:${container_version}": - "quay.io/bioinfotongli/tiled_cellpose:${container_version}"}" + "quay.io/cellgeni/tiled_cellpose:0.1.3": + "quay.io/cellgeni/tiled_cellpose:0.1.3"}" containerOptions = { - workflow.containerEngine == "singularity" ? "--cleanenv --nv -B ${params.cellpose_model_dir}:/tmp/cellpose_models -B ${params.NUMBA_CACHE_DIR}:/tmp/numba_cache": - ( workflow.containerEngine == "docker" ? "--gpus all -v ${params.cellpose_model_dir}:/tmp/cellpose_models": null ) + workflow.containerEngine == "singularity" ? "--cleanenv --nv": + ( workflow.containerEngine == "docker" ? "--gpus all": null ) } publishDir params.out_dir + "/naive_cellpose_segmentation" @@ -24,30 +17,42 @@ process BIOINFOTONGLI_CELLPOSE { tuple val(meta), val(x_min), val(y_min), val(x_max), val(y_max), path(image), val(cell_diameter) output: - tuple val(meta), val(cell_diameter), path("${stem}/${stem}_cp_outlines.txt"), emit: outlines, optional: true - tuple val(meta), val(cell_diameter), path("${stem}/${stem}_cp_outlines.wkt"), emit: wkts - tuple val(meta), val(cell_diameter), path("${stem}/${stem}*png"), emit: cp_plots, optional: true + tuple val(meta), path("${prefix}/${prefix}_cp_outlines.txt"), emit: outlines, optional: true + tuple val(meta), path("${prefix}/${prefix}_cp_outlines.wkt"), emit: wkts + tuple val(meta), path("${prefix}/${prefix}*png"), emit: cp_plots, optional: true path "versions.yml" , emit: versions script: - stem = "${meta.id}-${x_min}_${y_min}_${x_max}_${y_max}-diam_${cell_diameter}" + prefix = "${meta.id}-${x_min}_${y_min}_${x_max}_${y_max}-diam_${cell_diameter}" def args = task.ext.args ?: '' """ - export CELLPOSE_LOCAL_MODELS_PATH=/tmp/cellpose_models - export NUMBA_CACHE_DIR=/tmp/numba_cache - /opt/conda/bin/python /scripts/cellpose_seg.py run \ + cellpose_seg.py run \ --image ${image} \ --x_min ${x_min} \ --y_min ${y_min} \ --x_max ${x_max} \ --y_max ${y_max} \ --cell_diameter ${cell_diameter} \ - --out_dir "${stem}" \ + --out_dir "${prefix}" \ ${args} cat <<-END_VERSIONS > versions.yml "${task.process}": - : \$(echo \$(/scripts/cellpose_seg.py version 2>&1) | sed 's/^.*cellpose_seg.py //; s/Using.*\$//' )) + : \$(echo \$(cellpose_seg.py version)) + END_VERSIONS + """ + + + stub: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}-${x_min}_${y_min}_${x_max}_${y_max}-diam_${cell_diameter}" + """ + mkdir "${prefix}" + touch "${prefix}/${prefix}_cp_outlines.wkt" + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bioinfotongli: \$(cellpose_seg.py version) END_VERSIONS """ } diff --git a/modules/sanger/bioinfotongli/cellpose/meta.yml b/modules/sanger/bioinfotongli/cellpose/meta.yml index 6fe97cdeed7..e38399795e5 100644 --- a/modules/sanger/bioinfotongli/cellpose/meta.yml +++ b/modules/sanger/bioinfotongli/cellpose/meta.yml @@ -14,38 +14,65 @@ tools: documentation: "https://cellpose.readthedocs.io/en/latest/" tool_dev_url: "https://github.com/MouseLand/cellpose" doi: "https://doi.org/10.1038/s41592-020-01018-x" - licence: "" + licence: ["BSD-3-Clause license"] input: - # Only when we have meta - meta: type: map description: | Groovy Map containing sample information - e.g. `[ id:'test', use_gpu:true, channels:[1,2] ]` + e.g. `[ id:'test' ]` + - x_min: + type: integer + description: x_min of the region of interest + + - x_max: + type: integer + description: x_max of the region of interest + + - y_min: + type: integer + description: y_min of the region of interest + + - y_max: + type: integer + description: y_max of the region of interest + - imgs: type: file description: raw images for segmentation - pattern: "*.{tif,ome.tif,ome.tiff,png}" + pattern: "*.{tif,ome.tif,ome.tiff}" + - cell_diameter: + type: integer + description: expected cell diameter in pixels + output: - #Only when we have meta - meta: type: map - description: | + description: Groovy Map containing sample information - e.g. `[ id:'test', use_gpu:true, channels:[0,1] ]` + e.g. `[ id:'test' ]` - versions: type: file description: File containing software versions pattern: "versions.yml" - - segmentation: + - "${stem}/${stem}_cp_outlines.txt": type: file - description: folder contains segmentation information - pattern: "*" + description: + pattern: "*.txt" + - "${stem}/${stem}_cp_outlines.wkt": + type: file + description: + pattern: "*.wkt" + + - "${stem}/${stem}*png": + type: file + description: + pattern: "*.png" authors: - "@BioinfoTongLI" diff --git a/modules/sanger/bioinfotongli/cellpose/resources/usr/bin/cellpose_seg.py b/modules/sanger/bioinfotongli/cellpose/resources/usr/bin/cellpose_seg.py new file mode 100755 index 00000000000..5e940f4def4 --- /dev/null +++ b/modules/sanger/bioinfotongli/cellpose/resources/usr/bin/cellpose_seg.py @@ -0,0 +1,115 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Copyright (c) 2024 Wellcome Sanger Institute + +""" +This script will slice the image in XY dimension and save the slices coordinates in json files +""" +import fire +import os +from cellpose import core, io, models +import numpy as np +from shapely import Polygon, wkt, MultiPolygon +from glob import glob +from imagetileprocessor import slice_and_crop_image + +import logging + +logging.basicConfig(level=logging.INFO) + +VERSION="0.1.3" + + +def main( + image:str, + x_min:int, x_max:int, y_min:int, y_max:int, + out_dir:str, + cell_diameter:int=30, + cellpose_model:str="cyto3", + zs:list=[0], + channels:list=[0, 0], + resolution_level:int=0, + **cp_params + ): + + crop = slice_and_crop_image( + image, x_min, x_max, y_min, y_max, zs, np.array(channels), resolution_level + ) + # if z is missing, add it + if len(crop.shape) == 3: + crop = np.expand_dims(crop, axis=0) + + logging.info(f"Loading Cellpose model: {cellpose_model} (GPU: {core.use_gpu()})") + model = models.Cellpose(gpu=core.use_gpu(), model_type=cellpose_model) + # model = denoise.CellposeDenoiseModel( + # gpu=core.use_gpu(), + # model_type=cellpose_model, + # restore_type="denoise_cyto3", + # chan2_restore=False + # ) + + masks, flows, _, _ = model.eval( + crop, + channels=channels, + diameter=cell_diameter, + channel_axis=1, + z_axis=0, + **cp_params, + ) + os.mkdir(out_dir) + io.save_masks( + np.squeeze(crop), + masks, + flows, + file_names=out_dir, + save_txt=True, + png=True, + tif=False, + save_flows=False, + save_outlines=True, + savedir=out_dir, + ) + # convert cellpose outlines to WTK + logging.info(f"Converting outlines to WKT format") + # prefix_list = out_dir.split(".") + # if len(prefix_list) > 1: + # prefix = ".".join(prefix_list[:-1]) + # else: + # prefix = prefix_list[0] + # outlines_file = os.path.join(out_dir, f"{prefix}_cp_outlines.txt") + outline_file = glob(f"{out_dir}/*_cp_outlines.txt") + + if len(outline_file) > 0: + # if os.path.exists(outlines_file): + wkts = [] + with open(outline_file[0], "rt") as f: + for line in f.readlines(): + # split by comma and make integer + try: + outline = list(map(int, line.strip().split(","))) + except: + continue + outline = np.array(list(zip(outline[::2], outline[1::2]))) + # transport tile coordinats to original image coordinates + outline[:, 0] += x_min + outline[:, 1] += y_min + poly = Polygon(outline).buffer(0) + if isinstance(poly, MultiPolygon): + poly = poly.geoms[0] + wkts.append(poly) + + wkt_filename = os.path.join(out_dir, f"{out_dir}_cp_outlines.wkt") + with open(wkt_filename, "wt") as f: + f.write(wkt.dumps(MultiPolygon(wkts))) + else: + logging.info("No outlines file found") + with open(os.path.join(out_dir, f"{out_dir}_cp_outlines.wkt"), "wt") as f: + f.write("") + + +if __name__ == "__main__": + options = { + "run": main, + "version": VERSION, + } + fire.Fire(options) diff --git a/modules/sanger/bioinfotongli/cellpose/tests/main.nf.test b/modules/sanger/bioinfotongli/cellpose/tests/main.nf.test new file mode 100644 index 00000000000..659f2d78f43 --- /dev/null +++ b/modules/sanger/bioinfotongli/cellpose/tests/main.nf.test @@ -0,0 +1,109 @@ +nextflow_process { + + name "Test Process BIOINFOTONGLI_CELLPOSE" + script "../main.nf" + config "./nextflow.config" + process "BIOINFOTONGLI_CELLPOSE" + + tag "modules" + tag "modules_sanger" + tag "bioinfotongli" + tag "bioinfotongli/cellpose" + + test("mouse_heart - tiff - 500") { + + when { + process { + """ + input[0] = [ + [ id:'test'], + 0, 0, 500, 500, + file(params.modules_testdata_base_path + 'imaging/tiff/mindagap.mouse_heart.wga.tiff', checkIfExists: true), + 20, + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("mouse_heart - tiff - 200") { + + when { + process { + """ + input[0] = [ + [ id:'test'], + 0, 0, 200, 200, + file(params.modules_testdata_base_path + 'imaging/tiff/mindagap.mouse_heart.wga.tiff', checkIfExists: true), + 20, + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + + test("mouse_heart - tiff - 200 - large cell diameter") { + + when { + process { + """ + input[0] = [ + [ id:'test'], + 0, 0, 200, 200, + file(params.modules_testdata_base_path + 'imaging/tiff/mindagap.mouse_heart.wga.tiff', checkIfExists: true), + 50, + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + } + + test("mouse_heart - tiff - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test',], + 0, 0, 100, 100, + file(params.modules_testdata_base_path + 'imaging/tiff/mindagap.mouse_heart.wga.tiff', checkIfExists: true), + 20, + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/sanger/bioinfotongli/cellpose/tests/main.nf.test.snap b/modules/sanger/bioinfotongli/cellpose/tests/main.nf.test.snap new file mode 100644 index 00000000000..ea29e20e420 --- /dev/null +++ b/modules/sanger/bioinfotongli/cellpose/tests/main.nf.test.snap @@ -0,0 +1,260 @@ +{ + "mouse_heart - tiff - stub": { + "content": [ + { + "0": [ + + ], + "1": [ + [ + { + "id": "test" + }, + "test-0_0_100_100-diam_20_cp_outlines.wkt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "2": [ + + ], + "3": [ + "versions.yml:md5,788c0df84369a53972b9b700e85517db" + ], + "cp_plots": [ + + ], + "outlines": [ + + ], + "versions": [ + "versions.yml:md5,788c0df84369a53972b9b700e85517db" + ], + "wkts": [ + [ + { + "id": "test" + }, + "test-0_0_100_100-diam_20_cp_outlines.wkt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.04.4" + }, + "timestamp": "2025-03-14T13:59:33.790387511" + }, + "mouse_heart - tiff - 500": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test-0_0_500_500-diam_20_cp_outlines.txt:md5,adb12dc55d990539b15f3ce61d7c8efe" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test-0_0_500_500-diam_20_cp_outlines.wkt:md5,fe837bbb6adc3d13928ed9b3405e4d9c" + ] + ], + "2": [ + [ + { + "id": "test" + }, + [ + "test-0_0_500_500-diam_20_cp_masks.png:md5,a1e143c85d8314e9abe9d2d35ea9760a", + "test-0_0_500_500-diam_20_outlines.png:md5,36b8f6235c68416d267290547010f453" + ] + ] + ], + "3": [ + "versions.yml:md5,25ff5b4eb40138ddc13aaa0efd50b4ef" + ], + "cp_plots": [ + [ + { + "id": "test" + }, + [ + "test-0_0_500_500-diam_20_cp_masks.png:md5,a1e143c85d8314e9abe9d2d35ea9760a", + "test-0_0_500_500-diam_20_outlines.png:md5,36b8f6235c68416d267290547010f453" + ] + ] + ], + "outlines": [ + [ + { + "id": "test" + }, + "test-0_0_500_500-diam_20_cp_outlines.txt:md5,adb12dc55d990539b15f3ce61d7c8efe" + ] + ], + "versions": [ + "versions.yml:md5,25ff5b4eb40138ddc13aaa0efd50b4ef" + ], + "wkts": [ + [ + { + "id": "test" + }, + "test-0_0_500_500-diam_20_cp_outlines.wkt:md5,fe837bbb6adc3d13928ed9b3405e4d9c" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.04.4" + }, + "timestamp": "2025-03-14T13:58:27.28570216" + }, + "mouse_heart - tiff - 200": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test-0_0_200_200-diam_20_cp_outlines.txt:md5,c5b8d1848233c7636be9fd1ed6b00010" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test-0_0_200_200-diam_20_cp_outlines.wkt:md5,78ad1ddefc488c798b46ad3c18025912" + ] + ], + "2": [ + [ + { + "id": "test" + }, + [ + "test-0_0_200_200-diam_20_cp_masks.png:md5,96c74f7dc06a1ffb1143ad03c4796029", + "test-0_0_200_200-diam_20_outlines.png:md5,b3bdb19c06bf039f6c6bfaf051ff32fa" + ] + ] + ], + "3": [ + "versions.yml:md5,25ff5b4eb40138ddc13aaa0efd50b4ef" + ], + "cp_plots": [ + [ + { + "id": "test" + }, + [ + "test-0_0_200_200-diam_20_cp_masks.png:md5,96c74f7dc06a1ffb1143ad03c4796029", + "test-0_0_200_200-diam_20_outlines.png:md5,b3bdb19c06bf039f6c6bfaf051ff32fa" + ] + ] + ], + "outlines": [ + [ + { + "id": "test" + }, + "test-0_0_200_200-diam_20_cp_outlines.txt:md5,c5b8d1848233c7636be9fd1ed6b00010" + ] + ], + "versions": [ + "versions.yml:md5,25ff5b4eb40138ddc13aaa0efd50b4ef" + ], + "wkts": [ + [ + { + "id": "test" + }, + "test-0_0_200_200-diam_20_cp_outlines.wkt:md5,78ad1ddefc488c798b46ad3c18025912" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.04.4" + }, + "timestamp": "2025-03-14T13:58:53.169774973" + }, + "mouse_heart - tiff - 200 - large cell diameter": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test-0_0_200_200-diam_50_cp_outlines.txt:md5,ddc6f3da007fb90b5c9ea30c9a3ae807" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test-0_0_200_200-diam_50_cp_outlines.wkt:md5,bf5ce6d27e28f6985c4dbdfbf5d3f0ab" + ] + ], + "2": [ + [ + { + "id": "test" + }, + [ + "test-0_0_200_200-diam_50_cp_masks.png:md5,2385b7e1d3a3432166029074d43b15dd", + "test-0_0_200_200-diam_50_outlines.png:md5,129fd998c787dc5a62575a3c8a7f2bb2" + ] + ] + ], + "3": [ + "versions.yml:md5,25ff5b4eb40138ddc13aaa0efd50b4ef" + ], + "cp_plots": [ + [ + { + "id": "test" + }, + [ + "test-0_0_200_200-diam_50_cp_masks.png:md5,2385b7e1d3a3432166029074d43b15dd", + "test-0_0_200_200-diam_50_outlines.png:md5,129fd998c787dc5a62575a3c8a7f2bb2" + ] + ] + ], + "outlines": [ + [ + { + "id": "test" + }, + "test-0_0_200_200-diam_50_cp_outlines.txt:md5,ddc6f3da007fb90b5c9ea30c9a3ae807" + ] + ], + "versions": [ + "versions.yml:md5,25ff5b4eb40138ddc13aaa0efd50b4ef" + ], + "wkts": [ + [ + { + "id": "test" + }, + "test-0_0_200_200-diam_50_cp_outlines.wkt:md5,bf5ce6d27e28f6985c4dbdfbf5d3f0ab" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.04.4" + }, + "timestamp": "2025-03-14T13:59:19.215323688" + } +} \ No newline at end of file diff --git a/modules/sanger/bioinfotongli/cellpose/tests/nextflow.config b/modules/sanger/bioinfotongli/cellpose/tests/nextflow.config new file mode 100644 index 00000000000..a0579a4aba5 --- /dev/null +++ b/modules/sanger/bioinfotongli/cellpose/tests/nextflow.config @@ -0,0 +1,5 @@ +nextflow.enable.moduleBinaries = true + +docker.enabled = true + +params.modules_testdata_base_path = "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/" \ No newline at end of file diff --git a/modules/sanger/tiledstardist/environment.yml b/modules/sanger/bioinfotongli/concatenatewkts/environment.yml similarity index 100% rename from modules/sanger/tiledstardist/environment.yml rename to modules/sanger/bioinfotongli/concatenatewkts/environment.yml diff --git a/modules/sanger/bioinfotongli/concatenatewkts/main.nf b/modules/sanger/bioinfotongli/concatenatewkts/main.nf new file mode 100644 index 00000000000..908a4331128 --- /dev/null +++ b/modules/sanger/bioinfotongli/concatenatewkts/main.nf @@ -0,0 +1,48 @@ +process BIOINFOTONGLI_CONCATENATEWKTS { + tag "$meta.id" + label 'process_single' + + // conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'quay.io/bioinfotongli/tiled_spotiflow:0.5.2': + 'quay.io/bioinfotongli/tiled_spotiflow:0.5.2' }" + + input: + tuple val(meta), path(wkts) + + output: + tuple val(meta), path("${output_name}"), emit: concatenated_peaks + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + output_name = "${prefix}_merged_peaks.csv" + """ + merge_wkts.py run \\ + -output_name ${output_name} \\ + ${wkts} \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bioinfotongli: \$(merge_wkts.py version) + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + output_name = "${prefix}_merged_peaks.csv" + """ + touch ${output_name} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bioinfotongli: \$(merge_wkts.py version) + END_VERSIONS + """ +} diff --git a/modules/sanger/bioinfotongli/concatenatewkts/meta.yml b/modules/sanger/bioinfotongli/concatenatewkts/meta.yml new file mode 100644 index 00000000000..34ffb14f86e --- /dev/null +++ b/modules/sanger/bioinfotongli/concatenatewkts/meta.yml @@ -0,0 +1,52 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "bioinfotongli_concatenatewkts" +description: Concatenate multiple WKT files into one in a brutal way +keywords: + - wkt + - segmentation + - post-processing +tools: + - "bioinfotongli": + description: "Concatenate multiple WKT files into one in a brutal way" + homepage: "" + documentation: "" + tool_dev_url: "" + doi: "" + licence: MIT + identifier: + +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + + - wkts: + type: file + description: wkts files containing multipoint geometries + pattern: "*.wkt" + +output: + - concatenated_peaks: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - "${prefix}_merged_peaks.csv": + type: file + description: peaks in CSV format + pattern: "*.csv" + + - versions: + - "versions.yml": + type: file + description: File containing software versions + pattern: "versions.yml" + +authors: + - "@BioinfoTongLI" +maintainers: + - "@BioinfoTongLI" diff --git a/modules/sanger/bioinfotongli/concatenatewkts/resources/usr/bin/merge_wkts.py b/modules/sanger/bioinfotongli/concatenatewkts/resources/usr/bin/merge_wkts.py new file mode 100755 index 00000000000..08e18dc585d --- /dev/null +++ b/modules/sanger/bioinfotongli/concatenatewkts/resources/usr/bin/merge_wkts.py @@ -0,0 +1,37 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Copyright (c) 2024 Wellcome Sanger Institute + +import fire +from pandas import DataFrame +from shapely import from_wkt +from pathlib import Path + + +def load_wkts_as_table(wkt_files:list): + names, ys, xs = [], [], [] + for wkt_file in wkt_files: + current_stem = Path(wkt_file).stem + with open(wkt_file, 'r') as f: + for g in from_wkt(f.read()).geoms: + names.append(current_stem) + ys.append(g.y) + xs.append(g.x) + return {"feature_name": names, "Y": ys, "X": xs} + + +def main(*wkt_files, output_name:str): + tab = DataFrame(load_wkts_as_table(wkt_files)) + tab["instance_id"] = tab.index + 1 + tab.set_index("instance_id", inplace=True) + tab['x_int'] = tab['X'].astype(int) + tab['y_int'] = tab['Y'].astype(int) + tab.to_csv(output_name) + + +if __name__ == "__main__": + options = { + 'run': main, + 'version' : "0.0.2" + } + fire.Fire(options) \ No newline at end of file diff --git a/modules/sanger/bioinfotongli/concatenatewkts/tests/main.nf.test b/modules/sanger/bioinfotongli/concatenatewkts/tests/main.nf.test new file mode 100644 index 00000000000..2d9a1c6e257 --- /dev/null +++ b/modules/sanger/bioinfotongli/concatenatewkts/tests/main.nf.test @@ -0,0 +1,63 @@ +// nf-core modules test bioinfotongli/concatenatewkts +nextflow_process { + + name "Test Process BIOINFOTONGLI_CONCATENATEWKTS" + script "../main.nf" + process "BIOINFOTONGLI_CONCATENATEWKTS" + + tag "modules" + tag "modules_sanger" + tag "bioinfotongli" + tag "bioinfotongli/concatenatewkts" + + test("mouse heart - wkt ") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'test_merged_peaks_ch_-1.wkt', checkIfExists: true), + ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("mouse heart - wkt - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + [ + file(params.modules_testdata_base_path + 'test_merged_peaks_ch_-1.wkt', checkIfExists: true), + ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/sanger/bioinfotongli/concatenatewkts/tests/main.nf.test.snap b/modules/sanger/bioinfotongli/concatenatewkts/tests/main.nf.test.snap new file mode 100644 index 00000000000..28d00cb5938 --- /dev/null +++ b/modules/sanger/bioinfotongli/concatenatewkts/tests/main.nf.test.snap @@ -0,0 +1,68 @@ +{ + "mouse heart - wkt ": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_merged_peaks.csv:md5,d5e0dfaa5058349ba1eb51fe9b286b58" + ] + ], + "1": [ + "versions.yml:md5,fdcbf4adb208c7d07a3288f0634f3610" + ], + "concatenated_peaks": [ + [ + { + "id": "test" + }, + "test_merged_peaks.csv:md5,d5e0dfaa5058349ba1eb51fe9b286b58" + ] + ], + "versions": [ + "versions.yml:md5,fdcbf4adb208c7d07a3288f0634f3610" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.04.4" + }, + "timestamp": "2025-02-07T14:58:56.032796301" + }, + "mouse heart - wkt - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_merged_peaks.csv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,fdcbf4adb208c7d07a3288f0634f3610" + ], + "concatenated_peaks": [ + [ + { + "id": "test" + }, + "test_merged_peaks.csv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,fdcbf4adb208c7d07a3288f0634f3610" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.04.4" + }, + "timestamp": "2025-02-07T14:59:03.601526069" + } +} \ No newline at end of file diff --git a/modules/sanger/bioinfotongli/concatenatewkts/tests/nextflow.config b/modules/sanger/bioinfotongli/concatenatewkts/tests/nextflow.config new file mode 100644 index 00000000000..8faab33bd04 --- /dev/null +++ b/modules/sanger/bioinfotongli/concatenatewkts/tests/nextflow.config @@ -0,0 +1,5 @@ +nextflow.enable.moduleBinaries = true + +docker.enabled = true + +params.modules_testdata_base_path = "/lustre/scratch126/cellgen/cellgeni/tl10/modules/test_datasets/" \ No newline at end of file diff --git a/modules/sanger/bioinfotongli/deepcell/environment.yml b/modules/sanger/bioinfotongli/deepcell/environment.yml new file mode 100644 index 00000000000..4b3c9d37bb8 --- /dev/null +++ b/modules/sanger/bioinfotongli/deepcell/environment.yml @@ -0,0 +1,7 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - "YOUR-TOOL-HERE" diff --git a/modules/sanger/bioinfotongli/deepcell/main.nf b/modules/sanger/bioinfotongli/deepcell/main.nf new file mode 100644 index 00000000000..8f57c750fcd --- /dev/null +++ b/modules/sanger/bioinfotongli/deepcell/main.nf @@ -0,0 +1,52 @@ +process BIOINFOTONGLI_DEEPCELL { + tag "$meta.id" + label 'process_medium' + + // conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'quay.io/cellgeni/deepcell:0.12.10-0.0.2': + 'quay.io/cellgeni/deepcell:0.12.10-0.0.2' }" + + input: + tuple val(meta), val(x_min), val(y_min), val(x_max), val(y_max), path(image) + + output: + tuple val(meta), path("${output_name}"), emit: wkts + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}_${x_min}_${y_min}_${x_max}_${y_max}" + output_name = "${prefix}_deepcell_outlines.wkt" + """ + deepcell_helper.py run \\ + $image \\ + -x_min $x_min \\ + -y_min $y_min \\ + -x_max $x_max \\ + -y_max $y_max \\ + -output_name ${output_name} \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bioinfotongli: \$(deepcell_helper.py version) + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}_${x_min}_${y_min}_${x_max}_${y_max}" + output_name = "${prefix}_deepcell_outlines.wkt" + """ + touch ${output_name} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bioinfotongli: \$(deepcell_helper.py version) + END_VERSIONS + """ +} diff --git a/modules/sanger/bioinfotongli/deepcell/meta.yml b/modules/sanger/bioinfotongli/deepcell/meta.yml new file mode 100644 index 00000000000..69048d9c95f --- /dev/null +++ b/modules/sanger/bioinfotongli/deepcell/meta.yml @@ -0,0 +1,63 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "bioinfotongli_deepcell" +description: This module runs deepcell on a crop of an image +keywords: + - image analysis + - image segmentation + - imaging +tools: + - "bioinfotongli": + description: "This module runs deepcell on a crop of an image" + homepage: "" + documentation: "" + tool_dev_url: "" + doi: "" + licence: + identifier: + +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - x_min: + type: int + description: x_min of the crop + - x_max: + type: int + description: x_max of the crop + - y_min: + type: int + description: y_min of the crop + - y_max: + type: int + description: y_max of the crop + - image: + type: file + description: image file + pattern: "*.{png,jpg,tiff}" + +output: + - wkts: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - "${output_name}": + type: file + description: WKT file + pattern: "*.wkt" + + - versions: + - "versions.yml": + type: file + description: File containing software versions + pattern: "versions.yml" + +authors: + - "@BioinfoTongLI" +maintainers: + - "@BioinfoTongLI" diff --git a/modules/sanger/bioinfotongli/deepcell/resources/usr/bin/deepcell_helper.py b/modules/sanger/bioinfotongli/deepcell/resources/usr/bin/deepcell_helper.py new file mode 100755 index 00000000000..65e5825b838 --- /dev/null +++ b/modules/sanger/bioinfotongli/deepcell/resources/usr/bin/deepcell_helper.py @@ -0,0 +1,113 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Copyright (c) 2025 Wellcome Sanger Institute + +""" +""" +import fire +from deepcell.applications import NuclearSegmentation +import numpy as np +from pathlib import Path +import tensorflow as tf +from shapely.geometry import MultiPolygon, Polygon +from shapely import to_wkt +from shapely.affinity import translate +from scipy import ndimage +import cv2 +import zarr +from imagetileprocessor import slice_and_crop_image + +import logging +logger = logging.getLogger(__name__) + + +def get_largest_polygon(multi_polygon: MultiPolygon): + # Initialize variables to store the largest polygon and its area + largest_polygon = None + largest_area = 0 + + # Iterate through each polygon in the MultiPolygon + for polygon in multi_polygon.geoms: + # Calculate the area of the current polygon + area = polygon.area + # Update the largest polygon if the current one is larger + if area >= largest_area: + largest_area = area + largest_polygon = polygon + if largest_polygon is None: + return multi_polygon + else: + return largest_polygon + + +def get_shapely(label): + """ + get outlines of masks as a list to loop over for plotting + """ + polygons = {} + simpler_polys = {} + slices = ndimage.find_objects(label) + for i, bbox in enumerate(slices): + if not bbox: + continue + cur_cell_label = i + 1 + msk = (label[bbox[0], bbox[1]] == cur_cell_label).astype(np.uint8).copy() + cnts, _ = cv2.findContours( + msk, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE + ) + # if len(cnts) > 1: + # print(len(cnts), cur_cell_label) + current_polygons = [ + Polygon((cnt + [bbox[1].start, bbox[0].start]).squeeze()) + # else Point((cnt + [bbox[1].start, bbox[0].start]).squeeze()) + for cnt in cnts + if len(cnt) > 2 + ] + multipoly_obj = MultiPolygon(current_polygons) + polygons[cur_cell_label] = multipoly_obj + simpler_polys[cur_cell_label] = get_largest_polygon(multipoly_obj).simplify( + 1, preserve_topology=True + ) + return polygons, simpler_polys + + +def main( + image_path: str, + x_min: int, x_max: int, y_min: int, y_max: int, + output_name: str, + C: int = 0, + Z: int = 0, + ): + model_dir = Path.home() / ".deepcell" / "models" + # model_path = model_dir / MODEL_NAME + model_path = model_dir / "NuclearSegmentation" + + app = NuclearSegmentation(tf.keras.models.load_model(model_path)) + # app = NuclearSegmentation.from_version("1.1") + # app = Mesmer(tf.keras.models.load_model(model_path)) + # crop = img.get_image_dask_data("TYXC", Z=Z, T=T, C=C)[:, y_min:y_max, x_min:x_max, :] + + crop = slice_and_crop_image( + image_path, x_min, x_max, y_min, y_max, zs=np.array([Z]), channel=np.array([C]), resolution_level=0 + ) + if crop.ndim == 2: # special channel setting required by deepcell + crop = np.expand_dims(crop, axis=[-1, 0]) + segmentation_predictions = app.predict( + np.array(crop).astype(np.uint16), image_mpp=0.5 + ) + + polys = get_shapely(np.squeeze(segmentation_predictions).astype(np.uint16)) + with open(output_name, "wt") as f: + f.write( + to_wkt( + translate(MultiPolygon(list(polys[1].values())), xoff=x_min, yoff=y_min) + ) + ) + + +if __name__ == "__main__": + options = { + "run": main, + "version": "0.0.1", + } + fire.Fire(options) \ No newline at end of file diff --git a/modules/sanger/bioinfotongli/deepcell/tests/main.nf.test b/modules/sanger/bioinfotongli/deepcell/tests/main.nf.test new file mode 100644 index 00000000000..13463434717 --- /dev/null +++ b/modules/sanger/bioinfotongli/deepcell/tests/main.nf.test @@ -0,0 +1,61 @@ +// nf-core modules test bioinfotongli/deepcell +nextflow_process { + + name "Test Process BIOINFOTONGLI_DEEPCELL" + script "../main.nf" + process "BIOINFOTONGLI_DEEPCELL" + + tag "modules" + tag "modules_sanger" + tag "bioinfotongli" + tag "bioinfotongli/deepcell" + + test("mouse_heart - tiff") { + + when { + process { + """ + input[0] = [ + [ id:'mouse_heart'], + 0, 0, 600, 600, + file(params.modules_testdata_base_path + 'imaging/tiff/mindagap.mouse_heart.wga.tiff', checkIfExists: true), + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("mouse_heart - tiff - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'mouse_heart'], + 0, 0, 200, 200, + file(params.modules_testdata_base_path + 'imaging/tiff/mindagap.mouse_heart.wga.tiff', checkIfExists: true), + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/sanger/bioinfotongli/deepcell/tests/main.nf.test.snap b/modules/sanger/bioinfotongli/deepcell/tests/main.nf.test.snap new file mode 100644 index 00000000000..d44993887c7 --- /dev/null +++ b/modules/sanger/bioinfotongli/deepcell/tests/main.nf.test.snap @@ -0,0 +1,68 @@ +{ + "mouse_heart - tiff - stub": { + "content": [ + { + "0": [ + [ + { + "id": "mouse_heart" + }, + "mouse_heart_0_0_200_200_deepcell_outlines.wkt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,600c2d8fa5e77e818bb6e66726ba2f96" + ], + "versions": [ + "versions.yml:md5,600c2d8fa5e77e818bb6e66726ba2f96" + ], + "wkts": [ + [ + { + "id": "mouse_heart" + }, + "mouse_heart_0_0_200_200_deepcell_outlines.wkt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.04.4" + }, + "timestamp": "2025-02-11T09:33:39.654173115" + }, + "mouse_heart - tiff": { + "content": [ + { + "0": [ + [ + { + "id": "mouse_heart" + }, + "mouse_heart_0_0_600_600_deepcell_outlines.wkt:md5,53d08480bbef4b8349ba70ebef3fc5dc" + ] + ], + "1": [ + "versions.yml:md5,600c2d8fa5e77e818bb6e66726ba2f96" + ], + "versions": [ + "versions.yml:md5,600c2d8fa5e77e818bb6e66726ba2f96" + ], + "wkts": [ + [ + { + "id": "mouse_heart" + }, + "mouse_heart_0_0_600_600_deepcell_outlines.wkt:md5,53d08480bbef4b8349ba70ebef3fc5dc" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.04.4" + }, + "timestamp": "2025-02-11T09:33:16.099316588" + } +} \ No newline at end of file diff --git a/modules/sanger/bioinfotongli/deepcell/tests/nextflow.config b/modules/sanger/bioinfotongli/deepcell/tests/nextflow.config new file mode 100644 index 00000000000..a0579a4aba5 --- /dev/null +++ b/modules/sanger/bioinfotongli/deepcell/tests/nextflow.config @@ -0,0 +1,5 @@ +nextflow.enable.moduleBinaries = true + +docker.enabled = true + +params.modules_testdata_base_path = "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/" \ No newline at end of file diff --git a/modules/sanger/bioinfotongli/extractpeakprofile/main.nf b/modules/sanger/bioinfotongli/extractpeakprofile/main.nf index ab7e287a0a3..3cd571ea367 100644 --- a/modules/sanger/bioinfotongli/extractpeakprofile/main.nf +++ b/modules/sanger/bioinfotongli/extractpeakprofile/main.nf @@ -6,8 +6,8 @@ process BIOINFOTONGLI_EXTRACTPEAKPROFILE { conda "${moduleDir}/environment.yml" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'quay.io/bioinfotongli/extract_peak_profile:${container_version}': - 'quay.io/bioinfotongli/extract_peak_profile:${container_version}' }" + "quay.io/bioinfotongli/extract_peak_profile:${container_version}": + "quay.io/bioinfotongli/extract_peak_profile:${container_version}" }" publishDir params.out_dir + "/peak_profiles/" input: diff --git a/modules/sanger/bioinfotongli/generatetiles/main.nf b/modules/sanger/bioinfotongli/generatetiles/main.nf index 869c2c52e86..0e4602e4bc1 100644 --- a/modules/sanger/bioinfotongli/generatetiles/main.nf +++ b/modules/sanger/bioinfotongli/generatetiles/main.nf @@ -1,39 +1,44 @@ -container_version = "0.0.1" -params.debug = false - process BIOINFOTONGLI_GENERATETILES { tag "${meta.id}" - debug params.debug - - label "small_mem" container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - "quay.io/bioinfotongli/large_image_io:${container_version}": - "quay.io/bioinfotongli/large_image_io:${container_version}"}" - - publishDir params.out_dir + "/tile_coords" + "quay.io/cellgeni/imagetileprocessor:0.1.9": + "quay.io/cellgeni/imagetileprocessor:0.1.9"}" input: - tuple val(meta), path(file_in) + tuple val(meta), path(image) output: - tuple val(meta), path("${stem}/${out_name}"), emit: tile_coords + tuple val(meta), path("${output_name}"), emit: tile_coords path "versions.yml" , emit: versions script: stem = meta.id - out_name = "tile_coords.csv" - def args = task.ext.args ?: '' + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + output_name = "${prefix}_tile_coords.csv" """ - python /opt/scripts/tile_2D_image.py run \\ - --image ${file_in} \\ - --out_dir "${stem}" \\ - --out_name "${out_name}" \\ + tile-2d-image run \\ + --image ${image} \\ + --output_name "${output_name}" \\ ${args} cat <<-END_VERSIONS > versions.yml "${task.process}": - : \$(echo \$(python /scripts/tile_2D_image.py version 2>&1) | sed 's/^.*tile_2D_image.py //; s/Using.*\$//' )) + bioinfotongli: \$(tile-2d-image version) + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + output_name = "${prefix}_tile_coords.csv" + """ + touch "${output_name}" + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bioinfotongli: \$(tile-2d-image version) END_VERSIONS """ } \ No newline at end of file diff --git a/modules/sanger/bioinfotongli/generatetiles/meta.yml b/modules/sanger/bioinfotongli/generatetiles/meta.yml index 3e3f4937b03..9b24b9d35da 100644 --- a/modules/sanger/bioinfotongli/generatetiles/meta.yml +++ b/modules/sanger/bioinfotongli/generatetiles/meta.yml @@ -8,44 +8,44 @@ keywords: - slicing tools: - "bioinfotongli": - description: "" + description: "A simple script to generate tiles from an 2D image file" homepage: "" documentation: "" tool_dev_url: "" doi: "" - licence: + licence: MIT identifier: input: - # Only when we have meta - - meta: + - - meta: type: map description: | Groovy Map containing sample information - e.g. `[ id:'test', channels:[1,2] ]` + e.g. `[ id:'test' ]` - - imgs: - type: file - description: raw images for segmentation - pattern: "*.{tif,ome.tif,ome.tiff}" + - image: + type: file + description: raw image to be tiled + pattern: "*.{tif,ome.tif,ome.tiff}" output: #Only when we have meta - - meta: + - - meta: type: map description: | Groovy Map containing sample information - e.g. `[ id:'test', channels:[0,1] ]` + e.g. `[ id:'test' ]` + - tile_coords: + type: file + description: a csv file contains the information of tiles + pattern: "*.csv" - versions: type: file description: File containing software versions pattern: "versions.yml" - - segmentation: - type: file - description: a csv file contains the information of tiles - pattern: "*.csv" + authors: - "@BioinfoTongLI" \ No newline at end of file diff --git a/modules/sanger/bioinfotongli/generatetiles/tests/main.nf.test b/modules/sanger/bioinfotongli/generatetiles/tests/main.nf.test index 5895b4af0fe..67bd5ba8742 100644 --- a/modules/sanger/bioinfotongli/generatetiles/tests/main.nf.test +++ b/modules/sanger/bioinfotongli/generatetiles/tests/main.nf.test @@ -4,6 +4,7 @@ nextflow_process { name "Test Process BIOINFOTONGLI_GENERATETILES" script "../main.nf" + config "./nextflow.config" process "BIOINFOTONGLI_GENERATETILES" tag "modules" @@ -11,22 +12,14 @@ nextflow_process { tag "bioinfotongli" tag "bioinfotongli/generatetiles" - // TODO nf-core: Change the test name preferably indicating the test-data and file-format used - test("sarscov2 - bam") { - - // TODO nf-core: If you are created a test for a chained module - // (the module requires running more than one process to generate the required output) - // add the 'setup' method here. - // You can find more information about how to use a 'setup' method in the docs (https://nf-co.re/docs/contributing/modules#steps-for-creating-nf-test-for-chained-modules). + test("mouse_heart - tiff") { when { process { """ - // TODO nf-core: define inputs of the process here. Example: - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + [ id:'test'], // meta map + file(params.modules_testdata_base_path + 'imaging/tiff/mindagap.mouse_heart.wga.tiff', checkIfExists: true), ] """ } @@ -36,26 +29,21 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot(process.out).match() } - //TODO nf-core: Add all required assertions to verify the test output. - // See https://nf-co.re/docs/contributing/tutorials/nf-test_assertions for more information and examples. ) } } - // TODO nf-core: Change the test name preferably indicating the test-data and file-format used but keep the " - stub" suffix. - test("sarscov2 - bam - stub") { + test("mouse_heart - tiff - stub") { options "-stub" when { process { """ - // TODO nf-core: define inputs of the process here. Example: - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + [ id:'test',], // meta map + file(params.modules_testdata_base_path + 'imaging/tiff/mindagap.mouse_heart.wga.tiff', checkIfExists: true), ] """ } @@ -65,7 +53,6 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot(process.out).match() } - //TODO nf-core: Add all required assertions to verify the test output. ) } diff --git a/modules/sanger/bioinfotongli/generatetiles/tests/main.nf.test.snap b/modules/sanger/bioinfotongli/generatetiles/tests/main.nf.test.snap new file mode 100644 index 00000000000..75464ea8eda --- /dev/null +++ b/modules/sanger/bioinfotongli/generatetiles/tests/main.nf.test.snap @@ -0,0 +1,68 @@ +{ + "mouse_heart - tiff - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_tile_coords.csv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,eddcd9c793b474b87d0333a1c90a5381" + ], + "tile_coords": [ + [ + { + "id": "test" + }, + "test_tile_coords.csv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,eddcd9c793b474b87d0333a1c90a5381" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.04.4" + }, + "timestamp": "2025-03-18T20:57:11.833074167" + }, + "mouse_heart - tiff": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_tile_coords.csv:md5,736ea44566b4ff52f7bcf1d46078152b" + ] + ], + "1": [ + "versions.yml:md5,eddcd9c793b474b87d0333a1c90a5381" + ], + "tile_coords": [ + [ + { + "id": "test" + }, + "test_tile_coords.csv:md5,736ea44566b4ff52f7bcf1d46078152b" + ] + ], + "versions": [ + "versions.yml:md5,eddcd9c793b474b87d0333a1c90a5381" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.04.4" + }, + "timestamp": "2025-03-18T20:57:04.817854347" + } +} \ No newline at end of file diff --git a/modules/sanger/bioinfotongli/generatetiles/tests/nextflow.config b/modules/sanger/bioinfotongli/generatetiles/tests/nextflow.config new file mode 100644 index 00000000000..a0579a4aba5 --- /dev/null +++ b/modules/sanger/bioinfotongli/generatetiles/tests/nextflow.config @@ -0,0 +1,5 @@ +nextflow.enable.moduleBinaries = true + +docker.enabled = true + +params.modules_testdata_base_path = "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/" \ No newline at end of file diff --git a/modules/sanger/bioinfotongli/instanseg/environment.yml b/modules/sanger/bioinfotongli/instanseg/environment.yml new file mode 100644 index 00000000000..4b3c9d37bb8 --- /dev/null +++ b/modules/sanger/bioinfotongli/instanseg/environment.yml @@ -0,0 +1,7 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - "YOUR-TOOL-HERE" diff --git a/modules/sanger/bioinfotongli/instanseg/main.nf b/modules/sanger/bioinfotongli/instanseg/main.nf new file mode 100644 index 00000000000..addf60057d5 --- /dev/null +++ b/modules/sanger/bioinfotongli/instanseg/main.nf @@ -0,0 +1,52 @@ +process BIOINFOTONGLI_INSTANSEG { + tag "$meta.id" + label 'process_medium' + + // conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'quay.io/cellgeni/instanseg:v1-0.0.2': + 'quay.io/cellgeni/instanseg:v1-0.0.2' }" + + input: + tuple val(meta), val(x_min), val(y_min), val(x_max), val(y_max), path(img) + + output: + tuple val(meta), path("${output_name}"), emit: wkts + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}_${x_min}_${y_min}_${x_max}_${y_max}" + output_name = "${prefix}_instanseg_outlines.wkt" + """ + instanseg_helper.py run \\ + -image-path ${img} \\ + -x-min ${x_min} \\ + -y-min ${y_min} \\ + -x-max ${x_max} \\ + -y-max ${y_max} \\ + -output_name ${output_name} \\ + $args \\ + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bioinfotongli: \$(instanseg_helper.py version) + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}_${x_min}_${y_min}_${x_max}_${y_max}" + output_name = "${prefix}_instanseg_outlines.wkt" + """ + touch ${output_name} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bioinfotongli: \$(instanseg_helper.py version) + END_VERSIONS + """ +} diff --git a/modules/sanger/bioinfotongli/instanseg/meta.yml b/modules/sanger/bioinfotongli/instanseg/meta.yml new file mode 100644 index 00000000000..b9016c198e7 --- /dev/null +++ b/modules/sanger/bioinfotongli/instanseg/meta.yml @@ -0,0 +1,64 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "bioinfotongli_instanseg" +description: A wrapper of InstanSeg segmentation tool +keywords: + - image analysis + - segmentation + - instanseg +tools: + - "bioinfotongli": + description: "A wrapper of InstanSeg segmentation tool" + homepage: "https://github.com/instanseg/instanseg/tree/main" + documentation: "https://github.com/instanseg/instanseg/tree/main" + tool_dev_url: "https://github.com/instanseg/instanseg/tree/main" + doi: "" + licence: Apache-2.0 + identifier: + +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - x_min: + type: int + description: "Minimum x coordinate" + - x_max: + type: int + description: "Maximum x coordinate" + - y_min: + type: int + description: "Minimum y coordinate" + - y_max: + type: int + description: "Maximum y coordinate" + - img: + type: file + description: Image file + pattern: "*.{tif,tiff,png,jpg,jpeg}" + + +output: + - wkts: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - "{prefix}.wkt": + type: file + description: wkt segmentation file + pattern: "*.wkt" + + - versions: + - "versions.yml": + type: file + description: File containing software versions + pattern: "versions.yml" + +authors: + - "@BioinfoTongLI" +maintainers: + - "@BioinfoTongLI" diff --git a/modules/sanger/bioinfotongli/instanseg/resources/usr/bin/instanseg_helper.py b/modules/sanger/bioinfotongli/instanseg/resources/usr/bin/instanseg_helper.py new file mode 100755 index 00000000000..a8518e30d08 --- /dev/null +++ b/modules/sanger/bioinfotongli/instanseg/resources/usr/bin/instanseg_helper.py @@ -0,0 +1,106 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Copyright (c) 2024 Wellcome Sanger Institute + +""" +This script will slice the image in XY dimension and save the slices coordinates in json files +""" +import fire +from scipy import ndimage +from instanseg import InstanSeg +import cv2 +import numpy as np +from shapely.geometry import Polygon, MultiPolygon +from shapely import to_wkt +from shapely.affinity import translate +from imagetileprocessor import slice_and_crop_image + +import logging +logger = logging.getLogger(__name__) + + +def get_largest_polygon(multi_polygon: MultiPolygon): + # Initialize variables to store the largest polygon and its area + largest_polygon = None + largest_area = 0 + + # Iterate through each polygon in the MultiPolygon + for polygon in multi_polygon.geoms: + # Calculate the area of the current polygon + area = polygon.area + # Update the largest polygon if the current one is larger + if area > largest_area: + largest_area = area + largest_polygon = polygon + if largest_polygon is None: + logger.warning("No polygon found") + return multi_polygon + else: + return largest_polygon + + +def get_shapely(label): + """ + get outlines of masks as a list to loop over for plotting + """ + polygons = {} + simpler_polys = {} + slices = ndimage.find_objects(label) + for i, bbox in enumerate(slices): + if not bbox: + continue + cur_cell_label = i + 1 + msk = (label[bbox[0], bbox[1]] == cur_cell_label).astype(np.uint8).copy() + cnts, _ = cv2.findContours( + msk, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE + ) + # if len(cnts) > 1: + # print(len(cnts), cur_cell_label) + current_polygons = [ + Polygon((cnt + [bbox[1].start, bbox[0].start]).squeeze()) + # else Point((cnt + [bbox[1].start, bbox[0].start]).squeeze()) + for cnt in cnts + if len(cnt) > 2 + ] + multipoly_obj = MultiPolygon(current_polygons) + polygons[cur_cell_label] = multipoly_obj + simpler_polys[cur_cell_label] = get_largest_polygon(multipoly_obj).simplify( + 1, preserve_topology=True + ) + return polygons, simpler_polys + + +def main( + image_path: str, + x_min: int, x_max: int, y_min: int, y_max: int, + output_name: str, + model: str = "fluorescence_nuclei_and_cells", + C: list = [0], + Z: list = [0], + ): + instanseg_fluorescence = InstanSeg(model, verbosity=1) + + crop = slice_and_crop_image( + image_path, x_min, x_max, y_min, y_max, + channel=np.array([C]), zs=np.array([Z]), resolution_level=0 + ) + + labeled_output = instanseg_fluorescence.eval_small_image( + np.array(crop).astype(np.uint16), None, return_image_tensor=False, target="nuclei", + resolve_cell_and_nucleus=False, cleanup_fragments = True + ) + polys = get_shapely(np.squeeze(np.array(labeled_output)).astype(np.uint16)) + with open(output_name, "wt") as f: + f.write( + to_wkt( + translate(MultiPolygon(list(polys[1].values())), xoff=x_min, yoff=y_min) + ) + ) + + +if __name__ == "__main__": + options = { + "run": main, + "version": "0.0.1", + } + fire.Fire(options) \ No newline at end of file diff --git a/modules/sanger/bioinfotongli/instanseg/tests/main.nf.test b/modules/sanger/bioinfotongli/instanseg/tests/main.nf.test new file mode 100644 index 00000000000..e23b3e98fb0 --- /dev/null +++ b/modules/sanger/bioinfotongli/instanseg/tests/main.nf.test @@ -0,0 +1,60 @@ +nextflow_process { + + name "Test Process BIOINFOTONGLI_INSTANSEG" + script "../main.nf" + process "BIOINFOTONGLI_INSTANSEG" + + tag "modules" + tag "modules_sanger" + tag "bioinfotongli" + tag "bioinfotongli/instanseg" + + test("mouse_heart - tiff") { + + when { + process { + """ + input[0] = [ + [ id:'mouse_heart'], + 0, 0, 200, 200, + file(params.modules_testdata_base_path + 'imaging/tiff/mindagap.mouse_heart.wga.tiff', checkIfExists: true), + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("mouse_heart - tiff - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'mouse_heart'], + 0, 0, 200, 200, + file(params.modules_testdata_base_path + 'imaging/tiff/mindagap.mouse_heart.wga.tiff', checkIfExists: true), + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} \ No newline at end of file diff --git a/modules/sanger/bioinfotongli/instanseg/tests/main.nf.test.snap b/modules/sanger/bioinfotongli/instanseg/tests/main.nf.test.snap new file mode 100644 index 00000000000..f9d8d6a98a8 --- /dev/null +++ b/modules/sanger/bioinfotongli/instanseg/tests/main.nf.test.snap @@ -0,0 +1,68 @@ +{ + "mouse_heart - tiff - stub": { + "content": [ + { + "0": [ + [ + { + "id": "mouse_heart" + }, + "mouse_heart_0_0_200_200_instanseg_outlines.wkt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,6587b1fbffd0ce3ddd72cb0dea70eeef" + ], + "versions": [ + "versions.yml:md5,6587b1fbffd0ce3ddd72cb0dea70eeef" + ], + "wkts": [ + [ + { + "id": "mouse_heart" + }, + "mouse_heart_0_0_200_200_instanseg_outlines.wkt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.04.4" + }, + "timestamp": "2025-02-11T15:25:06.256618571" + }, + "mouse_heart - tiff": { + "content": [ + { + "0": [ + [ + { + "id": "mouse_heart" + }, + "mouse_heart_0_0_200_200_instanseg_outlines.wkt:md5,59ac89147a5b5ffac7ca71dde15fbc9d" + ] + ], + "1": [ + "versions.yml:md5,6587b1fbffd0ce3ddd72cb0dea70eeef" + ], + "versions": [ + "versions.yml:md5,6587b1fbffd0ce3ddd72cb0dea70eeef" + ], + "wkts": [ + [ + { + "id": "mouse_heart" + }, + "mouse_heart_0_0_200_200_instanseg_outlines.wkt:md5,59ac89147a5b5ffac7ca71dde15fbc9d" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.04.4" + }, + "timestamp": "2025-02-11T15:24:37.887655481" + } +} \ No newline at end of file diff --git a/modules/sanger/bioinfotongli/instanseg/tests/nextflow.config b/modules/sanger/bioinfotongli/instanseg/tests/nextflow.config new file mode 100644 index 00000000000..a0579a4aba5 --- /dev/null +++ b/modules/sanger/bioinfotongli/instanseg/tests/nextflow.config @@ -0,0 +1,5 @@ +nextflow.enable.moduleBinaries = true + +docker.enabled = true + +params.modules_testdata_base_path = "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/" \ No newline at end of file diff --git a/modules/sanger/bioinfotongli/mergepeaks/main.nf b/modules/sanger/bioinfotongli/mergepeaks/main.nf new file mode 100644 index 00000000000..433ede63e30 --- /dev/null +++ b/modules/sanger/bioinfotongli/mergepeaks/main.nf @@ -0,0 +1,48 @@ +process BIOINFOTONGLI_MERGEPEAKS { + tag "$meta.id" + label 'process_single' + + // conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'quay.io/cellgeni/imagetileprocessor:0.1.7': + 'quay.io/cellgeni/imagetileprocessor:0.1.7' }" + + input: + tuple val(meta), val(ch_ind), path(csvs) + + output: + tuple val(meta), path("${output_name}"), emit: merged_peaks + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + output_name = "${prefix}_merged_peaks_ch_${ch_ind}.wkt" + """ + merge-peaks run \ + --output_name ${output_name} \ + ${csvs} \ + ${args} \ + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bioinfotongli: \$(merge-peaks version) + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}" + output_name = "${prefix}_merged_peaks_ch_${ch_ind}.wkt" + """ + touch ${output_name} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bioinfotongli: \$(merge-peaks version) + END_VERSIONS + """ +} diff --git a/modules/sanger/bioinfotongli/mergepeaks/meta.yml b/modules/sanger/bioinfotongli/mergepeaks/meta.yml new file mode 100644 index 00000000000..f4bc20f67d2 --- /dev/null +++ b/modules/sanger/bioinfotongli/mergepeaks/meta.yml @@ -0,0 +1,56 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "bioinfotongli_mergepeaks" +description: Merge peaks from multiple peak files (csv) +keywords: + - peaks + - tiled_analysis + - imaging +tools: + - "bioinfotongli": + description: "Merge peaks from multiple peak files (csv)" + homepage: "" + documentation: "" + tool_dev_url: "" + doi: "" + licence: MIT + identifier: + +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + + - csvs: + type: file + description: csv files containing peaks coordinates + pattern: "*.csv" + + +## TODO nf-core: Add a description of all of the variables used as output +output: + - merged_peaks: + - meta: + type: file + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - "{output_name}": + type: file + description: WKT file + pattern: "*.wkt" + ontologies: + - edam: "http://edamontology.org/operation_Cell_segmentation" + + - versions: + - "versions.yml": + type: file + description: File containing software versions + pattern: "versions.yml" + +authors: + - "@BioinfoTongLI" +maintainers: + - "@BioinfoTongLI" diff --git a/modules/sanger/bioinfotongli/mergepeaks/tests/main.nf.test b/modules/sanger/bioinfotongli/mergepeaks/tests/main.nf.test new file mode 100644 index 00000000000..03fa2bf8e6d --- /dev/null +++ b/modules/sanger/bioinfotongli/mergepeaks/tests/main.nf.test @@ -0,0 +1,67 @@ +// nf-core modules test bioinfotongli/mergepeaks +nextflow_process { + + name "Test Process BIOINFOTONGLI_MERGEPEAKS" + script "../main.nf" + process "BIOINFOTONGLI_MERGEPEAKS" + + tag "modules" + tag "modules_sanger" + tag "bioinfotongli" + tag "bioinfotongli/mergepeaks" + + test("dummy - csv ") { + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + 0, + [ + file(params.modules_testdata_base_path + 'mouse_heart_ch_0_peaks_Y0_X0.csv', checkIfExists: true), + file(params.modules_testdata_base_path + 'mouse_heart_ch_0_peaks_Y0_X0_.csv', checkIfExists: true), + ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("dummy - csv - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + 0, + [ + file(params.modules_testdata_base_path + 'mouse_heart_ch_0_peaks_Y0_X0.csv', checkIfExists: true), + file(params.modules_testdata_base_path + 'mouse_heart_ch_0_peaks_Y0_X0_.csv', checkIfExists: true), + ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/sanger/bioinfotongli/mergepeaks/tests/main.nf.test.snap b/modules/sanger/bioinfotongli/mergepeaks/tests/main.nf.test.snap new file mode 100644 index 00000000000..2ce6bf4a93d --- /dev/null +++ b/modules/sanger/bioinfotongli/mergepeaks/tests/main.nf.test.snap @@ -0,0 +1,68 @@ +{ + "dummy - csv ": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_merged_peaks_ch_0.wkt:md5,25c0054be03fcb2cd27b2165996bac90" + ] + ], + "1": [ + "versions.yml:md5,78bffdc58887416d3a0f24aaedd12936" + ], + "merged_peaks": [ + [ + { + "id": "test" + }, + "test_merged_peaks_ch_0.wkt:md5,25c0054be03fcb2cd27b2165996bac90" + ] + ], + "versions": [ + "versions.yml:md5,78bffdc58887416d3a0f24aaedd12936" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.04.4" + }, + "timestamp": "2025-03-15T01:39:31.351711898" + }, + "dummy - csv - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_merged_peaks_ch_0.wkt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,78bffdc58887416d3a0f24aaedd12936" + ], + "merged_peaks": [ + [ + { + "id": "test" + }, + "test_merged_peaks_ch_0.wkt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,78bffdc58887416d3a0f24aaedd12936" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.04.4" + }, + "timestamp": "2025-03-15T01:39:38.646386945" + } +} \ No newline at end of file diff --git a/modules/sanger/bioinfotongli/mergepeaks/tests/nextflow.config b/modules/sanger/bioinfotongli/mergepeaks/tests/nextflow.config new file mode 100644 index 00000000000..8faab33bd04 --- /dev/null +++ b/modules/sanger/bioinfotongli/mergepeaks/tests/nextflow.config @@ -0,0 +1,5 @@ +nextflow.enable.moduleBinaries = true + +docker.enabled = true + +params.modules_testdata_base_path = "/lustre/scratch126/cellgen/cellgeni/tl10/modules/test_datasets/" \ No newline at end of file diff --git a/modules/sanger/bioinfotongli/stardist/environment.yml b/modules/sanger/bioinfotongli/stardist/environment.yml new file mode 100644 index 00000000000..4b3c9d37bb8 --- /dev/null +++ b/modules/sanger/bioinfotongli/stardist/environment.yml @@ -0,0 +1,7 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/environment-schema.json +channels: + - conda-forge + - bioconda +dependencies: + - "YOUR-TOOL-HERE" diff --git a/modules/sanger/bioinfotongli/stardist/main.nf b/modules/sanger/bioinfotongli/stardist/main.nf new file mode 100644 index 00000000000..ac7ff884ae2 --- /dev/null +++ b/modules/sanger/bioinfotongli/stardist/main.nf @@ -0,0 +1,52 @@ +process BIOINFOTONGLI_STARDIST { + tag "$meta.id" + label 'process_medium' + + // conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'quay.io/cellgeni/tiled_stardist:0.9.1-0.0.2': + 'quay.io/cellgeni/tiled_stardist:0.9.1-0.0.2' }" + + input: + tuple val(meta), val(x_min),val(y_min), val(x_max), val(y_max), path(image) + + output: + tuple val(meta), path("${output_name}"), emit: wkts + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}_${x_min}_${y_min}_${x_max}_${y_max}" + output_name = "${prefix}_sd_outlines.wkt" + """ + stardist_helper.py run \\ + --image-path $image \\ + --x_min $x_min \\ + --x_max $x_max \\ + --y_min $y_min \\ + --y_max $y_max \\ + --output_name ${output_name} \\ + $args + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bioinfotongli: \$(stardist_helper.py version) + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + def prefix = task.ext.prefix ?: "${meta.id}_${x_min}_${y_min}_${x_max}_${y_max}" + output_name = "${prefix}_sd_outlines.wkt" + """ + touch ${output_name} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bioinfotongli: \$(stardist_helper.py version) + END_VERSIONS + """ +} diff --git a/modules/sanger/bioinfotongli/stardist/meta.yml b/modules/sanger/bioinfotongli/stardist/meta.yml new file mode 100644 index 00000000000..fe679533aa5 --- /dev/null +++ b/modules/sanger/bioinfotongli/stardist/meta.yml @@ -0,0 +1,64 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "bioinfotongli_stardist" +description: a wrapper for starDist +keywords: + - segmentation + - image analysis + - starDist +tools: + - "bioinfotongli": + description: "A wrapper for starDist" + homepage: "" + documentation: "" + tool_dev_url: "" + doi: "" + licence: + identifier: + +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + - x_min: + type: int + description: "Minimum x coordinate" + - x_max: + type: int + description: "Maximum x coordinate" + - y_min: + type: int + description: "Minimum y coordinate" + - y_max: + type: int + description: "Maximum y coordinate" + - image: + type: file + description: "Image file" + pattern: "*.{png,jpg,jpeg,tiff}" + +output: + - outlines: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + + - "*.wkt": + type: file + description: WKT file + pattern: "*.wkt" + + - versions: + - "versions.yml": + type: file + description: File containing software versions + pattern: "versions.yml" + +authors: + - "@BioinfoTongLI" +maintainers: + - "@BioinfoTongLI" diff --git a/modules/sanger/bioinfotongli/stardist/resources/usr/bin/stardist_helper.py b/modules/sanger/bioinfotongli/stardist/resources/usr/bin/stardist_helper.py new file mode 100755 index 00000000000..bfc489be753 --- /dev/null +++ b/modules/sanger/bioinfotongli/stardist/resources/usr/bin/stardist_helper.py @@ -0,0 +1,92 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Copyright (c) 2025 Wellcome Sanger Institute + +import numpy as np +from csbdeep.utils import normalize +from stardist.models import StarDist2D +from csbdeep.data import Normalizer, normalize_mi_ma +import fire +from imagetileprocessor import slice_and_crop_image +from shapely import wkt, MultiPolygon + +import logging + +class MyNormalizer(Normalizer): + def __init__(self, mi, ma): + self.mi, self.ma = mi, ma + def before(self, x, axes): + return normalize_mi_ma(x, self.mi, self.ma, dtype=np.float32) + def after(*args, **kwargs): + assert False + @property + def do_after(self): + return False + +# configure logging +logging.basicConfig(level="INFO", format="[%(asctime)s][%(levelname)s] %(message)s") + + +def segment( + image_path: str, + x_min:int, x_max:int, y_min:int, y_max:int, + resolution_level: int = 0, + model_name: str = '2D_versatile_fluo', + output_name: str = None, + DAPI_index:int = 0, + z:int = 0, +): + """ + Main function to perform image segmentation using tiles. + + Parameters: + image_path (str): The path to the image. + x_min (int): The minimum x-coordinate of the tile. + x_max (int): The maximum x-coordinate of the tile. + y_min (int): The minimum y-coordinate of the tile. + y_max (int): The maximum y-coordinate of the tile. + resolution_level (str): The pyramid level to use for segmentation. + model_name (str): The StarDist model type to use for segmentation. + output (str): The output directory to save the segmentation results. + image_id (str): The image identification name. + DAIP_index (int): The index of the DAPI channel. + """ + img = slice_and_crop_image( + image_path, x_min, x_max, y_min, y_max, channel=np.array([DAPI_index]), zs=np.array([z]), resolution_level=resolution_level + ) + + logging.info(f"Loading StarDist2D model '{model_name}'") + model = StarDist2D.from_pretrained(model_name) + + logging.info(f"Loading full image") + + # mi, ma = np.percentile(crop[::8], [1,99.8]) # compute percentiles from low-resolution image + # normalizer = MyNormalizer(mi, ma) + labels, details = model.predict_instances(normalize(img, 1, 99.8, axis=(0, 1))) + coord, points, prob = details['coord'], details['points'], details['prob'] + + # logging.info(f"Normalize image") + # norm_image = normalize(image, 1, 99.8, axis=(0, 1)) + + # convert cellpose outlines to WTK + logging.info(f"Converting outlines to WKT format") + wkts = [] + if coord.shape[0] != 0: + for polygon in coord: + flat_coords = [(xy[1] + x_min, xy[0] + y_min) for xy in polygon.reshape(-1, 2)] + wkts.append( + wkt.loads("POLYGON ((" + ", ".join(f"{x} {y}" for x, y in flat_coords + [flat_coords[0]]) + "))") + ) + with open(output_name, "wt") as f: + f.write(wkt.dumps(MultiPolygon(wkts))) + else: + logging.info("No outlines file found") + with open(output_name, "wt") as f: + f.write("") + +if __name__ == "__main__": + options = { + 'run': segment, + 'version': '0.0.2' + } + fire.Fire(options) \ No newline at end of file diff --git a/modules/sanger/bioinfotongli/stardist/tests/main.nf.test b/modules/sanger/bioinfotongli/stardist/tests/main.nf.test new file mode 100644 index 00000000000..715b6582a94 --- /dev/null +++ b/modules/sanger/bioinfotongli/stardist/tests/main.nf.test @@ -0,0 +1,63 @@ +// TODO nf-core: Once you have added the required tests, please run the following command to build this file: +// nf-core modules test bioinfotongli/stardist +nextflow_process { + + name "Test Process BIOINFOTONGLI_STARDIST" + script "../main.nf" + process "BIOINFOTONGLI_STARDIST" + + tag "modules" + tag "modules_sanger" + tag "bioinfotongli" + tag "bioinfotongli/stardist" + + test("stardist - tif") { + + when { + process { + """ + + input[0] = [ + [ id:'test' ], // meta map + 0, 0, 500, 500, // x_min, x_max, y_min, y_max + file(params.modules_testdata_base_path + 'imaging/segmentation/nuclear_image.tif', checkIfExists: true), + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("stardist - tif - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test' ], // meta map + 0, 0, 500, 500, // x_min, x_max, y_min, y_max + file(params.modules_testdata_base_path + 'imaging/segmentation/nuclear_image.tif', checkIfExists: true), + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/sanger/bioinfotongli/stardist/tests/main.nf.test.snap b/modules/sanger/bioinfotongli/stardist/tests/main.nf.test.snap new file mode 100644 index 00000000000..de4b0d558d7 --- /dev/null +++ b/modules/sanger/bioinfotongli/stardist/tests/main.nf.test.snap @@ -0,0 +1,68 @@ +{ + "stardist - tif - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_0_0_500_500_sd_outlines.wkt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,badd5e6abbb4e33c6ee6bd75bc8612c8" + ], + "versions": [ + "versions.yml:md5,badd5e6abbb4e33c6ee6bd75bc8612c8" + ], + "wkts": [ + [ + { + "id": "test" + }, + "test_0_0_500_500_sd_outlines.wkt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.04.4" + }, + "timestamp": "2025-03-18T22:13:45.973377162" + }, + "stardist - tif": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_0_0_500_500_sd_outlines.wkt:md5,110576d3df4397edcf0ee3f2ad097a9b" + ] + ], + "1": [ + "versions.yml:md5,badd5e6abbb4e33c6ee6bd75bc8612c8" + ], + "versions": [ + "versions.yml:md5,badd5e6abbb4e33c6ee6bd75bc8612c8" + ], + "wkts": [ + [ + { + "id": "test" + }, + "test_0_0_500_500_sd_outlines.wkt:md5,110576d3df4397edcf0ee3f2ad097a9b" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.04.4" + }, + "timestamp": "2025-03-18T22:13:35.658406973" + } +} \ No newline at end of file diff --git a/modules/sanger/bioinfotongli/stardist/tests/nextflow.config b/modules/sanger/bioinfotongli/stardist/tests/nextflow.config new file mode 100644 index 00000000000..a0579a4aba5 --- /dev/null +++ b/modules/sanger/bioinfotongli/stardist/tests/nextflow.config @@ -0,0 +1,5 @@ +nextflow.enable.moduleBinaries = true + +docker.enabled = true + +params.modules_testdata_base_path = "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/" \ No newline at end of file diff --git a/modules/sanger/bioinfotongli/tiledspotiflow/main.nf b/modules/sanger/bioinfotongli/tiledspotiflow/main.nf index 2ed5a00d71c..50c64be32b9 100644 --- a/modules/sanger/bioinfotongli/tiledspotiflow/main.nf +++ b/modules/sanger/bioinfotongli/tiledspotiflow/main.nf @@ -1,51 +1,46 @@ -container_version = "0.1.0" - -params.debug = false -params.spotiflow_model_dir = "./" - process BIOINFOTONGLI_TILEDSPOTIFLOW { - debug params.debug tag "${meta.id}" - label "gpu" - label "process_medium" - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - "quay.io/bioinfotongli/tiled_spotiflow:${container_version}": - "quay.io/bioinfotongli/tiled_spotiflow:${container_version}"}" - containerOptions = { - workflow.containerEngine == "singularity" ? "--cleanenv --nv -B ${params.spotiflow_model_dir}:${task.workDir}/models": - ( workflow.containerEngine == "docker" ? "--gpus all -v ${params.spotiflow_model_dir}:${task.workDir}/models": null ) - } - publishDir params.out_dir + "/spotiflow_peaks" + "quay.io/cellgeni/tiled_spotiflow:0.5.4-1": + "quay.io/cellgeni/tiled_spotiflow:0.5.4-1"}" input: tuple val(meta), val(x_min), val(y_min), val(x_max), val(y_max), path(image), val(ch_ind) output: - tuple val(meta), val(ch_ind), path("${out_dir}/${out_name}"), emit: peaks + tuple val(meta), val(ch_ind), path("${output_name}"), emit: peaks path "versions.yml" , emit: versions script: def args = task.ext.args ?: '' - out_dir = "${meta.id}_ch_${ch_ind}" - out_name = "ch_${ch_ind}_peaks_Y${y_min}_X${x_min}.csv" + output_name = "${meta.id}_ch_${ch_ind}_peaks_Y${y_min}_Y${y_max}_X${x_min}_X${x_max}.csv" """ - export SPOTIFLOW_CACHE_DIR=${task.workDir}/models - /opt/conda/bin/python /scripts/Spotiflow_call_peaks.py run \ + Spotiflow_call_peaks.py run \ -image_path ${image} \ - -out_dir "${out_dir}" \ -x_min ${x_min} \ -y_min ${y_min} \ -x_max ${x_max} \ -y_max ${y_max} \ - -ch_ind ${ch_ind} \ - -out_name "${out_name}" \ + -C ${ch_ind} \ + -output_name "${output_name}" \ ${args} cat <<-END_VERSIONS > versions.yml "${task.process}": - : \$(echo \$(/opt/conda/bin/python /scripts/Spotiflow_call_peaks.py version 2>&1) | sed 's/^.*Spotiflow_call_peaks.py //; s/Using.*\$//' )) + bioinfotongli: \$(Spotiflow_call_peaks.py version) + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + output_name = "${meta.id}_ch_${ch_ind}_peaks_Y${y_min}_Y${y_max}_X${x_min}_X${x_max}.csv" + """ + touch "${output_name}" + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + bioinfotongli: \$(Spotiflow_call_peaks.py version) END_VERSIONS """ } \ No newline at end of file diff --git a/modules/sanger/bioinfotongli/tiledspotiflow/resources/usr/bin/Spotiflow_call_peaks.py b/modules/sanger/bioinfotongli/tiledspotiflow/resources/usr/bin/Spotiflow_call_peaks.py new file mode 100755 index 00000000000..8c808ae5d0d --- /dev/null +++ b/modules/sanger/bioinfotongli/tiledspotiflow/resources/usr/bin/Spotiflow_call_peaks.py @@ -0,0 +1,41 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Copyright (c) 2024 Wellcome Sanger Institute + +""" + +""" +import fire +from spotiflow.model import Spotiflow +from imagetileprocessor import slice_and_crop_image +import csv + + +def main( + image_path:str, output_name:str, C:int, + x_min:int, x_max:int, y_min:int, y_max:int, + model_name:str="general", + Z:int=0 + ): + crop = slice_and_crop_image( + image_path, x_min, x_max, y_min, y_max, Z, C, 0 + ) + model = Spotiflow.from_pretrained(model_name) + peaks, details = model.predict(crop) + + with open(output_name, 'w', newline='') as f: + writer = csv.writer(f) + writer.writerow(['y', 'x']) # write column names + if len(peaks) > 0: + # Serialize peaks to disk as CSV + peaks[:, 0] = peaks[:, 0] + y_min + peaks[:, 1] = peaks[:, 1] + x_min + writer.writerows(peaks) + + +if __name__ == "__main__": + options = { + "run" : main, + "version" : "0.1.0" + } + fire.Fire(options) diff --git a/modules/sanger/bioinfotongli/tiledspotiflow/tests/main.nf.test b/modules/sanger/bioinfotongli/tiledspotiflow/tests/main.nf.test index 402dbdde995..50eed76eaed 100644 --- a/modules/sanger/bioinfotongli/tiledspotiflow/tests/main.nf.test +++ b/modules/sanger/bioinfotongli/tiledspotiflow/tests/main.nf.test @@ -1,4 +1,3 @@ -// TODO nf-core: Once you have added the required tests, please run the following command to build this file: // nf-core modules test bioinfotongli/tiledspotiflow nextflow_process { @@ -11,22 +10,40 @@ nextflow_process { tag "bioinfotongli" tag "bioinfotongli/tiledspotiflow" - // TODO nf-core: Change the test name preferably indicating the test-data and file-format used - test("sarscov2 - bam") { + test("mouse_heart - tiff") { - // TODO nf-core: If you are created a test for a chained module - // (the module requires running more than one process to generate the required output) - // add the 'setup' method here. - // You can find more information about how to use a 'setup' method in the docs (https://nf-co.re/docs/contributing/modules#steps-for-creating-nf-test-for-chained-modules). + when { + process { + """ + input[0] = [ + [ id:'mouse_heart'], + 0, 0, 200, 200, + file(params.modules_testdata_base_path + 'imaging/tiff/mindagap.mouse_heart.wga.tiff', checkIfExists: true), + 0 + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("mouse_heart - tiff - 500") { when { process { """ - // TODO nf-core: define inputs of the process here. Example: - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + [ id:'mouse_heart'], + 0, 0, 500, 500, + file(params.modules_testdata_base_path + 'imaging/tiff/mindagap.mouse_heart.wga.tiff', checkIfExists: true), + 0 ] """ } @@ -36,26 +53,23 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot(process.out).match() } - //TODO nf-core: Add all required assertions to verify the test output. - // See https://nf-co.re/docs/contributing/tutorials/nf-test_assertions for more information and examples. ) } } - // TODO nf-core: Change the test name preferably indicating the test-data and file-format used but keep the " - stub" suffix. - test("sarscov2 - bam - stub") { + test("mouse_heart - tiff - stub") { options "-stub" when { process { """ - // TODO nf-core: define inputs of the process here. Example: - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + [ id:'mouse_heart'], + 0, 0, 200, 200, + file(params.modules_testdata_base_path + 'imaging/tiff/mindagap.mouse_heart.wga.tiff', checkIfExists: true), + 0 ] """ } @@ -65,7 +79,6 @@ nextflow_process { assertAll( { assert process.success }, { assert snapshot(process.out).match() } - //TODO nf-core: Add all required assertions to verify the test output. ) } diff --git a/modules/sanger/bioinfotongli/tiledspotiflow/tests/main.nf.test.snap b/modules/sanger/bioinfotongli/tiledspotiflow/tests/main.nf.test.snap new file mode 100644 index 00000000000..6cd9fecca73 --- /dev/null +++ b/modules/sanger/bioinfotongli/tiledspotiflow/tests/main.nf.test.snap @@ -0,0 +1,107 @@ +{ + "mouse_heart - tiff - stub": { + "content": [ + { + "0": [ + [ + { + "id": "mouse_heart" + }, + 0, + "mouse_heart_ch_0_peaks_Y0_Y200_X0_X200.csv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + "versions.yml:md5,5468a2cc58e86ec219e7b4f35377c575" + ], + "peaks": [ + [ + { + "id": "mouse_heart" + }, + 0, + "mouse_heart_ch_0_peaks_Y0_Y200_X0_X200.csv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,5468a2cc58e86ec219e7b4f35377c575" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.04.4" + }, + "timestamp": "2025-03-14T11:16:20.49056051" + }, + "mouse_heart - tiff": { + "content": [ + { + "0": [ + [ + { + "id": "mouse_heart" + }, + 0, + "mouse_heart_ch_0_peaks_Y0_Y200_X0_X200.csv:md5,a1a930de917429f510577aa17970aaa6" + ] + ], + "1": [ + "versions.yml:md5,5468a2cc58e86ec219e7b4f35377c575" + ], + "peaks": [ + [ + { + "id": "mouse_heart" + }, + 0, + "mouse_heart_ch_0_peaks_Y0_Y200_X0_X200.csv:md5,a1a930de917429f510577aa17970aaa6" + ] + ], + "versions": [ + "versions.yml:md5,5468a2cc58e86ec219e7b4f35377c575" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.04.4" + }, + "timestamp": "2025-03-14T11:15:46.765297635" + }, + "mouse_heart - tiff - 500": { + "content": [ + { + "0": [ + [ + { + "id": "mouse_heart" + }, + 0, + "mouse_heart_ch_0_peaks_Y0_Y500_X0_X500.csv:md5,b751ba2081cc127d53c9457f5b15749d" + ] + ], + "1": [ + "versions.yml:md5,5468a2cc58e86ec219e7b4f35377c575" + ], + "peaks": [ + [ + { + "id": "mouse_heart" + }, + 0, + "mouse_heart_ch_0_peaks_Y0_Y500_X0_X500.csv:md5,b751ba2081cc127d53c9457f5b15749d" + ] + ], + "versions": [ + "versions.yml:md5,5468a2cc58e86ec219e7b4f35377c575" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.04.4" + }, + "timestamp": "2025-03-14T11:16:07.818311208" + } +} \ No newline at end of file diff --git a/modules/sanger/bioinfotongli/tiledspotiflow/tests/nextflow.config b/modules/sanger/bioinfotongli/tiledspotiflow/tests/nextflow.config new file mode 100644 index 00000000000..a0579a4aba5 --- /dev/null +++ b/modules/sanger/bioinfotongli/tiledspotiflow/tests/nextflow.config @@ -0,0 +1,5 @@ +nextflow.enable.moduleBinaries = true + +docker.enabled = true + +params.modules_testdata_base_path = "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/" \ No newline at end of file diff --git a/modules/sanger/fractal/cellpose/main.nf b/modules/sanger/fractal/cellpose/main.nf new file mode 100644 index 00000000000..09abfbde6c8 --- /dev/null +++ b/modules/sanger/fractal/cellpose/main.nf @@ -0,0 +1,58 @@ +container_version = "0.0.1" + + +process FRACTAL_CELLPOSE { + tag "$meta.id" + label 'process_low' + + // conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + "quay.io/bioinfotongli/hcs_fractal:${container_version}": + "quay.io/bioinfotongli/hcs_fractal:${container_version}" }" + publishDir params.out_dir + "/cellpose_segmentation/" + + input: + tuple val(meta), path(ome_zarr), val(level), val(channel_name), val(label_name) + + output: + tuple val(meta), path("${ome_zarr}/labels/${label_name}"), emit: thresholded_segmentation + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + """ + echo ' + { + "level": "${level}", + "channel": { + "label": "${channel_name}" + }, + "zarr_url": "${ome_zarr}", + "output_label_name": "${label_name}" + }' > input.json + /opt/conda/bin/python /opt/conda/lib/python3.11/site-packages/fractal_tasks_core/tasks/cellpose_segmentation.py --args-json input.json $args --out-json dummy.json + + #cat <<-END_VERSIONS > ${ome_zarr}/${label_name} + cat <<-END_VERSIONS > versions.yml + "${task.process}": + thresholding: \$(echo \$(/opt//scripts/thresholding_label_task.py version 2>&1 | sed 's/^.*thresholding_label_task.py //; s/Using.*\$//' )) + timestamp: \$(date) + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + """ + touch ${ome_zarr}/images/${label_name}.npy + + #cat <<-END_VERSIONS > ${omezarr_root}/${label_name} + cat <<-END_VERSIONS > versions.yml + "${task.process}": + thresholding: \$(echo \$(/scripts/thresholding_label_task.py version 2>&1 | sed 's/^.*thresholding_label_task.py //; s/Using.*\$//' )) + timestamp: \$(date) + END_VERSIONS + """ +} diff --git a/modules/sanger/fractal/cellpose/meta.yml b/modules/sanger/fractal/cellpose/meta.yml new file mode 100644 index 00000000000..015168f4434 --- /dev/null +++ b/modules/sanger/fractal/cellpose/meta.yml @@ -0,0 +1,62 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "fractal_cellpose" +description: write your description here +keywords: + - segmentation + - fractal + - demo +tools: + - "fractal": + description: "A simple wrapper of cellpose segmentation from Fractal framework" + homepage: "https://fractal-analytics-platform.github.io/" + documentation: "https://fractal-analytics-platform.github.io/" + tool_dev_url: "" + doi: "" + licence: BSD-3-Clause + identifier: + +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1']` + - ome-zarr: + type: file + description: (multi-channel) ome-zarr file + pattern: "*.{zarr,ome.zarr}" + - level: + type: int + description: the level of the pyramid to segment + pattern: "0,1,2" + - channel-name: + type: str + description: the channel name to segment + pattern: "DAPI, Hoescht" + - label-name: + type: str + description: the output label name + pattern: "segmented DAPI" +output: + - out: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - '*labels/${label_name}': + type: file + description: the path to the segmented label image + pattern: "*.{label}" + + - versions: + - "versions.yml": + type: file + description: File containing software versions + pattern: "versions.yml" + +authors: + - "@BioinfoTongLI" +maintainers: + - "@BioinfoTongLI" diff --git a/modules/sanger/fractal/cellpose/tests/main.nf.test b/modules/sanger/fractal/cellpose/tests/main.nf.test new file mode 100644 index 00000000000..58ef92900f0 --- /dev/null +++ b/modules/sanger/fractal/cellpose/tests/main.nf.test @@ -0,0 +1,60 @@ +// TODO nf-core: Once you have added the required tests, please run the following command to build this file: +// nf-core modules test fractal/cellpose +nextflow_process { + + name "Test Process FRACTAL_CELLPOSE" + script "../main.nf" + process "FRACTAL_CELLPOSE" + + tag "modules" + tag "modules_sanger" + tag "fractal" + tag "fractal/cellpose" + + test("mouse_heart - zarr") { + + when { + process { + """ + input[0] = [ + [ id:'test'], // meta map + file(params.modules_testdata_base_path + 'imaging/tiff/mindagap.mouse_heart.wga.zarr', checkIfExists: true), + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("mouse_heart - zarr - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test'], // meta map + file(params.modules_testdata_base_path + 'imaging/tiff/mindagap.mouse_heart.wga.zarr', checkIfExists: true), + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/sanger/fractal/thresholding/main.nf b/modules/sanger/fractal/thresholding/main.nf new file mode 100644 index 00000000000..e11edf065db --- /dev/null +++ b/modules/sanger/fractal/thresholding/main.nf @@ -0,0 +1,58 @@ +container_version = "0.0.1" + +process FRACTAL_THRESHOLDING { + tag "$meta.id" + label 'process_low' + + // conda "${moduleDir}/environment.yml" + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + "quay.io/bioinfotongli/hcs_fractal:${container_version}": + "quay.io/bioinfotongli/hcs_fractal:${container_version}" }" + publishDir params.out_dir + "/thresholding_segmentation/" + + input: + tuple val(meta), path(ome_zarr), val(threshold), val(label_name), val(channel_name) + + output: + tuple val(meta), path("${ome_zarr}/labels/${label_name}"), emit: thresholded_segmentation + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + """ + echo ' + { + "threshold": ${threshold}, + "label_name": "${label_name}", + "channel": { + "label": "${channel_name}" + }, + "zarr_url": "${ome_zarr}" + }' > input.json + /opt/conda/bin/python /opt/scripts/thresholding_label_task.py --args-json input.json $args --out-json dummy.json + + #cat <<-END_VERSIONS > ${ome_zarr}/${label_name} + cat <<-END_VERSIONS > versions.yml + "${task.process}": + thresholding: \$(echo \$(/opt//scripts/thresholding_label_task.py version 2>&1 | sed 's/^.*thresholding_label_task.py //; s/Using.*\$//' )) + timestamp: \$(date) + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + """ + touch ${ome_zarr}/images/${label_name}.npy + + #cat <<-END_VERSIONS > ${omezarr_root}/${label_name} + cat <<-END_VERSIONS > versions.yml + "${task.process}": + thresholding: \$(echo \$(/scripts/thresholding_label_task.py version 2>&1 | sed 's/^.*thresholding_label_task.py //; s/Using.*\$//' )) + timestamp: \$(date) + modified_path: $omezarr_root/Features.csv + END_VERSIONS + """ +} diff --git a/modules/sanger/fractal/thresholding/meta.yml b/modules/sanger/fractal/thresholding/meta.yml new file mode 100644 index 00000000000..403ad511c8c --- /dev/null +++ b/modules/sanger/fractal/thresholding/meta.yml @@ -0,0 +1,73 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "fractal_thresholding" +description: write your description here +keywords: + - thresholding + - image analysis + - segmentation +tools: + - "fractal": + description: "Fractal is a framework developed at the BioVisionCenter to process bioimaging data at scale in the OME-Zarr format and prepare the images for interactive visualization." + homepage: "https://fractal-analytics-platform.github.io/" + documentation: "https://fractal-analytics-platform.github.io/" + tool_dev_url: "" + doi: "" + licence: + identifier: + +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + + - ome_zarr: + type: file + description: OME-Zarr file/folder + pattern: "*.zarr" + # ontologies:# doesn't seem to have an ID for ome-zarr ? + # - edam: "http://edamontology.org/format_25722" + - threshold: + type: int + description: Threshold value for segmentation + + - label_name: + type: string + description: Name of the label for the segmented image + default: "segmentation" + + - channel_name: + type: string + description: Name of the channel to be segmented + default: "DAPI" + + +output: + - bam: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1', single_end:false ]` + + - "*": + type: file + description: zarr folder containing the segmented images + # pattern: "*.{bam,cram,sam}" + # ontologies: + # - edam: "http://edamontology.org/format_25722" + # - edam: "http://edamontology.org/format_2573" + # - edam: "http://edamontology.org/format_3462" + + - versions: + - "versions.yml": + type: file + description: File containing software versions + pattern: "versions.yml" + +authors: + - "@BioinfoTongLI" +maintainers: + - "@BioinfoTongLI" diff --git a/modules/sanger/fractal/thresholding/tests/main.nf.test b/modules/sanger/fractal/thresholding/tests/main.nf.test new file mode 100644 index 00000000000..dec5ca3c2cf --- /dev/null +++ b/modules/sanger/fractal/thresholding/tests/main.nf.test @@ -0,0 +1,59 @@ +// nf-core modules test fractal/thresholding +nextflow_process { + + name "Test Process FRACTAL_THRESHOLDING" + script "../main.nf" + process "FRACTAL_THRESHOLDING" + + tag "modules" + tag "modules_sanger" + tag "fractal" + tag "fractal/thresholding" + + test("mouse_heart - zarr") { + + when { + process { + """ + input[0] = [ + [ id:'test'], // meta map + file(params.modules_testdata_base_path + 'imaging/tiff/mindagap.mouse_heart.wga.zarr', checkIfExists: true), + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("mouse_heart - zarr - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test'], // meta map + file(params.modules_testdata_base_path + 'imaging/tiff/mindagap.mouse_heart.wga.zarr', checkIfExists: true), + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/sanger/mergeoutlines/main.nf b/modules/sanger/mergeoutlines/main.nf new file mode 100644 index 00000000000..68833a111e8 --- /dev/null +++ b/modules/sanger/mergeoutlines/main.nf @@ -0,0 +1,45 @@ +process MERGEOUTLINES { + tag "$meta.id" + + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + 'quay.io/cellgeni/imagetileprocessor:0.1.9': + 'quay.io/cellgeni/imagetileprocessor:0.1.9' }" + + input: + tuple val(meta), path(outlines) + + output: + tuple val(meta), path("${prefix}.wkt"), emit: multipoly_wkts, optional: true + tuple val(meta), path("${prefix}.geojson"), emit: multipoly_geojsons + path "versions.yml" , emit: versions + + when: + task.ext.when == null || task.ext.when + + script: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}_merged" + """ + merge-polygons \\ + --wkts $outlines \\ + --output_prefix "${prefix}" \\ + $args \\ + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + mergeoutlines: \$(merge-polygons --version) + END_VERSIONS + """ + + stub: + def args = task.ext.args ?: '' + prefix = task.ext.prefix ?: "${meta.id}_merged" + """ + touch ${prefix}.wkt + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + mergeoutlines: \$(merge-polygons --version) + END_VERSIONS + """ +} diff --git a/modules/sanger/mergeoutlines/meta.yml b/modules/sanger/mergeoutlines/meta.yml new file mode 100644 index 00000000000..464eb7ef227 --- /dev/null +++ b/modules/sanger/mergeoutlines/meta.yml @@ -0,0 +1,54 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/meta-schema.json +name: "mergeoutlines" +description: A simple python script to merge outlines from multiple overlapping tiles +keywords: + - image analysis + - merge polygons + - outlines + - shapely + +tools: + - "mergeoutlines": + description: "A simple python script to merge outlines from multiple overlapping tiles" + homepage: "" + documentation: "" + tool_dev_url: "" + doi: "" + licence: MIT + identifier: + +input: + - - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + + - outlines: + type: file + description: outlines from multiple overlapping tiles in wkt format + pattern: "*.wkt" + + +output: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'sample1' ]` + - "{prefix}.wkt": + type: file + description: merged outlines in wkt format + pattern: "*.wkt" + + - versions: + - "versions.yml": + type: file + description: File containing software versions + pattern: "versions.yml" + +authors: + - "@BioinfoTongLI" +maintainers: + - "@BioinfoTongLI" diff --git a/modules/sanger/mergeoutlines/tests/main.nf.test b/modules/sanger/mergeoutlines/tests/main.nf.test new file mode 100644 index 00000000000..6c87b147eac --- /dev/null +++ b/modules/sanger/mergeoutlines/tests/main.nf.test @@ -0,0 +1,64 @@ +nextflow_process { + + name "Test Process MERGEOUTLINES" + script "../main.nf" + config "./nextflow.config" + process "MERGEOUTLINES" + + tag "modules" + tag "modules_sanger" + tag "mergeoutlines" + + test("mouse heart - wkt") { + + when { + process { + """ + input[0] = [ + [ id:'test'], // meta map + [ + file(params.modules_testdata_base_path + 'test-0_0_200_200-diam_20_cp_outlines.wkt', checkIfExists: true), + file(params.modules_testdata_base_path + 'test-0_0_500_500-diam_20_cp_outlines.wkt', checkIfExists: true), + ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("mouse heart - wkt - stub") { + + options "-stub" + + when { + process { + """ + input[0] = [ + [ id:'test'], // meta map + [ + file(params.modules_testdata_base_path + 'test-0_0_200_200-diam_20_cp_outlines.wkt', checkIfExists: true), + file(params.modules_testdata_base_path + 'test-0_0_500_500-diam_20_cp_outlines.wkt', checkIfExists: true), + ] + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/sanger/mergeoutlines/tests/main.nf.test.snap b/modules/sanger/mergeoutlines/tests/main.nf.test.snap new file mode 100644 index 00000000000..9df0a0be5a8 --- /dev/null +++ b/modules/sanger/mergeoutlines/tests/main.nf.test.snap @@ -0,0 +1,90 @@ +{ + "mouse heart - wkt - stub": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_merged.wkt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,b47d0d0a777ffdcc4fc0c230c150c040" + ], + "multipoly_geojsons": [ + + ], + "multipoly_wkts": [ + [ + { + "id": "test" + }, + "test_merged.wkt:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,b47d0d0a777ffdcc4fc0c230c150c040" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.04.4" + }, + "timestamp": "2025-03-15T10:04:50.507810178" + }, + "mouse heart - wkt": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_merged.wkt:md5,ac7ba24ae1deff214bf465aed36a42f9" + ] + ], + "1": [ + [ + { + "id": "test" + }, + "test_merged.geojson:md5,0e17590b6af5065d58270ee8708db50c" + ] + ], + "2": [ + "versions.yml:md5,b47d0d0a777ffdcc4fc0c230c150c040" + ], + "multipoly_geojsons": [ + [ + { + "id": "test" + }, + "test_merged.geojson:md5,0e17590b6af5065d58270ee8708db50c" + ] + ], + "multipoly_wkts": [ + [ + { + "id": "test" + }, + "test_merged.wkt:md5,ac7ba24ae1deff214bf465aed36a42f9" + ] + ], + "versions": [ + "versions.yml:md5,b47d0d0a777ffdcc4fc0c230c150c040" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.04.4" + }, + "timestamp": "2025-03-15T10:04:43.098270886" + } +} \ No newline at end of file diff --git a/modules/sanger/mergeoutlines/tests/nextflow.config b/modules/sanger/mergeoutlines/tests/nextflow.config new file mode 100644 index 00000000000..b2361ce1923 --- /dev/null +++ b/modules/sanger/mergeoutlines/tests/nextflow.config @@ -0,0 +1,6 @@ +nextflow.enable.moduleBinaries = true + +docker.enabled = true + +//params.modules_testdata_base_path = 'https://raw.githubusercontent.com/nf-core/test-datasets/modules/data/' +params.modules_testdata_base_path = "/lustre/scratch126/cellgen/cellgeni/tl10/modules/test_datasets/" \ No newline at end of file diff --git a/modules/sanger/postcode/main.nf b/modules/sanger/postcode/main.nf index 6bb6e585f94..8eee9ced2d7 100644 --- a/modules/sanger/postcode/main.nf +++ b/modules/sanger/postcode/main.nf @@ -1,17 +1,9 @@ -params.debug = false -container_version = "0.1.0" - process POSTCODE { - debug params.debug tag "${meta.id}" - cache true - - cpus 1 container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - 'quay.io/bioinfotongli/postcode:${container_version}': - 'quay.io/bioinfotongli/postcode:${container_version}'}" - publishDir params.out_dir + "/PoSTcode_decoding_output" + "quay.io/bioinfotongli/postcode:0.2.0": + "quay.io/bioinfotongli/postcode:0.2.0"}" input: tuple val(meta), file(spot_profile), file(spot_loc), file(codebook), file(readouts), val(R) @@ -26,26 +18,26 @@ process POSTCODE { out_name = "${prefix}_decoded_spots.csv" def args = task.ext.args ?: "" """ - /opt/conda/bin/python /scripts/decode.py run --spot_profile_p ${spot_profile} --spot_locations_p ${spot_loc} \\ + decode.py run --spot_profile_p ${spot_profile} --spot_locations_p ${spot_loc} \\ --codebook_p ${codebook} --out_name ${out_name} --readouts_csv ${readouts} --R ${R} \ ${args} cat <<-END_VERSIONS > versions.yml "${task.process}": - : \$(echo \$(/scripts/decode.py version )) + bioinfotongli: \$(decode.py version) END_VERSIONS """ stub: def args = task.ext.args ?: '' - def prefix = task.ext.prefix ?: "${meta.id}" + prefix = task.ext.prefix ?: "${meta.id}" out_name = "${prefix}_decoded_spots.csv" """ touch ${out_name} cat <<-END_VERSIONS > versions.yml "${task.process}": - postcode: \$(/scripts/decode.py version //') + bioinfotongli: \$(decode.py version) END_VERSIONS """ } diff --git a/modules/sanger/postcode/resources/usr/bin/__init__.py b/modules/sanger/postcode/resources/usr/bin/__init__.py new file mode 100644 index 00000000000..13efc6745b8 --- /dev/null +++ b/modules/sanger/postcode/resources/usr/bin/__init__.py @@ -0,0 +1 @@ +__all__ = ['avg_spot_profile', 'decoding_functions'] \ No newline at end of file diff --git a/modules/sanger/postcode/resources/usr/bin/avg_spot_profile.py b/modules/sanger/postcode/resources/usr/bin/avg_spot_profile.py new file mode 100755 index 00000000000..55c186ed9c6 --- /dev/null +++ b/modules/sanger/postcode/resources/usr/bin/avg_spot_profile.py @@ -0,0 +1,55 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# Copyright (c) 2024 Wellcome Sanger Institute + +import numpy as np +import pandas as pd +import fire + +def get_n_readout(string): + ss = string.split('Readout ') + if len(ss)>1: + n = ss[1] + else: + n = -1 # when the name is not starting with "Readout", for example "Anchor" + return int(n) + +def find_max_n_readouts(table): + Nmax = 0 + for i in range(table.shape[0]): + for j in range(table.shape[1]): + N = get_n_readout(table.iloc[i,j]) + if N>Nmax: Nmax=N + return Nmax + + +def prep_averaged_spot_profiles(spot_profiles, readout_table, Nmax): + avg_spot_profile = np.zeros((spot_profiles.shape[0], 1, Nmax), dtype = spot_profiles.dtype) + for n_r in range(Nmax): + list_of_cyc_ch = [] + for i in range(readout_table.shape[0]): + for j in range(readout_table.shape[1]): + nn = get_n_readout(readout_table.iloc[i,j]) + if nn>-1: + if nn == n_r+1: + list_of_cyc_ch.append(np.array([i, j])) + for nl in range(len(list_of_cyc_ch)): + avg_spot_profile[:,0,n_r]+=spot_profiles[:,list_of_cyc_ch[nl][1], list_of_cyc_ch[nl][0]] + avg_spot_profile[:,0,n_r] = (avg_spot_profile[:,0,n_r]/len(list_of_cyc_ch)).astype(spot_profiles.dtype) + return avg_spot_profile + + +def main(spot_profiles, path_readouts_csv): + ## this function takes computed for all cycle-channels spot profiles and create an average version for each readout + ## readouts_csv should contain N rows and M columns, where N - is number of cycles and M is number of channels + ## cells should be filled like "Readout 1", "Readout 2" etc starting from 1 not 0 + readouts_table = pd.read_csv(path_readouts_csv) + assert spot_profiles.shape[1]==readouts_table.shape[1], "number of channels is different in npy file and in readouts csv!" + assert spot_profiles.shape[2]==readouts_table.shape[0], "number of cycles is different in npy file and in readouts csv!" + Nmax = find_max_n_readouts(readouts_table) + print('There is ' + str(Nmax) + ' readouts in total') + spot_profiles_avg = prep_averaged_spot_profiles(spot_profiles, readouts_table, Nmax) + return spot_profiles_avg, Nmax + +if __name__ == "__main__": + fire.Fire(main) \ No newline at end of file diff --git a/modules/sanger/postcode/resources/usr/bin/codebook_qc.py b/modules/sanger/postcode/resources/usr/bin/codebook_qc.py new file mode 100644 index 00000000000..9db51337ab4 --- /dev/null +++ b/modules/sanger/postcode/resources/usr/bin/codebook_qc.py @@ -0,0 +1,70 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# Copyright (c) 2025 Wellcome Sanger Institute + +import pandas as pd +from starfish.core.codebook.codebook import Codebook +from starfish.types import Axes, Features +import numpy as np +import re + + +def to_starfish_codebook(codebook:pd.DataFrame, target_col:str, code_col:str, is_merfish:bool=False) -> Codebook: + mappings = [] + for _, row in codebook.iterrows(): + mapping = {} + mapping[Features.TARGET] = row[target_col] + codeward = [] + for r, c in enumerate(str(row[code_col])): + if is_merfish: + codeward.append({Axes.ROUND.value: r, Axes.CH.value: 0, Features.CODE_VALUE: c}) + else: + codeward.append({Axes.ROUND.value: r, Axes.CH.value: int(c)-1, Features.CODE_VALUE: 1}) + mapping[Features.CODEWORD] = codeward + mappings.append(mapping) + if is_merfish: + return Codebook.from_code_array(mappings, n_round=r+1, n_channel=1) # hardcoded to 4 channels since Cartana only uses 4 channels + else: + return Codebook.from_code_array(mappings, n_round=r+1, n_channel=4) # hardcoded to 4 channels since Cartana only uses 4 channels + +def filter_columns_by_regex(df: pd.DataFrame, pattern: str) -> pd.DataFrame: + regex = re.compile(pattern) + return df.loc[:, df.columns.to_series().apply(lambda x: bool(regex.match(x)))] + +def load_codebook(codebook_path: str, codebook_code_col:str) -> pd.DataFrame: + """ + Read codebook from a file. + + Args: + codebook_path (str): A file path to the codebook. + + Returns: + pd.DataFrame: A pandas DataFrame containing the codebook. + """ + if codebook_path.endswith(".xlsx"): + codebook = pd.read_excel(codebook_path, dtype={codebook_code_col: str}) + elif codebook_path.endswith(".csv"): + codebook = pd.read_csv(codebook_path, dtype={codebook_code_col: str}) + elif codebook_path.endswith(".tsv"): + codebook = pd.read_csv(codebook_path, sep="\t", dtype={codebook_code_col: str}) + else: + raise ValueError("Codebook file must be in .xlsx, .csv or .tsv format") + return codebook.dropna() + # codebook.to_json(f"{Path(codebook_p).stem}.json") + +def filter_columns_by_regex(df: pd.DataFrame, pattern: str) -> pd.DataFrame: + regex = re.compile(pattern) + return df.loc[:, df.columns.to_series().apply(lambda x: bool(regex.match(x)))] + +def qc_codebook(codebook, code_col:str, coding_col_prefix:str = "cycle\d_channel\d_*"): + df = filter_columns_by_regex(codebook, coding_col_prefix).astype(int) + _, n_code = df.shape + if "channel" not in coding_col_prefix: + for i, code in enumerate(codebook[code_col]): + assert code == "".join(df.iloc[i, :].values.astype(str)), "ISS-like Codebook is not consistent with the coding columns" + else: + for i, code in enumerate(codebook[code_col]): + current_code = np.zeros(n_code, dtype=int) + for j, char in enumerate(code): + current_code[j * n_code//len(code) + int(char)] = 1 + assert "".join(df.iloc[i, :].values.astype(str)) == "".join(current_code.astype(str)), "Merifish-like Codebook is not consistent with the coding columns" \ No newline at end of file diff --git a/modules/sanger/postcode/resources/usr/bin/decode.py b/modules/sanger/postcode/resources/usr/bin/decode.py new file mode 100755 index 00000000000..0a21e97bb2b --- /dev/null +++ b/modules/sanger/postcode/resources/usr/bin/decode.py @@ -0,0 +1,172 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# Copyright (c) 2024 Wellcome Sanger Institute + +import numpy as np +import pandas as pd +import fire +from avg_spot_profile import main as average_spot_profiles +from decoding_functions import decoding_function, decoding_output_to_dataframe +import logging +# from prepare_ISS import prepare_iss +import os +from codebook_qc import load_codebook, qc_codebook, to_starfish_codebook +from pathlib import Path + +logging.basicConfig(level=logging.INFO) +logger = logging.getLogger(__name__) + +VERSION="0.1.0" + + +# def ReadPrepCodebook_ISS(codebook_path): +# ''' +# ISS stands for In Situ Sequencing. It is a method for encoding ISS data. +# ''' +# #I consider single channel! +# codebook_in = load_codebook(codebook_path) +# codes = codebook_in['code'] +# n_genes = len(codes); n_rounds = len(str(codes[0])) +# n_channel = -1 +# for channel in codebook_in.columns: +# if 'channel' in channel: +# channel_index = int(channel.split('_')[1].replace('channel', '')) +# if channel_index > n_channel: +# n_channel = channel_index +# n_channel -= 1 #remove DAPI/Hoechst channel +# codebook_3d = np.zeros((n_genes, n_channel, n_rounds), dtype = 'uint8') +# for ng in range(n_genes): +# for nr in range(n_rounds): +# for nch in range(n_channel): +# codebook_3d[ng, nch, nr] = int(codebook_in['channel_' + str(nch+1)][ng][nr]) +# # codebook_3d[ng, 0, nr] = int(str(codes[ng])[nr]) +# gene_list_obj = np.array(codebook_in['gene'], dtype = object) +# return gene_list_obj, codebook_3d, n_genes + + +# def ReadPrepCodebook_MER(codebook_path, N_readouts): +# ''' +# MER stands for Multiplex Error Robust. It is a method for encoding MERFISH data. +# ''' +# codebook_in = load_codebook(codebook_path) +# print(codebook_in) +# n_genes = codebook_in.shape[0]; n_rounds = N_readouts +# codebook_3d = np.zeros((n_genes, 1, n_rounds), dtype = 'uint8') +# for ng in range(n_genes): +# for nr in range(n_rounds): +# column_name = 'Readout_' + str(nr+1) +# codebook_3d[ng, 0, nr] = int(codebook_in[column_name][ng]) +# gene_list_obj = np.array(codebook_in['gene'], dtype = object) +# return gene_list_obj, codebook_3d, n_genes + + +def decode( + spot_locations_p: str, + spot_profile_p: str, + codebook_p: str, + out_name: str, + readouts_csv: str=None, + keep_noises=True, + min_prob = 0.95, + R:int=None, + codebook_targer_col:str='Gene', + codebook_code_col:str='code', + coding_col_prefix:str='cycle\d_channel\d_+' + ) -> pd.DataFrame: + """ + Decodes spots using the Postcode algorithm. + + Args: + spot_locations_p (str): A file path to pandas DataFrame containing the spot locations. + spot_profile_p (str): A file path to numpy array containing the spot profiles (N x C x R). + codebook (str): Cortana-like codebook with only one channel and number of rounds (readouts) + out_name (str): name of the output file + readouts_csv (str, optional): csv file with table which describes link between cycle-channels and readouts + keep_noises (bool, optional): Whether to keep spots that were classified as 'background' or 'infeasible'. + min_prob: [0,1] - value of minimum allowed probability of decoded spot + Defaults to True. + R (int): Number of rounds. Defaults to None. + + Returns: + pd.DataFrame: A pandas DataFrame containing the decoded spots and their locations. + """ + is_merfish = os.path.getsize(readouts_csv) != 0 + codebook = load_codebook(codebook_p, codebook_code_col) + qc_codebook(codebook, codebook_code_col, coding_col_prefix) + starfish_book = to_starfish_codebook( + codebook, + target_col=codebook_targer_col, + code_col=codebook_code_col, + is_merfish=is_merfish + ) + starfish_book.to_json(f"{Path(codebook_p).stem}_starfish_codebook.json") + codebook_arr = np.array(starfish_book).transpose(0, 2, 1) + gene_list = np.array(starfish_book.target) + K = len(starfish_book.target) + + spot_profile = np.load(spot_profile_p) + + if len(spot_profile.shape) == 2 and R: + # if the spot_profile is two dimensional, it is assumed that the spot_profile is in + # the shape of (n_channel*n_cycle, n_spot). Then reshape it. + n_ch, n_spots = spot_profile.shape + # fine DAPI/Hoechst channel indexes and remove them from the profile + n_chs_per_cycle = n_ch // R + coding_mask_pre_cycle = np.ones(n_chs_per_cycle) + coding_mask_pre_cycle[0] = 0 # remove DAPI/Hoechst channel + coding_ch_mask = np.array(list(coding_mask_pre_cycle) * R, dtype=bool) + spot_profile = spot_profile[coding_ch_mask].reshape(R, n_chs_per_cycle - 1, n_spots) + spot_profile = spot_profile.transpose(2, 1, 0) + # np.save(f"{stem}_reshaped_spot_profile.npy", spot_profile) + print(spot_profile.shape, "\n", spot_profile[0], type(spot_profile[0]), "\n", spot_profile[0].dtype) + + if is_merfish: + spot_profile, _ = average_spot_profiles(spot_profile, readouts_csv) + # if os.path.getsize(readouts_csv) != 0: # MERFISH-like data, this file should be provided + # spot_profile, N_readouts = average_spot_profiles(spot_profile, readouts_csv) # Average is chosen over max for MERFISH-like profiles + # gene_list, codebook_arr, K = ReadPrepCodebook_MER(codebook_p, N_readouts) + # else: + # codebook_arr, spot_profile, gene_list, K = prepare_iss(codebook_p, spot_profile_p, **prepare_iss_kwargs) + + spot_locations = pd.read_csv(spot_locations_p) + if len(spot_locations.columns) == 2: + spot_locations["spot_id"] = spot_locations.index + elif len(spot_locations.columns) == 3: + spot_locations.columns = ['spot_id', 'y', 'x'] + else: + raise ValueError("spot_locations_p should have 2 or 3 columns") + + assert spot_locations.shape[0] == spot_profile.shape[0], "Number of spots in spot_locations and spot_profile do not match" + # Decode using postcode + out = decoding_function(spot_profile, codebook_arr, print_training_progress=False) + + # Reformat output into pandas dataframe + df_class_names = np.concatenate((gene_list, ['infeasible', 'background', 'nan'])) + if is_merfish: + barcodes_0123_str = ["".join(k) for k in codebook_arr[:,0,:].astype(str)] + else: + barcodes_0123_str = ["".join(np.argmax(k, axis=0).astype(str)) for k in codebook_arr.astype(str)] + # barcodes_0123_str = ["".join(k) for k in codebook_arr.astype(str)] + # barcodes_0123 = codebook_arr[:,0,:] + # barcodes_AGCT = np.empty(K, dtype='object') + # for k in range(K): + # barcodes_AGCT[k] = ''.join(list(barcodes_0123[k, :].astype(str))) + df_class_codes = np.concatenate((barcodes_0123_str, ['NA', '0000', 'NA'])) + decoded_spots_df = decoding_output_to_dataframe(out, df_class_names, df_class_codes) + + decoded_df_s = pd.concat([decoded_spots_df, spot_locations], axis=1) + decoded_df_s = decoded_df_s[decoded_df_s['Probability']>min_prob] + + if keep_noises: + decoded_df_s.to_csv(out_name, index=False) + else: + # Remove infeasible and background codes + decoded_df_s[~np.isin(decoded_df_s['Name'], ['background', 'infeasible'])].reset_index(drop=True).to_csv(out_name, index=False) + + +if __name__ == "__main__": + options = { + "run": decode, + "version": VERSION + } + fire.Fire(options) diff --git a/modules/sanger/postcode/resources/usr/bin/decoding_functions.py b/modules/sanger/postcode/resources/usr/bin/decoding_functions.py new file mode 100755 index 00000000000..94168796d25 --- /dev/null +++ b/modules/sanger/postcode/resources/usr/bin/decoding_functions.py @@ -0,0 +1,322 @@ +import itertools + +import numpy as np +import pandas as pd +import pyro +import torch +from pyro import poutine +from pyro.distributions import Categorical, constraints, MultivariateNormal +from pyro.infer import config_enumerate, infer_discrete, SVI, TraceEnum_ELBO +from pyro.infer.autoguide import AutoDelta +from pyro.optim import Adam +from tqdm import tqdm + +assert pyro.__version__.startswith('1') + +# auxiliary functions required for decoding +def torch_format(numpy_array): + D = numpy_array.shape[1] * numpy_array.shape[2] + return torch.tensor(numpy_array).float().transpose(1, 2).reshape(numpy_array.shape[0], D) + + +def barcodes_01_from_channels(barcodes_1234, C, R): + K = barcodes_1234.shape[0] + barcodes_01 = np.ones((K, C, R)) + for b in range(K): + barcodes_01[b, :, :] = \ + 1 * np.transpose(barcodes_1234[b, :].reshape(R, 1) == np.arange(1, C + 1)) + return barcodes_01 + + +def kronecker_product(tr, tc): + tr_height, tr_width = tr.size() + tc_height, tc_width = tc.size() + out_height = tr_height * tc_height + out_width = tr_width * tc_width + tiled_tc = tc.repeat(tr_height, tr_width) + expanded_tr = \ + (tr.unsqueeze(2).unsqueeze(3).repeat(1, tc_height, tc_width, 1).view(out_height, out_width)) + return expanded_tr * tiled_tc + + +def chol_sigma_from_vec(sigma_vec, D): + L = torch.zeros(D, D) + L[torch.tril(torch.ones(D, D)) == 1] = sigma_vec + return torch.mm(L, torch.t(L)) + + +def e_step(data, w, theta, sigma, N, K, print_training_progress): + class_probs = torch.ones(N, K) + if print_training_progress: + for k in tqdm(range(K)): + dist = MultivariateNormal(theta[k], sigma) + class_probs[:, k] = w[k] * torch.exp(dist.log_prob(data)) + else: + for k in range(K): + dist = MultivariateNormal(theta[k], sigma) + class_probs[:, k] = w[k] * torch.exp(dist.log_prob(data)) + + class_prob_norm = class_probs.div(torch.sum(class_probs, dim=1, keepdim=True)) + # class_prob_norm[torch.isnan(class_prob_norm)] = 0 + return class_prob_norm + + +def mat_sqrt(A, D): + try: + U, S, V = torch.svd(A + 1e-3 * A.mean() * torch.rand(D, D)) + except Exception: + U, S, V = torch.svd(A + 1e-2 * A.mean() * torch.rand(D, D)) + S_sqrt = torch.sqrt(S) + return torch.mm(torch.mm(U, torch.diag(S_sqrt)), V.t()) + + +def map_states(data, N, D, C, R, K, codes, batch_size=None, temperature=0): + inferred_model = \ + infer_discrete(poutine.replay(model_constrained_tensor, + trace=poutine.trace(auto_guide).get_trace(data, N, D, C, R, K, + codes)), + temperature=temperature, first_available_dim=-2) + trace = poutine.trace(inferred_model).get_trace(data, N, D, C, R, K, codes) + return trace.nodes["z"]["value"] + + +@config_enumerate +def model_constrained_tensor(data, N, D, C, R, K, codes, batch_size=None): + w = pyro.param('weights', torch.ones(K) / K, constraint=constraints.simplex) + + # using tensor sigma + sigma_ch_v = pyro.param('sigma_ch_v', torch.eye(C)[np.tril_indices(C, 0)]) + sigma_ch = chol_sigma_from_vec(sigma_ch_v, C) + sigma_ro_v = pyro.param('sigma_ro_v', torch.eye(D)[np.tril_indices(R, 0)]) + sigma_ro = chol_sigma_from_vec(sigma_ro_v, R) + sigma = kronecker_product(sigma_ro, sigma_ch) + + # codes_tr_v = pyro.param('codes_tr_v', 3 * torch.ones(1, D), constraint=constraints.positive) + codes_tr_v = pyro.param('codes_tr_v', 3 * torch.ones(1, D), + constraint=constraints.greater_than(1.)) + codes_tr_consts_v = pyro.param('codes_tr_consts_v', -1 * torch.ones(1, D)) + + theta = torch.matmul(codes * codes_tr_v + codes_tr_consts_v, mat_sqrt(sigma, D)) + + with pyro.plate('data', N, batch_size) as batch: + z = pyro.sample('z', Categorical(w)) + pyro.sample('obs', MultivariateNormal(theta[z], sigma), obs=data[batch]) + + +auto_guide = AutoDelta(poutine.block(model_constrained_tensor, + expose=['weights', 'codes_tr_v', 'codes_tr_consts_v', + 'sigma_ch_v', 'sigma_ro_v'])) + + +def train(svi, num_iterations, data, N, D, C, R, K, codes, print_training_progress, batch_size): + pyro.clear_param_store() + losses = [] + if print_training_progress: + for j in tqdm(range(num_iterations)): + loss = svi.step(data, N, D, C, R, K, codes, batch_size) + losses.append(loss) + else: + for j in range(num_iterations): + loss = svi.step(data, N, D, C, R, K, codes, batch_size) + losses.append(loss) + return losses + + +# input - output decoding function +def decoding_function(spots, barcodes_01, + num_iter=60, batch_size=15000, up_prc_to_remove=99.95, + modify_bkg_prior=True, # should be False when there is a lot of background + # signal (eg pixel-wise decoding, a lot of noisy + # boundary tiles) + estimate_bkg=True, estimate_additional_barcodes=None, # controls adding + # additional barcodes + # during parameter + # estimation + add_remaining_barcodes_prior=0.05, # after model is estimated, infeasible + # barcodes are used in the e-step with + # given prior + print_training_progress=True, set_seed=1): + # INPUT: + # spots: a numpy array of dim N x C x R (number of spots x coding channels x rounds); + # barcodes_01: a numpy array of dim K x C x R (number of barcodes x coding channels x rounds) + # OUTPUT: + # 'class_probs': posterior probabilities computed via e-step + # 'class_ind': indices of different barcode classes (genes / background / infeasible / nan) + # 'params': estimated model parameters + # 'norm_const': constants used for normalization of spots prior to model fitting + + # if cuda available, runs on gpu + torch.set_default_tensor_type("torch.FloatTensor") + + N = spots.shape[0] + if N == 0: + print('There are no spots to decode.') + return + C = spots.shape[1] + R = spots.shape[2] + K = barcodes_01.shape[0] + D = C * R + data = torch_format(spots) + codes = torch_format(barcodes_01) + + # include background / any additional barcode in codebook + if estimate_bkg: + bkg_ind = codes.shape[0] + codes = torch.cat((codes, torch.zeros(1, D))) + else: + bkg_ind = np.empty((0,), dtype=np.int32) + if np.any(estimate_additional_barcodes is not None): + inf_ind = codes.shape[0] + np.arange(estimate_additional_barcodes.shape[0]) + codes = torch.cat((codes, torch_format(estimate_additional_barcodes))) + else: + inf_ind = np.empty((0,), dtype=np.int32) + + # normalize spot values + ind_keep = np.where(np.sum(data.cpu().numpy() < np.percentile(data.cpu().numpy(), + up_prc_to_remove, axis=0), + axis=1) == D)[0] if up_prc_to_remove < 100 else np.arange(0, N) + s = torch.tensor(np.percentile(data[ind_keep, :].cpu().numpy(), 60, axis=0)) + max_s = torch.tensor(np.percentile(data[ind_keep, :].cpu().numpy(), 99.9, axis=0)) + min_s = torch.min(data[ind_keep, :], dim=0).values + log_add = (s ** 2 - max_s * min_s) / (max_s + min_s - 2 * s) + log_add = torch.max(-torch.min(data[ind_keep, :], dim=0).values + 1e-10, other=log_add.float()) + data_log = torch.log10(data + log_add) + data_log_mean = data_log[ind_keep, :].mean(dim=0, keepdim=True) + data_log_std = data_log[ind_keep, :].std(dim=0, keepdim=True) + data_norm = (data_log - data_log_mean) / data_log_std # column-wise normalization + + # model training: + optim = Adam({'lr': 0.085, 'betas': [0.85, 0.99]}) + svi = SVI(model_constrained_tensor, auto_guide, optim, loss=TraceEnum_ELBO(max_plate_nesting=1)) + pyro.set_rng_seed(set_seed) + losses = train(svi, num_iter, data_norm[ind_keep, :], len(ind_keep), D, C, R, codes.shape[0], + codes, print_training_progress, min(len(ind_keep), batch_size)) + # collect estimated parameters + w_star = pyro.param('weights').detach() + sigma_ch_v_star = pyro.param('sigma_ch_v').detach() + sigma_ro_v_star = pyro.param('sigma_ro_v').detach() + sigma_ro_star = chol_sigma_from_vec(sigma_ro_v_star, R) + sigma_ch_star = chol_sigma_from_vec(sigma_ch_v_star, C) + sigma_star = kronecker_product(sigma_ro_star, sigma_ch_star) + codes_tr_v_star = pyro.param('codes_tr_v').detach() + codes_tr_consts_v_star = pyro.param('codes_tr_consts_v').detach() + theta_star = torch.matmul(codes * codes_tr_v_star + codes_tr_consts_v_star, + mat_sqrt(sigma_star, D)) + + # computing class probabilities with appropriate prior probabilities + if modify_bkg_prior and w_star.shape[0] > K: + # making sure that the K barcode classes have higher prior in case there are more than K + # classes + w_star_mod = torch.cat((w_star[0:K], w_star[0:K].min().repeat(w_star.shape[0] - K))) + w_star_mod = w_star_mod / w_star_mod.sum() + else: + w_star_mod = w_star + + if add_remaining_barcodes_prior > 0: + # all possible barcodes + barcodes_1234 = np.array([p for p in itertools.product(np.arange(1, C + 1), repeat=R)]) + # all possible barcodes in the same format as codes + codes_inf = np.array(torch_format(barcodes_01_from_channels(barcodes_1234, C, R)).cpu()) + # add the bkg code at the beginning + codes_inf = np.concatenate((np.zeros((1, D)), codes_inf)) + codes_cpu = codes.cpu() + for b in range(codes_cpu.shape[0]): # remove already existing codes + r = np.array(codes_cpu[b, :], dtype=np.int32) + if np.where(np.all(codes_inf == r, axis=1))[0].shape[0] != 0: + i = np.reshape(np.where(np.all(codes_inf == r, axis=1)), (1,))[0] + codes_inf = np.delete(codes_inf, i, axis=0) + if not estimate_bkg: + bkg_ind = codes_cpu.shape[0] + inf_ind = np.append(inf_ind, codes_cpu.shape[0] + 1 + np.arange(codes_inf.shape[0])) + else: + inf_ind = np.append(inf_ind, codes_cpu.shape[0] + np.arange(codes_inf.shape[0])) + codes_inf = torch.tensor(codes_inf).float() + alpha = (1 - add_remaining_barcodes_prior) + w_star_all = \ + torch.cat((alpha * w_star_mod, + torch.tensor((1 - alpha) / codes_inf.shape[0]).repeat(codes_inf.shape[0]))) + class_probs_star = \ + e_step(data_norm, w_star_all, + torch.matmul(torch.cat((codes, codes_inf)) * codes_tr_v_star + + codes_tr_consts_v_star.repeat(w_star_all.shape[0], 1), + mat_sqrt(sigma_star, D)), + sigma_star, N, w_star_all.shape[0], print_training_progress) + else: + class_probs_star = e_step(data_norm, w_star_mod, theta_star, sigma_star, N, codes.shape[0], + print_training_progress) + + # collapsing added barcodes + class_probs_star_s = \ + torch.cat((torch.cat((class_probs_star[:, 0:K], + class_probs_star[:, bkg_ind].reshape((N, 1))), dim=1), + torch.sum(class_probs_star[:, inf_ind], dim=1).reshape((N, 1))), dim=1) + inf_ind_s = inf_ind[0] + # adding another class if there are NaNs + nan_spot_ind = torch.unique((torch.isnan(class_probs_star_s)).nonzero(as_tuple=False)[:, 0]) + if nan_spot_ind.shape[0] > 0: + nan_class_ind = class_probs_star_s.shape[1] + class_probs_star_s = torch.cat((class_probs_star_s, + torch.zeros((class_probs_star_s.shape[0], 1))), dim=1) + class_probs_star_s[nan_spot_ind, :] = 0 + class_probs_star_s[nan_spot_ind, nan_class_ind] = 1 + else: + nan_class_ind = np.empty((0,), dtype=np.int32) + + class_probs = class_probs_star_s.cpu().numpy() + + + class_ind = {'genes': np.arange(K), 'bkg': bkg_ind, 'inf': inf_ind_s, 'nan': nan_class_ind} + torch_params = {'w_star': w_star_mod.cpu(), 'sigma_star': sigma_star.cpu(), + 'sigma_ro_star': sigma_ro_star.cpu(), 'sigma_ch_star': sigma_ch_star.cpu(), + 'theta_star': theta_star.cpu(), + 'codes_tr_consts_v_star': codes_tr_consts_v_star.cpu(), + 'codes_tr_v_star': codes_tr_v_star.cpu(), 'losses': losses} + norm_const = {'log_add': log_add, 'data_log_mean': data_log_mean, 'data_log_std': data_log_std} + + return {'class_probs': class_probs, 'class_ind': class_ind, 'params': torch_params, + 'norm_const': norm_const} + + +# function handling output of decoding +def decoding_output_to_dataframe(out, df_class_names, df_class_codes): + val = out['class_probs'].max(axis=1) + ind = out['class_probs'].argmax(axis=1) + K = len(out['class_ind']['genes']) + decoded = ind + 1 + decoded[np.isin(ind, out['class_ind']['inf'])] = K + 1 # inf class + decoded[np.isin(ind, out['class_ind']['bkg'])] = K + 2 # bkg class + decoded[np.isin(ind, out['class_ind']['nan'])] = K + 3 # NaN class + decoded_spots_df = pd.DataFrame(columns=['Name', 'Code', 'Probability']) + decoded_spots_df['Name'] = df_class_names[decoded - 1] + decoded_spots_df['Code'] = df_class_codes[decoded - 1] + decoded_spots_df['Probability'] = val + return decoded_spots_df + + +# function creating a heatmap for plotting spatial patterns +def heatmap_pattern(decoded_df,name,grid=150, thr=0.7,plot_probs=True): + if not 'Probability' in decoded_df.columns: + if not 'Score' in decoded_df.columns: + plot_probs = False + x_coord = np.floor(decoded_df.X[(decoded_df.Name == name)].to_numpy(dtype=np.double) / grid).astype(np.int32) + y_coord = np.floor(decoded_df.Y[(decoded_df.Name == name)].to_numpy(dtype=np.double) / grid).astype(np.int32) + else: + x_coord = np.floor(decoded_df.X[(decoded_df.Name == name) & (decoded_df.Score > thr)].to_numpy(dtype=np.double) / grid).astype(np.int32) + y_coord = np.floor(decoded_df.Y[(decoded_df.Name == name) & (decoded_df.Score > thr)].to_numpy(dtype=np.double) / grid).astype(np.int32) + else: + x_coord = np.floor(decoded_df.X[(decoded_df.Name == name) & (decoded_df.Probability >thr)].to_numpy(dtype=np.double)/grid).astype(np.int32) + y_coord = np.floor(decoded_df.Y[(decoded_df.Name == name) & (decoded_df.Probability >thr)].to_numpy(dtype=np.double)/grid).astype(np.int32) + H = np.zeros((int(np.ceil(decoded_df.Y.to_numpy(dtype=np.double).max()/grid)),int(np.ceil(decoded_df.X.to_numpy(dtype=np.double).max()/grid)))) + if plot_probs: + if 'Probability' in decoded_df.columns: + prob = decoded_df.Probability[decoded_df.Name == name].to_numpy(dtype=np.double) + elif 'Score' in decoded_df.columns: + prob = decoded_df.Score[decoded_df.Name == name].to_numpy(dtype=np.double) + prob[prob0: + codebook_3d, spot_profile_3d = delete_channel(codebook_3d, spot_profile_3d, channel_order, channels_to_delete) + return codebook_3d, spot_profile_3d, gene_list_obj, Ngenes \ No newline at end of file diff --git a/modules/sanger/postcode/tests/dummy.txt b/modules/sanger/postcode/tests/dummy.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/modules/sanger/postcode/tests/iss_codebook.csv b/modules/sanger/postcode/tests/iss_codebook.csv new file mode 100644 index 00000000000..a26396f8050 --- /dev/null +++ b/modules/sanger/postcode/tests/iss_codebook.csv @@ -0,0 +1,1025 @@ +L-probe,code,cycle1_channel0_DAPI,cycle1_channel1_AF488,cycle1_channel2_Cy3,cycle1_channel3_Cy5,cycle1_channel4_A425,cycle2_channel0_DAPI,cycle2_channel1_AF488,cycle2_channel2_Cy3,cycle2_channel3_Cy5,cycle2_channel4_A425,cycle3_channel0_DAPI,cycle3_channel1_AF488,cycle3_channel2_Cy3,cycle3_channel3_Cy5,cycle3_channel4_A425,cycle4_channel0_DAPI,cycle4_channel1_AF488,cycle4_channel2_Cy3,cycle4_channel3_Cy5,cycle4_channel4_A425,cycle5_channel0_DAPI,cycle5_channel1_AF488,cycle5_channel2_Cy3,cycle5_channel3_Cy5,cycle5_channel4_A425,cycle6_channel0_DAPI,cycle6_channel1_AF488,cycle6_channel2_Cy3,cycle6_channel3_Cy5,cycle6_channel4_A425 +LbarID_0201,412344,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0202,142344,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0203,232214,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0204,322214,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0205,421344,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0206,131344,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0207,241344,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0208,311344,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0209,434344,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0210,124344,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0211,214344,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0212,344344,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0213,443344,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0214,113344,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0215,223214,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0216,133144,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0217,213444,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 +LbarID_0218,424244,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0219,323314,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0220,243144,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0221,211244,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0222,122144,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0223,234144,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0224,114144,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0225,141144,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0226,343444,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 +LbarID_0227,121244,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0228,444144,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0229,334444,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 +LbarID_0230,441444,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 +LbarID_0231,433444,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 +LbarID_0232,244244,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0233,221144,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0234,414444,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 +LbarID_0235,314244,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0236,342144,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0237,212144,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0238,423144,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0239,313144,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0240,332314,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0241,312444,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 +LbarID_0242,231444,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 +LbarID_0243,333214,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0244,143244,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0245,233314,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0246,422444,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 +LbarID_0247,222314,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0248,324144,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0249,432144,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0250,411144,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0251,442244,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0252,123444,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 +LbarID_0253,134244,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0254,144444,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 +LbarID_0255,112244,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0256,331144,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0257,413244,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0258,111444,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 +LbarID_0259,132444,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 +LbarID_0260,321444,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 +LbarID_0261,224444,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 +LbarID_0262,242444,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 +LbarID_0263,431244,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0264,341244,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0265,341314,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0266,111122,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0 +LbarID_0267,132224,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0268,331414,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1 +LbarID_0269,343114,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0270,231334,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0271,433114,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0272,114224,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0273,133234,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0274,414324,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0275,421214,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0276,221324,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0277,114414,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1 +LbarID_0278,424424,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1 +LbarID_0279,422224,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0280,244424,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1 +LbarID_0281,443214,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0282,142214,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0283,434434,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1 +LbarID_0284,213224,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0285,343334,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0286,234234,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0287,334224,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0288,414234,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0289,444224,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0290,233424,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1 +LbarID_0291,431314,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0292,142124,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0293,232344,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0294,214214,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0295,114334,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0296,123334,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0297,333434,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1 +LbarID_0298,224334,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0299,342414,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1 +LbarID_0300,422114,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0301,331324,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0302,214434,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1 +LbarID_0303,213334,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0304,243414,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1 +LbarID_0305,242224,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0306,321224,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0307,313414,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1 +LbarID_0308,244314,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0309,321334,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0310,412434,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1 +LbarID_0311,331234,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0312,224114,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0313,423324,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0314,442314,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0315,344214,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0316,132334,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0317,333344,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0318,212414,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1 +LbarID_0319,324414,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1 +LbarID_0320,431424,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1 +LbarID_0321,222244,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0322,134314,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0323,234414,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1 +LbarID_0324,442424,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1 +LbarID_0325,324234,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0326,222134,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0327,142434,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1 +LbarID_0328,323424,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1 +LbarID_0329,231224,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0330,121424,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1 +LbarID_0331,423414,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1 +LbarID_0332,413314,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0333,143314,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0334,341424,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1 +LbarID_0335,434214,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0336,124434,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1 +LbarID_0337,332134,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0338,141414,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1 +LbarID_0339,411224,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0340,442134,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0341,433334,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0342,241434,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1 +LbarID_0343,424314,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0344,241214,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0345,334114,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0346,421124,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0347,414114,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0348,441234,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0349,112424,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1 +LbarID_0350,111212,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0 +LbarID_0351,341134,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0352,143424,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1 +LbarID_0353,224224,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0354,212234,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0355,223124,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0356,412124,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0357,344434,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1 +LbarID_0358,312334,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0359,234324,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0360,133324,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0361,141334,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0362,123224,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0363,232124,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0364,211424,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1 +LbarID_0365,144114,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0366,443124,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0367,244134,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0368,121112,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0 +LbarID_0369,223434,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1 +LbarID_0370,431134,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0371,413424,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1 +LbarID_0372,342234,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0373,124124,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0374,432414,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1 +LbarID_0375,313324,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0376,432234,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0377,444414,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1 +LbarID_0378,333124,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0379,233244,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0380,411334,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0381,313234,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0382,441114,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0383,134424,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1 +LbarID_0384,112112,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0 +LbarID_0385,423234,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0386,232434,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1 +LbarID_0387,334334,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0388,141224,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0389,342324,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0390,314424,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1 +LbarID_0391,323244,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0392,144234,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0393,343224,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0394,432324,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0395,233134,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0396,322344,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0397,413134,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0398,332244,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0399,314134,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0400,122324,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0401,314314,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0402,211112,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0 +LbarID_0403,214124,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0404,422334,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0405,421434,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1 +LbarID_0406,122234,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0407,312224,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0408,433224,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0409,144324,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0410,133414,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1 +LbarID_0411,322434,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1 +LbarID_0412,243324,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0413,241124,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0414,143134,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0415,323134,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0416,131434,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1 +LbarID_0417,444334,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0418,411414,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1 +LbarID_0419,113434,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1 +LbarID_0420,424134,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0421,441324,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0422,134134,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0423,212324,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0424,332424,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1 +LbarID_0425,242114,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0426,412214,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0427,324324,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0428,322124,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0429,311434,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1 +LbarID_0430,124214,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0431,443434,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1 +LbarID_0432,243234,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0433,344124,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0434,221414,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1 +LbarID_0435,434124,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0436,222424,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1 +LbarID_0437,122414,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1 +LbarID_0438,221234,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0439,223344,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1 +LbarID_0440,242334,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0441,144122,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0 +LbarID_0442,422123,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0 +LbarID_0443,434443,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0 +LbarID_0444,224433,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0 +LbarID_0445,213231,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0 +LbarID_0446,444242,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0 +LbarID_0447,212133,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0 +LbarID_0448,133423,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0 +LbarID_0449,134341,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0 +LbarID_0450,442112,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0 +LbarID_0451,113421,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0 +LbarID_0452,344322,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0 +LbarID_0453,444123,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0 +LbarID_0454,223241,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0 +LbarID_0455,324432,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0 +LbarID_0456,244442,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0 +LbarID_0457,332143,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0 +LbarID_0458,343411,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0 +LbarID_0459,241241,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0 +LbarID_0460,424442,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0 +LbarID_0461,233121,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0 +LbarID_0462,221313,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0 +LbarID_0463,332211,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0 +LbarID_0464,133133,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0 +LbarID_0465,421443,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0 +LbarID_0466,231213,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0 +LbarID_0467,421113,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0 +LbarID_0468,222143,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0 +LbarID_0469,134442,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0 +LbarID_0470,424323,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0 +LbarID_0471,414243,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0 +LbarID_0472,412421,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0 +LbarID_0473,334242,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0 +LbarID_0474,133111,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0 +LbarID_0475,443223,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0 +LbarID_0476,312411,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0 +LbarID_0477,114422,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0 +LbarID_0478,341233,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0 +LbarID_0479,422422,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0 +LbarID_0480,223332,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0 +LbarID_0481,412333,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0 +LbarID_0482,123141,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0 +LbarID_0483,323232,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0 +LbarID_0484,211134,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1 +LbarID_0485,133122,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0 +LbarID_0486,432313,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0 +LbarID_0487,333113,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0 +LbarID_0488,131232,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0 +LbarID_0489,123312,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0 +LbarID_0490,212313,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0 +LbarID_0491,311322,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0 +LbarID_0492,441133,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0 +LbarID_0493,232311,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0 +LbarID_0494,121233,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0 +LbarID_0495,131443,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0 +LbarID_0496,211431,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0 +LbarID_0497,213213,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0 +LbarID_0498,432221,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0 +LbarID_0499,114312,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0 +LbarID_0500,123343,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0 +LbarID_0501,144411,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0 +LbarID_0502,224123,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0 +LbarID_0503,123321,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0 +LbarID_0504,312141,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0 +LbarID_0505,242321,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0 +LbarID_0506,224242,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0 +LbarID_0507,343312,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0 +LbarID_0508,431222,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0 +LbarID_0509,311421,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0 +LbarID_0510,112323,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0 +LbarID_0511,442233,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0 +LbarID_0512,242242,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0 +LbarID_0513,134233,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0 +LbarID_0514,243313,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0 +LbarID_0515,234313,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0 +LbarID_0516,331342,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0 +LbarID_0517,244121,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0 +LbarID_0518,413332,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0 +LbarID_0519,112222,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0 +LbarID_0520,422242,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0 +LbarID_0521,131113,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0 +LbarID_0522,321433,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0 +LbarID_0523,421333,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0 +LbarID_0524,241421,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0 +LbarID_0525,141441,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0 +LbarID_0526,424211,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0 +LbarID_0527,242132,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0 +LbarID_0528,112332,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0 +LbarID_0529,412113,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0 +LbarID_0530,232233,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0 +LbarID_0531,122221,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0 +LbarID_0532,331221,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0 +LbarID_0533,143431,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0 +LbarID_0534,411441,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0 +LbarID_0535,431233,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0 +LbarID_0536,431413,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0 +LbarID_0537,113131,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0 +LbarID_0538,421241,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0 +LbarID_0539,111342,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0 +LbarID_0540,312132,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0 +LbarID_0541,423423,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0 +LbarID_0542,122111,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0 +LbarID_0543,434113,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0 +LbarID_0544,234221,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0 +LbarID_0545,312231,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0 +LbarID_0546,323143,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0 +LbarID_0547,114321,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0 +LbarID_0548,221423,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0 +LbarID_0549,241232,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0 +LbarID_0550,312213,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0 +LbarID_0551,131131,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0 +LbarID_0552,112413,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0 +LbarID_0553,342313,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0 +LbarID_0554,112442,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0 +LbarID_0555,211442,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0 +LbarID_0556,213411,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0 +LbarID_0557,343141,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0 +LbarID_0558,213343,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0 +LbarID_0559,241333,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0 +LbarID_0560,233413,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0 +LbarID_0561,311214,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0562,223222,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0 +LbarID_0563,232142,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0 +LbarID_0564,121211,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0 +LbarID_0565,124412,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0 +LbarID_0566,412131,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0 +LbarID_0567,342342,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0 +LbarID_0568,124241,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0 +LbarID_0569,413222,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0 +LbarID_0570,313342,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0 +LbarID_0571,441432,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0 +LbarID_0572,143442,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0 +LbarID_0573,341442,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0 +LbarID_0574,214443,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0 +LbarID_0575,111114,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0576,131241,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0 +LbarID_0577,433231,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0 +LbarID_0578,244222,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0 +LbarID_0579,322323,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0 +LbarID_0580,432423,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0 +LbarID_0581,443322,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0 +LbarID_0582,141123,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0 +LbarID_0583,342133,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0 +LbarID_0584,311223,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0 +LbarID_0585,213433,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0 +LbarID_0586,412322,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0 +ACTA2-1_587,322233,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0 +ACTA2-2_588,424121,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0 +ADAM12-1_589,133331,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0 +AIF1-1_590,421223,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0 +APCDD1-1_591,123123,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0 +APCDD1-2_592,223142,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0 +APOD-1_593,321242,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0 +APOD-2_594,414122,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0 +APOE-1_595,143121,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0 +AQP1-1_596,213242,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0 +AQP1-2_597,311142,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0 +AREG-1_598,243212,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0 +AREG-2_599,222333,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0 +BCAN-1_600,131214,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1 +BCAN-2_601,322311,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0 +C1QA-1_602,341323,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0 +CAPNS2-1_603,331243,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0 +CAPNS2-2_604,424341,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0 +CCL19-1_605,434232,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0 +CCL19-2_606,211314,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1 +CCR7-1_607,232241,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0 +CCR7-2_608,424332,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0 +CD14-1_609,342432,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0 +CD163-1_610,341211,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0 +CD163-2_611,223311,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0 +CD36-1_612,143323,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0 +CD68-1_613,232131,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0 +CDH5-1_614,323112,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0 +CDH5-2_615,323413,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0 +CENPF-1_616,233333,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0 +COCH-1_617,412241,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0 +COCH-2_618,423221,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0 +COL17A1-1_619,341332,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0 +COL17A1-2_620,342122,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0 +COL5A2-1_621,324111,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0 +COL6A1-1_622,211222,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0 +COL6A2-1_623,111313,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0 +COL6A3-1_624,323211,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0 +CX3CR1-1_625,231242,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0 +CX3CR1-2_626,121442,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0 +CXADR-1_627,313432,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0 +CXADR-2_628,111432,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0 +CXCL12-1_629,314413,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0 +CXCR4-1_630,422312,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0 +CXCR4-2_631,212221,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0 +DCT-1_632,241322,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0 +DCT-2_633,341431,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0 +DSC1-1_634,324221,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0 +DSC1-2_635,233211,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0 +DST-1_636,314323,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0 +F13A1-1_637,423122,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0 +FABP4-1_638,323341,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0 +FABP4-2_639,432212,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0 +FCER1A-1_640,432331,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0 +FCER1A-2_641,233143,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0 +FCGR3A-1_642,433312,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0 +FCGR3A-2_643,121431,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0 +FRZB-1_644,112314,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1 +FRZB-2_645,221221,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0 +GATA2-1_646,324423,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0 +GATA2-2_647,222322,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0 +HES1-1_648,441331,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0 +HLA-DRA-1_649,241412,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0 +HLA-DRB1-1_650,231141,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0 +IFNG-1_651,233112,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0 +IFNG-2_652,334141,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0 +IGFBP5-1_653,232323,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0 +IL1B-1_654,244143,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0 +ITGA6-1_655,234122,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0 +ITGA6-2_656,413233,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0 +ITGAM-1_657,331313,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0 +ITGAM-2_658,334312,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0 +KDR-1_659,334213,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0 +KDR-2_660,233322,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0 +KRT15-1_661,331122,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0 +KRT15-2_662,432432,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0 +KRT18-1_663,343343,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0 +KRT18-2_664,413143,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0 +KRT5-1_665,233232,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0 +KRT5-2_666,241131,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0 +KRTDAP-1_667,311443,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0 +KRTDAP-2_668,113311,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0 +LAMB3-1_669,414221,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0 +LAMB3-2_670,133212,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0 +LST1-1_671,142142,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0 +LUM-1_672,321132,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0 +LYPD3-1_673,313122,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0 +LYPD3-2_674,422132,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0 +LYVE1-1_675,244112,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0 +LYVE1-2_676,322113,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0 +MFAP4-1_677,422433,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0 +MFAP5-1_678,232222,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0 +MFAP5-2_679,432122,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0 +MGP-1_680,111221,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0 +MKI67-1_681,244413,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0 +MKI67-2_682,134211,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0 +MLANA-1_683,143211,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0 +MLANA-2_684,211332,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0 +MMP27-1_685,233223,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0 +MMP27-2_686,322421,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0 +MRC1-1_687,344113,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0 +MYH11-1_688,414133,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0 +MYH11-2_689,214223,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0 +NDUFA4L2-1_690,133342,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0 +NOTCH3-1_691,424222,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0 +P2RY12-1_692,222442,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0 +P2RY12-2_693,124142,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0 +PDGFRA-1_694,334231,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0 +PECAM1-1_695,244431,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0 +PECAM1-2_696,121222,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0 +PLP1-1_697,412412,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0 +PLP1-2_698,413112,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0 +PLVAP-1_699,213422,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0 +PLVAP-2_700,333131,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0 +PMEL-1_701,132422,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0 +PMEL-2_702,314143,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0 +POSTN-1_703,141312,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0 +PRPH-1_704,411343,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0 +PRPH-2_705,231132,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0 +PTN-1_706,221111,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0 +PTPRC-1_707,322131,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0 +RAMP2-1_708,324122,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0 +RGS1-1_709,121332,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0 +RGS1-2_710,311113,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0 +RHOV-1_711,144331,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0 +RHOV-2_712,231321,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0 +RNASE1-1_713,322412,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0 +RNU6-1_714,113443,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0 +RNU6-2_715,213114,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1 +S100B-1_716,112211,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0 +S100B-2_717,312343,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0 +SELE-1_718,331212,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0 +SELE-2_719,441221,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0 +SERPINB5-1_720,444321,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0 +SERPINB5-2_721,324331,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0 +SFRP2-1_722,232421,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0 +SOX17-1_723,234432,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0 +SOX17-2_724,234111,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0 +SPP1-1_725,332223,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0 +TFAP2A-1_726,132343,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0 +TFAP2A-2_727,223421,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0 +THY1-1_728,334123,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0 +TMEM45A-1_729,212111,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0 +TOP2A-1_730,134413,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0 +TP63-1_731,414331,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0 +TP63-2_732,232113,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0 +TREM2-1_733,111423,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0 +TREM2-2_734,214113,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0 +TUBB3-1_735,114343,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0 +TYR-1_736,141321,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0 +TYR-2_737,141213,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0 +UCHL1-1_738,314442,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0 +VEGFA-1_739,141242,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0 +VIM-1_740,144221,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0 +VWF-1_741,231433,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0 +VWF-2_742,124232,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0 +RNU6-1_743,431332,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0 +RNU6-1_744,434322,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0 +RNU6-2_745,231123,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0 +RNU6-2_746,141433,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0 +LbarID_0747,421421,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0 +LbarID_0748,124311,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0 +LbarID_0749,411422,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0 +LbarID_0750,132433,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0 +LbarID_0751,344223,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0 +LbarID_0752,113241,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0 +LbarID_0753,141132,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0 +LbarID_0754,342221,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0 +LbarID_0755,442121,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0 +LbarID_0756,222232,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0 +LbarID_0757,331111,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0 +LbarID_0758,133441,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0 +LbarID_0759,234423,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0 +LbarID_0760,122122,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0 +LbarID_0761,314121,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0 +LbarID_0762,224321,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0 +LbarID_0763,244211,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0 +LbarID_0764,333443,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0 +LbarID_0765,141231,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0 +LbarID_0766,431112,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0 +LbarID_0767,143143,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0 +LbarID_0768,332322,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0 +LbarID_0769,113333,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0 +LbarID_0770,321411,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0 +LbarID_0771,421131,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0 +LbarID_0772,142131,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0 +LbarID_0773,334411,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0 +LbarID_0774,111133,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0 +LbarID_0775,221342,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0 +LbarID_0776,212441,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0 +LbarID_0777,134143,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0 +LbarID_0778,433242,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0 +LbarID_0779,122313,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0 +LbarID_0780,222211,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0 +LbarID_0781,423111,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0 +LbarID_0782,322241,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0 +LbarID_0783,224132,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0 +LbarID_0784,443241,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0 +LbarID_0785,223323,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0 +LbarID_0786,112341,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0 +LbarID_0787,214412,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0 +LbarID_0788,234342,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0 +LbarID_0789,444422,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0 +LbarID_0790,323333,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0 +LbarID_0791,313243,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0 +LbarID_0792,242433,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0 +LbarID_0793,312321,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0 +LbarID_0794,321343,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0 +LbarID_0795,413442,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0 +LbarID_0796,343242,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0 +LbarID_0797,434241,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0 +LbarID_0798,434142,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0 +LbarID_0799,144313,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0 +LbarID_0800,243441,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0 +LbarID_0801,232332,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0 +LbarID_0802,131311,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0 +LbarID_0803,434131,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0 +LbarID_0804,143233,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0 +LbarID_0805,123132,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0 +LbarID_0806,423331,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0 +LbarID_0807,314112,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0 +LbarID_0808,314341,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0 +LbarID_0809,413431,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0 +LbarID_0810,422411,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0 +LbarID_0811,342423,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0 +LbarID_0812,243243,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0 +LbarID_0813,433411,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0 +LbarID_0814,221441,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0 +LbarID_0815,121323,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0 +LbarID_0816,342212,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0 +LbarID_0817,443311,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0 +LbarID_0818,223233,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0 +LbarID_0819,231114,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0820,341112,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0 +LbarID_0821,311124,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1 +LbarID_0822,123411,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0 +LbarID_0823,132123,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0 +LbarID_0824,121413,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0 +LbarID_0825,213312,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0 +LbarID_0826,423441,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0 +LbarID_0827,114111,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0 +LbarID_0828,442341,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0 +LbarID_0829,212122,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0 +LbarID_0830,122342,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0 +LbarID_0831,432441,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0 +LbarID_0832,134222,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0 +LbarID_0833,214241,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0 +LbarID_0834,442431,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0 +LbarID_0835,313423,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0 +LbarID_0836,324212,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0 +LbarID_0837,423342,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0 +LbarID_0838,414141,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0 +LbarID_0839,211341,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0 +LbarID_0840,443443,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0 +LbarID_0841,334343,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0 +LbarID_0842,223412,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0 +LbarID_0843,341341,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0 +LbarID_0844,431211,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0 +LbarID_0845,334433,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0 +LbarID_0846,341222,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0 +LbarID_0847,424112,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0 +LbarID_0848,444312,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0 +LbarID_0849,422231,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0 +LbarID_0850,323223,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0 +LbarID_0851,231343,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0 +LbarID_0852,334132,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0 +LbarID_0853,324441,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0 +LbarID_0854,342331,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0 +LbarID_0855,133221,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0 +LbarID_0856,242343,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0 +LbarID_0857,212331,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0 +LbarID_0858,113412,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0 +LbarID_0859,122441,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0 +LbarID_0860,413121,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0 +LbarID_0861,411231,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0 +LbarID_0862,343231,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0 +LbarID_0863,442323,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0 +LbarID_0864,142412,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0 +LbarID_0865,434421,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0 +LbarID_0866,114213,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0 +LbarID_0867,422213,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0 +LbarID_0868,231312,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0 +LbarID_0869,121314,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0870,322443,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0 +LbarID_0871,233431,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0 +LbarID_0872,143413,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0 +LbarID_0873,143112,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0 +LbarID_0874,414423,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0 +LbarID_0875,124113,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0 +LbarID_0876,122212,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0 +LbarID_0877,222413,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0 +LbarID_0878,332442,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0 +LbarID_0879,321312,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0 +LbarID_0880,313313,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0 +LbarID_0881,423243,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0 +LbarID_0882,213123,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0 +LbarID_0883,244341,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0 +LbarID_0884,343132,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0 +LbarID_0885,143222,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0 +LbarID_0886,311131,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0 +LbarID_0887,142333,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0 +LbarID_0888,433123,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0 +LbarID_0889,134332,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0 +LbarID_0890,433343,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0 +LbarID_0891,132114,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0892,343321,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0 +LbarID_0893,224422,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0 +LbarID_0894,331423,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0 +LbarID_0895,343422,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0 +LbarID_0896,313133,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0 +LbarID_0897,342111,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0 +LbarID_0898,132321,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0 +LbarID_0899,223443,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0 +LbarID_0900,234212,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0 +LbarID_0901,444231,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0 +LbarID_0902,333412,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0 +LbarID_0903,321141,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0 +LbarID_0904,431121,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0 +LbarID_0905,442211,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0 +LbarID_0906,413211,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0 +LbarID_0907,111243,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0 +LbarID_0908,242411,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0 +LbarID_0909,142223,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0 +LbarID_0910,442413,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0 +LbarID_0911,434223,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0 +LbarID_0912,232412,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0 +LbarID_0913,432243,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0 +LbarID_0914,442143,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0 +LbarID_0915,433141,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0 +LbarID_0916,231231,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0 +LbarID_0917,223113,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0 +LbarID_0918,144141,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0 +LbarID_0919,123433,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0 +LbarID_0920,243133,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0 +LbarID_0921,111411,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0 +LbarID_0922,212432,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0 +LbarID_0923,143341,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0 +LbarID_0924,124333,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0 +LbarID_0925,421311,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0 +LbarID_0926,123114,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1 +LbarID_0927,433132,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0 +LbarID_0928,214232,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0 +LbarID_0929,434333,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0 +LbarID_0930,341121,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0 +LbarID_0931,443421,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0 +LbarID_0932,112143,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0 +LbarID_0933,111141,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0 +LbarID_0934,332112,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0 +LbarID_0935,442222,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0 +LbarID_0936,341143,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0 +LbarID_0937,213141,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0 +LbarID_0938,333311,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0 +LbarID_0939,242422,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0 +LbarID_0940,443131,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0 +LbarID_0941,224411,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0 +LbarID_0942,412443,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0 +LbarID_0943,322222,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0 +LbarID_0944,311232,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0 +LbarID_0945,321321,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0 +LbarID_0946,132213,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0 +LbarID_0947,422141,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0 +LbarID_0948,141422,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0 +LbarID_0949,141343,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0 +LbarID_0950,332341,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0 +LbarID_0951,113322,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0 +LbarID_0952,132132,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0 +LbarID_0953,431143,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0 +LbarID_0954,322332,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0 +LbarID_0955,221243,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0 +LbarID_0956,323322,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0 +LbarID_0957,224141,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0 +LbarID_0958,434412,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0 +LbarID_0959,332413,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0 +LbarID_0960,344311,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0 +LbarID_0961,334422,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0 +LbarID_0962,432111,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0 +LbarID_0963,114231,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0 +LbarID_0964,414212,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0 +LbarID_0965,124322,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0 +LbarID_0966,311311,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0 +LbarID_0967,224231,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0 +LbarID_0968,132231,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0 +LbarID_0969,243342,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0 +LbarID_0970,221212,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0 +LbarID_0971,123213,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0 +LbarID_0972,134431,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0 +LbarID_0973,344142,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0 +LbarID_0974,214311,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0 +LbarID_0975,124223,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0 +LbarID_0976,241311,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0 +LbarID_0977,313221,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0 +LbarID_0978,422321,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0 +LbarID_0979,123422,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0 +LbarID_0980,343123,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0 +LbarID_0981,432133,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0 +LbarID_0982,344241,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0 +LbarID_0983,341413,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0 +LbarID_0984,124421,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0 +LbarID_0985,211323,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0 +LbarID_0986,444441,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0 +LbarID_0987,314233,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0 +LbarID_0988,212212,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0 +LbarID_0989,211413,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0 +LbarID_0990,123231,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0 +LbarID_0991,344232,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0 +LbarID_0992,222341,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0 +LbarID_0993,332431,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0 +LbarID_0994,441122,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0 +LbarID_0995,441342,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0 +LbarID_0996,131412,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0 +LbarID_0997,234133,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0 +LbarID_0998,431442,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0 +LbarID_0999,144212,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0 +LbarID_1000,212243,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0 +LbarID_1001,241142,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0 +LbarID_1002,332121,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0 +LbarID_1003,424233,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0 +LbarID_1004,441411,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0 +LbarID_1005,443113,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0 +LbarID_1006,123242,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0 +LbarID_1007,131333,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0 +LbarID_1008,241113,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0 +LbarID_1009,433321,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0 +LbarID_1010,133243,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0 +LbarID_1011,313331,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0 +LbarID_1012,212342,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0 +LbarID_1013,144243,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0 +LbarID_1014,113223,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0 +LbarID_1015,113113,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0 +LbarID_1016,134112,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0 +LbarID_1017,413341,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0 +LbarID_1018,114132,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0 +LbarID_1019,242141,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0 +LbarID_1020,333233,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0 +LbarID_1021,112134,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1 +LbarID_1022,144133,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0 +LbarID_1023,124443,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0 +LbarID_1024,234441,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0 +LbarID_1025,432342,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0 +LbarID_1026,413323,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0 +LbarID_1027,333222,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0 +LbarID_1028,413413,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0 +LbarID_1029,421232,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0 +LbarID_1030,144432,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0 +LbarID_1031,411433,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0 +LbarID_1032,142421,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0 +LbarID_1033,414342,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0 +LbarID_1034,444213,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0 +LbarID_1035,134121,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0 +LbarID_1036,321422,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0 +LbarID_1037,133313,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0 +LbarID_1038,142443,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0 +LbarID_1039,434311,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0 +LbarID_1040,221133,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0 +LbarID_1041,111331,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0 +LbarID_1042,412142,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0 +LbarID_1043,131322,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0 +LbarID_1044,421412,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0 +LbarID_1045,211143,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0 +LbarID_1046,444343,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0 +LbarID_1047,242123,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0 +LbarID_1048,314211,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0 +LbarID_1049,324342,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0 +LbarID_1050,321231,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0 +LbarID_1051,431341,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0 +LbarID_1052,322142,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0 +LbarID_1053,224213,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0 +LbarID_1054,411321,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0 +LbarID_1055,144423,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0 +LbarID_1056,113142,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0 +LbarID_1057,312242,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0 +LbarID_1058,312422,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0 +LbarID_1059,344421,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0 +LbarID_1060,243423,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0 +LbarID_1061,443232,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0 +LbarID_1062,113232,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0 +LbarID_1063,222112,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0 +LbarID_1064,412223,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0 +LbarID_1065,312433,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0 +LbarID_1066,424143,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0 +LbarID_1067,421322,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0 +LbarID_1068,114433,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0 +LbarID_1069,243122,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0 +LbarID_1070,233442,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0 +LbarID_1071,114242,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0 +LbarID_1072,423133,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0 +LbarID_1073,141111,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0 +LbarID_1074,321114,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1 +LbarID_1075,313212,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0 +LbarID_1076,243111,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0 +LbarID_1077,314332,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0 +LbarID_1078,121143,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0 +LbarID_1079,121121,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0 +LbarID_1080,344412,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0 +LbarID_1081,142311,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0 +LbarID_1082,333142,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0 +LbarID_1083,122432,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0 +LbarID_1084,241223,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0 +LbarID_1085,334321,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0 +LbarID_1086,234331,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0 +LbarID_1087,431431,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0 +LbarID_1088,242231,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0 +LbarID_1089,441141,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0 +LbarID_1090,214421,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0 +LbarID_1091,333421,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0 +LbarID_1092,211233,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0 +LbarID_1093,222121,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0 +LbarID_1094,132141,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0 +LbarID_1095,421142,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0 +LbarID_1096,142113,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0 +LbarID_1097,113214,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1 +LbarID_1098,411123,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0 +LbarID_1099,343433,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0 +LbarID_1100,423313,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0 +LbarID_1101,311412,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0 +LbarID_1102,224312,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0 +LbarID_1103,213321,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0 +LbarID_1104,131421,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,1,0,0,0 +LbarID_1105,113124,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1 +LbarID_1106,221122,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0 +LbarID_1107,331432,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0 +LbarID_1108,131223,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0 +LbarID_1109,112431,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0 +LbarID_1110,122133,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0 +LbarID_1111,333241,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0 +LbarID_1112,342441,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0 +LbarID_1113,134323,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0 +LbarID_1114,232443,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0 +LbarID_1115,122423,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0 +LbarID_1116,424431,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0 +LbarID_1117,312312,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0 +LbarID_1118,444433,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0 +LbarID_1119,224343,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0 +LbarID_1120,412311,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0 +LbarID_1121,443333,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0 +LbarID_1122,122331,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0 +LbarID_1123,411132,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0 +LbarID_1124,223131,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0 +LbarID_1125,214131,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0 +LbarID_1126,214333,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0 +LbarID_1127,244233,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0 +LbarID_1128,133432,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0 +LbarID_1129,323431,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0 +LbarID_1130,333323,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0 +LbarID_1131,431323,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0 +LbarID_1132,324313,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0 +LbarID_1133,112233,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0 +LbarID_1134,324133,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0 +LbarID_1135,244323,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0 +LbarID_1136,132242,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0 +LbarID_1137,423212,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0 +LbarID_1138,234243,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0 +LbarID_1139,414313,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0 +LbarID_1140,131124,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1 +LbarID_1141,143332,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0 +LbarID_1142,443142,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0 +LbarID_1143,411111,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0 +LbarID_1144,142322,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0 +LbarID_1145,414432,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0 +LbarID_1146,214142,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0 +LbarID_1147,221331,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0 +LbarID_1148,443412,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0 +LbarID_1149,222223,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0 +LbarID_1150,121341,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0 +LbarID_1151,211121,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0 +LbarID_1152,121134,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1 +LbarID_1153,242312,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0 +LbarID_1154,214322,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0 +LbarID_1155,311333,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0 +LbarID_1156,132312,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0 +LbarID_1157,323121,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0 +LbarID_1158,233341,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0 +LbarID_1159,211211,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0 +LbarID_1160,244332,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0 +LbarID_1161,142241,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0 +LbarID_1162,433422,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0 +LbarID_1163,442332,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0 +LbarID_1164,212423,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0 +LbarID_1165,331133,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0 +LbarID_1166,321213,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0 +LbarID_1167,342243,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0 +LbarID_1168,311241,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0 +LbarID_1169,332333,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0 +LbarID_1170,144342,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,1,0,0 +LbarID_1171,111234,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1 +LbarID_1172,444132,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0 +LbarID_1173,114123,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0 +LbarID_1174,242213,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0 +LbarID_1175,122243,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0 +LbarID_1176,324243,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0 +LbarID_1177,213132,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0 +LbarID_1178,313441,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0 +LbarID_1179,344443,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0 +LbarID_1180,111324,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1 +LbarID_1181,414411,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0 +LbarID_1182,441212,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0 +LbarID_1183,442442,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0 +LbarID_1184,321123,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0 +LbarID_1185,323442,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0 +LbarID_1186,312123,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0 +LbarID_1187,411242,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0 +LbarID_1188,433433,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0 +LbarID_1189,422343,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0 +LbarID_1190,424413,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0 +LbarID_1191,231411,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0 +LbarID_1192,411213,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0 +LbarID_1193,314431,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0 +LbarID_1194,344131,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0 +LbarID_1195,131142,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0 +LbarID_1196,142232,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0 +LbarID_1197,344333,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0 +LbarID_1198,332232,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0 +LbarID_1199,132411,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0 +LbarID_1200,114441,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0 +LbarID_1201,243331,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0 +LbarID_1202,444111,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0 +LbarID_1203,231422,0,0,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0 +LbarID_1204,331441,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0 +LbarID_1205,441243,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0 +LbarID_1206,412232,0,0,0,0,1,0,1,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0 +LbarID_1207,222431,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0 +LbarID_1208,331331,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0 +LbarID_1209,243221,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0 +LbarID_1210,314222,0,0,0,1,0,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0 +LbarID_1211,112121,0,1,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0 +LbarID_1212,343213,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0 +LbarID_1213,441313,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0 +LbarID_1214,124131,0,1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0 +LbarID_1215,313111,0,0,0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0 +LbarID_1216,411312,0,0,0,0,1,0,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0 +LbarID_1217,221432,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0 +LbarID_1218,243432,0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0 +LbarID_1219,312114,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,1 +LbarID_1220,433213,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0,0,1,0 +LbarID_1221,333332,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0 +LbarID_1222,441423,0,0,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0 +LbarID_1223,423432,0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0,0,0,1,0,0 +LbarID_1224,241443,0,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,1,0 \ No newline at end of file diff --git a/modules/sanger/postcode/tests/iss_nextflow.config b/modules/sanger/postcode/tests/iss_nextflow.config new file mode 100644 index 00000000000..308a54e7b08 --- /dev/null +++ b/modules/sanger/postcode/tests/iss_nextflow.config @@ -0,0 +1,8 @@ +nextflow.enable.moduleBinaries = true + +docker.enabled = true + +//params.modules_testdata_base_path = "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/" +params.modules_testdata_base_path = "/lustre/scratch126/cellgen/cellgeni/tl10/modules/modules/sanger/postcode/tests/" + +process.ext.args = "--codebook_target_col L-probe" \ No newline at end of file diff --git a/modules/sanger/postcode/tests/iss_peak_locations_sample.csv b/modules/sanger/postcode/tests/iss_peak_locations_sample.csv new file mode 100644 index 00000000000..0c00480483b --- /dev/null +++ b/modules/sanger/postcode/tests/iss_peak_locations_sample.csv @@ -0,0 +1,10001 @@ +,y_int,x_int +366808,2294,2553 +217887,2826,2095 +460324,2204,3870 +257932,964,2696 +310148,2913,3677 +83126,2482,2861 +98645,1203,4328 +260881,1887,2746 +295092,2371,3417 +156417,3388,3127 +435160,1819,2627 +290608,906,3341 +357966,1668,4827 +945,3195,1115 +143746,3314,1785 +178494,2623,1477 +438037,3877,2738 +114667,4961,2591 +311602,3252,3692 +214466,578,2062 +139011,1556,3064 +475731,2977,2595 +432705,1810,2532 +189005,1961,1672 +47662,2493,2022 +210744,1431,2015 +277432,2090,3064 +252671,1722,2616 +10417,1316,2587 +218230,3793,2107 +287830,569,3303 +78178,3534,2443 +27719,2632,2821 +416352,3257,3385 +459769,2727,3799 +152871,2103,2732 +249464,4867,2553 +36825,2599,3485 +466388,3293,2131 +482419,3196,2984 +123529,2336,3799 +257965,1073,2704 +220425,2464,2146 +512142,2786,3610 +253906,1325,2635 +362084,3349,2310 +458744,1732,3741 +503146,3201,2926 +15546,3148,2013 +219530,3676,2117 +249143,3382,2553 +45805,3329,1924 +146126,3216,2144 +497489,2740,2531 +290649,1040,3350 +178593,2903,1493 +339053,1485,4117 +443951,3108,2985 +484774,1485,3132 +78226,3806,2396 +162240,2095,891 +500491,2757,2767 +119712,1270,3347 +23508,3356,2523 +50657,2303,2151 +3652,3984,1676 +301024,4004,3521 +319768,3389,3804 +375867,2278,2956 +203342,4490,1904 +496276,3680,2239 +107130,4410,1884 +354226,2216,4498 +356565,1564,4556 +198360,1286,1841 +24649,2062,2601 +257568,4109,2678 +320489,1281,3838 +446054,1346,3143 +274636,2153,3009 +505983,2219,3171 +430489,2713,2441 +261590,4069,2740 +230735,582,2300 +215300,3229,2060 +125251,3384,3976 +503107,2952,2921 +193004,1826,1750 +153028,3015,2747 +93865,847,3856 +460402,2319,3840 +89406,2574,3467 +168816,4311,1206 +146211,3771,2115 +183285,4478,1572 +35916,2580,3421 +462776,2568,1923 +192191,3221,1716 +469870,4074,2307 +458071,3414,3650 +67220,3022,1119 +348608,1648,4331 +473876,2172,2502 +290773,1602,3355 +486186,2651,3187 +485072,2502,3130 +336232,4388,4060 +165444,3280,1104 +115780,744,2810 +361716,3993,2283 +458526,2780,3718 +116756,4055,2848 +187418,4670,1623 +150833,1952,2554 +69534,3278,1569 +239327,2403,2403 +252879,2281,2620 +156384,3191,3101 +221151,5087,2132 +165275,2818,1147 +172656,4028,1333 +218607,758,2114 +258961,4750,2696 +63981,2352,2806 +296477,2381,3434 +291925,854,3357 +415481,4223,3298 +201581,2901,1878 +369537,1723,2674 +379718,1325,3195 +439849,3847,2805 +49997,3888,2114 +57389,2810,2427 +99670,3187,4413 +432929,2888,2549 +112790,1473,2428 +443096,2108,2959 +234777,677,2349 +197936,4345,1808 +457384,2920,3645 +46491,2016,1960 +171681,2201,1308 +406745,3945,2880 +214026,3445,2049 +280217,2072,3136 +318845,547,3799 +491573,2389,3566 +433364,1872,2551 +67975,3752,1289 +376613,3119,3008 +156680,2197,3144 +234378,3777,2329 +271384,851,2953 +192911,5520,1732 +410404,2368,3024 +198603,1913,1831 +408195,3734,2948 +159072,2165,3367 +109988,818,2198 +267647,1582,2847 +498559,3639,2609 +430148,3644,2420 +131084,3252,1963 +100282,3219,4583 +354245,2236,4501 +283552,55,3229 +151702,2242,2616 +398987,3748,2514 +482763,2225,2988 +287136,2656,3276 +1844,2827,1487 +104153,2386,1587 +107818,655,2002 +150556,2640,2506 +396413,3915,2332 +339466,2578,4124 +157648,3508,3220 +247553,2450,2534 +474258,1685,2531 +291017,2115,3353 +94465,1405,3890 +198741,2551,1834 +197246,2078,1809 +255259,1170,2662 +417031,4170,3411 +292541,2645,3371 +169101,2829,1228 +345613,1146,4276 +445467,1786,3082 +460678,3243,1632 +327103,1005,3929 +271325,623,2952 +222658,669,2185 +386897,3390,3501 +367237,4071,2549 +355144,1453,4532 +100349,2504,944 +9445,1497,2488 +395861,3564,2287 +218093,3379,2094 +409907,2314,3015 +75291,2779,2140 +442965,1716,2944 +309430,834,3660 +319751,3352,3814 +150316,3704,2479 +324184,297,3881 +224093,960,2202 +310208,3033,3660 +334573,3150,4020 +389085,3405,3590 +107951,1392,1987 +481104,2399,2917 +499478,1986,2685 +107893,970,1980 +60969,2653,2609 +396687,2655,2371 +101631,3341,1183 +405366,2273,2851 +448857,2938,3262 +83202,3055,2853 +93271,911,3823 +288489,2535,3294 +75703,1592,2213 +339057,1489,4124 +514288,2765,3839 +452098,1263,3428 +512263,3412,3620 +451175,2356,3369 +238936,1044,2412 +110825,2945,2251 +34898,2131,3346 +118837,3295,3235 +509264,3640,3368 +411376,2260,3066 +221383,922,2152 +1328,3218,1344 +362627,3385,2344 +411277,4062,3051 +103832,3729,1517 +334815,3840,4022 +375895,2450,2956 +476227,2656,2613 +187807,2264,1659 +90107,3376,3533 +167053,3590,1167 +135912,2650,2516 +24271,2407,2568 +391617,2136,3938 +454128,2055,3502 +445630,2302,3098 +29554,2049,2981 +269328,2196,2896 +14058,3234,1845 +9813,1490,2513 +147725,3054,2268 +61130,2971,2614 +176954,440,1448 +162370,3386,737 +409705,3739,2999 +353717,1350,4505 +266845,3643,2824 +293171,576,3402 +275669,1328,3053 +265192,2371,2805 +500408,2404,2763 +454848,2480,3520 +72410,3335,1891 +125052,1567,3955 +418422,3678,3527 +78270,4022,2403 +163171,3640,837 +513298,2619,3728 +311266,2254,3682 +234903,960,2354 +447953,1666,3212 +338177,2116,4097 +153662,1661,2862 +131498,3508,2006 +154094,1923,2909 +150985,2997,2544 +382774,2023,3360 +320087,230,3831 +440687,1926,2847 +81111,4147,2673 +157497,2225,3222 +251970,3857,2584 +219066,2413,2122 +339874,3455,4125 +57630,3686,2439 +196371,3530,1793 +7547,3792,2132 +473538,3234,2489 +393378,3921,1871 +450680,2877,3352 +406769,4075,2878 +353500,3687,4437 +118791,2902,3195 +411766,3910,3065 +371545,3190,2762 +147187,2125,2220 +208724,3777,1963 +253853,1204,2638 +106074,4407,1778 +305891,2332,3615 +467872,2516,2229 +108336,566,2026 +225625,1528,2209 +20307,2305,2351 +497883,2566,2562 +434784,2816,2614 +388414,2687,3580 +341467,4566,4143 +182418,2238,1555 +160292,2383,3700 +229757,1685,2283 +469708,3079,2312 +341418,4478,4152 +313887,1946,3720 +340313,1357,4149 +499461,1828,2696 +310113,2819,3677 +220944,3799,2142 +323119,1132,3864 +111216,1707,2276 +38525,1553,3264 +103112,2791,1488 +481143,2589,2899 +422859,3144,1885 +460648,3223,1637 +315856,3673,3753 +163666,2433,1023 +231701,3808,2286 +439585,2597,2801 +39384,2713,1261 +407789,4229,2917 +206695,1702,1944 +505924,1724,3178 +400744,2206,2616 +184716,4675,1577 +453424,1663,3478 +307724,3736,3632 +161581,2730,2026 +392798,3572,1771 +389608,2971,3627 +299637,3776,3496 +293864,2602,3384 +326633,3709,3909 +199825,1670,1852 +128416,1205,4465 +288777,3700,3309 +97736,2669,4205 +446815,2062,3168 +320925,2846,3835 +423138,2710,2048 +220856,3530,2132 +181236,2714,1533 +108370,724,2038 +293767,2412,3392 +183706,2088,1577 +54633,1583,2333 +308092,803,3640 +475869,3919,2578 +130165,2951,2420 +273468,3172,2973 +425235,3205,2170 +255146,650,2647 +188264,3346,1664 +296521,2521,3445 +269581,3385,2887 +445319,3676,3067 +254804,4133,2628 +280406,2871,3132 +459134,2685,3782 +243330,2263,2472 +46326,3386,1951 +47340,3234,2008 +340546,1771,4138 +168562,3786,1188 +274001,4209,2966 +368828,3717,2625 +227575,3526,2233 +348350,1249,4327 +496341,3784,2349 +425001,2705,2182 +218559,599,2110 +513973,3110,3774 +61116,2942,2624 +130072,2601,2223 +405196,3820,2827 +311964,357,3699 +297035,4374,3444 +239184,2029,2400 +198911,2960,1831 +248299,696,2545 +372297,3866,2787 +455212,1557,3545 +113654,368,2541 +159356,1727,3413 +417055,2138,3434 +92020,310,3693 +416690,2769,3392 +315775,3510,3744 +398676,2213,2522 +342385,3166,4160 +63105,2541,2777 +74667,2456,2114 +220103,1159,2145 +144993,3459,1973 +272534,3958,2959 +40024,2913,1302 +21790,2356,2437 +292785,3370,3378 +334381,2616,4026 +356027,3099,4538 +284642,3155,3228 +83621,1942,2947 +335274,1159,4058 +70319,4734,1616 +202981,2985,1890 +56338,2619,2389 +330152,1844,3965 +302708,788,3553 +112526,4268,2400 +503558,3221,2943 +49785,2776,2121 +313849,1877,3731 +401988,3268,2690 +402868,2921,2745 +44177,3158,1817 +342501,3511,4171 +91769,3024,3676 +140168,1813,3160 +140728,3757,3174 +494509,3924,3127 +358151,1715,4690 +249312,3908,2542 +474719,3767,2540 +342583,3971,4163 +114554,3117,2615 +319945,4375,3800 +50557,1794,2165 +207088,2965,1958 +211765,533,2026 +398605,4172,2478 +275687,1354,3036 +136335,3174,2575 +486008,1789,3190 +378341,3028,3114 +410725,3757,3025 +131561,3594,2021 +52247,2452,2229 +388681,1384,3603 +85594,3704,3122 +182040,4582,1546 +36980,3033,3515 +263082,4799,2763 +279178,3423,3101 +282854,1863,3185 +425687,2887,2213 +325166,3357,3884 +397994,3950,2474 +197761,3632,1817 +401475,3151,2637 +331776,2842,3992 +239863,4268,2407 +45217,3142,1881 +303842,117,3584 +391339,2769,3744 +187545,4984,1637 +210852,1953,2004 +295251,2948,3425 +509836,2559,3443 +229268,5185,2248 +340137,4533,4118 +127896,1152,4401 +412398,2036,3129 +165019,2501,1133 +9691,3790,2481 +315194,1878,3754 +259123,579,2714 +441072,3782,2852 +456229,3304,3595 +498525,3442,2602 +465086,2666,2056 +194516,2440,1778 +143098,2587,3386 +179076,4002,1496 +202304,5632,1869 +379746,1395,3223 +161068,2621,3072 +89096,4051,3424 +343990,4379,4189 +87302,3717,3297 +183123,4139,1567 +490566,2581,3450 +325335,3952,3897 +313575,985,3731 +466542,3906,2135 +410489,2632,3029 +321667,838,3848 +120362,2504,3407 +118565,1141,3195 +299183,2424,3504 +51565,1528,2202 +398006,3995,2467 +129843,1831,4582 +58358,2686,2488 +16657,3659,2080 +73816,397,2024 +15414,4204,1971 +442797,3388,2928 +469816,3798,2290 +167648,2327,1212 +250666,4050,2565 +92996,3309,3758 +83755,2897,2953 +335860,3153,4054 +8005,2197,2225 +142135,3788,3299 +495633,2738,2169 +177355,3147,1462 +22703,2109,2494 +274502,1706,3007 +452987,2355,3460 +235173,1995,2356 +69369,2466,1600 +4757,3922,1785 +271557,1259,2936 +45411,4072,1892 +263086,4805,2755 +246901,490,2538 +71695,2593,1822 +377092,2765,3027 +30999,1941,3094 +456321,1338,3601 +328092,4386,3928 +95911,3912,3960 +457703,1931,3658 +362929,2514,2384 +382811,2330,3359 +150044,1969,2470 +324611,1700,3893 +73747,4585,2018 +59282,2058,2541 +397708,2607,2454 +159579,2770,3413 +249501,5106,2549 +494125,3228,2888 +507931,3555,3274 +416789,3133,3404 +67370,3614,1158 +433448,2232,2563 +414213,3260,3211 +431711,2852,2508 +154083,1666,2901 +109845,3919,2138 +511759,3167,3580 +167510,4322,1181 +278147,145,3104 +292507,2564,3375 +263209,890,2786 +155131,3089,2998 +82964,1222,2900 +463302,2418,1973 +56667,1702,2399 +91600,1227,3667 +422684,3055,1809 +487871,2735,3262 +151676,2050,2644 +481643,2191,2928 +443533,1577,2976 +324411,996,3890 +466842,2942,2179 +61783,3734,2660 +364169,2991,2437 +489764,1677,3371 +414073,2761,3223 +493049,3944,2297 +272759,896,2965 +216354,2223,2084 +168327,3480,1190 +350057,1821,4370 +165009,2230,1135 +224359,1773,2189 +473400,2501,2486 +46232,3009,1952 +336686,2605,4067 +307541,3113,3625 +312778,2614,3716 +475923,1709,2604 +99309,1369,4484 +425668,2848,2215 +404100,3542,2790 +370917,2981,2720 +422879,3156,1915 +493893,4361,2715 +418080,2181,3495 +231734,3906,2288 +60981,2675,2634 +138365,1708,2959 +18884,2555,2260 +425685,2879,2222 +113523,3483,2495 +94434,1112,3891 +109652,2297,2115 +255518,1904,2650 +140940,2458,3219 +367364,2011,2589 +381574,1911,3294 +476917,3549,2635 +221494,1359,2165 +429779,2262,2437 +100539,3405,1067 +261265,3167,2731 +342185,2800,4166 +131496,3505,2023 +291098,2306,3341 +102472,2385,1400 +51795,2965,2216 +75907,3289,2222 +131300,3765,1954 +429309,2842,2414 +152084,2178,2665 +36739,2460,3513 +408299,4122,2941 +199418,4757,1840 +492716,3705,2079 +256221,4372,2660 +31912,1795,3148 +369660,2311,2677 +203030,3125,1905 +92279,2334,3717 +480254,3545,2824 +330247,2212,3960 +390039,2387,3660 +487943,3076,3276 +424640,3181,2131 +79807,2894,2541 +211035,2407,2002 +481161,2675,2895 +31655,2701,3124 +376709,3331,2986 +85961,2423,3158 +165076,2560,1107 +124754,3811,3922 +351128,1489,4396 +177792,4014,1451 +313305,295,3733 +251059,835,2585 +62100,2733,2692 +154029,3951,2858 +111330,2588,2279 +128448,1281,4479 +145197,2741,2063 +306805,1039,3635 +320729,2210,3824 +144939,3322,1991 +330582,3333,3966 +26558,4493,2704 +159229,3126,3349 +469906,1771,2327 +74384,5204,2030 +207210,3432,1956 +391832,2239,3803 +326046,1922,3909 +424090,3211,2085 +215043,2365,2060 +17494,2975,2172 +192525,4019,1736 +256701,1273,2683 +140447,1502,3173 +241026,3329,2419 +386851,3068,3504 +438285,2257,2754 +384471,2120,3423 +396717,2750,2359 +280518,3391,3140 +250369,3175,2565 +227460,3071,2227 +306938,1449,3628 +481115,2466,2898 +451182,2377,3367 +316950,3080,3765 +215457,3690,2073 +14345,3686,1804 +476323,3224,2612 +185517,3292,1618 +401081,3759,2611 +286218,4191,3245 +451142,2221,3378 +478473,3180,2735 +307710,3663,3633 +42600,2958,1707 +425832,3217,2201 +182341,2070,1558 +126810,1104,4205 +391709,2167,4032 +284307,2035,3223 +60708,3521,2591 +205629,2926,1932 +361374,3019,2276 +468176,3948,2231 +313068,3412,3708 +305660,1781,3611 +114017,2772,2526 +20179,4361,2317 +270757,2738,2902 +371404,2475,2748 +391015,1988,3732 +263961,3142,2776 +361797,2542,2320 +464302,3777,2012 +383964,2281,3410 +380489,2309,3226 +89187,224,3484 +339024,1438,4122 +287817,509,3304 +120654,601,3490 +144708,3724,1903 +386253,2786,3484 +508217,2783,3324 +103300,3736,1483 +90528,2029,3599 +399042,3957,2509 +11140,1403,2657 +239566,3091,2413 +135402,3981,2446 +333389,3600,4013 +283218,2968,3188 +483387,2473,3048 +158789,2947,3329 +362987,2688,2382 +22519,3323,2464 +297998,2980,3460 +186570,2531,1624 +325943,1635,3901 +467817,2309,2222 +511164,2533,3527 +99121,3363,4337 +331231,932,3987 +66447,2472,993 +175813,2830,1431 +354553,2790,4503 +181354,2990,1540 +479707,3718,2805 +510728,2471,3484 +147171,4322,2190 +8578,3285,2323 +169458,3286,1256 +375410,2738,2928 +167534,4345,1149 +511998,2372,3608 +245458,161,2516 +150053,2031,2487 +443420,3532,2969 +209276,1116,1986 +45869,3557,1920 +507126,3676,3239 +231106,1883,2289 +144655,3512,1957 +398572,4107,2486 +218658,932,2118 +24899,3003,2602 +221313,651,2163 +457340,2780,3639 +26838,3226,2765 +485895,1472,3172 +130033,3706,1619 +50262,2760,2147 +9404,1436,2461 +446598,1204,3159 +456550,1983,3599 +484985,2079,3132 +419376,3242,3596 +315785,3522,3745 +137011,2963,2675 +235797,4074,2358 +511852,3585,3589 +506999,2903,3229 +64299,3370,2822 +282298,181,3191 +94343,499,3886 +129790,1790,4723 +419308,3103,3574 +72319,2743,1915 +47042,2109,1987 +474682,3568,2523 +220527,2743,2144 +161010,3869,2975 +288814,3875,3294 +3228,3578,1625 +202797,2542,1903 +296971,4034,3455 +181724,3849,1548 +86753,3682,3235 +32245,3361,3152 +25519,4018,2639 +264191,3843,2789 +145705,3150,2078 +116997,1533,2994 +410249,3790,3013 +266374,1963,2829 +451276,2848,3369 +428550,2304,2382 +473469,2820,2478 +78619,2671,2451 +215698,4983,2074 +30841,3624,3059 +226049,2831,2211 +78115,2942,2443 +289737,2221,3334 +416898,3484,3400 +71377,4328,1803 +393635,3145,1988 +115595,3091,2746 +217987,3098,2095 +217609,1967,2096 +161730,2694,2252 +339125,1593,4113 +212689,3368,2039 +363279,3666,2382 +466503,3783,2133 +379254,2098,3194 +275056,3618,3017 +220260,1795,2146 +442646,2633,2939 +63892,1874,2813 +332954,2102,4017 +90146,3604,3553 +490409,2129,3432 +498168,1607,2589 +308981,3422,3638 +63212,3023,2773 +195927,2377,1795 +289553,1780,3328 +251815,3376,2585 +446141,1765,3120 +15715,3608,2026 +168504,3696,1216 +380389,1474,3233 +162106,3403,2785 +193042,1886,1748 +264719,1223,2807 +142199,1667,3330 +140016,3570,3124 +106816,1554,1870 +21950,2931,2443 +394159,2936,2087 +99445,1788,4503 +224356,1763,2201 +253832,982,2631 +376623,3142,2978 +254937,4944,2638 +216052,1333,2087 +109564,1619,2134 +104788,2826,1661 +372482,2388,2793 +381586,1979,3312 +461456,3280,1755 +334172,1610,4022 +195811,1837,1793 +81869,1354,2777 +484668,3334,3101 +147103,4197,2202 +451552,1461,3412 +490605,2684,3415 +214413,5046,2045 +397029,4033,2403 +114737,476,2657 +92179,1574,3695 +226915,1319,2234 +92187,1597,3720 +151348,2623,2600 +301712,2037,3552 +57980,3125,2456 +462618,3481,1859 +466338,3070,2130 +12104,3685,2717 +236236,1031,2369 +12568,2238,2768 +460756,3284,1543 +40006,2884,1352 +86391,1241,3219 +169757,3624,1239 +394087,2766,2059 +240259,917,2433 +115472,1756,2735 +19926,2661,2321 +84470,3851,2961 +58378,2773,2477 +24260,2359,2578 +270737,2660,2927 +233123,4079,2311 +189988,4434,1675 +165884,3748,1114 +21693,4480,2411 +90106,3375,3546 +80194,1401,2633 +130440,3212,2827 +191786,2261,1727 +190806,3017,1712 +39071,3148,1016 +121126,348,3557 +51797,2977,2201 +19022,3181,2262 +498451,3074,2614 +130495,2808,3183 +227377,2806,2239 +373090,2575,2824 +168414,3593,1195 +199042,3394,1843 +409878,2207,3014 +44639,3051,1873 +207094,2974,1956 +49272,2838,2086 +196891,5458,1791 +273730,3632,2975 +37337,2708,3570 +68513,3791,1406 +205032,1041,1933 +206817,2085,1944 +425747,3025,2197 +343283,2053,4194 +237826,1916,2386 +106395,2485,1840 +272774,921,2967 +334062,1328,4031 +137917,3671,2800 +64460,2359,2872 +347989,3528,4311 +58741,1939,2501 +205937,3834,1932 +498499,3334,2606 +252241,5240,2584 +361817,2588,2325 +343601,2965,4179 +251568,2375,2600 +330356,2751,3959 +195167,4116,1768 +503017,2654,2924 +62128,2792,2682 +247909,3724,2532 +73891,950,2058 +207869,1067,1981 +402452,3255,2707 +45770,3245,1923 +432790,2127,2542 +402592,3746,2703 +291422,3260,3350 +431813,3249,2489 +83776,2977,2950 +43141,3068,1753 +205989,3966,1941 +123827,602,3861 +109706,2730,2119 +326161,2347,3900 +164622,3770,1000 +370872,2731,2728 +106,2438,2453 +437412,3751,2707 +343466,2601,4188 +421455,2549,2369 +353229,3010,4449 +326951,522,3930 +418954,3605,3551 +443095,2108,2956 +425349,3442,2157 +308097,820,3647 +243550,2758,2464 +456506,1835,3601 +291759,387,3358 +81339,1319,2739 +291616,4113,3352 +66371,3045,2987 +201769,3499,1886 +178670,3105,1475 +111266,1941,2275 +508888,1765,3362 +261293,3257,2728 +131252,3551,1963 +230949,1306,2293 +31749,3165,3114 +238997,1191,2415 +43257,3546,1749 +258224,1739,2689 +337302,1610,4085 +351519,1993,4422 +149586,1694,2456 +506779,1673,3225 +413985,2443,3237 +60093,3259,2546 +374517,3701,2882 +490332,2011,3427 +274116,841,3017 +321560,578,3849 +246811,5242,2508 +87190,3351,3267 +47220,2763,1994 +138499,3404,2935 +480683,2862,2876 +298773,1323,3498 +346302,2197,4246 +489612,3046,3347 +391345,2784,3732 +431191,3068,2483 +178961,3745,1494 +198536,1699,1829 +51790,2936,2214 +284519,2681,3234 +250608,3810,2575 +367339,1888,2591 +66913,3783,1027 +250365,3166,2561 +187533,4933,1630 +74892,4593,2074 +249016,2920,2539 +288150,1652,3288 +430444,2558,2460 +281943,3466,3171 +106753,1162,1869 +201507,2749,1885 +451068,1856,3367 +60330,2120,2574 +488769,1794,3321 +90652,3068,3591 +71458,4869,1786 +452128,1390,3424 +495312,2989,1973 +81068,3838,2659 +79129,2131,2492 +309716,1849,3660 +411644,3578,3064 +296866,3605,3435 +300133,1065,3528 +299649,3835,3500 +244611,1959,2489 +486335,3547,3186 +244321,969,2495 +339235,1819,4114 +218025,3162,2095 +152310,3645,2659 +149910,3756,2424 +398798,2804,2524 +322613,3791,3853 +232873,3255,2303 +164245,3551,994 +177006,2325,1468 +414429,4242,3215 +44722,3223,1859 +181215,2543,1547 +428471,1530,2385 +202777,2498,1887 +421056,3821,1936 +69560,3480,1605 +102855,4107,1365 +388443,2801,3574 +92705,1053,3736 +135187,2192,2424 +299938,642,3510 +217035,4677,2078 +368688,3080,2640 +479316,2095,2792 +56861,2659,2401 +360981,3228,2269 +267788,1974,2849 +31162,2556,3089 +275837,1638,3037 +173840,3943,1357 +191710,1936,1716 +203168,3619,1896 +499932,2080,2744 +72976,3361,1931 +124266,4552,3835 +440956,3191,2838 +187666,1936,1661 +478431,2955,2722 +337872,4562,4076 +59738,1282,2555 +329411,3847,3955 +73613,3542,2005 +125140,2417,3938 +215586,4446,2066 +5173,1828,1865 +217477,1546,2103 +4597,2847,1782 +81143,4767,2648 +65475,2319,2953 +71946,4560,1851 +422162,1993,2762 +73672,3923,1981 +8959,3449,2395 +126458,1904,4115 +280178,2003,3137 +4197,2523,1728 +167354,4062,1169 +305234,419,3600 +131964,4198,2048 +28443,3917,2862 +327165,1203,3935 +38459,1977,3060 +265468,3421,2799 +494404,2097,3169 +270954,3453,2917 +144229,3444,1847 +355052,1341,4513 +355808,2765,4530 +31968,1960,3156 +174427,2609,1409 +135428,4051,2439 +130404,3997,2751 +494034,3883,2793 +359912,3142,2136 +34572,2713,3317 +276152,2814,3057 +284955,95,3258 +146494,3009,2179 +443886,2897,3002 +115845,1062,2812 +131378,2922,2004 +183116,4125,1553 +187232,4203,1627 +248339,833,2542 +28203,2508,2877 +474426,2184,2531 +487855,2653,3256 +357852,1647,4917 +91991,98,3721 +52036,3841,2208 +303586,3443,3573 +226851,1132,2241 +188963,1883,1679 +299920,610,3525 +299725,4184,3498 +98587,3723,4317 +416845,3228,3407 +486837,3139,3214 +61744,3378,2664 +383836,1791,3410 +498337,2765,2615 +514234,2612,3825 +295529,3795,3432 +305803,2123,3602 +437666,2117,2712 +41616,3312,1602 +58493,3111,2472 +178475,2524,1494 +27154,2461,2779 +419873,2794,3640 +367066,3382,2567 +191795,2282,1718 +242494,3783,2451 +135184,2187,2440 +292696,3182,3380 +109818,3805,2145 +224266,1523,2192 +104274,3146,1613 +454798,2231,3542 +136811,3783,2638 +228588,2416,2264 +137016,3094,2667 +213539,1907,2051 +338103,1723,4101 +206523,1248,1958 +513736,2472,3817 +438571,3593,2757 +369160,2491,2661 +299091,2155,3507 +38690,2077,3557 +348077,3823,4299 +28148,2284,2858 +175979,3109,1436 +476163,2453,2622 +331585,2088,3985 +196530,4181,1802 +237429,526,2394 +507908,3405,3278 +435851,2102,2641 +272015,2172,2961 +236159,783,2377 +238874,865,2418 +12537,2086,2782 +404062,3373,2782 +232792,2931,2308 +280200,2047,3140 +481542,1788,2952 +258996,4869,2703 +268178,3403,2841 +42421,1761,1709 +88988,3647,3426 +100307,2172,564 +255873,3255,2659 +43698,3133,1806 +262489,2918,2762 +478855,2461,2779 +460451,2549,3943 +122896,1519,3733 +443637,1830,2999 +428055,2698,2333 +364212,3288,2433 +365502,3804,2475 +62169,2886,2694 +224645,2647,2203 +317840,1512,3777 +95185,2571,3927 +323037,916,3865 +269180,1900,2877 +456894,3592,3609 +223346,2860,2174 +168883,4434,1219 +450662,2797,3344 +496830,3869,2448 +198141,4853,1817 +45691,2985,1930 +513155,1840,3733 +233730,1510,2324 +322044,1998,3848 +138230,3589,2844 +108383,832,2059 +472794,2238,2449 +250186,2349,2565 +381323,3306,3264 +453199,3396,3446 +99717,3461,4513 +155162,3301,2997 +170354,2460,1295 +422871,3154,1835 +435532,3606,2639 +29681,2510,2974 +494200,3903,2919 +416127,2246,3388 +322092,2264,3860 +394838,3864,2158 +391704,2166,3983 +449311,2201,3296 +298251,3709,3481 +495722,2875,2132 +426514,3498,2260 +211745,5499,2012 +428729,2841,2381 +5030,3712,1826 +283910,1230,3225 +360964,3202,2247 +271299,5129,2922 +232688,2660,2302 +396055,4435,2309 +326823,4618,3907 +120597,337,3480 +388032,3525,3557 +75811,2544,2232 +420581,3644,1682 +386643,1968,3520 +279600,267,3151 +481059,2143,2907 +49519,4021,2089 +132343,4244,2083 +299518,3414,3501 +149058,3438,2381 +415284,3127,3308 +68824,2653,1528 +268824,1257,2882 +70717,3712,1710 +197184,1836,1818 +248380,934,2547 +270086,1084,2910 +379784,1436,3217 +382026,1356,3337 +54903,2973,2331 +477475,3587,2660 +88011,89,3394 +504430,3403,3012 +331956,3284,3981 +36217,4140,3394 +362750,3705,2350 +97403,3938,4102 +480074,2752,2853 +75547,503,2230 +143035,2434,3449 +335623,2319,4042 +51830,3081,2201 +369262,2950,2657 +385562,2031,3473 +304035,810,3583 +396278,3072,2346 +437899,3219,2732 +466334,3053,2132 +437827,2820,2720 +5691,3448,1901 +54191,1930,2316 +167822,2815,1195 +495293,2981,1995 +65864,3132,2947 +296748,3256,3437 +382796,2241,3368 +358581,1795,4707 +23917,2974,2558 +97103,2113,4108 +502729,3050,2892 +428418,3829,2350 +170968,3455,1279 +54276,2444,2307 +413917,4250,3174 +34246,3917,3276 +93853,784,3834 +503584,3346,2949 +391495,1994,3848 +220516,2719,2144 +356562,1563,4564 +51661,2244,2196 +146161,3488,2125 +315373,2398,3744 +282848,1852,3204 +199309,4420,1838 +75934,3429,2191 +79676,1854,2557 +287932,980,3302 +354731,3081,4499 +329428,3970,3950 +7197,3756,2093 +131472,3462,1997 +82086,2874,2789 +351493,1965,4405 +45325,3464,1902 +150191,2866,2477 +206125,4567,1940 +103671,2766,1548 +154549,2169,2949 +403287,2304,2748 +318545,3680,3783 +128312,3545,4384 +208461,2908,1970 +467044,3801,2184 +6824,3557,2062 +483954,2508,3055 +163348,3697,907 +283047,2215,3197 +38867,2923,1125 +422676,3053,1827 +33207,3417,3216 +225363,677,2217 +186316,1947,1637 +222405,4880,2149 +189481,3099,1669 +132164,3561,2096 +467574,3712,2193 +251353,1794,2594 +98847,1633,4367 +473991,2637,2497 +257371,3518,2685 +498918,3403,2626 +20333,2421,2351 +448991,3605,3255 +361830,2606,2332 +483194,1742,3037 +278662,1636,3121 +9147,1985,2451 +468986,2438,2265 +39619,3295,1264 +503615,3445,2949 +505144,2324,3084 +320443,1104,3837 +291012,2095,3347 +49553,1800,2123 +82591,2748,2814 +462706,3716,1877 +508668,2777,3338 +25208,2264,2624 +39193,3307,1076 +247790,3371,2520 +397008,4004,2392 +96270,2446,4007 +19252,4613,2262 +387072,1435,3533 +203803,1363,1907 +505248,3104,3099 +23937,3059,2542 +291730,266,3368 +456787,2995,3613 +110944,4885,2217 +456820,3247,3601 +67218,3017,1112 +422489,2912,1934 +408932,2349,2978 +181243,2733,1539 +190449,2282,1693 +498460,3151,2617 +278595,1543,3095 +75133,1622,2171 +319003,903,3810 +508388,3583,3318 +211491,3832,2014 +217592,1894,2096 +366995,3201,2573 +182867,3429,1555 +24350,2699,2571 +410724,3757,3029 +495712,2864,2142 +118572,1166,3196 +246428,3399,2508 +77213,5180,2295 +496478,2662,2451 +493218,3965,2416 +64093,2620,2838 +351686,2493,4389 +153628,3983,2793 +280481,3280,3147 +148867,2271,2376 +128313,3545,4342 +64783,3316,2847 +22319,2469,2461 +221881,2652,2165 +363003,2723,2394 +278361,1108,3095 +416895,3466,3390 +439293,1478,2813 +136552,2012,2634 +92748,1400,3762 +72091,5556,1862 +41515,2260,1600 +500714,3939,2749 +441644,3637,2867 +184082,3080,1587 +30459,1823,3052 +211089,2563,2003 +274111,827,3025 +335013,130,4049 +139021,1564,3065 +262283,1990,2751 +215148,2672,2061 +380692,3135,3252 +191660,1841,1725 +61267,3743,2606 +452682,1201,3445 +409800,4118,2999 +140085,1508,3162 +19730,4577,2287 +453114,2976,3463 +94763,3713,3903 +46264,3152,1937 +24661,2089,2602 +97237,2931,4154 +61895,2219,2677 +475044,2409,2557 +97496,1277,4178 +324189,311,3893 +170547,2909,1295 +461874,3109,1823 +439651,2959,2807 +1619,3254,1421 +117775,3722,3084 +268922,1411,2881 +452613,3412,3437 +274435,1611,3026 +298809,1465,3503 +98110,1330,4282 +203078,3380,1895 +43399,1656,1770 +340897,2827,4145 +413877,4190,3165 +344683,1857,4238 +130679,2855,1924 +33261,3884,3226 +68608,4309,1415 +273982,4185,2987 +151428,3070,2583 +8280,3782,2255 +108605,2464,2028 +155007,2287,2970 +282357,290,3203 +43284,3814,1732 +452241,1767,3416 +50572,1824,2159 +471411,3426,2376 +428294,3506,2348 +288168,1687,3304 +112006,4898,2323 +41799,4075,1627 +325519,231,3914 +502016,1534,2869 +115904,1366,2766 +483564,3393,3022 +305884,2314,3614 +412914,2006,3155 +326114,2125,3917 +388638,1298,3586 +30514,1942,3075 +359490,3478,2101 +407110,3484,2899 +38003,2791,3733 +192776,4602,1717 +307128,2116,3629 +473106,3924,2445 +441164,1538,2884 +98019,4506,4204 +202455,1343,1891 +447928,1591,3226 +383345,2040,3389 +191384,4427,1707 +128989,1351,4492 +375167,1701,2944 +222983,1756,2168 +89517,3342,3509 +395986,3949,2269 +66366,3035,2992 +417539,4130,3447 +34964,2411,3337 +186673,2794,1629 +201518,2772,1882 +283681,315,3232 +4931,2713,1794 +275795,1573,3045 +72715,1171,1971 +297648,1921,3457 +304335,1898,3575 +346265,2154,4265 +79690,1928,2549 +454194,2314,3506 +15443,2815,2022 +89735,124,3520 +114054,3361,2578 +265492,3497,2801 +252872,2242,2616 +70080,3016,1666 +451378,3335,3377 +1175,2765,1366 +119175,1568,3284 +124875,372,3961 +34649,3317,3316 +429374,3086,2403 +201702,3281,1883 +396957,3927,2369 +249596,485,2560 +1190,2793,1356 +179183,4184,1483 +364651,2668,2461 +217120,5155,2082 +296341,2009,3448 +78590,2370,2487 +443464,3737,2947 +54834,2704,2337 +261820,731,2760 +329081,2984,3954 +138561,3560,2959 +7567,3836,2147 +12911,2157,2830 +348,2695,2841 +205458,2428,1942 +120850,2176,3504 +399420,3532,2543 +351741,2718,4411 +290122,3601,3315 +292670,3135,3357 +412450,2446,3113 +204116,2535,1912 +42868,1624,1745 +190928,3287,1696 +50462,3737,2128 +308770,2854,3658 +346334,2283,4265 +151217,1704,2574 +202575,1683,1891 +185204,2474,1614 +255526,1923,2659 +75476,4918,2167 +144154,3282,1864 +39780,3444,1264 +118467,272,3202 +477104,1928,2663 +207635,5438,1956 +503919,2861,2971 +94667,3049,3882 +455214,1563,3567 +488052,3796,3270 +480218,3387,2851 +359464,3286,2082 +157002,1751,3168 +92053,516,3707 +484413,2040,3103 +360335,3012,2207 +497280,4108,2502 +483755,1690,3061 +260044,3422,2721 +159960,2520,3473 +212382,2319,2022 +226855,1144,2246 +31628,2541,3132 +49087,2187,2091 +45305,3418,1902 +355271,1758,4542 +178689,3159,1500 +229042,3942,2259 +47115,2323,2002 +333472,3771,4001 +61958,2429,2709 +200204,2916,1854 +270228,1354,2906 +50151,2355,2140 +69949,2380,1685 +123800,473,3824 +282779,1752,3192 +108090,2461,1969 +159344,1555,3388 +310074,2689,3664 +270950,3441,2905 +98549,3463,4254 +136132,3978,2543 +340947,2945,4151 +15761,3747,2015 +32471,1963,3204 +237139,4161,2366 +385891,1211,3493 +135284,3150,2448 +454836,2426,3518 +247888,3640,2522 +387930,2976,3545 +30858,3763,3072 +134390,3942,2331 +87716,2804,3315 +171833,2815,1332 +433526,2522,2562 +182326,2038,1563 +248293,679,2542 +311764,3807,3681 +136026,3455,2514 +450425,1756,3354 +488571,3599,3289 +115652,3625,2752 +307086,1981,3623 +140809,1612,3209 +225811,2121,2224 +436610,2772,2674 +282803,1782,3207 +66804,3563,730 +111404,3418,2263 +178055,4513,1448 +485483,1945,3157 +7820,3156,2208 +236823,2923,2370 +14427,3840,1797 +92277,2325,3728 +209882,3120,1991 +96503,4471,4014 +246412,3355,2507 +381951,3577,3306 +297717,2054,3459 +271338,745,2932 +128618,1982,4405 +258149,1503,2696 +471871,2963,2409 +152844,1948,2758 +58636,3621,2488 +459377,1929,3818 +159225,3066,3378 +289876,2603,3330 +285606,2117,3250 +91523,670,3668 +91075,1806,3603 +247737,3252,2532 +390127,2821,3646 +113558,3985,2483 +8205,3235,2224 +280417,2961,3127 +440780,2268,2841 +276272,3385,3053 +330031,1420,3965 +251880,3533,2599 +127059,2687,4205 +343058,1610,4180 +25747,2497,2676 +413788,3783,3193 +321503,401,3860 +253379,3849,2614 +490749,3390,3440 +13253,2219,3109 +211134,2658,2020 +262244,1875,2754 +150099,2395,2495 +193906,4109,1755 +206309,5503,1941 +310502,4182,3674 +374461,3480,2870 +456037,2406,3570 +195756,1715,1794 +372991,1985,2837 +507926,3530,3290 +120384,2814,3376 +160409,2441,3663 +345504,4549,4227 +512190,3008,3604 +454791,2200,3519 +104472,4402,1598 +221467,1158,2162 +421002,2921,1979 +259556,1872,2708 +196865,4981,1800 +60217,3732,2550 +130802,3287,1897 +156894,3876,3163 +422170,2139,2781 +172001,3075,1312 +479211,1633,2811 +390269,3517,3644 +178376,2342,1479 +219137,2654,2123 +443385,3350,2962 +498779,2867,2644 +190811,3029,1699 +341281,3940,4142 +291479,3525,3349 +434876,3248,2614 +218372,4583,2107 +113631,222,2574 +334708,3518,4019 +157724,1461,3265 +356877,1848,4621 +485966,1662,3179 +143169,3232,3420 +155910,2811,3079 +335230,1051,4040 +467683,4214,2187 +6538,3955,1989 +205323,1894,1926 +300101,973,3527 +462824,2715,1929 +315017,1303,3743 +330064,1576,3974 +319817,3501,3802 +233748,1569,2339 +483461,2821,3038 +426118,2492,2262 +125571,1389,3992 +357795,1639,4783 +54073,3763,2294 +256704,1284,2675 +328730,1732,3954 +143024,2414,3457 +322231,2695,3843 +402113,3965,2676 +307337,2598,3636 +148666,3594,2318 +484473,2347,3101 +92004,221,3706 +470858,3478,2342 +510430,2931,3450 +462588,3411,1851 +350035,1796,4375 +335059,372,4050 +192360,3513,1723 +454724,1937,3540 +100567,3467,947 +277971,3900,3064 +395712,2415,2286 +172067,3151,1332 +250307,2816,2575 +329114,3097,3953 +296033,1189,3443 +20362,2553,2336 +177519,3413,1464 +62175,2900,2679 +256006,3540,2649 +41394,2036,1636 +65139,2877,2926 +105621,4878,1759 +302565,448,3572 +287613,4315,3273 +344249,1134,4232 +452400,2429,3415 +427518,2953,2320 +495279,2975,2011 +319436,2408,3809 +189671,3563,1666 +238047,2589,2394 +489336,1932,3362 +206123,4564,1929 +313219,4200,3710 +449992,2523,3306 +107225,5438,1871 +235624,3479,2346 +335455,1684,4051 +78266,4009,2407 +69660,4110,1573 +95654,1668,3954 +401763,2190,2667 +289495,1623,3328 +382503,3486,3345 +178582,2877,1488 +60429,2694,2598 +227906,5146,2228 +327332,1743,3926 +429607,3811,2393 +266731,3310,2823 +284934,55,3259 +22951,2997,2484 +348171,4165,4309 +478868,2519,2758 +82358,796,2798 +510779,2611,3509 +124985,1140,3938 +331671,2519,3990 +104839,3171,1682 +450902,1344,3364 +463876,2440,1982 +441797,1603,2889 +248499,1265,2558 +159533,2542,3450 +90056,3097,3531 +370445,3286,2709 +430046,3310,2417 +462845,2756,1929 +254101,1955,2636 +414694,3061,3261 +438123,1602,2746 +371378,2413,2758 +185284,2665,1615 +10021,3499,2502 +365135,2366,2493 +99922,1678,4762 +236842,2973,2377 +417408,3626,3447 +214238,3981,2055 +380770,3317,3237 +223708,3970,2186 +40881,2236,1582 +104369,3662,1609 +300659,2772,3519 +174800,3377,1402 +37988,2784,3742 +427581,3134,2303 +365199,2653,2491 +73815,5564,2004 +465976,3883,2105 +487598,1641,3271 +371810,1878,2769 +184456,4107,1581 +186582,2555,1638 +242208,2840,2455 +221762,2313,2159 +236781,2765,2360 +28311,2991,2882 +56204,1858,2388 +394298,3813,2082 +277849,3637,3082 +370649,1610,2733 +343917,3824,4186 +401544,3320,2639 +342155,2701,4155 +426481,3400,2231 +485436,1780,3167 +378410,3229,3120 +277907,3755,3072 +277463,2143,3083 +238392,3647,2389 +358393,1761,4917 +168195,3310,1197 +81253,846,2737 +417831,3478,3465 +279305,3664,3108 +84464,3827,2981 +317103,3467,3757 +398428,3632,2486 +156442,3596,3126 +293428,1557,3397 +433310,1711,2565 +211849,730,2026 +400206,2164,2601 +176264,3601,1441 +450845,1197,3368 +256411,423,2684 +477141,2037,2679 +16518,3063,2107 +159867,2294,3492 +44274,3441,1816 +162254,2233,432 +178429,2426,1494 +10302,2491,2544 +287132,2641,3279 +230179,3104,2269 +495911,3396,2126 +128501,1517,4408 +110265,2570,2161 +408024,3148,2947 +110100,1541,2176 +208963,4768,1964 +340306,1341,4144 +131030,2879,1932 +65190,3083,2890 +384833,1330,3435 +106474,3257,1820 +483181,1708,3037 +380261,3729,3206 +20048,3366,2310 +259295,1225,2714 +335199,881,4053 +467630,3932,2199 +454480,1187,3532 +442892,3833,2926 +116968,1368,2949 +195195,4164,1785 +264562,750,2810 +426785,2664,2292 +172599,3957,1341 +53821,2671,2283 +194869,3276,1769 +23435,2945,2521 +410057,3165,3018 +180342,3811,1523 +371574,3359,2742 +228391,1715,2256 +184992,2005,1616 +235947,5118,2354 +394865,4066,2185 +63299,3394,2757 +417009,3951,3409 +259303,1245,2718 +199614,5620,1841 +311463,2780,3685 +418848,3310,3540 +22271,2305,2448 +490160,3043,3371 +459466,2082,3812 +469578,2492,2289 +369691,2435,2669 +500383,2253,2760 +495452,3196,1972 +397652,2058,2462 +266487,2329,2831 +348268,1138,4325 +181264,2783,1535 +434102,2457,2578 +53077,3907,2249 +426787,2673,2284 +211288,3304,2021 +8652,3874,2315 +492246,2415,3765 +241429,151,2443 +340828,2606,4134 +82244,4095,2767 +55810,2556,2368 +144854,2997,1989 +479639,3418,2787 +196758,4710,1789 +276675,4150,3054 +490753,3407,3428 +384158,3344,3408 +435183,1948,2622 +136830,3882,2612 +153968,3530,2824 +377247,3200,3025 +189982,4423,1683 +148160,2892,2279 +378433,3270,3113 +265784,4839,2809 +114842,977,2646 +399997,3748,2573 +402051,3386,2678 +40104,3320,1296 +195203,4176,1771 +97499,1297,4174 +165188,2674,1119 +412115,3309,3103 +219234,2857,2110 +88409,3549,3374 +16807,4378,2100 +73582,3328,2013 +500651,3418,2764 +290962,1971,3337 +155591,3449,3012 +202475,1400,1905 +369813,3098,2674 +95380,4602,3951 +80294,2162,2616 +75420,3877,2142 +79883,3564,2559 +363851,3713,2406 +229934,2406,2267 +279479,65,3134 +153606,3822,2782 +437662,2073,2729 +182288,5485,1535 +343810,3413,4193 +381633,2230,3289 +416657,2388,3402 +125479,870,4022 +124048,2383,3832 +23208,2128,2527 +28337,3196,2890 +70510,2427,1693 +137221,4008,2665 +383082,3501,3354 +27066,2269,2779 +140547,2410,3197 +157897,2055,3260 +211716,5185,2020 +241430,247,2451 +140129,1661,3139 +181946,4329,1539 +436299,1576,2682 +217737,2401,2106 +433066,3505,2544 +484364,1881,3096 +482525,3868,2980 +143732,3301,1655 +304299,1793,3581 +351531,2010,4408 +342360,3117,4173 +97888,3313,4211 +210103,3827,1999 +482930,3055,2989 +110754,2390,2254 +476910,3530,2636 +212195,1691,2038 +399871,3135,2581 +332648,1259,4009 +88773,2164,3415 +229020,3884,2249 +446986,2823,3154 +320197,490,3826 +24233,2278,2589 +489343,1954,3345 +231039,1582,2286 +180717,4626,1514 +182477,2367,1566 +136179,1899,2599 +244145,454,2482 +166519,2765,1180 +315356,2361,3748 +299567,3538,3489 +52894,3093,2247 +270790,3129,2916 +154045,4029,2835 +112111,624,2418 +344449,1523,4223 +458754,1849,3771 +244713,2212,2492 +310721,641,3682 +227603,3604,2236 +219950,666,2136 +467474,3194,2188 +436761,3612,2667 +32920,1878,3235 +356578,1585,4559 +451444,3678,3372 +54799,2608,2327 +396946,3911,2359 +291630,4188,3349 +444493,2884,3029 +125136,2392,3975 +21919,2825,2415 +132098,3248,2094 +259299,1235,2715 +338618,3619,4103 +251672,2799,2588 +191004,3442,1714 +12656,2927,2804 +370389,2967,2707 +103380,4142,1447 +75326,3135,2127 +201230,1731,1884 +205622,2917,1926 +280392,2689,3152 +87811,3408,3306 +399130,4207,2529 +448734,2298,3243 +209066,5602,1970 +118913,3910,3206 +228479,2077,2261 +293041,51,3398 +141250,1966,3238 +375200,1837,2935 +252454,905,2614 +194941,3415,1772 +281999,3595,3163 +416019,1928,3359 +438621,3757,2761 +410620,3447,3028 +435705,1594,2650 +208365,2548,1964 +360460,3165,2205 +509830,2543,3424 +101292,3904,1108 +298763,1298,3496 +463447,2832,1940 +130059,2454,2327 +496625,3091,2411 +286666,1477,3279 +514199,2508,3828 +357893,1654,4720 +327779,3110,3929 +319646,3094,3816 +59744,1428,2558 +52204,2246,2223 +473287,2097,2471 +330870,4528,3974 +10643,2556,2577 +337160,4600,4070 +504480,3587,3031 +215771,5196,2075 +504522,3709,3032 +109699,2665,2153 +502047,1676,2889 +447858,1433,3216 +19905,2574,2321 +443407,3395,2948 +264114,3602,2777 +64218,3036,2840 +10655,2843,2573 +344525,1640,4216 +438416,2828,2753 +298442,170,3496 +297614,1860,3470 +379235,2003,3171 +312476,1820,3702 +30838,3598,3047 +71212,3245,1786 +77947,1699,2432 +150329,3865,2486 +46447,4048,1950 +408994,3014,2974 +274567,2029,3023 +20076,3649,2303 +144103,3137,1803 +80554,4283,2623 +50735,2565,2152 +427666,3445,2309 +117731,3309,3051 +7739,2823,2219 +75013,792,2161 +109688,2511,2139 +218752,1203,2112 +288663,3145,3292 +486708,2591,3229 +175485,4611,1397 +185348,2824,1602 +30528,2008,3074 +450778,3336,3354 +130759,3210,1626 +330217,2105,3961 +237451,584,2386 +84303,2920,2977 +512711,3575,3647 +226549,5108,2221 +366919,2835,2556 +247550,2436,2532 +340619,1945,4139 +484570,2786,3085 +414247,3320,3211 +186166,4874,1617 +406945,2463,2900 +31714,2975,3130 +42016,2249,1653 +480410,1588,2865 +1087,3622,1297 +392667,3454,1813 +406637,3594,2880 +231004,1427,2302 +295997,1100,3437 +386456,1281,3514 +258774,3651,2687 +365809,3057,2520 +132405,2913,2141 +296548,2604,3443 +482354,2863,2958 +112553,4926,2412 +24851,2767,2597 +175122,4002,1391 +475324,3975,2549 +461855,3076,1820 +358851,1838,4667 +216133,1560,2078 +60955,2630,2642 +499159,2650,2651 +352165,3875,4394 +179763,2368,1523 +196288,3319,1795 +171249,3809,1264 +491124,2625,3458 +225922,2458,2211 +447729,3413,3201 +71477,4939,1775 +437999,3702,2724 +138939,3532,3016 +258976,4815,2694 +303369,2701,3568 +389899,1997,3665 +259443,1585,2714 +379540,3220,3165 +495817,3281,2161 +243944,4481,2478 +52397,3176,2220 +249052,3186,2546 +51953,3511,2217 +281499,1882,3156 +510602,1889,3478 +47872,3295,2019 +197903,4294,1820 +265683,4131,2810 +12420,3621,2728 +407962,2745,2931 +127166,3206,4209 +372071,2995,2776 +319928,4001,3802 +15578,3221,1996 +244125,389,2485 +185676,3799,1605 +450209,3580,3307 +14522,3141,1886 +273363,2236,2966 +492571,3709,1910 +302699,774,3553 +181483,3309,1542 +464774,3474,2054 +163317,3687,697 +218112,3462,2092 +489805,1795,3397 +173215,2924,1375 +331831,2944,3978 +131112,3286,1943 +37981,2782,3703 +285498,1856,3264 +298410,4430,3481 +254422,2854,2633 +284763,3599,3225 +129463,3437,4548 +423308,2959,1965 +80291,2153,2587 +244325,975,2497 +18210,4194,2194 +179892,2779,1511 +169963,3887,1244 +108751,3935,2031 +512127,2752,3611 +228861,3227,2255 +5544,2128,1894 +502406,3485,2888 +355878,2864,4520 +160160,2156,3569 +264750,1292,2795 +373548,1976,2850 +369430,3764,2648 +499519,2111,2704 +66356,3003,3005 +59142,3530,2509 +394555,2368,2191 +330037,1446,3972 +425977,3542,2225 +467539,3626,2198 +439917,1488,2817 +459534,2229,3798 +140903,2018,3201 +42338,4183,1667 +159143,2670,3348 +364127,2785,2444 +92520,4177,3718 +255790,2903,2662 +302056,3013,3545 +161077,3146,3045 +34448,2237,3324 +49863,3048,2122 +397407,3638,2439 +382171,1813,3335 +346850,4507,4250 +176511,4090,1439 +279716,1048,3138 +466890,3184,2171 +345812,1420,4267 +148044,2224,2298 +498402,2934,2618 +441004,3479,2858 +133507,3416,2237 +503407,2397,2939 +145930,4218,2094 +3862,2711,1700 +177612,3618,1465 +264379,4201,2783 +346953,1163,4299 +52367,3089,2221 +58229,1824,2476 +8495,2813,2322 +488654,1524,3317 +354212,2148,4490 +276175,3165,3058 +456651,2422,3599 +415394,3795,3278 +443223,2723,2956 +53421,3141,2275 +183564,5395,1560 +417746,3247,3474 +488727,1692,3315 +25103,4519,2597 +194817,3109,1765 +236862,3039,2368 +162440,3433,773 +155848,2481,3073 +101850,4263,1207 +168953,1723,1246 +244927,2739,2487 +45766,3235,1913 +249231,3602,2549 +349327,3507,4318 +278899,2180,3118 +503611,3434,2943 +2137,2567,1522 +203014,3084,1897 +169068,2779,1227 +464239,3541,1992 +396807,2926,2361 +27375,3514,2802 +399163,4564,2528 +406229,3862,2870 +438263,2169,2746 +328905,2353,3949 +212972,4499,2026 +303173,2194,3559 +422867,3149,1846 +360342,3020,2229 +445371,1401,3083 +38731,3293,3507 +316415,1329,3766 +193385,2828,1746 +176759,4545,1437 +32225,3219,3175 +206629,1528,1951 +316957,3110,3773 +303232,2368,3569 +475117,2749,2554 +311389,2573,3692 +277592,2547,3089 +30281,3194,3019 +275122,3731,3000 +220526,2740,2144 +377729,3026,3067 +249322,3931,2549 +424622,3159,2149 +142104,3678,3288 +229304,5277,2249 +309295,514,3666 +372269,3782,2788 +479481,2687,2812 +67971,3747,1294 +411015,3042,3049 +508475,1724,3337 +81746,4983,2715 +275664,1321,3039 +60323,2105,2579 +507761,2627,3281 +118311,3450,3098 +204821,4816,1906 +338361,2769,4099 +117852,4173,3008 +219264,2928,2122 +235686,3710,2344 +399412,3498,2539 +427303,2328,2301 +428639,2563,2362 +480212,3374,2836 +435782,1831,2658 +444360,2289,3037 +263598,1810,2771 +426123,2496,2233 +60822,2000,2625 +435180,1879,2631 +453299,1241,3478 +437425,3807,2694 +316254,839,3763 +423664,2472,2063 +167031,3561,1181 +34779,4205,3318 +270561,2024,2908 +174184,4545,1346 +181206,2522,1546 +393819,3949,1926 +230233,3322,2275 +266729,3306,2837 +424199,3391,2101 +509576,3287,3397 +420184,3422,1444 +435271,2299,2627 +415595,2348,3356 +487634,1761,3281 +83519,1089,2953 +125100,1934,3949 +340249,1194,4150 +374393,3217,2876 +451754,2162,3401 +21154,4226,2381 +46234,3015,1953 +135641,3170,2481 +428424,3945,2357 +375938,2857,2949 +494622,2821,3176 +258463,2624,2692 +467567,3698,2197 +25847,2853,2665 +336107,3813,4045 +207020,2799,1948 +477067,1820,2658 +457963,2875,3662 +230355,3778,2271 +113042,4099,2472 +389271,1503,3629 +477558,1308,2692 +217662,2137,2097 +344534,1655,4212 +187107,3954,1622 +442520,2038,2917 +48563,2128,2059 +254225,2243,2641 +335177,780,4042 +423948,3027,2098 +268795,1209,2896 +308543,2297,3639 +22027,3258,2435 +116949,1271,2942 +204063,2266,1915 +388729,1487,3604 +393087,3227,1871 +416901,3500,3395 +246430,3431,2515 +427650,3401,2323 +5940,2491,1961 +93603,3671,3806 +496137,2913,2295 +345913,1602,4240 +370186,1956,2694 +202007,4507,1884 +249256,3664,2546 +173256,2961,1368 +170788,3221,1289 +483142,1598,3032 +445057,2582,3058 +142241,1779,3310 +266110,1240,2828 +42041,2813,1680 +410864,2111,3048 +295079,2312,3432 +278491,1377,3121 +416431,3727,3383 +265039,1960,2807 +221256,534,2156 +424672,3243,2127 +242369,3352,2442 +436687,3226,2668 +510613,1944,3482 +142989,2362,3392 +280708,3833,3145 +279435,3980,3100 +77939,1656,2421 +58080,3473,2459 +353088,2526,4433 +241012,3249,2436 +345553,1028,4270 +218640,854,2115 +464209,3453,2015 +58158,3756,2446 +126594,2755,4122 +9937,2277,2516 +326916,424,3921 +235930,5036,2345 +122093,3887,3614 +91441,171,3678 +374963,3202,2907 +234240,3308,2340 +345788,1374,4241 +307357,2643,3631 +435927,2385,2658 +63295,3382,2754 +392349,3779,1616 +89418,2777,3500 +129135,1898,4523 +81096,3965,2678 +95858,3245,3983 +340548,1782,4150 +236942,3309,2367 +196218,3076,1797 +468683,3773,2261 +475882,4032,2584 +449786,1641,3305 +402446,3248,2696 +306582,437,3632 +45284,3319,1892 +289207,617,3318 +87395,3986,3271 +330722,3649,3968 +355614,2440,4525 +400289,2625,2597 +297093,212,3462 +51717,2476,2204 +513880,2820,3814 +355672,2519,4509 +246403,3336,2502 +86856,4111,3244 +7990,2100,2268 +22859,2634,2489 +376141,3533,2971 +37139,3753,3528 +297942,2687,3471 +145980,2446,2151 +114879,1211,2677 +289059,269,3315 +371091,3741,2738 +475628,2460,2587 +313209,4176,3713 +25394,2976,2635 +425993,3565,2222 +264294,4052,2786 +41634,3355,1603 +318925,696,3807 +335651,2551,4040 +52253,2465,2220 +412382,4292,3099 +427849,4030,2306 +300815,3345,3516 +219437,3405,2117 +418058,4032,3470 +498688,2447,2646 +87783,3323,3343 +16694,3812,2076 +280186,2021,3130 +250183,2331,2570 +71780,3152,1838 +295363,3256,3417 +472856,2493,2447 +402489,3341,2717 +204484,3684,1916 +210916,2118,2013 +48895,3284,2076 +27196,2590,2772 +338744,4381,4092 +190618,2628,1690 +157004,1756,3188 +231251,2388,2299 +354094,1886,4500 +207718,610,1968 +105607,4807,1738 +284914,4216,3222 +487330,2871,3245 +341112,3309,4146 +347292,1644,4281 +492723,3780,2056 +107497,2317,1962 +73398,1840,1975 +144447,2904,1953 +397505,3986,2428 +92291,2460,3702 +130451,3531,2862 +16374,4573,2071 +474781,4054,2534 +292103,1677,3359 +133421,2589,2224 +149273,2289,2410 +328955,2705,3954 +142140,3798,3293 +312252,1132,3704 +89433,2850,3494 +146203,3751,2117 +174726,3252,1396 +367291,1655,2595 +361521,3313,2301 +500849,2549,2786 +282635,1470,3203 +147164,4315,2191 +155072,2630,3002 +140594,2835,3194 +370572,3814,2702 +101096,3396,1144 +439550,2401,2808 +237475,702,2392 +174601,3026,1378 +52083,1507,2238 +199417,4756,1836 +40399,2424,1486 +199574,5513,1833 +502541,2265,2911 +217729,2371,2093 +418640,2771,3528 +408388,2272,2960 +253070,2897,2614 +394870,4097,2135 +133175,3615,2218 +217601,1954,2101 +30195,2744,3037 +127819,3691,4255 +474105,3221,2494 +321808,1252,3855 +372710,3463,2801 +273172,1724,2985 +232614,2373,2304 +85518,3193,3085 +489019,2835,3336 +246645,4761,2504 +163845,3165,1025 +233503,765,2324 +405777,4143,2853 +325375,4411,3899 +31766,3265,3124 +263752,2113,2783 +265896,610,2830 +209383,1415,1993 +95857,3240,3994 +23286,2354,2509 +321650,806,3846 +42815,4150,1710 +277578,2500,3066 +183225,4351,1559 +333185,3014,3998 +507690,1962,3280 +146181,3604,2133 +459083,2518,3770 +492645,2528,2154 +432731,1915,2532 +454773,2105,3535 +306584,452,3634 +327780,3110,3933 +390970,1963,3725 +394288,3688,2110 +304637,2652,3580 +471061,1919,2379 +24447,3261,2572 +170980,3466,1297 +68344,3020,1449 +40631,3773,1442 +62656,2873,2729 +232599,2327,2319 +350693,3589,4371 +65721,2802,2976 +60726,3698,2585 +179281,4337,1487 +260206,3909,2718 +262087,1449,2752 +403658,4035,2770 +472958,2978,2454 +315393,2438,3745 +196116,2848,1786 +167242,3846,1181 +147042,3869,2196 +268825,1260,2873 +329360,3680,3946 +402838,2798,2722 +440135,2130,2816 +394192,2973,2073 +296073,1315,3445 +436596,2725,2677 +190202,4901,1681 +444022,3338,2974 +434523,1722,2598 +83847,3341,2911 +297087,171,3468 +33387,1907,3268 +419380,3248,3594 +472872,2546,2450 +500863,2591,2783 +208381,2622,1971 +461387,3206,1694 +270547,2006,2906 +39110,3277,1041 +106109,4718,1791 +310785,780,3691 +154369,3445,2879 +41343,1811,1636 +329328,3622,3948 +306882,1196,3631 +142659,2358,3372 +123376,1011,3763 +366155,1857,2525 +491378,3519,3471 +112474,3721,2404 +399137,4235,2521 +352734,1812,4455 +9899,1778,2525 +310374,3624,3672 +451640,1739,3397 +25369,2862,2643 +360655,2521,2237 +416339,3214,3365 +314101,2600,3719 +278560,1483,3104 +392646,3430,1796 +490392,2105,3448 +205480,2508,1925 +113825,1135,2530 +358974,2655,2072 +506526,2827,3199 +196309,3383,1790 +17349,4632,2119 +445518,1940,3085 +480199,3270,2828 +74017,2056,2028 +511366,3176,3548 +314209,2905,3718 +248617,1762,2550 +245233,3938,2496 +298787,1405,3482 +138629,3705,2957 +455027,3432,3532 +336160,4019,4044 +296181,1746,3435 +30600,2234,3049 +498971,3581,2641 +41414,2109,1620 +464199,3402,1996 +502060,1946,2874 +428207,3173,2330 +288002,1212,3302 +502431,3917,2888 +308719,2735,3650 +91257,3315,3622 +151026,3229,2549 +18524,3083,2222 +205606,2868,1940 +281030,902,3155 +183925,2567,1584 +36892,2758,3507 +74127,2866,2024 +489096,3298,3324 +420732,3272,1754 +252794,1986,2623 +100274,3120,4579 +73165,4689,1965 +211658,4585,2018 +14325,3657,1783 +101579,3138,1190 +358101,1701,4674 +41757,3968,1591 +117856,4691,3061 +299726,4184,3494 +286048,3624,3254 +67878,3488,1353 +495611,2666,2137 +342254,2927,4176 +189509,3191,1689 +180194,3549,1502 +224934,3540,2198 +474848,1761,2549 +126056,1724,4050 +49111,2259,2095 +386535,1516,3516 +197644,3239,1810 +394595,2629,2156 +420423,3557,1586 +67242,3100,1128 +396506,4045,2338 +182201,4972,1543 +204184,2717,1906 +43473,2284,1772 +66450,2483,629 +124591,2472,3894 +487721,2087,3265 +366312,2742,2536 +7860,3359,2218 +226910,1300,2244 +77198,4939,2311 +140905,2122,3217 +275194,3941,3000 +114000,2385,2543 +41817,4092,1595 +62914,1633,2771 +411943,2431,3091 +2909,3486,1589 +206596,1444,1962 +431002,2183,2469 +180406,3921,1524 +124996,1218,3942 +339084,1520,4126 +141218,1888,3246 +254172,2128,2626 +409945,2459,3008 +101110,3432,1086 +392712,3514,1768 +303544,3311,3567 +166233,4190,1146 +97809,2981,4219 +239937,4945,2414 +265279,2884,2797 +96327,2864,3998 +168117,3221,1188 +260564,1064,2743 +349654,1261,4368 +149101,3688,2373 +258452,2517,2695 +351503,1974,4407 +429903,2740,2438 +153002,2896,2767 +506046,2551,3154 +290140,3635,3322 +380346,1426,3233 +363219,3508,2369 +26609,2319,2736 +68052,4160,1281 +151413,2976,2583 +21507,3195,2404 +156321,2712,3126 +309745,1923,3671 +179010,3829,1491 +506217,3449,3172 +69422,2748,1608 +170046,4102,1236 +397480,3947,2423 +166370,2483,1182 +419584,3641,3577 +509605,3380,3394 +236622,2278,2364 +399577,3999,2533 +84617,838,3057 +348424,1354,4318 +277973,3903,3069 +218122,3481,2096 +73629,3679,2009 +206923,2484,1949 +321992,1874,3852 +240362,1211,2420 +150026,1885,2480 +266435,2124,2830 +419697,2692,3725 +483685,1509,3058 +56347,2655,2392 +149762,2734,2456 +60626,3205,2593 +430259,4099,2417 +63896,1881,2826 +294062,3244,3403 +115471,1748,2697 +218241,3810,2106 +39528,3000,1256 +47842,3220,2021 +15611,3302,2016 +327761,3075,3929 +503099,2907,2920 +251980,3923,2586 +380846,1317,3281 +47400,3413,1999 +381048,2256,3286 +422888,3161,1824 +463075,3274,1931 +229746,1666,2271 +252302,466,2622 +63084,2483,2754 +379086,3543,3142 +161592,3260,2007 +149635,2056,2457 +95481,556,3966 +30788,3205,3064 +179240,4279,1496 +58503,3134,2482 +219744,4962,2123 +130391,3611,2683 +93812,581,3862 +151662,1967,2643 +184809,4858,1580 +376876,1782,3016 +408608,3496,2950 +273314,2167,2985 +200600,4328,1857 +389586,2881,3634 +451902,2863,3387 +365789,2964,2503 +66618,2973,1040 +11324,2839,2642 +451092,1941,3385 +15933,2765,2063 +373508,1795,2856 +64511,2431,2867 +174574,2975,1378 +416628,2316,3414 +294181,3624,3385 +67194,2904,1151 +37162,3831,3496 +10691,3369,2592 +421610,1781,2499 +194196,4938,1755 +203152,3553,1894 +465591,2458,2117 +397938,3656,2456 +248776,2177,2554 +202787,2522,1892 +66218,2619,2984 +360520,3284,2234 +44633,3033,1871 +47176,2618,2006 +141491,1528,3270 +235885,4889,2344 +148078,2434,2278 +392023,3541,1738 +466824,2837,2167 +46685,2783,1974 +257432,3702,2680 +351036,1375,4418 +1130,2681,1309 +89525,3386,3459 +183092,4080,1564 +494664,4075,3245 +119925,3454,3339 +195552,5462,1783 +140293,3020,3158 +370622,3943,2712 +325836,1206,3905 +10577,1867,2602 +407230,3841,2902 +112896,2237,2461 +445053,2554,3065 +6207,1632,2009 +98856,1729,4325 +26071,4514,2676 +359660,2642,2173 +141714,3302,3270 +344225,1096,4215 +471040,1868,2367 +41672,3449,1636 +329156,3225,3945 +168847,4378,1193 +492648,2923,2134 +382966,2926,3364 +47916,3443,2011 +330419,2872,3962 +168606,3864,1219 +73943,1446,2024 +197657,3296,1824 +36791,2526,3484 +29306,3158,2947 +353799,1441,4478 +498701,2629,2636 +330388,2811,3969 +355811,2768,4544 +426082,2323,2252 +134984,3468,2406 +404935,2871,2822 +183124,4140,1570 +450827,3675,3356 +289255,830,3316 +295267,3009,3418 +288398,2228,3307 +291253,2645,3341 +95129,2063,3921 +56031,3427,2371 +42573,2895,1705 +51950,3499,2198 +29426,3931,2972 +280061,1730,3147 +497956,2850,2552 +89766,398,3521 +40302,3662,1319 +411719,3792,3066 +142467,3733,3323 +129625,1668,4588 +80263,1881,2628 +366535,3599,2538 +407795,4266,2922 +252276,376,2622 +320570,1718,3834 +352241,3995,4407 +423036,2514,2052 +439241,3835,2765 +120374,2693,3377 +509319,1852,3391 +86474,2105,3207 +393176,3395,1860 +171570,4458,1278 +504170,1748,3033 +322575,3713,3855 +405676,3717,2850 +71317,3944,1797 +482084,1745,2984 +71602,1734,1866 +396245,2802,2336 +499326,3315,2673 +366051,3936,2516 +77098,3734,2298 +104092,2021,1636 +339260,1869,4116 +345403,4406,4217 +501370,2830,2817 +244450,1222,2489 +449709,1426,3307 +110521,810,2254 +206936,2519,1946 +123436,1410,3786 +1278,3142,1338 +39637,3330,1193 +49450,3627,2082 +258467,2729,2687 +181187,2479,1545 +497565,2897,2517 +312498,1878,3698 +511951,1849,3601 +261194,2950,2746 +349020,2260,4321 +224088,949,2197 +128385,3949,4396 +430223,3865,2439 +449125,1504,3293 +111527,433,2340 +400104,4093,2561 +341087,3244,4146 +121672,461,3607 +115791,784,2778 +6737,2892,2027 +347940,3423,4302 +463424,2781,1954 +219774,5046,2116 +66189,2484,2988 +100561,3461,1045 +495225,2950,2001 +39810,3554,1273 +89356,2076,3493 +134920,2783,2396 +172560,3906,1313 +376605,3099,3006 +35040,2724,3357 +322626,3840,3850 +49712,2462,2121 +24635,2040,2624 +74696,2709,2102 +64054,2486,2831 +162823,3566,669 +372384,1819,2801 +463821,3875,1974 +154212,2702,2905 +472319,2477,2428 +210669,1197,2010 +190899,3216,1710 +89728,94,3542 +367614,3347,2587 +14963,2991,1953 +461789,2926,1823 +111820,2203,2323 +253648,356,2627 +107022,3284,1903 +25860,2911,2655 +18565,3388,2237 +81958,1821,2786 +331850,2989,3981 +189273,2635,1678 +210105,3830,1995 +238203,3021,2392 +27513,4313,2811 +432660,1635,2537 +466422,3454,2151 +126801,1063,4212 +441592,3335,2864 +139204,2982,3042 +269467,3143,2885 +72338,2888,1920 +281656,2159,3171 +29089,2119,2948 +362838,4012,2356 +44782,3406,1871 +437918,3339,2716 +83708,2559,2917 +229334,449,2276 +263421,1433,2786 +135734,3688,2468 +279037,2706,3112 +220863,3542,2136 +338126,1823,4090 +233644,1221,2340 +337089,4430,4061 +72236,1942,1925 +462780,2579,1918 +1685,3408,1394 +353277,3188,4436 +226956,1415,2244 +496468,2301,2375 +368974,1679,2649 +305615,1604,3612 +116963,1346,2998 +248643,1832,2545 +447664,3208,3202 +248456,1170,2554 +76031,4021,2222 +349260,3159,4332 +60060,3167,2560 +221031,3985,2143 +86557,2679,3235 +507550,3658,3260 +85377,2216,3103 +139109,1730,3061 +426422,3209,2250 +221349,783,2163 +450159,3289,3310 +510354,2741,3465 +447999,1772,3207 +228317,1503,2259 +3349,4102,1636 +173924,4063,1357 +423648,2443,2107 +15654,3444,1983 +367292,1655,2588 +421136,2347,2097 +247774,3342,2520 +365872,3224,2516 +262745,3598,2749 +328160,4542,3936 +22729,2169,2494 +414516,2446,3247 +500011,2587,2733 +255170,784,2651 +450085,2932,3314 +356232,3447,4534 +123406,1183,3768 +113109,314,2483 +23847,2650,2559 +57852,2722,2462 +102216,3431,1301 +84250,2438,2983 +67433,3863,1171 +140034,3686,3113 +330864,4489,3962 +500731,1589,2780 +298731,1161,3487 +474280,1732,2523 +294528,584,3409 +198088,4735,1825 +461950,3232,1820 +260731,1452,2738 +369142,2425,2667 +252027,4130,2593 +56355,2671,2386 +200232,3050,1856 +271501,1171,2932 +215282,3178,2065 +386105,1881,3483 +453660,2679,3487 +368240,3572,2607 +164240,3549,1052 +208364,2545,1968 +237437,556,2389 +426218,2729,2236 +63918,1911,2807 +77013,3006,2322 +441348,2126,2863 +355661,2502,4523 +216715,3312,2078 +320980,3001,3828 +191018,3467,1713 +7514,3514,2144 +368561,2490,2639 +249104,3316,2559 +462844,2755,1910 +27100,2325,2803 +419077,3807,3539 +387592,1386,3541 +375942,2871,2963 +246553,3931,2506 +361148,3672,2254 +407137,3574,2910 +486689,2490,3204 +6879,3907,2056 +183065,4022,1553 +100398,2705,1026 +391871,2450,3798 +396035,4195,2274 +425500,2473,2225 +338365,2783,4098 +143588,2856,1784 +294034,3209,3394 +341183,3490,4151 +261984,1171,2769 +352948,2135,4427 +197135,1711,1828 +89747,177,3525 +448388,3589,3226 +438410,2806,2738 +116331,891,2858 +72514,3985,1885 +332927,1896,4006 +477779,2497,2686 +341245,3764,4137 +488289,2064,3307 +321400,4580,3828 +343712,3172,4195 +159589,2875,3391 +216684,3222,2090 +287857,685,3296 +277359,1787,3092 +204190,2744,1917 +117468,1113,3026 +130067,2531,2270 +54182,1861,2301 +120770,1395,3497 +107705,4529,1927 +194957,3444,1780 +58223,1801,2478 +219568,3797,2113 +31630,2543,3145 +407911,2316,2945 +400725,2146,2629 +338059,1611,4101 +198902,2918,1848 +327649,2791,3936 +442644,2624,2915 +176041,3225,1445 +501280,2450,2832 +256488,607,2680 +283817,960,3213 +459869,2921,3794 +452611,3407,3418 +430260,4101,2433 +268046,3107,2840 +384446,2052,3416 +267287,897,2846 +484631,3137,3093 +413220,3695,3148 +422007,1530,2673 +92815,1999,3777 +68126,1912,1386 +121467,3254,3550 +281328,1560,3176 +488880,2182,3333 +493797,3269,2735 +511573,2569,3596 +467429,2936,2187 +118548,949,3169 +239521,2945,2401 +49663,2357,2114 +8237,3441,2233 +345531,1005,4259 +65753,2869,2977 +179256,4304,1482 +461333,3156,1696 +332693,1376,4000 +218649,879,2122 +135164,2111,2442 +355738,2656,4548 +192057,2854,1717 +481739,2672,2952 +384814,1291,3444 +213442,1591,2055 +14542,3164,1868 +441826,1681,2897 +213724,2390,2046 +259790,2567,2709 +470106,2494,2325 +342554,3841,4154 +209771,2673,1994 +16908,2718,2138 +224450,2080,2187 +133304,4204,2198 +130247,3797,2581 +345662,1212,4261 +154915,1677,2977 +457282,2574,3625 +82175,3716,2768 +208055,1533,1981 +419032,3704,3538 +495909,3396,2134 +356896,1859,4634 +399020,3907,2521 +334576,3159,4038 +144898,3197,2018 +356173,3361,4536 +323619,2768,3867 +457908,2673,3665 +443739,2157,2988 +357481,3132,4562 +363166,3339,2370 +103216,3393,1473 +82327,198,2829 +293998,3138,3383 +422090,3049,2679 +75768,2176,2221 +298935,1823,3496 +507377,2810,3255 +18588,3548,2231 +244714,2212,2496 +148308,3814,2293 +497511,2796,2520 +164006,3390,942 +182726,3104,1554 +314847,740,3747 +288300,2006,3292 +23818,2518,2537 +24950,3357,2615 +503311,1697,2948 +365640,2078,2504 +124423,1076,3901 +357597,3342,4566 +297305,979,3465 +251674,2802,2584 +416683,2616,3398 +279863,1408,3143 +206316,5517,1939 +280351,2492,3145 +413384,4220,3147 +166125,3978,1106 +150127,2506,2484 +469370,1805,2292 +435556,3672,2629 +395688,2379,2266 +412364,4239,3096 +293610,1967,3383 +317260,4163,3759 +317788,1389,3788 +45397,3786,1899 +193271,2614,1750 +136281,2667,2552 +243854,3931,2466 +324159,234,3886 +449181,1705,3281 +388309,2020,3579 +426399,3156,2249 +409196,3738,2968 +173456,3316,1362 +95192,2646,3943 +299134,2245,3504 +315863,3702,3743 +409748,3852,2996 +503690,3842,2957 +142450,3680,3328 +123692,3645,3797 +222292,3848,2164 +364760,3189,2456 +375650,3676,2918 +232932,3450,2305 +230163,3067,2276 +154987,2113,2976 +292332,2244,3360 +225320,557,2213 +33698,3381,3260 +78952,659,2500 +254461,2961,2625 +369648,2232,2680 +446398,2888,3135 +241857,1850,2441 +100443,2843,1061 +75863,2931,2209 +217296,877,2099 +44818,3478,1861 +190354,1921,1689 +459469,2090,3820 +211819,669,2037 +186592,2581,1635 +407503,3158,2924 +155049,2499,3002 +469289,3915,2265 +12273,2389,2758 +12508,1964,2808 +232844,3115,2312 +233368,433,2332 +197683,3347,1828 +178129,4677,1446 +430479,2680,2455 +102226,3467,1303 +49850,2964,2116 +130282,2727,2634 +232822,3052,2310 +473799,1872,2502 +51930,3364,2214 +481396,3806,2918 +203504,4900,1904 +251341,1769,2595 +218604,736,2116 +455688,3610,3550 +330922,19,3993 +272598,4144,2962 +145031,3609,2010 +134490,2224,2366 +87489,222,3307 +123409,1214,3756 +438851,1950,2786 +217139,5231,2085 +3422,4203,1647 +21324,2421,2400 +166099,3953,1148 +280657,3701,3128 +338164,1966,4103 +209962,3482,2000 +427791,3799,2314 +194424,1874,1772 +358084,1697,4918 +276528,3931,3037 +313855,1886,3724 +236132,730,2369 +26329,2999,2704 +229468,924,2283 +384552,2613,3429 +255722,2619,2663 +385902,1234,3498 +391508,2006,3801 +95005,997,3922 +429106,2112,2398 +351262,1639,4388 +391910,2672,3840 +148431,2014,2325 +375847,2202,2961 +64289,3301,2843 +280515,3378,3133 +261539,3953,2732 +424276,2440,2135 +244153,472,2496 +75929,3405,2178 +116193,4017,2776 +47342,3238,2008 +365724,2613,2513 +403972,3034,2784 +183087,4069,1572 +214543,844,2066 +244575,1746,2483 +332341,252,4008 +25782,2629,2670 +98663,1254,4339 +347883,3279,4283 +317459,412,3781 +219596,3864,2117 +185062,2153,1607 +487579,1594,3262 +42015,2246,1652 +348713,1791,4318 +124729,3608,3919 +427229,3971,2285 +71406,4520,1781 +140753,3811,3197 +226122,3081,2222 +266470,2222,2828 +162926,3587,685 +432423,3326,2529 +183418,4760,1563 +282655,1497,3207 +200171,2849,1856 +220082,1112,2146 +457800,2272,3663 +233941,2380,2336 +282159,4961,3172 +417891,3623,3478 +439508,2204,2801 +411821,4146,3071 +328483,947,3953 +226515,5031,2225 +375873,2301,2970 +363106,3140,2368 +429540,3645,2405 +347619,2221,4296 +313893,1989,3724 +474460,2345,2544 +159137,2616,3367 +56999,3133,2415 +109998,859,2187 +217781,2510,2098 +199588,5547,1846 +88827,2746,3427 +46351,3447,1941 +132563,3756,2139 +383732,1379,3407 +378672,2035,3129 +321156,3447,3834 +123846,739,3829 +153250,1960,2817 +192533,4037,1733 +414902,3949,3274 +380905,1422,3269 +185816,4093,1612 +236027,413,2366 +32654,2839,3201 +207141,3125,1944 +502212,2685,2879 +179294,4358,1480 +372414,2006,2810 +60103,3279,2557 +266165,1392,2818 +123173,4137,3700 +426573,3607,2235 +33391,1912,3253 +1720,3494,1433 +359909,3139,2180 +158377,2829,3301 +243567,2802,2469 +458039,3141,3675 +415296,3144,3314 +210946,2222,2007 +398423,3619,2496 +132344,4245,2104 +509431,2596,3400 +483558,3363,3044 +299918,609,3514 +65946,2152,3029 +71550,1222,1869 +397978,3862,2448 +277256,1619,3084 +231788,4067,2299 +394037,1128,2041 +362876,2231,2381 +295861,705,3442 +166454,2687,1183 +113853,1361,2527 +493828,3646,2727 +304439,2196,3589 +22472,3041,2456 +238648,5101,2392 +470298,3501,2320 +75026,836,2127 +99790,1380,4555 +462283,2769,1846 +379057,3409,3148 +429160,2337,2396 +193484,3068,1752 +10672,3158,2602 +386855,3078,3511 +496800,3831,2415 +84232,2232,2975 +392186,3649,1665 +132455,3192,2136 +512270,3527,3600 +211649,4566,2003 +112787,1465,2472 +71332,4093,1758 +78106,2856,2432 +464314,3810,1998 +271373,809,2931 +280232,2099,3139 +51647,2188,2201 +293566,1837,3399 +98709,1354,4320 +453413,1627,3488 +326769,4486,3910 +135555,2502,2470 +421357,3472,2225 +472267,2333,2435 +471506,4077,2384 +284737,3519,3222 +42460,1828,1690 +3047,4082,1593 +146710,4215,2157 +283907,1221,3222 +368093,2957,2603 +404841,2263,2837 +352998,2265,4459 +361025,3299,2248 +200576,4275,1864 +503025,2678,2930 +117115,2804,2933 +173671,3683,1347 +287016,2280,3271 +85209,938,3101 +17184,3882,2125 +384490,2226,3424 +58647,3660,2489 +103683,2833,1575 +25230,2346,2647 +68600,4250,1450 +467163,4301,2162 +487538,1462,3277 +337763,3832,4081 +177335,3106,1471 +20052,3447,2312 +231517,3151,2286 +96605,1240,4076 +154293,3141,2909 +50226,2617,2146 +80688,756,2649 +150192,2870,2495 +440695,1984,2837 +23871,2770,2561 +410271,3877,3007 +406720,3821,2879 +88322,3108,3395 +23005,3301,2498 +81750,4991,2691 +113992,2355,2553 +414979,1817,3307 +341150,3363,4144 +400124,4127,2566 +104534,4831,1610 +100284,3229,4569 +163436,3730,567 +220070,1085,2131 +274622,2128,3016 +37492,3125,3592 +241383,5173,2430 +486763,2821,3224 +275524,928,3028 +218037,3187,2100 +343528,2817,4199 +17847,2410,2217 +34497,2407,3301 +382940,2834,3359 +364561,2231,2463 +20034,3194,2323 +22336,2518,2457 +364160,2935,2441 +102981,1763,1465 +457485,3538,3646 +1250,3082,1318 +78307,4842,2410 +412855,4204,3128 +248044,4804,2523 +459165,2788,3756 +250080,2005,2573 +304845,3213,3578 +99468,1863,4464 +320168,426,3827 +96894,3936,4066 +233110,4051,2308 +230768,661,2293 +27048,4490,2729 +201593,2917,1882 +165371,3178,1122 +8210,3267,2253 +108787,4515,2053 +306885,1200,3631 +144557,3271,1922 +185469,3115,1615 +416917,3587,3413 +196124,2866,1789 +128222,2924,4398 +303378,2734,3568 +401400,2980,2641 +156778,2923,3154 +230917,1208,2284 +449599,3636,3289 +2729,4113,1547 +40649,3803,1425 +64509,2430,2872 +427157,3673,2272 +384722,3387,3434 +114162,310,2623 +439648,2941,2793 +304288,1764,3584 +374674,1827,2910 +84352,3137,2967 +125791,3373,3994 +375794,2004,2953 +246692,4865,2502 +143061,2502,3384 +318963,785,3814 +504515,3700,3008 +181619,3685,1531 +159875,2316,3479 +107150,4581,1893 +53822,2671,2287 +63376,1597,2779 +256401,400,2681 +105700,1639,1771 +8083,2699,2247 +424245,2319,2152 +204521,3770,1922 +481770,2832,2945 +419936,2897,3621 +2667,3862,1576 +179386,4581,1497 +454535,1325,3534 +480390,1560,2870 +260210,3926,2713 +303049,1900,3555 +238286,3293,2383 +245001,3147,2488 +343127,1752,4204 +128819,3406,4412 +17863,2491,2207 +627,3442,3206 +32090,2480,3158 +138927,3491,2993 +90988,865,3638 +461770,2876,1790 +464349,3901,2016 +95680,1850,3954 +503880,2640,2975 +132832,3588,2166 +219078,2445,2116 +370690,1723,2720 +113580,4740,2499 +75172,1932,2125 +478070,3946,2683 +159459,2209,3382 +434807,2939,2603 +170406,2690,1297 +76354,2128,2277 +431906,3641,2503 +441756,1522,2907 +157851,1858,3241 +430916,1951,2465 +181405,3129,1530 +461237,3005,1786 +76120,518,2270 +418649,2840,3553 +263409,1408,2787 +178741,3285,1483 +326149,2322,3900 +252568,1339,2618 +353115,2655,4432 +22702,2109,2498 +32696,3098,3179 +319849,3666,3811 +116618,2886,2833 +122660,4376,3653 +150726,3735,2517 +264363,4179,2776 +272095,2592,2953 +506040,2528,3157 +62312,3735,2700 +323982,3936,3868 +349851,1538,4379 +212852,3793,2033 +409818,4263,2984 +249565,391,2567 +256056,3690,2647 +397617,4251,2405 +296520,2520,3449 +29780,3043,2980 +288179,1708,3299 +155872,2596,3059 +143014,2399,3442 +498597,1821,2632 +104822,3069,1693 +319621,2990,3807 +24521,3941,2581 +276521,3917,3038 +7526,3674,2164 +257784,435,2699 +116392,1139,2879 +267578,1449,2840 +201597,2921,1878 +356672,1645,4590 +255860,3220,2665 +223696,3944,2173 +24496,3647,2591 +11144,1412,2653 +296563,2649,3435 +316948,3074,3763 +113881,1523,2549 +263674,1964,2775 +133094,2819,2221 +358937,2479,2023 +291559,3867,3350 +203017,3093,1896 +180964,131,1533 +491850,2935,3548 +480296,3784,2823 +393449,4040,1874 +402336,2857,2720 +16802,4347,2094 +61562,2733,2658 +361529,3325,2278 +17894,2624,2214 +161787,1577,2314 +165713,3597,1129 +278728,1769,3117 +97093,2024,4089 +130481,2098,3132 +429406,3196,2391 +500457,2662,2771 +28147,2281,2883 +354704,3037,4478 +147923,4183,2263 +157147,2728,3171 +253588,4971,2604 +487456,3607,3253 +349720,1358,4352 +480415,1599,2888 +214107,3667,2042 +52233,2412,2234 +463882,2458,1993 +363633,3004,2406 +508809,3535,3347 +490997,2330,3452 +245288,4181,2495 +416015,1882,3387 +272071,2296,2941 +172123,3219,1312 +508531,1920,3346 +227982,436,2254 +494870,2444,3380 +8436,2645,2286 +35884,2467,3408 +279496,90,3128 +314127,2657,3730 +222241,3712,2167 +29568,2092,2981 +432972,3086,2548 +112361,2397,2388 +189826,4037,1666 +66746,3453,785 +454594,1470,3524 +253039,2822,2606 +475675,2659,2599 +151819,2838,2635 +83188,3018,2889 +357680,1579,4658 +21598,3849,2393 +52972,3374,2250 +343440,2505,4196 +349587,1170,4365 +402352,2912,2717 +359448,3241,2090 +294163,3589,3398 +500850,2549,2803 +375070,3650,2896 +303409,2834,3556 +202361,1125,1903 +212454,2517,2034 +170522,2886,1301 +193157,2343,1748 +264705,1198,2807 +217155,484,2106 +227546,3414,2235 +149621,1954,2442 +43198,3409,1747 +165394,3207,1130 +105091,4861,1663 +196596,4299,1805 +161447,3832,1420 +141859,1646,3291 +165896,3757,1114 +238245,3135,2381 +372167,3398,2772 +433404,2032,2556 +235103,1714,2341 +117870,49,3162 +90647,3044,3591 +322425,3287,3858 +238348,3442,2392 +81446,2017,2697 +326993,653,3920 +394065,2691,2118 +207901,1160,1965 +237609,1110,2395 +348758,1839,4325 +371768,1662,2783 +395843,3486,2290 +327801,3195,3929 +192629,4209,1728 +278314,978,3099 +160601,3901,2145 +192510,3945,1715 +45585,2699,1916 +351451,1909,4415 +447599,2919,3187 +168146,3251,1202 +83045,1819,2888 +502058,1941,2886 +149844,3279,2429 +146134,3279,2118 +160188,2236,3567 +289783,2377,3324 +123433,1385,3751 +10993,2784,2616 +329429,3975,3940 +147949,4242,2248 +83017,1567,2890 +198439,1503,1836 +20899,2707,2369 +149418,3247,2394 +200586,4295,1863 +88891,3171,3427 +494258,2699,3020 +130947,3627,1871 +74501,1213,2099 +20659,4370,2352 +426722,2480,2274 +241315,4985,2420 +354862,3471,4498 +377653,2755,3073 +418066,4105,3463 +453351,1423,3487 +33282,3971,3224 +378715,2206,3149 +80721,1002,2645 +196626,4365,1801 +28913,3773,2928 +49503,3961,2085 +378775,2486,3147 +90217,3885,3525 +136603,2390,2614 +11508,1447,2665 +468929,2201,2277 +78583,2290,2478 +188550,4069,1654 +387999,3444,3541 +238510,4152,2383 +66828,3595,999 +420789,3935,1762 +248188,331,2543 +328781,1948,3942 +484173,3796,3062 +138922,3452,3009 +127073,2752,4165 +261907,1009,2746 +183304,4533,1569 +346052,1804,4243 +200816,4900,1855 +373906,3651,2863 +201812,3628,1872 +192396,3608,1721 +359076,2858,1967 +101970,2494,1336 +220741,3238,2138 +72782,1842,1936 +181618,3680,1543 +440416,3626,2817 +367856,1795,2602 +488164,1662,3288 +98012,4489,4185 +309100,4098,3651 +113460,2606,2476 +93894,947,3836 +155504,2924,3006 +51295,2839,2190 +64441,2285,2869 +29833,3515,3005 +250262,2713,2562 +504198,1827,3026 +135182,2169,2436 +35116,3347,3331 +23878,2787,2551 +333664,78,4037 +420884,3431,1873 +283323,3207,3206 +510488,3313,3448 +46359,3464,1959 +199263,4339,1831 +461638,3531,1701 +9675,3603,2485 +456778,2961,3602 +259530,1807,2716 +260403,4991,2714 +177559,3508,1455 +416207,2838,3367 +191865,2449,1723 +317379,250,3783 +282505,1150,3194 +424872,2366,2173 +302234,3480,3532 +488961,2488,3332 +192753,4555,1732 +113765,825,2546 +410619,3444,3025 +325705,805,3907 +213678,2282,2046 +387948,3076,3541 +138518,3442,2925 +484422,2071,3091 +263116,4985,2757 +387167,1948,3534 +168340,3493,1202 +94206,3743,3829 +28425,3770,2875 +279681,895,3145 +144656,3513,1960 +205798,3503,1938 +471278,2696,2384 +403377,2784,2753 +92085,663,3723 +369141,2423,2662 +424325,2587,2124 +306209,3263,3610 +395090,2334,2258 +133716,4270,2233 +298503,472,3488 +136136,4008,2518 +356668,1643,4621 +188909,4989,1646 +106933,2398,1870 +379809,1572,3206 +361612,3496,2278 +155315,1682,3024 +279559,196,3135 +238162,2921,2398 +233416,577,2339 +436301,1582,2683 +24493,3635,2572 +179743,2338,1502 +435166,1834,2635 +492754,4079,2128 +478867,2516,2772 +177340,3119,1450 +131594,3675,2021 +224305,1620,2205 +200053,2612,1860 +395137,2489,2242 +493661,3019,2636 +203517,4931,1896 +157641,3417,3227 +63793,3255,2787 +370072,1577,2710 +215722,5030,2072 +439501,2174,2807 +498247,2219,2593 +70978,1198,1797 +247473,2215,2529 +194476,2219,1772 +480354,1470,2856 +228379,1675,2257 +234940,1132,2360 +505373,3605,3081 +272409,3588,2933 +450358,1537,3342 +250283,2755,2581 +218067,3316,2099 +291258,2659,3347 +161872,1664,2378 +472836,2438,2465 +155024,2398,2991 +499787,3389,2683 +129308,2724,4547 +231459,2994,2300 +202699,2126,1888 +454420,3471,3494 +238854,786,2403 +494462,3354,3068 +94018,2282,3845 +46959,3973,1972 +226302,3744,2219 +290255,4069,3328 +119348,3322,3251 +501984,3769,2850 +76571,3899,2243 +190695,2793,1712 +169638,3493,1240 +49146,2363,2097 +274289,1321,2997 +310264,3227,3664 +73833,627,2030 +154478,1602,2943 +283957,1335,3222 +194502,2336,1784 +157523,2565,3226 +494543,1888,3220 +314052,2469,3723 +22617,4196,2445 +197033,1465,1808 +170391,2584,1295 +61312,1862,2649 +292771,3326,3360 +42208,3439,1646 +462753,2518,1924 +213496,1757,2050 +384083,2904,3406 +235151,1928,2351 +337080,4398,4061 +231363,2716,2299 +420635,4113,1699 +12634,2721,2777 +69764,4852,1611 +305688,1850,3610 +461074,3549,1148 +202046,4615,1868 +213025,4649,2022 +129432,3297,4506 +275865,1691,3054 +292356,2303,3358 +217104,5098,2078 +122701,251,3698 +213614,2120,2051 +302941,1481,3562 +154761,3393,2935 +103304,3753,1440 +430931,1991,2484 +11322,2794,2636 +45148,2957,1891 +431624,2361,2505 +299964,682,3516 +8919,3172,2377 +274293,1326,3012 +385396,1387,3478 +433728,3607,2561 +282235,103,3190 +326954,528,3932 +503053,2788,2932 +401815,2585,2669 +334563,3123,4033 +65383,3380,2909 +323115,1121,3875 +25786,2633,2663 +163147,3633,561 +73353,1462,1993 +491724,2677,3517 +81494,2480,2728 +47946,3592,2012 +322980,790,3878 +307956,525,3651 +424032,3125,2071 +64125,2728,2812 +382282,2526,3325 +290822,1710,3344 +174384,2445,1391 +474890,1868,2569 +13928,3806,1739 +318920,687,3806 +42979,2310,1768 +472247,2234,2416 +372051,2939,2789 +463946,2712,2012 +262219,1812,2761 +76217,1235,2260 +270426,1757,2900 +443712,2084,2994 +422855,3142,1932 +73600,3443,1997 +252900,2335,2613 +238895,924,2401 +171131,3687,1296 +465882,3500,2114 +381089,2450,3278 +126658,3316,4132 +15699,3548,1981 +333614,4654,4013 +497743,1632,2561 +114806,750,2688 +391915,2699,3807 +332112,3690,3997 +236402,1493,2365 +268506,4190,2841 +383902,2127,3404 +13798,3704,1720 +402520,3396,2698 +393492,4111,1874 +433228,4034,2533 +111003,429,2265 +178449,2483,1491 +198795,2703,1830 +51810,3012,2207 +249498,5097,2555 +37719,2630,3633 +113866,1434,2542 +14299,3622,1866 +314445,3516,3735 +441896,1894,2898 +289197,600,3325 +48919,3345,2059 +311196,2075,3685 +95343,3928,3952 +134896,2674,2413 +105612,4834,1733 +107074,3691,1886 +233373,450,2337 +24388,2877,2582 +269313,2153,2875 +229819,1959,2279 +366827,2415,2574 +76351,2117,2242 +181768,3940,1547 +469016,2567,2284 +211511,3881,2002 +130719,3016,1851 +277073,1345,3082 +86018,2914,3153 +261264,3161,2732 +14599,3284,1883 +241169,3894,2434 +97664,2146,4165 +464233,3527,2016 +302283,3580,3535 +424915,2544,2188 +144298,3665,1869 +180934,5463,1507 +280104,1794,3145 +87245,3553,3303 +117745,3404,3046 +227438,3009,2240 +134269,3284,2323 +273386,2284,2976 +424327,2588,2127 +12833,2020,2915 +8185,3017,2226 +104513,4717,1621 +364483,4046,2443 +149994,1730,2475 +470841,3421,2341 +332429,490,4010 +239607,3216,2403 +261474,3760,2733 +70578,2862,1693 +29403,3819,2942 +337343,1808,4077 +239698,3530,2416 +473219,1815,2475 +357821,1642,4708 +731,3412,3410 +258169,1563,2704 +187104,3947,1620 +308761,2824,3642 +496301,3737,2313 +208239,2198,1970 +220531,2749,2136 +502106,2256,2874 +179089,4024,1501 +205901,3764,1927 +166273,4308,1146 +123942,1402,3820 +287818,511,3289 +304212,1281,3580 +357436,3059,4567 +203951,1852,1924 +247611,2666,2524 +71897,3895,1817 +223406,3030,2168 +123693,3651,3809 +198692,2319,1835 +466604,4187,2155 +272089,2557,2937 +96723,2651,4053 +162470,3446,781 +503304,1675,2950 +77597,3371,2353 +117909,158,3158 +467226,2205,2201 +358377,1757,4922 +1195,2800,1315 +166353,2189,1149 +359531,2482,2128 +421441,1872,2333 +49717,2476,2122 +426639,3959,2260 +434631,2151,2597 +367359,1997,2591 +81630,3768,2688 +178304,2156,1482 +7996,2137,2230 +238692,5206,2380 +56123,3858,2374 +6904,1798,2064 +77085,3638,2291 +35459,2522,3374 +102928,4586,1410 +454144,2114,3511 +296962,4009,3447 +55319,2668,2355 +39194,3308,1064 +228256,1345,2253 +298231,3645,3474 +172992,1293,1356 +345263,3531,4221 +58768,2069,2508 +151808,2811,2638 +203380,4590,1903 +164919,3958,1070 +220043,1010,2144 +376337,1959,3008 +107107,3832,1903 +475531,2042,2594 +100936,2698,1145 +413185,3586,3140 +7052,2805,2084 +206876,2288,1954 +417925,3696,3462 +232801,2950,2312 +289060,277,3333 +70483,2117,1722 +36373,2666,3431 +48072,1799,2054 +353167,2758,4464 +323294,1781,3877 +20636,4206,2350 +355377,2047,4516 +166787,3276,1175 +510419,2907,3451 +252337,572,2609 +267039,4184,2821 +449412,2734,3280 +128406,1178,4419 +176819,4691,1418 +94377,650,3892 +266920,3896,2833 +233138,4116,2316 +419122,2601,3580 +492340,2457,3605 +70829,4422,1734 +327164,1201,3931 +196166,2933,1787 +469369,1805,2308 +496877,1969,2492 +408653,3654,2952 +454741,1972,3540 +377552,2215,3068 +85189,777,3106 +438129,1619,2745 +174999,3784,1403 +405184,3773,2829 +260544,996,2745 +117515,1325,3065 +39123,3285,1106 +45469,2087,1927 +269974,796,2928 +328200,4639,3936 +371800,1823,2780 +366360,2997,2543 +142518,1656,3349 +238003,2464,2395 +292201,1874,3372 +345292,3650,4225 +315130,1705,3737 +484839,1627,3120 +306627,571,3631 +316753,2448,3769 +214203,3907,2053 +138341,1656,2970 +482874,2793,3000 +165665,3559,1137 +276812,804,3081 +441916,1950,2893 +223625,3766,2174 +120818,1888,3487 +284810,3720,3209 +164354,3612,1073 +125547,1237,3989 +21407,2772,2399 +207925,1223,1965 +170356,2462,1261 +497839,2077,2579 +409520,3134,2985 +353191,2809,4460 +438287,2262,2740 +258476,2749,2699 +67507,4290,1138 +69595,3635,1549 +419051,3735,3538 +145051,3714,1968 +504467,3564,3028 +79223,3077,2496 +274150,981,2998 +62742,3281,2738 +281464,1820,3170 +373704,2789,2841 +301298,654,3540 +445413,1684,3101 +375973,2976,2957 +404443,2915,2798 +508735,3090,3328 +88579,32,3410 +342458,3298,4170 +163202,3649,814 +234401,3867,2336 +465033,2529,2087 +421966,3605,2662 +344645,1806,4228 +408384,2252,2965 +290715,1416,3355 +7123,3270,2068 +326105,2109,3903 +77561,3110,2367 +442757,3277,2930 +288490,2536,3288 +204487,3687,1918 +155144,3193,2972 +30970,1883,3090 +417486,3912,3433 +9197,2647,2404 +23884,2808,2546 +100578,3475,605 +366047,3905,2515 +60006,2896,2548 +443388,3361,2962 +399790,2678,2581 +204109,2515,1911 +421934,3136,2650 +315999,217,3768 +381767,2851,3295 +448127,2289,3234 +60255,1298,2604 +361664,3782,2285 +360776,2732,2252 +312275,1223,3709 +265916,708,2823 +466479,3717,2146 +71079,2179,1777 +157495,2204,3213 +212081,1329,2029 +149875,3415,2422 +335352,1380,4054 +158712,2303,3313 +381558,1821,3297 +409505,3067,2993 +487513,3887,3248 +156898,1438,3181 +61540,2678,2651 +83079,2082,2898 +148720,3858,2321 +498420,2966,2610 +187323,4411,1639 +286240,4223,3259 +271316,181,2954 +105574,4633,1725 +146871,2729,2216 +396885,3569,2387 +123885,1040,3835 +302475,4429,3546 +172587,3940,1306 +124998,1228,3953 +448476,1396,3252 +326571,3562,3916 +249862,1423,2561 +154142,2242,2910 +15181,3519,1951 +156048,3619,3064 +370878,2774,2732 +177562,3516,1466 +326931,478,3937 +279802,1296,3154 +352632,1697,4461 +433594,2895,2557 +79107,1873,2497 +291875,640,3361 +426957,3140,2298 +124628,2768,3886 +448091,2114,3211 +330044,1473,3972 +51507,3728,2190 +10096,1376,2553 +391368,2893,3740 +225240,5200,2197 +117938,263,3101 +163785,2753,926 +322502,3445,3842 +496513,2786,2419 +497636,3304,2541 +416490,3952,3365 +444332,2180,3024 +298247,3693,3459 +294107,3323,3397 +346056,1808,4266 +46750,2997,1973 +123039,2726,3741 +253217,3387,2618 +310619,386,3693 +158303,2250,3301 +88414,3558,3377 +134940,3124,2390 +8832,2704,2396 +19234,4571,2248 +242934,915,2472 +337248,1366,4078 +362523,3130,2352 +18577,3477,2232 +6523,3916,1996 +132961,3966,2171 +455177,1426,3561 +443548,1632,2984 +32491,2015,3206 +387196,2030,3522 +228874,3304,2249 +392377,3787,1613 +203086,3398,1894 +46770,3128,1971 +495450,3194,1857 +391529,2044,3833 +270531,1967,2928 +451134,2183,3376 +393664,3322,1953 +42829,4168,1686 +97049,1693,4107 +262663,3388,2767 +30258,3032,3033 +443932,3053,2996 +389934,2058,3651 +219293,3026,2124 +118246,2750,3105 +10995,2815,2615 +256332,5022,2647 +261700,4783,2732 +220207,1578,2141 +452824,1596,3456 +21502,3157,2412 +277007,1240,3094 +333437,3700,4002 +373808,3289,2847 +178766,3346,1498 +192621,4197,1724 +243187,1849,2469 +87270,3614,3287 +74792,3510,2113 +234997,1321,2340 +139311,3514,3054 +178561,2846,1483 +344244,1121,4210 +480542,2178,2883 +418488,3783,3502 +211867,789,2022 +180041,3144,1506 +132205,3619,2099 +270758,2745,2923 +460852,3337,1614 +394409,4382,2090 +203121,3485,1900 +111745,1754,2340 +156947,1575,3184 +145765,3451,2075 +126998,2186,4178 +24198,2198,2572 +350688,3582,4375 +360762,2694,2271 +44857,3578,1865 +255520,1912,2664 +194380,1795,1783 +489226,1628,3349 +426971,3166,2288 +277922,3771,3061 +376858,1711,3037 +469967,1965,2331 +416064,2094,3388 +348833,1936,4331 +395567,4647,2213 +78900,5106,2488 +1383,3414,1373 +484426,2087,3104 +341324,4309,4130 +421632,2560,2515 +122727,382,3729 +487663,1861,3280 +484532,2617,3095 +199836,1693,1852 +178178,4818,1446 +392519,3139,1837 +445128,2958,3068 +240264,935,2430 +160848,3846,2757 +216930,3937,2087 +408628,3553,2955 +492714,3686,2080 +126508,2295,4105 +335032,296,4046 +105189,1929,1716 +444097,3702,2986 +470312,3600,2314 +272876,1109,2971 +222778,1028,2181 +388714,1444,3605 +204041,2200,1906 +180150,3433,1504 +62637,2753,2720 +420846,2382,1832 +334033,1259,4030 +348428,1358,4323 +316585,1934,3766 +341547,1068,4169 +48003,1585,2046 +136948,2306,2668 +89783,549,3549 +110935,4836,2235 +9721,1347,2499 +30440,4232,3032 +133362,4273,2209 +407693,3785,2922 +420618,3821,1680 +115107,3188,2690 +201328,2137,1871 +120586,280,3452 +438125,1614,2750 +82813,4156,2840 +492231,2409,3649 +142594,1855,3363 +155791,1998,3061 +30758,2978,3071 +188425,3707,1659 +333670,89,4020 +483052,3743,2993 +9698,1293,2522 +48387,3259,2046 +191209,4036,1694 +487353,2962,3246 +123203,4339,3705 +2049,4083,1481 +499724,3221,2683 +80919,2573,2678 +208439,2856,1972 +243483,2605,2468 +54201,1976,2310 +151813,2828,2623 +202552,1627,1898 +323927,3716,3875 +201468,2636,1873 +390531,2143,3683 +143392,2419,3472 +22280,2332,2447 +407615,3515,2914 +56556,3521,2378 +432376,3132,2511 +466119,2244,2134 +15854,4110,2024 +99011,2659,4369 +504662,1917,3050 +477806,2630,2708 +293954,3037,3397 +260895,1923,2724 +122461,2400,3641 +385547,1987,3469 +127808,3628,4316 +204153,2635,1916 +161492,2698,1970 +503012,2624,2933 +240292,1011,2431 +37247,2531,3578 +83091,2214,2853 +360175,2609,2232 +226361,3854,2213 +217264,787,2098 +170164,4379,1243 +425596,2689,2200 +372025,2817,2792 +16660,3673,2085 +195820,1868,1804 +488371,2360,3302 +224275,1546,2200 +464857,3773,2031 +398406,3565,2499 +327928,3514,3924 +234106,2763,2333 +211679,4652,2008 +486547,1805,3226 +378855,2891,3136 +114799,715,2666 +23091,4064,2484 +277994,3943,3082 +46269,3181,1947 +249986,1810,2574 +221310,645,2163 +427335,2436,2329 +285182,941,3256 +321144,3414,3832 +163559,3798,657 +177070,2437,1456 +75554,600,2198 +166062,3912,1108 +147182,1834,2225 +375685,3784,2938 +349767,1416,4375 +215638,4582,2067 +114512,2425,2618 +104241,2880,1603 +379020,3309,3121 +174149,4489,1344 +39135,3290,1084 +468296,1961,2262 +43442,2232,1803 +21763,2262,2442 +18283,4590,2211 +506392,1805,3182 +394516,4618,2098 +173073,2481,1342 +148829,1993,2378 +92117,1036,3718 +61587,2799,2656 +58590,3433,2466 +408494,3112,2949 +226567,5146,2213 +338865,1031,4111 +281837,3048,3171 +60075,3200,2552 +41954,1943,1650 +158913,3799,3317 +249403,4522,2559 +469190,3488,2274 +449009,3682,3238 +50430,3552,2136 +88604,196,3440 +462549,3334,1870 +7977,1925,2270 +72587,4850,1926 +255375,1450,2653 +428196,3156,2350 +34843,1966,3340 +164396,3638,1065 +133556,3613,2239 +125275,3549,3947 +287216,3056,3277 +395071,2165,2252 +235589,3383,2357 +188523,4012,1663 +18464,2851,2230 +277427,2083,3066 +492744,3992,2060 +129774,1778,4690 +127284,4380,4160 +434616,2074,2597 +214979,2179,2068 +448243,2908,3219 +259972,3253,2724 +127513,1634,4296 +309048,3699,3652 +82687,3561,2802 +397593,4158,2423 +355839,2806,4525 +469335,4219,2275 +354790,3289,4498 +338976,1314,4117 +49782,2773,2109 +266477,2237,2827 +509494,2768,3410 +117591,1700,3056 +179594,5446,1496 +255740,2770,2648 +119410,3858,3290 +404588,3518,2815 +388523,3117,3565 +199122,3669,1831 +60591,3151,2583 +135237,2640,2453 +463898,2512,2007 +426326,2975,2267 +187557,5384,1625 +374509,3666,2873 +93551,3268,3785 +56188,1782,2380 +484973,2051,3124 +98485,3183,4259 +222213,3524,2153 +73474,2420,1995 +203119,3481,1899 +428531,2264,2371 +439491,2135,2791 +430903,1899,2477 +201207,1680,1871 +341464,4562,4133 +277945,3828,3093 +375466,3033,2927 +146379,2345,2185 +8458,2723,2299 +388674,1370,3603 +191792,2279,1722 +484780,1500,3142 +303040,1877,3565 +465009,2401,2061 +334339,2157,4029 +47247,2813,2004 +184990,2005,1606 +94938,528,3926 +188802,4780,1664 +161590,3188,2030 +20020,3099,2305 +485863,1411,3177 +185450,3081,1612 +245518,473,2517 +78929,246,2527 +237092,3899,2367 +104322,3422,1594 +319925,3989,3799 +100604,3517,1027 +305547,1197,3613 +205191,1451,1933 +362316,2151,2346 +479811,1686,2836 +21971,3015,2440 +427079,3499,2271 +227410,2928,2244 +424629,3166,2143 +144275,3578,1891 +219940,634,2140 +112956,2982,2470 +170545,2907,1275 +432699,1785,2540 +408513,3159,2949 +390373,1919,3700 +107982,1580,2005 +165611,3513,1127 +241696,1152,2443 +292350,2288,3361 +418185,3071,3505 +191647,1803,1720 +513390,2949,3763 +93284,962,3799 +352460,1431,4440 +221752,2208,2166 +374464,3489,2882 +52457,3374,2236 +108337,568,2030 +73197,5436,1930 +104924,3786,1644 +222563,5272,2152 +32401,1807,3191 +464976,2306,2085 +249841,1337,2576 +423822,2840,2067 +19110,3925,2272 +226424,4023,2223 +191898,2541,1718 +240164,691,2419 +344875,2201,4227 +434951,3589,2600 +312806,2699,3700 +372682,3345,2795 +379905,2154,3215 +465497,4203,2092 +436802,3731,2687 +303719,4002,3562 +299458,3218,3484 +75832,2668,2207 +454333,2965,3512 +455279,1757,3558 +337175,4640,4067 +363566,2734,2406 +67102,2644,1117 +331665,2445,3996 +130794,3278,1927 +26882,3561,2733 +119091,844,3253 +491004,2337,3488 +205918,3794,1941 +250344,3111,2578 +193789,3817,1757 +18000,2965,2212 +465723,2895,2097 +313435,632,3723 +67275,3252,1126 +171748,2553,1336 +409849,1954,3005 +280316,2351,3151 +15652,3441,2007 +191490,4685,1705 +247047,868,2526 +199440,4802,1829 +375921,2738,2954 +282087,3809,3171 +185653,3686,1604 +47063,2173,1996 +68219,2552,1384 +500691,3689,2757 +369269,3001,2661 +372837,3827,2812 +166304,4372,1123 +236336,1307,2373 +100275,3122,4553 +194104,4650,1750 +337828,4409,4083 +422258,3614,2815 +104191,2606,1602 +184995,2010,1609 +238571,4896,2386 +360451,3154,2226 +173542,3455,1372 +193553,3230,1752 +386903,3438,3518 +466079,4311,2123 +64853,3478,2850 +449721,1459,3309 +214286,4493,2054 +253334,3703,2613 +507729,2501,3291 +426409,3171,2244 +514185,2453,3837 +403457,3007,2764 +32577,2421,3193 +447287,1524,3196 +218180,3630,2100 +27107,2352,2809 +285837,2962,3252 +512114,2684,3622 +272827,997,2975 +412076,3188,3085 +340549,1785,4145 +206101,4520,1928 +94530,1954,3881 +355156,1501,4524 +116094,3146,2815 +42551,2751,1707 +117578,1636,3022 +313129,3668,3714 +84998,3638,3053 +33760,3841,3258 +8356,2000,2301 +72111,767,1919 +383301,1749,3374 +60231,3763,2562 +512576,2772,3653 +496958,2181,2463 +152240,3221,2678 +478613,3809,2718 +247271,1573,2520 +304962,3498,3591 +362479,2867,2351 +309678,1788,3676 +297247,775,3481 +421490,3038,2371 +218855,1613,2123 +491795,2848,3561 +345186,3257,4216 +474076,3066,2511 +185708,3881,1601 +205863,3675,1930 +257361,3496,2678 +417078,2367,3443 +221395,987,2149 +240355,1200,2431 +330387,2810,3959 +505034,1687,3091 +110280,2681,2162 +149206,1871,2393 +328412,779,3942 +204779,4690,1924 +37589,3451,3587 +476320,3201,2603 +50524,3986,2126 +464755,3420,2025 +306131,2972,3599 +55552,3524,2358 +91192,2847,3643 +377139,2925,3042 +272076,2383,2956 +98674,1296,4376 +495667,2784,2126 +38204,3433,2419 +227870,5075,2233 +511002,3679,3486 +363463,2349,2411 +83682,2405,2938 +112632,557,2454 +456983,1552,3631 +422567,2991,1951 +206499,1191,1946 +234936,1111,2356 +327989,3662,3921 +156201,1929,3120 +233859,2092,2329 +470609,2284,2352 +413890,4215,3170 +69968,2489,1680 +230469,4083,2273 +446848,2211,3147 +12895,2131,2893 +348070,3774,4312 +171802,2699,1322 +139582,2771,3095 +397594,4160,2405 +411061,3211,3048 +480919,1554,2890 +343017,1510,4195 +123359,834,3769 +321477,309,3844 +344724,1912,4205 +73992,1815,2038 +283152,2674,3193 +426529,3537,2256 +362387,2605,2364 +259909,3048,2720 +312236,1078,3705 +85569,3466,3108 +513434,3089,3752 +48617,2324,2079 +218538,558,2124 +307853,4421,3617 +354238,2231,4471 +114503,2333,2590 +255686,2431,2651 +87902,3750,3324 +293416,1517,3404 +124406,999,3900 +119778,1898,3318 +174234,4603,1365 +15942,2799,2039 +294063,3244,3383 +132052,2864,2079 +60160,3479,2561 +402920,3100,2743 +189111,2299,1669 +206234,4878,1935 +424955,2633,2185 +204666,4427,1924 +254654,3483,2643 +78666,2969,2485 +493722,4263,2661 +353667,1298,4508 +110894,3798,2257 +370778,2256,2721 +129301,2708,4527 +45137,2916,1880 +149473,3547,2401 +376792,3621,3009 +341414,4475,4140 +53267,2327,2268 +293575,1884,3387 +388083,1269,3569 +99179,3902,4392 +491137,2671,3478 +17774,4410,2157 +299763,4434,3496 +125955,1082,4064 +152670,3313,2699 +402715,4444,2715 +448703,2181,3245 +460693,3252,1597 +228967,3726,2256 +213008,4604,2039 +207726,642,1979 +196014,2641,1788 +63567,2479,2802 +24232,2276,2566 +121774,1026,3592 +219954,679,2141 +509909,2756,3435 +201336,2156,1869 +428437,3975,2346 +31826,3710,3140 +337016,3965,4070 +77007,2937,2327 +501166,1605,2829 +405565,3326,2852 +255441,1681,2661 +48810,2864,2066 +180529,4195,1525 +399027,3921,2529 +383517,2888,3386 +22742,2202,2499 +381084,2439,3264 +422434,1809,1319 +42411,1735,1694 +276202,3261,3048 +90838,4425,3596 +430426,2473,2462 +117052,1929,2957 +256820,1683,2679 +315205,1903,3748 +245412,5108,2491 +297992,2894,3471 +225730,1833,2215 +319092,1085,3814 +431631,2402,2507 +474855,1778,2552 +241327,5012,2425 +268587,683,2875 +27437,3820,2789 +313114,3574,3698 +277106,1390,3066 +217396,1318,2095 +165197,2680,1137 +352025,3713,4418 +185431,3025,1617 +473460,2767,2478 +509135,3065,3369 +97444,4507,4155 +256679,1223,2669 +311864,4211,3680 +329924,1085,3963 +80494,3885,2592 +201668,3156,1871 +479827,1920,2844 +423154,2740,2038 +85070,3816,3033 +280814,5007,3151 +217315,944,2099 +141435,3784,3245 +228951,3660,2261 +30127,2379,3043 +142546,1715,3361 +478668,1832,2754 +394679,2785,2202 +342669,4393,4171 +215212,2925,2067 +378633,1891,3132 +458827,1937,3736 +220255,1751,2145 +325791,1043,3902 +479788,1646,2832 +500887,2650,2801 +145210,2799,2022 +293586,1902,3389 +402192,4267,2690 +28517,1836,2937 +406200,3779,2863 +372354,1762,2794 +196010,2634,1793 +274185,1087,3008 +247970,4059,2523 +334170,1604,4024 +97693,2354,4182 +266844,3634,2820 +20634,4202,2350 +341529,1027,4154 +266586,2886,2825 +442177,3284,2905 +23274,2299,2531 +54892,2944,2334 +54579,3763,2300 +96619,1424,4045 +339827,3331,4124 +233511,806,2335 +336943,3650,4062 +125990,1318,4035 +150678,3350,2509 +198372,1344,1836 +357099,2060,4593 +292246,1983,3362 +503084,2864,2927 +493998,3435,2833 +383817,1676,3399 +108688,3449,2052 +304906,3362,3579 +46777,3152,1962 +60518,2868,2593 +399489,3733,2541 +236047,466,2376 +45849,3477,1922 +234931,1099,2346 +42786,4087,1694 +446530,3522,3111 +45803,3324,1913 +484643,3205,3089 +455242,1643,3551 +125678,2446,3992 +327543,2436,3934 +44042,2346,1836 +311040,1676,3692 +65038,2621,2902 +43589,2930,1776 +274358,1411,3000 +37004,3154,3519 +308079,776,3648 +480375,1514,2859 +236217,942,2373 +491837,2916,3569 +47711,2618,2021 +308144,1015,3638 +202727,2246,1890 +379239,2011,3172 +404538,3307,2801 +158186,1582,3299 +497184,3301,2494 +98638,1174,4382 +248180,318,2547 +436669,3166,2672 +195173,4126,1770 +214089,3628,2048 +463157,3481,1910 +425167,3028,2179 +191783,2254,1721 +325306,3747,3899 +299589,3579,3501 +511841,3481,3587 +97726,2618,4183 +245264,4038,2491 +350824,3917,4383 +312082,634,3701 +491472,2200,3564 +357734,1625,4709 +247430,2100,2526 +444457,2715,3024 +3044,3958,1603 +1111,2653,1383 +218534,548,2126 +189297,2687,1683 +468286,1929,2247 +380384,1468,3231 +302898,1333,3558 +228960,3699,2255 +29915,3923,2984 +270312,1555,2917 +416674,2438,3401 +367628,3427,2590 +241686,1119,2457 +143696,3265,1629 +369259,2936,2658 +375743,1884,2964 +397003,3997,2362 +440255,2715,2834 +308934,3311,3640 +418073,4139,3453 +512319,1466,3647 +507217,1788,3253 +297921,2593,3458 +187703,2013,1656 +67529,115,1329 +106096,4648,1781 +306899,1276,3635 +296292,1924,3443 +349714,1351,4374 +478734,1999,2762 +437470,1468,2713 +62424,1814,2712 +169195,2937,1237 +391569,2114,3999 +362897,2366,2383 +16416,2721,2098 +418440,3722,3503 +396616,4676,2329 +395048,4670,2181 +180950,5486,1504 +225383,720,2218 +147405,3740,2217 +201406,2449,1870 +422848,3139,1914 +481482,1620,2923 +205817,3560,1934 +97487,1191,4204 +300223,1726,3525 +468751,4071,2259 +78978,870,2494 +468270,1876,2243 +110786,2592,2222 +125076,1691,3980 +395116,2452,2211 +342415,3241,4164 +23238,2199,2516 +93747,355,3847 +357461,3092,4552 +411829,4174,3082 +439548,2397,2810 +180353,3832,1522 +432119,1862,2524 +9585,2779,2458 +260157,3700,2705 +164187,3525,974 +35896,2519,3425 +86609,2926,3210 +238972,1144,2418 +447782,3714,3176 +8377,2286,2329 +247499,2278,2534 +241768,1400,2447 +308295,1580,3639 +22810,2459,2482 +492122,2363,4240 +285711,2472,3239 +284785,3652,3214 +74771,3394,2092 +437762,2465,2726 +258592,3106,2702 +127434,1298,4223 +171071,3581,1274 +204499,3723,1906 +8949,3422,2380 +115104,3122,2652 +233885,2186,2334 +206821,2133,1952 +102104,2987,1328 +236613,2257,2375 +240888,2885,2428 +422861,3146,1922 +501915,3288,2855 +286961,2149,3265 +24397,2915,2591 +139910,2707,3126 +363247,3610,2390 +308679,2618,3645 +94243,4525,3855 +245421,5135,2493 +243893,4043,2470 +399887,3258,2560 +192739,4532,1734 +55924,2970,2363 +338450,3009,4102 +206350,5594,1939 +507307,2507,3249 +47080,2214,1993 +413658,3229,3178 +75994,3844,2207 +270377,1671,2920 +445578,2088,3087 +490228,3361,3377 +18062,3278,2214 +131450,3396,2003 +331693,2642,3997 +62755,3310,2733 +371051,3575,2730 +331191,774,3994 +353380,3529,4454 +172104,3194,1330 +367150,3657,2559 +431099,2548,2479 +267244,793,2865 +230331,3699,2268 +196575,4262,1787 +11627,2213,2666 +240135,606,2421 +215680,4675,2062 +140875,1887,3229 +493727,4335,2621 +320831,2521,3836 +444677,3566,3010 +22443,2916,2463 +281800,2923,3164 +11693,3218,2678 +444076,3589,2987 +126409,1555,4144 +197944,4356,1820 +100775,3750,657 +986,3255,1163 +285260,1317,3246 +352397,1359,4450 +188661,4318,1663 +331619,2165,3997 +77368,1806,2341 +254464,2995,2632 +256833,1718,2674 +348411,1337,4320 +12323,2927,2738 +82701,3630,2797 +2338,4073,1514 +357356,2873,4577 +119896,3257,3320 +74584,1812,2106 +338029,1536,4093 +501567,3919,2824 +359062,2840,2086 +482443,3308,2958 +247192,1246,2526 +82832,4234,2839 +228831,3148,2247 +232661,2550,2304 +61907,2256,2710 +243921,4150,2472 +182014,4511,1527 +122225,611,3666 +307806,4212,3633 +452728,1328,3467 +392158,3627,1599 +150851,2059,2562 +273412,2604,2979 +280148,1894,3148 +278049,4081,3065 +168691,4080,1208 +73473,2419,2007 +311942,265,3708 +450703,2997,3336 +118534,827,3226 +413430,1805,3195 +280903,164,3176 +271938,2036,2943 +210763,1514,2004 +341727,1501,4172 +55168,1735,2340 +436847,3914,2684 +431460,1358,2487 +242620,4839,2453 +65899,3183,2945 +496130,2886,2354 +242267,3054,2457 +216619,2983,2087 +367891,1947,2601 +134356,3775,2310 +38990,3094,1025 +440928,3051,2840 +123288,423,3749 +382494,3384,3330 +52719,2061,2256 +48055,1745,2042 +108565,2187,2022 +351064,1416,4390 +50623,2214,2160 +292655,3106,3376 +192890,4955,1735 +470593,2220,2350 +479746,3952,2801 +301127,35,3531 +445623,2280,3106 +370318,2590,2703 +264554,701,2812 +289785,2383,3325 +183845,2386,1581 +505450,1243,3139 +139160,2571,3037 +198029,4600,1810 +222462,5006,2159 +109214,3041,2065 +145971,2264,2128 +231894,4992,2292 +9259,3088,2429 +257581,4203,2686 +77055,3443,2321 +37501,3162,3565 +431081,2488,2465 +257369,3513,2672 +405154,3675,2835 +69022,3583,1469 +20733,1915,2353 +438862,2005,2779 +442250,3631,2894 +428929,3542,2382 +327814,3230,3939 +405621,3542,2850 +283503,3897,3191 +24442,3207,2568 +252767,1927,2603 +138515,3434,2965 +489978,2255,3381 +142069,3323,3281 +135460,4111,2453 +62874,1558,2771 +428668,2644,2372 +146914,2983,2217 +486040,1908,3195 +33164,3069,3211 +55298,2617,2344 +138095,3188,2896 +65369,3367,2890 +232843,3109,2314 +151963,3692,2617 +235220,2115,2352 +274896,3364,3004 +188820,4814,1655 +6584,1906,2055 +176824,4696,1420 +26132,2293,2710 +223126,2275,2181 +189593,3368,1670 +466472,3678,2137 +266336,1876,2825 +8957,3440,2356 +305125,4293,3582 +193241,2553,1758 +290281,4117,3313 +96412,3366,4011 +325384,4431,3887 +451321,3040,3370 +74110,2647,2025 +62094,2728,2710 +310417,3783,3672 +56377,2721,2392 +457780,2150,3660 +374712,1965,2902 +219579,3817,2114 +333724,324,4036 +61531,2661,2670 +5669,3245,1890 +65082,2753,2893 +159844,2237,3486 +490310,1949,3414 +175030,3832,1400 +138555,3552,2969 +444621,3294,3006 +173057,2461,1366 +19030,3225,2257 +214339,4610,2054 +436560,2562,2683 +127291,4436,4211 +175094,3939,1382 +19645,4175,2280 +457919,2709,3660 +316063,396,3765 +238201,3015,2394 +304572,2461,3579 +352918,2071,4447 +165502,3322,1106 +151716,2332,2612 +223833,5089,2174 +66334,2955,3005 +154410,3674,2902 +329196,3337,3952 +497393,2149,2512 +413627,3178,3197 +160521,2878,4272 +423834,2857,2085 +473971,2532,2516 +23821,2527,2562 +453612,2488,3474 +502141,2367,2884 +315704,3342,3743 +126694,3632,4131 +313050,3371,3711 +504817,3138,3048 +167921,2936,1195 +64063,2514,2843 +304395,2105,3594 +412082,3212,3085 +124095,2697,3862 +328283,372,3947 +140570,2476,3170 +111521,419,2315 +457734,2005,3653 +369622,2069,2681 +220913,3704,2137 +374884,2902,2902 +335794,2933,4053 +411330,4240,3052 +136555,2017,2639 +426691,2359,2276 +400577,3854,2599 +105610,4829,1737 +423806,2796,2102 +229202,5025,2262 +469168,3399,2263 +304466,2252,3591 +373603,2234,2845 +458127,3594,3659 +30298,3278,3032 +206866,2262,1954 +44903,3743,1854 +21238,2110,2389 +343573,2931,4183 +509296,1591,3407 +154871,1550,2973 +347713,2720,4292 +462457,3114,1854 +166624,2968,1158 +162920,3586,578 +423902,2962,2114 +396429,3932,2346 +223495,3308,2169 +248246,484,2543 +2186,2941,1526 +226014,2751,2215 +3220,3532,1625 +436909,1597,2701 +419318,3117,3580 +369285,3093,2666 +158658,1966,3310 +466060,4221,2116 +439359,1654,2798 +110221,2225,2193 +48031,1678,2048 +181505,3351,1528 +508283,3079,3318 +133673,4226,2251 +60409,2669,2573 +435995,2623,2643 +383170,1349,3383 +17884,2593,2217 +491131,2662,3481 +231897,5000,2288 +119496,171,3359 +36298,2465,3435 +476976,3938,2651 +370208,2044,2698 +462595,3423,1881 +430383,2252,2454 +82323,5011,2741 +199766,1488,1863 +298425,41,3499 +313493,764,3718 +399060,4015,2529 +424584,3094,2134 +361296,2688,2293 +379453,3008,3181 +182212,5332,1539 +24672,2110,2595 +317125,3503,3775 +338917,1127,4126 +6098,3570,1937 +289640,2013,3329 +374443,3401,2887 +456142,2862,3580 +372820,3798,2813 +368368,1570,2644 +196503,4098,1804 +415030,2359,3279 +219415,3351,2115 +266678,3172,2835 +109879,4925,2146 +359831,3045,2176 +397931,3637,2458 +320053,155,3837 +364467,4026,2447 +350956,1208,4396 +77167,4224,2313 +103827,3715,1543 +456669,2522,3615 +448071,2049,3222 +231591,3450,2299 +114060,3437,2544 +25125,2060,2627 +247584,2532,2522 +442722,3079,2934 +38386,2446,2948 +104498,4602,1617 +346336,2286,4267 +48801,2843,2071 +45449,1953,1909 +204047,2228,1906 +362999,2716,2376 +134967,3406,2411 +431290,3539,2477 +90404,728,3582 +200945,5567,1868 +304032,805,3584 +222631,592,2169 +392732,3530,1745 +207569,4739,1948 +77834,718,2410 +498882,3284,2641 +59660,3491,2516 +202533,1559,1901 +97769,2798,4195 +499660,2949,2713 +313635,1192,3717 +229223,5075,2260 +423495,3124,2039 +137748,3291,2782 +15332,3943,1944 +53920,3136,2278 +272337,3455,2931 +448156,2424,3232 +504168,1729,3026 +246078,2203,2511 +169230,2974,1241 +491505,2248,3552 +32307,3822,3159 +220555,2798,2129 +503431,2654,2959 +220968,3843,2137 +181469,3280,1545 +12668,3019,2814 +161137,2598,3248 +173104,2657,1368 +209156,783,1982 +203883,1653,1919 +6819,3533,2048 +204896,5406,1910 +450964,1539,3377 +321205,3638,3825 +150474,2164,2501 +173498,3393,1373 +411508,3015,3066 +215283,3180,2058 +270193,1309,2914 +284804,3707,3235 +335695,2691,4051 +5348,3628,1849 +441442,2478,2870 +166685,3110,1175 +325983,1730,3906 +419829,2774,3785 +49600,2178,2106 +152700,3404,2685 +61567,2740,2650 +302802,962,3554 +100399,2707,1067 +193332,2724,1763 +149893,3586,2456 +445078,2745,3050 +404059,3367,2781 +30619,2309,3071 +107654,3865,1945 +380715,3189,3228 +311706,3513,3687 +301794,2212,3542 +94278,107,3870 +80614,4992,2613 +477628,1954,2707 +348556,1583,4343 +164483,3681,1092 +504507,3675,3007 +149476,3573,2413 +109034,1622,2076 +422733,3081,1812 +410797,4087,3033 +117806,3913,3036 +20484,3097,2351 +218382,4617,2100 +400517,3698,2597 +275402,266,3028 +193375,2807,1750 +169723,3582,1235 +74562,1610,2114 +291149,2442,3354 +62107,2749,2681 +470119,2541,2327 +248809,2258,2541 +503763,1798,2963 +239258,2210,2418 +380222,3458,3213 +63720,2906,2799 +446926,2559,3144 +484806,1566,3132 +57806,2590,2442 +186872,3226,1627 +512129,2758,3626 +64639,2955,2884 +172910,4574,1334 +186802,3079,1624 +200668,4570,1850 +186885,3285,1640 +359423,3204,2007 +372480,2381,2793 +7573,3847,2129 +511653,2780,3561 +367793,3999,2587 +79425,4737,2504 +263290,1092,2778 +426715,2458,2297 +165265,2800,1105 +173846,3954,1345 +247124,1076,2529 +249470,4897,2542 +86091,3332,3171 +483814,1854,3055 +473655,3927,2492 +74909,4977,2110 +418320,3384,3518 +514295,2778,3846 +325493,158,3909 +120128,675,3403 +367889,1935,2603 +173434,3279,1378 +466030,4066,2121 +127123,2984,4160 +362156,3506,2326 +312792,2659,3703 +376653,3212,2978 +99119,3331,4366 +336251,4443,4055 +470569,2117,2339 +122506,2762,3669 +352278,1211,4442 +380785,3335,3240 +342055,2448,4172 +468720,3872,2255 +224489,2221,2200 +204115,2532,1920 +341355,4361,4146 +169616,3471,1224 +389714,3554,3632 +113944,1880,2531 +429165,2352,2402 +71929,4316,1842 +370069,1557,2713 +144110,3155,1894 +322125,2371,3847 +437300,3206,2698 +326148,2318,3901 +299181,2417,3490 +32009,2092,3158 +82410,1232,2798 +60654,3262,2595 +286478,448,3283 +102092,2952,1347 +373441,3939,2818 +123134,3601,3742 +68120,1899,1388 +378994,3237,3137 +446509,3360,3131 +463061,3246,1935 +513410,3036,3764 +31176,2618,3096 +97866,3225,4207 +98964,2103,4376 +354548,2785,4492 +477789,2533,2700 +318208,2841,3791 +181408,3134,1532 +407025,3164,2896 +163547,3788,738 +220336,2097,2144 +23314,2493,2521 +77367,1802,2359 +128862,3604,4468 +484206,1456,3098 +173912,4053,1348 +440507,1438,2849 +60327,2113,2601 +424877,2398,2162 +511590,2599,3583 +292222,1919,3365 +96475,3887,3995 +172030,3105,1307 +61666,2973,2648 +140657,3270,3184 +173489,3376,1358 +474695,3630,2528 +220540,2767,2144 +302655,698,3567 +491175,2809,3471 +281409,1727,3159 +115506,1995,2724 +25196,2235,2646 +131480,3482,2028 +301152,119,3532 +341550,1074,4161 +247507,2291,2534 +368665,2991,2637 +205030,1033,1927 +465256,3208,2088 +328969,2733,3947 +187344,4469,1627 +192635,4225,1721 +66937,3851,1023 +16305,4212,2063 +12891,2123,2888 +360428,3123,2230 +47747,2755,2016 +24081,4105,2557 +102925,4576,1360 +373660,2480,2841 +475255,3547,2567 +503019,2657,2934 +127499,1579,4244 +487313,2771,3243 +161532,1540,2014 +570,3918,3111 +19554,3522,2286 +238456,3872,2397 +114484,2080,2582 +212000,1127,2027 +68889,2827,1536 +283796,890,3219 +317005,3245,3775 +308296,1588,3651 +7531,3733,2159 +73512,2710,1994 +395868,3596,2267 +205881,3718,1925 +348137,3937,4298 +379896,2114,3213 +502871,1512,2926 +74436,804,2074 +397880,3532,2476 +101835,4109,1229 +209113,675,1992 +121040,4067,3458 +111843,2425,2349 +151656,1962,2627 +192611,4182,1737 +306924,1383,3635 +196298,3351,1799 +425582,2661,2204 +181582,3595,1545 +25042,4094,2613 +95334,3793,3935 +252499,1072,2615 +167856,2866,1193 +156282,2547,3091 +360470,3181,2189 +494929,3398,3355 +112160,1014,2399 +165746,3639,1138 +413786,3780,3192 +41928,1907,1676 +303768,4225,3560 +225969,2572,2208 +419975,3135,3603 +467415,2850,2199 +291198,2531,3351 +249637,656,2566 +65744,2850,2941 +370380,2921,2712 +444817,1779,3041 +265962,832,2826 +367792,3995,2592 +497954,2848,2559 +61347,2168,2658 +26826,3132,2744 +339351,2143,4118 +22987,3175,2487 +126076,2024,4076 +208743,3817,1974 +300394,2109,3512 +168463,3652,1186 +205192,1454,1941 +375348,2284,2934 +192538,4051,1721 +242976,1052,2478 +471883,3031,2403 +74807,3684,2077 +250081,2021,2573 +122274,993,3638 +114850,1020,2649 +507767,2642,3297 +388785,1682,3590 +290644,1029,3355 +424076,3194,2111 +224375,1808,2201 +38390,2511,3028 +273544,3340,2976 +503895,2753,2968 +205445,2303,1933 +313301,271,3735 +194313,1538,1781 +96112,1025,4029 +115840,1005,2762 +41286,4130,1497 +40922,2334,1524 +313710,1529,3725 +169185,2926,1237 +240544,1857,2419 +385774,3141,3473 +40105,3327,1341 +482834,2529,2998 +93887,921,3834 +449881,1970,3325 +369203,2649,2655 +467746,2059,2236 +59539,3149,2533 +399247,2653,2548 +481074,2202,2918 +233100,4004,2318 +193203,2481,1762 +415290,3137,3300 +20856,2540,2358 +285557,1992,3256 +47277,2926,2003 +381720,2620,3303 +145212,2806,2052 +377723,3005,3072 +71892,3844,1833 +187166,4069,1639 +47148,2560,2006 +391560,2107,3912 +203978,1946,1908 +205255,1635,1938 +319141,1258,3809 +356733,1712,4609 +510732,2475,3511 +73868,761,2058 +307414,2765,3626 +10104,1399,2543 +150788,4105,2517 +320257,641,3825 +172302,3460,1307 +407467,2973,2917 +494145,3270,2883 +422248,3575,2772 +84335,3069,3007 +414558,2559,3243 +54566,3632,2310 +183295,4508,1558 +455618,3254,3559 +77900,1295,2426 +63245,3224,2774 +419125,2606,3574 +428651,2590,2371 +269437,3063,2884 +195947,2474,1794 +283920,1266,3220 +485816,3647,3165 +328596,1362,3950 +355610,2436,4548 +118948,72,3301 +51955,3514,2214 +319096,1090,3804 +508734,3088,3351 +310707,613,3682 +469244,3763,2278 +380226,3462,3225 +432386,3157,2522 +421304,2734,2262 +208444,2865,1977 +152724,3540,2729 +406336,1800,2883 +65141,2883,2906 +451582,1551,3411 +436242,3933,2648 +259472,1668,2723 +350477,2938,4371 +47398,3407,1991 +204075,2305,1912 +384108,2991,3411 +140116,1604,3140 +296888,3680,3451 +23432,2939,2534 +461795,2939,1835 +243181,1837,2472 +499074,2138,2674 +377689,2870,3077 +491350,3438,3463 +76086,5158,2212 +467537,3619,2206 +149000,2954,2378 +354566,2819,4491 +418391,3635,3526 +410194,3649,3016 +208320,2435,1967 +273553,3359,2981 +213298,1157,2049 +122709,280,3716 +451081,1891,3383 +484580,2846,3106 +342643,4353,4154 +466676,2205,2179 +130216,2942,2492 +270256,1393,2908 +441861,1791,2888 +425791,3132,2195 +289484,1604,3328 +126146,2803,4049 +129341,2908,4497 +503856,2367,2991 +222028,3002,2163 +368453,1977,2635 +278827,2093,3098 +305467,992,3615 +414026,2530,3226 +387823,2492,3549 +432203,2203,2529 +223579,3559,2169 +272976,1333,2993 +171557,4430,1271 +161683,3574,2212 +48355,2965,2054 +66153,2398,3003 +326913,421,3921 +380986,1805,3274 +95375,4577,3918 +245700,1042,2513 +476068,2122,2601 +51348,3027,2178 +38906,3042,1142 +298287,3826,3482 +255449,1709,2651 +384913,1744,3448 +44416,1603,1852 +398602,4168,2480 +171340,3897,1289 +402841,2824,2732 +297940,2680,3468 +30784,3131,3047 +125703,2740,4012 +261745,4980,2735 +38077,2929,3602 +242307,3183,2458 +57403,2893,2440 +235936,5065,2350 +65957,2167,3011 +265646,4053,2795 +421751,1865,2593 +246174,2432,2518 +129178,2060,4558 +485886,1449,3199 +514057,2129,3913 +412389,1785,3130 +156632,1887,3132 +498827,2984,2648 +435433,3080,2629 +219413,3339,2126 +446791,1947,3146 +513415,3053,3747 +363779,3595,2407 +404617,3677,2796 +223008,1828,2178 +74914,4993,2075 +226878,1210,2244 +29355,3524,2939 +132770,3005,2158 +280914,185,3171 +88737,1579,3423 +365851,3188,2505 +274615,2121,3009 +344702,1886,4215 +422741,3086,1924 +479231,1786,2797 +324727,1960,3890 +259979,3276,2706 +53913,3116,2282 +130259,3969,2556 +243745,3527,2475 +252304,472,2612 +398991,3756,2531 +504612,1743,3068 +346872,1067,4281 +184217,3455,1585 +218994,2135,2120 +302534,346,3557 +191003,3442,1691 +316860,2788,3761 +506579,3151,3180 +132347,4251,2076 +9011,1380,2444 +442997,1788,2953 +453930,1335,3507 +393892,4151,1954 +267704,1714,2860 +207355,3818,1944 +464658,3125,2051 +324354,845,3897 +115808,865,2767 +190615,2622,1698 +382265,2477,3341 +296349,2023,3449 +148494,2521,2342 +170169,4388,1238 +410581,3308,3035 +131137,3321,1931 +491435,2153,3518 +311841,4159,3685 +272991,1350,2964 +489248,1675,3356 +2869,3103,1589 +198023,4589,1821 +511465,1835,3588 +80042,4910,2553 +34067,2648,3274 +262858,3928,2759 +254691,3577,2645 +290129,3615,3326 +135708,3580,2476 +48560,2099,2060 +431989,3913,2488 +212549,2881,2025 +231203,2276,2293 +128140,2294,4341 +484091,3208,3081 +92254,2113,3730 +102615,3042,1359 +69539,3326,1595 +333128,2849,4014 +475972,1811,2604 +17635,3629,2163 +355420,2132,4539 +285213,1053,3239 +111809,2148,2351 +184015,2871,1588 +230715,499,2284 +250529,3510,2575 +251798,3331,2602 +11813,1439,2695 +171846,2833,1318 +428470,1513,2367 +66467,2538,956 +340800,2570,4151 +36235,2191,3443 +134936,2992,2385 +408562,3366,2950 +449574,3492,3271 +96662,1914,4048 +237483,719,2389 +179849,2597,1513 +240304,1036,2435 +201674,3172,1870 +410115,3381,3016 +173035,2426,1345 +427522,2958,2303 +266179,1433,2815 +97411,4319,4118 +73590,3376,1973 +263353,1224,2782 +62963,1733,2769 +105146,1629,1724 +401087,3772,2623 +456249,3436,3594 +150738,3808,2530 +95460,353,3956 +326266,2726,3915 +458339,2118,3709 +185362,2851,1606 +496247,3594,2204 +69344,2278,1610 +320600,1788,3840 +228687,2711,2254 +466131,2301,2136 +367610,3330,2576 +456825,3267,3618 +154415,3694,2874 +165363,3165,1117 +450942,1480,3381 +36788,2523,3506 +434669,2285,2601 +251670,2794,2595 +234732,549,2344 +480731,3173,2867 +147876,3859,2258 +320656,1914,3836 +178183,4837,1474 +74550,1550,2088 +503569,3281,2955 +175627,2030,1428 +98671,1285,4338 +503783,2034,2967 +324445,1094,3882 +241022,3311,2435 +106808,1514,1885 +182177,4930,1538 +31579,2261,3127 +115273,631,2714 +485102,2667,3116 +503693,3850,2952 +387937,3015,3541 +221439,1096,2148 +181412,3164,1534 +168236,3362,1212 +140967,2710,3210 +412317,4077,3092 +296048,1254,3440 +139860,2191,3115 +91982,19,3729 +190612,2615,1692 +180114,3347,1510 +276075,2288,3055 +243287,2179,2458 +471436,3612,2385 +347244,1594,4277 +324784,2083,3893 +46640,2626,1965 +127967,1373,4322 +77645,3693,2389 +477420,3324,2665 +79593,1068,2554 +104445,4086,1625 +338362,2771,4103 +484670,3340,3104 +22425,2848,2451 +23071,3853,2491 +370848,2590,2727 +240766,2542,2427 +501339,2669,2829 +128778,3024,4446 +431644,2464,2505 +438521,3359,2743 +500809,2301,2789 +402541,3432,2716 +231199,2230,2302 +439041,2868,2780 +143691,3258,1738 +14905,4029,1891 +508901,1827,3359 +336560,1962,4067 +176205,3484,1425 +157455,1898,3207 +118094,1502,3140 +99360,1473,4527 +475815,3562,2580 +62565,2524,2746 +104807,2969,1677 +188375,3574,1648 +212315,2064,2021 +129527,1535,4574 +500421,2510,2763 +445803,3131,3076 +325997,1768,3917 +422040,1677,2691 +206761,1921,1949 +417785,3386,3488 +64050,2481,2824 +78431,921,2469 +280613,3578,3126 +325156,3338,3887 +367128,3580,2572 +282353,276,3190 +231243,2366,2287 +308366,1807,3648 +220621,2961,2131 +469140,3246,2265 +490912,2149,3505 +435476,3262,2633 +395970,3927,2299 +72107,701,1903 +507700,2012,3282 +153282,2102,2806 +43653,3051,1781 +84828,2480,3052 +306875,1179,3634 +162534,3471,685 +507,2232,3117 +70591,2952,1721 +395166,2536,2225 +405975,2797,2860 +243331,2266,2461 +89770,420,3517 +186774,2981,1638 +303450,3008,3574 +255091,527,2662 +358539,1788,4802 +33418,1982,3265 +500837,2496,2794 +429679,1720,2423 +320773,2348,3832 +216803,3580,2082 +131173,3398,1977 +101987,2531,1327 +412130,3344,3086 +313456,675,3722 +367794,4006,2594 +47153,2571,1996 +58706,1335,2496 +263364,1259,2777 +205035,1051,1938 +411558,3206,3080 +494619,2760,3223 +351603,2141,4402 +308409,1904,3646 +54366,2851,2310 +454889,2680,3534 +485540,2253,3162 +130367,2352,2777 +82858,4874,2816 +350341,2405,4358 +106291,1697,1827 +94734,3536,3906 +346639,3647,4269 +72731,1350,1962 +329968,1278,3970 +117421,920,3051 +387135,1649,3536 +94266,58,3903 +505191,2901,3078 +351237,1593,4400 +468262,4353,2219 +423599,3255,2036 +241892,2026,2443 +47196,2680,1984 +208091,1603,1972 +232973,3603,2306 +206000,4057,1941 +91943,4146,3680 +437678,2163,2713 +348006,3550,4297 +50452,3679,2133 +44441,2061,1874 +100499,3143,1016 +147282,2815,2225 +502702,2894,2906 +370488,3478,2710 +272363,3496,2942 +492991,3113,2302 +405541,3216,2854 +379588,3319,3187 +465612,2508,2096 +268525,4221,2865 +119635,782,3366 +102582,2872,1366 +135192,2210,2420 +120240,1618,3391 +247173,1185,2535 +387834,2578,3540 +384816,1295,3449 +384740,3440,3417 +325315,3768,3886 +281522,1930,3170 +402077,3494,2667 +12512,2041,2800 +345093,3127,4221 +479868,2009,2854 +142228,1742,3313 +301281,617,3553 +438718,1532,2787 +56993,3073,2411 +401176,4116,2610 +500889,2654,2780 +99742,3600,4455 +191277,4171,1701 +437599,1865,2736 +378657,2002,3149 +440519,1465,2845 +258461,2612,2689 +54362,2838,2306 +416897,3480,3393 +62345,1470,2730 +48388,3272,2047 +1220,2951,1382 +295505,3714,3417 +301322,698,3548 +55845,2660,2374 +1672,3378,1426 +364354,3679,2447 +133210,3795,2216 +273298,2151,2971 +393349,3891,1851 +334960,4609,4029 +332452,533,4006 +488132,1581,3296 +312144,780,3699 +156550,1621,3142 +37532,3274,3592 +418905,3462,3545 +142904,2208,3399 +241760,1382,2447 +191278,4172,1689 +180233,3608,1512 +163231,3658,530 +178847,3530,1491 +439747,3481,2811 +113438,2407,2505 +28728,2703,2900 +462823,2708,1929 +352450,1420,4452 +286000,3354,3261 +310723,642,3679 +322341,3057,3840 +278204,277,3117 +170485,2847,1287 +102307,3809,1322 +332742,1461,4004 +11119,1364,2662 +370100,1694,2694 +383866,1915,3412 +455898,1822,3590 +234404,3874,2327 +286334,126,3276 +156237,2196,3122 +5768,3870,1935 +80167,1198,2586 +181234,2705,1533 +162317,2814,313 +223348,2862,2184 +248990,2825,2551 +44600,2845,1858 +115646,3567,2753 +433607,2999,2569 +395064,4711,2202 +210723,1341,2004 +403533,3367,2751 +36989,3083,3534 +274210,1146,2995 +235560,3289,2354 +73801,5494,2002 +484824,1598,3117 +247849,3536,2527 +470292,3479,2324 +135700,3569,2472 +353491,3663,4463 +494108,3188,2857 +361072,3363,2247 +438684,1473,2773 +11029,3172,2614 +113441,2469,2480 +387236,2201,3524 +512533,2637,3650 +163763,2703,1076 +359894,3114,2142 +113873,1477,2563 +16279,4088,2060 +39981,2858,1311 +338838,4591,4095 +72853,2265,1972 +141334,3009,3242 +470664,2523,2360 +149616,1921,2439 +248391,958,2544 +372091,3109,2792 +145496,4172,2060 +20008,3051,2316 +11642,2583,2676 +68913,2906,1533 +354655,2939,4497 +156274,2514,3113 +76438,2733,2277 +470404,4012,2325 +38354,3439,2795 +404967,2969,2819 +186539,2460,1634 +391468,1959,3823 +425380,3507,2161 +98196,1576,4301 +214448,529,2069 +166818,3303,1171 +486729,2690,3222 +433722,3588,2562 +156645,1999,3137 +76891,2027,2317 +208178,1958,1964 +335090,464,4043 +20161,4240,2320 +391967,2968,3827 +505093,1877,3089 +200910,5484,1857 +227300,2514,2241 +340679,2154,4145 +262688,3451,2763 +511828,3368,3595 +111146,1221,2269 +209912,3226,1993 +66155,2401,2991 +15670,3484,2020 +109583,1709,2113 +454609,1546,3541 +263101,4942,2765 +5567,2465,1919 +321037,3145,3832 +371812,1880,2780 +276870,943,3062 +196377,3542,1793 +342607,4295,4177 +279089,3237,3098 +194027,4438,1743 +360785,2762,2254 +279028,2619,3109 +459630,2424,3801 +259312,1271,2723 +129796,1795,4634 +485912,1532,3197 +370157,1910,2697 +150969,2906,2540 +110305,2897,2172 +395766,2694,2283 +439200,3704,2782 +447529,2578,3198 +43835,3618,1775 +283532,4009,3204 +343592,2956,4188 +465831,3316,2099 +286995,2208,3271 +139912,2711,3134 +354804,3342,4504 +2253,3573,1517 +508816,3553,3357 +47761,2790,2012 +351498,1969,4403 +107052,3506,1908 +452558,3124,3438 +272946,1278,2974 +8910,3144,2359 +159655,3338,3434 +343220,1919,4202 +17075,3356,2119 +313721,1551,3717 +53021,3548,2246 +342102,2574,4155 +322227,2689,3846 +28436,3869,2868 +190849,3131,1696 +461438,3258,1754 +227806,4908,2230 +416716,2877,3409 +383272,1586,3373 +433019,3259,2531 +103046,2440,1466 +406217,3827,2872 +466841,2934,2173 +289817,2462,3311 +6313,2521,1982 +83425,4172,2880 +224464,2111,2194 +274141,925,2997 +391992,3154,1601 +170060,4170,1255 +279418,3933,3125 +206152,4638,1937 +303908,504,3582 +60492,2816,2587 +306156,3020,3599 +203584,5478,1891 +158331,2513,3282 +24758,2365,2598 +369821,3130,2675 +33003,2163,3232 +447927,1590,3220 +45136,2913,1902 +366679,4090,2538 +42944,2243,1759 +450215,3605,3301 +129685,1709,4631 +64373,3695,2813 +259745,2402,2707 +74188,3332,2039 +194717,2882,1769 +184696,4635,1578 +236646,2332,2364 +187829,2299,1649 +244867,2568,2491 +419007,3669,3542 +383868,1924,3400 +71080,2179,1784 +170927,3401,1265 +342630,4333,4171 +84448,3782,2976 +484561,2751,3104 +495958,3490,2102 +264830,1480,2793 +242475,3732,2439 +332123,3724,3991 +212955,4465,2022 +488076,1446,3297 +19904,2574,2311 +355901,2952,4515 +57556,3368,2432 +172410,3632,1336 +59565,3226,2524 +351988,3622,4417 +285353,1491,3257 +78656,2925,2445 +397421,3687,2434 +103912,4304,1521 +102144,3160,1337 +45056,2310,1895 +216126,1542,2084 +116790,4875,2836 +456515,1853,3620 +113682,445,2544 +217796,2550,2107 +417863,3550,3454 +187195,4130,1640 +87733,2867,3340 +23591,4210,2530 +183599,5452,1563 +107011,3143,1893 +403474,3086,2773 +127438,1323,4225 +332012,3466,3987 +361932,2859,2319 +317993,2232,3781 +372712,3473,2814 +498407,2943,2614 +471564,1791,2388 +104138,2320,1593 +92591,215,3741 +29384,3688,2951 +42229,3493,1672 +317957,2168,3780 +350715,3656,4364 +154825,3701,2936 +226581,5167,2220 +85417,2588,3079 +366903,2726,2549 +233201,4894,2312 +436739,3493,2680 +334987,4673,4025 +41087,3489,1546 +462195,3728,1842 +174833,3418,1404 +140614,3120,3193 +48348,2947,2040 +259088,395,2720 +105812,2287,1806 +383968,2316,3398 +54667,1745,2333 +231743,3928,2297 +116078,2964,2818 +285764,2564,3258 +202932,2856,1900 +25904,3166,2686 +345054,3001,4222 +378952,3162,3138 +391885,2517,3837 +420842,2117,1806 +497695,4047,2535 +430748,3718,2453 +39960,2821,1311 +283588,111,3229 +379331,2470,3163 +496461,2207,2412 +22620,4202,2463 +174013,4169,1360 +105073,4785,1662 +122363,1506,3680 +486630,2184,3226 +341060,3190,4134 +215181,2861,2064 +335903,3234,4053 +363125,3259,2368 +333451,3736,4016 +244698,2183,2495 +324596,1663,3898 +145640,2828,2088 +206221,4812,1943 +468444,2453,2253 +210914,2116,2019 +473274,2049,2486 +61330,1985,2655 +174279,4709,1358 +428838,3186,2384 +379060,3424,3123 +401784,2263,2690 +425618,2737,2221 +16893,2612,2135 +127512,1626,4245 +123353,813,3777 +223837,5097,2172 +456905,1022,3632 +511214,2673,3544 +55392,2964,2347 +378122,2169,3094 +171297,3855,1288 +466666,2172,2184 +472235,2192,2418 +244386,1102,2493 +183159,4194,1573 +31157,2537,3080 +165828,3702,1142 +336626,2279,4062 +172768,4310,1305 +261928,1061,2758 +342664,4382,4161 +186441,2260,1639 +28578,2032,2917 +159235,3160,3363 +453528,2132,3490 +168587,3815,1219 +371762,1618,2774 +367605,3314,2575 +429158,2332,2407 +205154,1349,1941 +288219,1830,3300 +378278,2839,3089 +218517,491,2125 +441110,1437,2868 +144805,2818,1972 +324061,4471,3868 +364965,3765,2457 +150992,3021,2539 +398043,4065,2477 +440435,3686,2827 +504769,2927,3067 +447687,3302,3184 +145828,3832,2077 +145656,2897,2095 +68232,2587,1420 +33438,2066,3246 +406438,2444,2891 +154279,3036,2884 +234214,3216,2322 +259418,1500,2711 +259648,2119,2710 +492465,2882,4470 +20487,3106,2338 +129818,1809,4751 +221458,1140,2167 +212702,3406,2031 +235637,3569,2352 +57993,3163,2463 +49424,3533,2084 +45690,2983,1915 +362353,2453,2350 +426522,3518,2250 +140758,3817,3180 +390995,1975,3756 +282442,944,3193 +304153,1085,3587 +119605,610,3312 +398366,3455,2495 +150047,1981,2491 +32887,1812,3233 +128296,3429,4382 +44891,3668,1863 +465378,3713,2059 +430122,3578,2437 +388703,1429,3601 +68268,2755,1394 +183682,2047,1587 +383495,2795,3387 +453290,1217,3482 +231254,2394,2292 +192981,1791,1751 +140601,2917,3185 +407690,3774,2921 +281892,3204,3167 +454069,1794,3494 +162348,3324,897 +421378,3781,2111 +447743,3446,3192 +137174,3911,2690 +63846,3672,2777 +322058,2044,3845 +84976,3423,3037 +151846,3051,2639 +356453,1468,4579 +97551,1441,4182 +333289,3353,4009 +408863,2109,2981 +409568,3311,3001 +27582,2273,2843 +316615,2096,3768 +178442,2475,1494 +62114,2759,2695 +508406,3649,3325 +249546,355,2566 +449440,2831,3272 +172895,4532,1325 +209484,1768,1986 +63153,2681,2760 +60550,2919,2574 +65808,3005,2967 +245438,5169,2488 +138583,3581,2939 +185433,3033,1615 +73015,3629,1942 +215325,3292,2073 +153226,4038,2736 +344334,1310,4223 +399228,2609,2532 +328675,1615,3953 +168746,4226,1194 +139865,2282,3112 +2147,2645,1538 +276230,3321,3051 +18646,4001,2226 +38546,2159,3286 +344835,2139,4215 +279779,1220,3127 +118081,1434,3128 +8811,2413,2379 +255013,357,2648 +350253,2086,4381 +406191,3755,2863 +83604,1810,2913 +476957,3820,2642 +226704,675,2244 +36285,2442,3454 +304122,987,3588 +264464,4914,2776 +425325,3398,2176 +194233,5489,1752 +187801,2254,1644 +333763,406,4022 +506175,3306,3177 +154113,2074,2893 +461741,2813,1823 +305725,1948,3610 +260843,1816,2727 +159115,2383,3375 +303193,2241,3565 +33645,3072,3252 +482556,1529,3003 +63830,3525,2783 +141366,3290,3246 +313860,1895,3725 +28404,3608,2878 +503552,3150,2940 +474344,1888,2542 +406102,3454,2860 +50582,1901,2167 +135231,2633,2426 +74711,2864,2094 +466233,2699,2150 +18684,4239,2230 +12525,2068,2777 +371513,3048,2758 +314986,1165,3737 +292545,2655,3371 +209393,1441,1997 +98214,1610,4300 +92773,1524,3737 +142539,1705,3350 +77591,3331,2381 +39354,2605,1261 +155628,3717,3017 +500826,2409,2779 +209600,2192,1988 +260366,4879,2711 +368064,2822,2614 +408374,2222,2952 +324027,4391,3861 +375140,3830,2894 +80956,2842,2684 +130865,3358,1859 +391134,2087,3727 +83590,1759,2901 +393089,3228,1862 +17240,4250,2129 +475960,1784,2609 +95502,631,3984 +256237,4755,2657 +247067,942,2519 +186811,3092,1620 +327154,1125,3921 +74690,2672,2088 +348483,1455,4328 +108962,1017,2079 +83237,3293,2895 +176139,3360,1434 +512019,2425,3606 +389203,1398,3607 +224628,2613,2195 +103343,3922,1448 +381212,2967,3283 +471234,2533,2386 +297759,2153,3474 +434271,3310,2581 +493370,4005,2439 +129782,1785,4687 +257820,609,2687 +474867,1801,2556 +307659,3480,3622 +214511,677,2073 +511161,2528,3531 +390476,2078,3708 +377260,3237,3027 +163409,3716,632 +301884,2431,3532 +337704,3467,4085 +474900,1889,2570 +219863,461,2145 +25517,4005,2630 +275424,318,3031 +365260,2971,2493 +74733,3091,2115 +385892,1213,3485 +73051,3870,1970 +253207,3370,2622 +202635,1888,1892 +476808,2853,2634 +120081,395,3382 +488349,2279,3286 +381702,2514,3307 +452905,1898,3462 +250304,2810,2579 +10377,3499,2545 +292178,1823,3363 +54743,2109,2331 +61041,2816,2617 +322885,553,3871 +98949,2058,4398 +237685,1362,2392 +331889,3109,3992 +218395,4947,2106 +316968,3153,3759 +376690,3289,2989 +466298,2930,2140 +460343,2217,3856 +237424,514,2398 +319184,1372,3808 +500035,2738,2729 +196548,4209,1800 +409968,2545,3023 +60125,3381,2570 +247359,1820,2536 +285202,977,3256 +128974,1322,4514 +414863,3855,3258 +352685,1752,4434 +374637,1769,2901 +466101,2187,2142 +92288,2417,3701 +164040,3418,1088 +476461,1674,2634 +408638,3600,2959 +305520,1129,3611 +249658,742,2578 +342516,3541,4170 +137838,3527,2812 +123554,2607,3771 +21965,2975,2435 +4063,4152,1687 +336895,3475,4068 +113151,520,2479 +196568,4246,1795 +507840,2978,3283 +390932,1943,3771 +318632,4434,3783 +56877,2702,2409 +114316,962,2584 +492958,2247,2290 +221893,2677,2164 +506878,2375,3239 +426030,3629,2200 +233355,333,2333 +352304,1243,4465 +503322,1759,2952 +410521,3073,3034 +440990,3402,2861 +311418,2625,3682 +330962,171,3979 +1431,3665,1323 +64389,1910,2866 +410730,3775,3031 +245475,339,2503 +104023,5339,1542 +76040,4222,2220 +13020,2431,2826 +7774,2896,2214 +90487,1423,3587 +85132,4083,3041 +407507,3177,2928 +469808,3779,2307 +8780,2058,2372 +441170,1555,2872 +488446,2872,3298 +286659,1460,3282 +312408,1641,3705 +118542,891,3236 +506423,2305,3201 +247431,2114,2531 +506565,2944,3208 +205492,2535,1933 +502174,2490,2871 +327945,3556,3927 +330234,2147,3968 +209125,709,1990 +306187,3187,3614 +207670,5510,1959 +217360,1128,2095 +255758,2827,2648 +124182,3371,3814 +64956,2383,2907 +74111,2651,2046 +376711,3333,2980 +329574,11,3965 +274325,1367,3016 +205033,1041,1940 +331305,1257,3991 +60226,3751,2567 +433649,3241,2559 +81432,1895,2702 +133472,3272,2226 +477052,1769,2654 +96771,2985,4049 +70008,2727,1672 +353005,2279,4457 +485517,2101,3163 +424361,2655,2153 +185878,4225,1599 +326292,2836,3918 +439942,1555,2827 +119370,3527,3278 +325842,1251,3903 +189425,2937,1666 +425087,2872,2179 +133535,3498,2236 +284078,1536,3222 +156373,3137,3117 +407669,3716,2919 +76776,1099,2318 +5525,1884,1919 +183369,4672,1557 +28840,3317,2902 +230045,2723,2265 +215915,910,2085 +1908,3300,1457 +306266,3421,3603 +206909,2433,1957 +463833,3899,1971 +103381,4153,1502 +252994,2716,2606 +149203,1855,2414 +229839,2040,2274 +184936,5476,1578 +429622,3866,2389 +406011,2973,2873 +424142,3279,2077 +83607,1813,2934 +477721,2284,2681 +425422,3605,2188 +192104,2956,1721 +395496,4399,2228 +90505,1782,3587 +396524,4094,2348 +255216,972,2652 +161197,4221,3260 +457427,3134,3628 +169666,3519,1253 +13762,3681,1661 +66265,2769,2994 +298681,1030,3497 +65019,2569,2910 +293866,2619,3390 +481720,2555,2922 +232376,1477,2314 +387626,1482,3550 +205830,3585,1941 +353183,2801,4447 +93201,555,3825 +354375,2440,4492 +471730,2411,2388 +177253,2932,1447 +366667,4055,2532 +253227,3410,2607 +504742,2601,3047 +429179,2403,2392 +443530,1343,2983 +468864,1977,2274 +280033,1661,3140 +218636,844,2110 +312042,546,3704 +99277,1314,4455 +451085,1915,3385 +217879,2802,2110 +127395,1179,4310 +456749,2843,3603 +394907,4392,2132 +198971,3158,1831 +500033,2732,2728 +478941,2811,2764 +402161,4141,2668 +216232,1838,2075 +309590,1536,3670 +404569,3454,2806 +357780,1636,4846 +494222,1950,3005 +415130,2823,3303 +514277,2721,3822 +339677,3006,4117 +269788,3972,2875 +74189,3332,2024 +153817,2834,2870 +244947,2804,2490 +335528,1896,4055 +493854,3775,2678 +389570,2827,3618 +48733,2623,2073 +163056,3612,626 +226104,3027,2214 +362418,2684,2359 +298796,1432,3484 +274618,2123,3026 +81797,791,2791 +93725,189,3857 +412554,3097,3111 +375578,3417,2933 +233153,4382,2308 +511711,3060,3583 +198330,1225,1843 +291237,2611,3355 +2141,2586,1525 +280929,221,3173 +496892,2033,2485 +482793,2375,3003 +163684,2559,1062 +513368,2829,3734 +384171,3398,3402 +141490,1527,3263 +436938,1687,2707 +393066,3171,1870 +327198,1314,3935 +135462,4116,2439 +856,3071,1084 +463193,3600,1890 +282535,1216,3186 +420916,3854,1803 +432763,2028,2534 +487800,2338,3256 +223341,2842,2174 +445909,3526,3103 +204349,3290,1923 +132859,3696,2160 +206570,1384,1960 +241145,3825,2438 +112408,2812,2373 +454027,1658,3504 +68894,2841,1536 +125426,529,4000 +196892,5458,1798 +275942,2039,3037 +104389,3744,1598 +49701,2442,2118 +478752,2067,2777 +62324,1392,2717 +473620,3712,2482 +248500,1269,2541 +217394,1304,2097 +155058,2549,2986 +484,3901,2911 +405394,2369,2845 +472153,1917,2437 +438422,2851,2748 +66052,2262,3116 +192176,3163,1721 +311963,354,3701 +272367,3507,2961 +129879,1905,4582 +226213,3404,2207 +305626,1636,3606 +188809,4790,1661 +191838,2397,1720 +40377,2321,1415 +247400,1972,2537 +18942,2810,2249 +320334,849,3824 +190299,1823,1705 +447018,2954,3144 +267728,1775,2857 +273194,1777,2978 +49960,3584,2120 +159529,2527,3388 +114995,1884,2645 +383916,2157,3394 +18235,4327,2209 +434510,1694,2601 +300987,3863,3529 +399338,3004,2543 +505648,2378,3145 +100161,1830,4866 +43502,2330,1798 +451844,2549,3411 +31656,2710,3121 +267737,1827,2852 +448880,3101,3239 +289074,309,3332 +261957,1123,2763 +365797,3000,2512 +262906,4021,2757 +7522,3608,2156 +431239,3382,2465 +455783,1482,3592 +124099,2716,3850 +272349,3481,2940 +324980,2851,3880 +389182,3640,3606 +105527,4227,1736 +175815,2833,1445 +435171,1853,2636 +378510,3479,3115 +282687,1554,3185 +312531,1945,3701 +62701,3165,2733 +274718,2324,3011 +23176,2067,2515 +304626,2629,3582 +111933,3612,2332 +233017,3722,2320 +312332,1475,3710 +304418,2148,3594 +504568,3859,3010 +463737,3675,1948 +500589,3148,2763 +314120,2647,3721 +133693,4246,2236 +471598,1892,2414 +1968,3582,1500 +234091,2740,2335 +378154,2317,3087 +498773,2859,2634 +478207,2022,2730 +89241,943,3506 +79415,4193,2498 +72540,4510,1923 +380643,2954,3240 +450988,1625,3376 +500984,2950,2779 +378469,3348,3120 +226908,1283,2227 +441978,2211,2900 +245053,3272,2482 +398229,2706,2499 +451773,2231,3413 +209481,1756,1987 +165425,3262,1131 +323952,3803,3864 +461500,3321,1703 +82236,4068,2754 +135633,3031,2491 +449852,1860,3305 +372502,2470,2806 +63150,2676,2772 +296984,4063,3446 +256602,997,2683 +205031,1035,1937 +154984,2058,2985 +494241,2137,2973 +132683,4185,2141 +473816,1922,2519 +82022,2266,2777 +344692,1875,4238 +22465,3004,2461 +417219,3114,3435 +122292,1068,3634 +30325,3473,3020 +321220,3678,3833 +466942,3401,2180 +178799,3429,1489 +339477,2593,4120 +501165,1589,2829 +499861,1462,2720 +200007,2493,1857 +244576,1754,2487 +109226,3129,2095 +78795,3808,2465 +449487,3038,3281 +230277,3516,2266 +57192,1767,2437 +275756,1484,3034 +18149,3792,2216 +277908,3758,3085 +8787,2139,2371 +212345,2200,2032 +497240,3904,2492 +264314,4092,2773 +487482,3716,3255 +261603,4091,2736 +143320,2372,3734 +261953,1116,2749 +503739,1702,2982 +129333,2844,4514 +16972,2956,2129 +386182,2278,3485 +471836,2794,2407 +222424,4920,2151 +479723,3814,2804 +428478,1963,2374 +177858,4115,1471 +254580,3341,2629 +309579,1490,3670 +242060,2480,2445 +288125,1607,3311 +141887,1745,3280 +403157,4061,2728 +494985,2140,3879 +451495,1276,3388 +224175,1167,2200 +229584,1266,2276 +6729,2835,2041 +86932,605,3297 +39000,3100,1172 +3722,4160,1661 +172429,3696,1305 +284836,3816,3214 +257007,2193,2671 +56612,3786,2379 +514165,2365,3831 +416888,3375,3413 +299845,468,3507 +304705,2792,3576 +17959,2829,2213 +221216,5279,2142 +107257,626,1952 +145690,3077,2089 +467864,2496,2223 +35359,2215,3374 +261993,1193,2759 +403708,4218,2753 +429114,2205,2414 +2757,2064,1612 +258985,4847,2698 +152570,2719,2712 +284819,3775,3210 +512529,2620,3631 +374780,2265,2892 +300995,3879,3529 +75421,3884,2160 +404928,2837,2838 +364153,2896,2429 +271197,4004,2905 +289734,2218,3313 +386701,2234,3520 +122003,2969,3569 +23010,3340,2481 +339518,2666,4114 +312154,798,3703 +59060,3275,2515 +309831,2134,3663 +58118,3625,2459 +341791,1625,4176 +404654,3767,2815 +423640,2421,2081 +317089,3437,3775 +494931,3409,3355 +28267,2757,2881 +273066,1540,2987 +276377,3540,3037 +247456,2184,2526 +179284,4342,1475 +52034,3833,2199 +496093,2669,2327 +223772,4926,2173 +390661,2394,3710 +216987,4544,2088 +208632,3557,1979 +116738,3964,2889 +390726,2792,3713 +67264,3218,1209 +393949,4214,2032 +202695,2110,1896 +271042,3657,2919 +377904,3371,3061 +21962,2966,2441 +163815,2947,1047 +337349,1830,4082 +203747,1202,1915 +133655,4207,2239 +141788,3801,3279 +424168,3314,2092 +206897,2389,1949 +3165,2719,1619 +22110,4037,2442 +307370,2662,3624 +139320,3555,3066 +213674,2271,2044 +445798,3111,3076 +395101,2393,2241 +492082,2345,3647 +186917,3336,1631 +25995,3910,2674 +259799,2735,2714 +70280,4385,1616 +85761,327,3181 +146055,2769,2129 +459128,2659,3757 +74844,3941,2099 +61801,3768,2654 +199985,2305,1863 +502565,2371,2889 +303061,1915,3571 +281665,2171,3154 +126158,2891,4073 +443192,2542,2946 +152327,3715,2662 +244793,2370,2486 +97662,2135,4182 +296894,3690,3453 +299127,2228,3494 +50733,2535,2172 +469101,2991,2287 +202867,2701,1902 +306677,679,3634 +456925,1385,3628 +73284,734,2016 +373197,3057,2826 +395984,3947,2291 +446217,2047,3120 +252411,807,2606 +226869,1181,2238 +289092,349,3328 +463783,3789,1969 +202082,4742,1876 +7473,3345,2138 +492379,2503,3633 +366242,2412,2545 +468151,3851,2213 +286647,1439,3284 +65391,3395,2912 +199046,3404,1839 +238844,761,2406 +423692,2535,2102 +126002,1380,4073 +467294,2381,2202 +206238,4888,1935 +208419,2754,1975 +29711,2675,3006 +493983,3379,2788 +415019,2293,3318 +354711,3049,4472 +35205,3878,3355 +171650,182,1318 +63540,2436,2799 +299240,2594,3486 +126760,4432,4126 +495883,3367,2148 +63992,2372,2842 +389297,1540,3613 +142454,3687,3332 +477935,3289,2699 +111463,3995,2275 +359620,2606,2128 +27155,2468,2789 +410036,3109,3012 +374903,2978,2912 +128425,1233,4425 +11179,1464,2636 +197451,2746,1817 +464010,2876,1995 +346479,3195,4249 +254932,4921,2637 +146534,3301,2159 +125844,3955,3995 +315690,3307,3750 +306564,403,3617 +194008,4410,1762 +184652,4561,1580 +403752,4425,2765 +399101,4124,2505 +135889,2542,2508 +2722,4105,1579 +256481,591,2685 +471062,1920,2382 +324005,4321,3874 +33878,1930,3284 +363974,1532,2431 +38756,2414,3778 +489776,1727,3381 +314841,732,3744 +67822,3266,1310 +173115,2730,1357 +335577,2137,4049 +429333,2920,2394 +65900,3188,2938 +165769,3661,1136 +261960,1129,2746 +328794,2046,3943 +362277,3999,2323 +33028,2276,3234 +34803,1883,3358 +64471,2371,2873 +373501,1781,2848 +297651,1927,3461 +45829,3441,1918 +349793,1460,4360 +287548,4190,3266 +48039,1708,2046 +510780,2612,3504 +174327,2113,1394 +283648,237,3214 +114830,912,2687 +27730,2652,2821 +373247,3265,2826 +364427,3877,2433 +254051,1786,2641 +469191,3501,2268 +415378,3761,3315 +433811,3987,2563 +80198,1438,2610 +95895,3633,3981 +247101,1027,2529 +91777,3085,3668 +53703,1969,2295 +253942,1463,2642 +82812,4152,2820 +351464,1926,4420 +425203,3141,2190 +266187,1448,2833 +354206,2143,4492 +156666,2095,3150 +203281,3945,1904 +435349,2655,2631 +305104,4198,3578 +259975,3266,2716 +105483,3919,1758 +31257,3075,3094 +215479,3730,2074 +177844,4091,1464 +10178,1576,2534 +261805,630,2758 +199769,1499,1867 +364214,3293,2427 +488564,3563,3305 +475467,1885,2579 +27031,4401,2736 +267974,2765,2853 +215905,866,2076 +206106,4532,1931 +195415,4703,1770 +158211,1692,3298 +158719,2356,3314 +490026,2406,3394 +293392,1413,3401 +124211,3586,3826 +339515,2662,4112 +439810,3702,2808 +186136,4829,1619 +486191,2668,3191 +451584,1556,3411 +259092,400,2719 +424235,3522,2113 +243067,1302,2474 +373368,3712,2834 +31621,2505,3128 +18660,4090,2225 +418025,3948,3463 +448092,2118,3232 +263840,2713,2774 +295709,4387,3420 +468535,2931,2252 +266597,2932,2827 +270125,1187,2918 +130871,3365,1646 +120235,1461,3376 +232829,3076,2305 +267483,1292,2857 +481588,1935,2944 +243757,3553,2475 +9985,2968,2509 +151488,3527,2577 +457755,2084,3676 +167982,3048,1187 +223981,613,2205 +347664,2386,4300 +376487,2670,2973 +284018,1432,3235 +272094,2586,2959 +236775,2756,2369 +254053,1788,2638 +90549,2194,3586 +359409,3189,1910 +478789,2223,2752 +175412,4495,1378 +477617,1921,2699 +461945,3227,1832 +267746,1859,2848 +465573,2377,2108 +184750,4741,1590 +83183,2991,2877 +212230,1794,2031 +22131,4200,2427 +376952,2035,3044 +255942,3403,2665 +477386,3175,2665 +396193,2348,2328 +142776,3671,3344 +274644,2161,3012 +409251,3922,2973 +269395,2639,2870 +55236,2007,2347 +35112,3309,3357 +25829,2795,2661 +259077,370,2720 +199931,2151,1848 +437591,1834,2727 +467040,3758,2180 +440797,2360,2852 +186660,2768,1634 +275421,316,3059 +432562,3855,2517 +415945,3897,3351 +359136,2939,2076 +275441,682,3059 +331972,3327,3980 +314189,2825,3733 +1437,3692,1364 +191464,4615,1711 +287438,3856,3275 +353673,1303,4496 +449758,1545,3306 +218331,4508,2109 +225649,1578,2224 +121105,182,3536 +119061,719,3269 +420496,4133,1649 +213759,2484,2051 +331040,453,3981 +465929,3712,2123 +233792,1821,2335 +316636,2149,3770 +251766,3268,2585 +312744,2515,3707 +73138,4573,1956 +72910,2758,1941 +446493,3267,3143 +136358,3252,2587 +41815,4090,1627 +155691,1523,3061 +223121,2244,2184 +69291,1899,1579 +292765,3319,3371 +182370,2153,1564 +453791,3339,3477 +148467,2336,2337 +320959,2954,3838 +226678,602,2246 +490990,2320,3483 +133403,2248,2227 +304450,2221,3588 +199147,3741,1836 +199691,1298,1852 +483873,2070,3079 +263785,2193,2788 +446051,1343,3112 +429361,3035,2398 +194527,2465,1773 +247828,3473,2521 +110555,1029,2260 +259547,1849,2713 +90029,2946,3543 +156209,1980,3104 +52172,1976,2219 +326414,3217,3910 +17508,3019,2185 +356876,1847,4576 +200840,4939,1852 +468312,2024,2255 +297802,2240,3476 +350431,2771,4367 +105586,4681,1734 +347242,1593,4284 +61875,2175,2681 +34818,1919,3357 +511080,2289,3543 +255539,1952,2665 +236320,1261,2364 +230258,3433,2265 +417902,3642,3485 +493359,3812,2448 +472790,2230,2452 +445009,2416,3044 +486583,1957,3228 +16442,2812,2115 +343871,3599,4185 +339718,3079,4113 +447825,1324,3206 +25601,2048,2665 +347392,1760,4291 +6105,3661,1945 +411386,2287,3081 +459046,2414,3772 +232977,3619,2321 +396959,3928,2395 +393069,3188,1869 +492039,2309,3571 +259056,5220,2699 +229290,5236,2255 +197742,3588,1812 +264097,3554,2781 +406137,3588,2874 +240404,1371,2423 +365945,3567,2501 +368085,2927,2606 +98570,3594,4232 +213845,2697,2052 +219839,5231,2111 +339114,1576,4113 +429245,2614,2410 +473374,2425,2466 +175623,1805,1420 +181578,3580,1547 +236241,1061,2363 +458788,1894,3770 +221728,2098,2157 +198828,2777,1840 +234369,3759,2330 +36875,2716,3534 +507490,3466,3245 +242204,2834,2450 +311232,2161,3690 +393059,3156,1877 +12105,3686,2693 +352193,3904,4392 +49165,2408,2100 +492530,3501,1965 +308797,2913,3643 +342971,1404,4197 +499318,3295,2656 +265826,4924,2793 +63857,3688,2803 +225267,366,2212 +488227,1851,3289 +397472,3933,2436 +254801,4125,2643 +513675,2304,3810 +311750,3749,3690 +327672,2850,3926 +260445,391,2727 +149519,3881,2390 +29226,2635,2973 +147098,4192,2211 +365332,3328,2478 +96396,3239,4015 +382224,2287,3343 +157038,2037,3172 +272366,3504,2937 +158256,1918,3284 +370119,1749,2705 +390783,2934,3705 +103011,2228,1492 +350909,1158,4395 +131386,2951,2008 +125859,4433,4027 +14430,3853,1813 +236948,3343,2376 +453200,3411,3451 +477814,2679,2693 +294033,3208,3401 +406610,3488,2889 +425702,2923,2206 +457690,1889,3658 +369865,3279,2668 +6728,2759,2056 +140877,1919,3216 +149688,2358,2440 +8389,2431,2326 +448791,2608,3257 +359910,3141,2163 +200292,3255,1852 +383044,3314,3356 +472400,2916,2439 +502764,3244,2891 +100550,3439,929 +297876,2464,3467 +138421,2794,2965 +511641,2732,3571 +225703,1730,2210 +28584,2046,2907 +417339,3450,3441 +194933,3401,1779 +186230,5412,1609 +209639,2289,1992 +246016,2043,2506 +204812,4780,1913 +1222,2966,1309 +148526,2723,2345 +242168,2729,2452 +509388,2386,3400 +308597,2417,3641 +188537,4034,1655 +414209,3246,3233 +39522,2989,1201 +492244,2414,3718 +432090,1777,2510 +140986,2952,3203 +87866,3647,3314 +143943,1465,1823 +501063,3370,2800 +49079,2156,2088 +509405,2506,3415 +286244,4233,3255 +96228,1925,4033 +175675,2437,1416 +141892,1794,3287 +347106,1379,4304 +116848,857,2936 +152263,3350,2672 +239171,1996,2402 +147578,4319,2240 +393209,3439,1852 +416649,2369,3404 +343292,2115,4200 +492882,4119,2200 +164992,4101,1084 +195210,4187,1773 +310037,2616,3665 +367843,1700,2600 +502524,2123,2889 +330664,3528,3966 +23566,3950,2528 +140855,1832,3206 +150984,2991,2534 +281379,1677,3175 +471950,3503,2400 +387633,1519,3546 +145187,2684,2067 +236422,1596,2373 +193824,3940,1747 +454762,2066,3520 +347693,2551,4297 +186503,2383,1639 +286890,1988,3286 +209199,912,1998 +88434,3664,3393 +395115,2451,2251 +102299,3794,1347 +346282,2178,4266 +359636,2620,2137 +220428,2467,2133 +354624,2867,4505 +437707,2263,2720 +434577,1936,2605 +500965,2906,2777 +375823,2106,2965 +435117,1694,2624 +45731,3121,1917 +331146,670,3987 +161187,3878,3276 +131205,3476,1954 +64643,2964,2872 +319347,2152,3813 +100079,1764,4863 +464092,3080,2016 +109662,2368,2157 +206621,1504,1951 +326008,1795,3904 +277629,2933,3073 +188265,3346,1655 +131250,3544,1992 +123905,1110,3840 +90134,3552,3515 +418432,3701,3501 +17340,4615,2124 +150980,2972,2566 +131982,4222,2068 +108726,3761,2042 +350562,3186,4375 +159110,2358,3375 +216346,2177,2079 +451279,2859,3371 +470966,4107,2344 +21669,4356,2387 +334453,2818,4027 +129794,1792,4704 +56139,1603,2385 +486029,1846,3200 +278666,1648,3122 +4678,3565,1763 +456316,1317,3610 +9381,1389,2471 +83969,3953,2946 +195901,2261,1793 +307387,2694,3635 +461187,2897,1750 +230419,3964,2282 +485604,2506,3151 +453909,1266,3506 +414441,4260,3202 +396227,2731,2317 +420346,4086,1537 +274499,1695,2997 +403825,2341,2788 +169637,3492,1229 +201466,2635,1879 +95036,1317,3945 +476353,3478,2620 +481719,2542,2942 +209811,2860,2000 +452198,1585,3424 +169553,3401,1254 +493569,4433,2578 +426687,2328,2279 +81350,1381,2702 +300739,3057,3521 +424842,1602,2168 +420737,3326,1791 +431902,3615,2506 +453554,2223,3482 +376515,2826,2997 +481201,2858,2907 +356119,3273,4518 +333829,552,4021 +246080,2207,2517 +236566,2097,2362 +501191,1967,2806 +417611,2485,3485 +85784,866,3172 +439935,1533,2828 +453381,1522,3475 +6803,3419,2052 +415052,2434,3280 +309542,1279,3668 +418407,3661,3489 +486293,3224,3173 +454752,2010,3534 +458969,2215,3735 +471954,3517,2390 +139572,2712,3087 +450723,3079,3331 +508025,1675,3304 +172852,4452,1339 +375671,3760,2944 +484855,1681,3134 +351137,1499,4405 +283438,3650,3203 +248654,1854,2541 +402387,3022,2719 +164112,3460,1034 +212526,2807,2037 +318529,3655,3778 +204851,4892,1908 +226633,469,2229 +16137,3502,2068 +429991,3127,2428 +312843,2816,3715 +161962,2016,2644 +98711,1361,4393 +491288,3267,3487 +92758,1465,3754 +437984,3664,2731 +202977,2958,1904 +20988,3113,2354 +197125,1680,1824 +147076,4062,2215 +324773,2053,3890 +492824,3214,2236 +24660,2087,2610 +253685,459,2629 +192946,1672,1738 +329325,3617,3951 +257856,716,2692 +363786,3604,2397 +332077,3624,3981 +306305,3494,3612 +359558,2542,2134 +416405,3665,3360 +291096,2306,3355 +121809,1343,3619 +206568,1377,1962 +77786,5204,2373 +339551,2758,4106 +492437,2663,3576 +308504,2211,3652 +166378,2497,1168 +26648,2385,2748 +273202,1792,2988 +481755,2742,2930 +68440,3532,1445 +58432,2908,2471 +414545,2509,3261 +266184,1443,2817 +251730,3124,2601 +217988,3098,2107 +402643,4077,2704 +24227,2266,2583 +199810,1627,1860 +47242,2803,2002 +140923,2274,3226 +238916,984,2418 +484654,3274,3096 +487940,3072,3260 +363129,3268,2382 +57146,3807,2415 +226286,3697,2221 +441155,1523,2864 +164248,3554,1042 +367133,3592,2557 +464718,3312,2023 +122716,310,3713 +260219,3941,2715 +195976,2572,1802 +429832,2482,2417 +489560,2831,3358 +55192,1805,2352 +385255,3455,3456 +260078,3503,2721 +437466,1460,2714 +163203,3650,685 +417547,4144,3450 +481676,2362,2931 +74779,3430,2095 +169597,3455,1244 +384425,1948,3431 +254127,1998,2630 +94976,650,3913 +124738,3687,3922 +27412,3689,2806 +489642,3197,3356 +449700,1390,3309 +148395,1826,2324 +269138,1837,2890 +93549,3258,3826 +219699,4570,2117 +112762,1264,2437 +120451,3596,3390 +361330,2787,2282 +44454,2104,1869 +209127,714,1999 +39709,3381,1213 +427197,3752,2296 +18650,4024,2245 +452170,1505,3419 +206129,4576,1936 +313687,1482,3731 +49044,1801,2091 +424941,2608,2188 +100520,3306,1055 +178024,4388,1473 +201148,1472,1869 +272509,3928,2959 +413758,3732,3180 +100853,2320,1122 +203296,4125,1890 +432037,4059,2492 +403697,4171,2770 +221850,2562,2165 +341370,4390,4131 +418697,2978,3555 +97366,3621,4149 +92962,3170,3742 +292467,2500,3373 +419233,2927,3577 +74437,808,2078 +486534,1775,3207 +148171,3014,2310 +497298,1809,2544 +447624,3059,3196 +268078,3170,2847 +64778,3301,2881 +33753,3774,3251 +93806,568,3855 +118806,3040,3178 +5038,3820,1812 +208283,2305,1974 +220387,2308,2144 +401805,2338,2668 +203149,3546,1896 +289935,2998,3322 +382706,1678,3362 +47350,3266,2005 +402945,3190,2734 +499980,2273,2723 +97309,3284,4092 +144597,3359,1936 +293287,1055,3389 +379920,2243,3203 +338944,1222,4116 +182256,5422,1541 +119154,1444,3284 +411094,3308,3046 +158287,2182,3282 +234211,3208,2327 +388760,1570,3607 +162304,2598,899 +398333,3169,2500 +396378,3863,2317 +54275,2442,2302 +469186,3465,2265 +495107,3638,3568 +509104,2861,3367 +459844,2853,3832 +98909,1919,4360 +158777,2865,3340 +20725,4670,2338 +321832,1328,3858 +45075,2370,1886 +209386,1423,1983 +333460,3754,4008 +453480,1853,3483 +233557,917,2322 +9447,1502,2462 +231226,2331,2295 +345048,2990,4208 +183556,5380,1556 +65669,2719,2975 +411717,3789,3077 +333426,3678,4011 +322962,747,3876 +290615,932,3344 +355818,2774,4540 +323362,1949,3872 +513968,3095,3775 +487397,3188,3235 +465107,2726,2067 +228659,2629,2248 +76824,1556,2299 +165388,3202,1131 +189312,2720,1678 +46188,2863,1959 +457474,3513,3636 +86755,3684,3213 +143766,3339,1667 +294071,3259,3386 +236384,1436,2363 +352942,2120,4452 +376592,3071,2996 +344218,1085,4227 +126792,1036,4175 +107159,4603,1883 +353682,1319,4480 +285476,1779,3243 +225138,4978,2196 +176467,4034,1441 +103155,3080,1457 +304416,2140,3588 +385008,2233,3440 +238910,974,2418 +231653,3662,2294 +414280,3761,3222 +164861,3911,1076 +269260,2058,2896 +290677,1261,3345 +390436,1981,3716 +272052,2241,2952 +281650,2142,3158 +25825,2787,2686 +178604,2932,1478 +111714,1460,2317 +270997,3513,2914 +402493,3347,2699 +281355,1619,3174 +85430,2696,3118 +373826,3356,2852 +61288,1323,2646 +418154,2941,3526 +356135,3284,4526 +449153,1604,3279 +173891,4032,1356 +162740,3544,626 +190358,1926,1705 +209243,1003,1994 +295612,3974,3431 +57416,2919,2435 +59662,3493,2533 +250911,352,2601 +73825,576,2057 +142483,3785,3307 +7505,3481,2125 +86861,4154,3252 +392989,3886,1823 +239044,1455,2415 +251903,3592,2596 +283011,2134,3183 +494322,3665,2987 +459257,3137,3761 +119911,3344,3330 +369447,3804,2667 +137145,3744,2677 +246715,5006,2513 +376716,3350,2977 +74290,3988,2048 +30483,1867,3072 +415220,3041,3288 +275682,1344,3033 +25440,3200,2633 +189060,2190,1669 +262552,3136,2751 +278949,2277,3124 +297109,345,3468 +301431,961,3546 +386453,1276,3504 +469968,1974,2329 +64562,2584,2859 +154733,3274,2926 +224901,3470,2196 +417720,3075,3470 +344016,4414,4193 +205165,1382,1931 +447276,1497,3191 +18222,4276,2209 +282035,3672,3170 +501021,3174,2779 +219287,3006,2125 +17338,4612,2122 +452851,1701,3445 +431283,3498,2482 +426790,2676,2296 +413936,1776,3223 +1972,3604,1474 +72552,4590,1905 +392436,3807,1740 +129952,3045,4587 +271641,1361,2943 +189534,3270,1686 +424586,3096,2136 +30087,2213,3030 +70344,4809,1658 +240596,2064,2424 +405934,2431,2874 +107762,5382,1925 +446092,1422,3117 +111054,654,2268 +33708,3447,3267 +63701,2859,2781 +446678,1431,3174 +118271,3032,3149 +420065,2588,1432 +280902,164,3164 +84687,1286,3038 +236471,1726,2361 +130628,2746,1882 +246037,2099,2512 +226464,4904,2214 +322724,4517,3850 +226113,3058,2211 +205878,3713,1931 +212003,1132,2027 +26218,2573,2692 +458593,2970,3693 +219617,3922,2111 +395560,4616,2219 +336290,4533,4051 +15585,3238,2020 +6229,1855,1998 +323355,1932,3878 +9015,1410,2438 +497568,2906,2513 +160975,2692,2924 +137315,2448,2737 +102340,3928,1331 +323744,3170,3878 +382917,2731,3347 +41855,1690,1674 +260222,3955,2719 +277457,2136,3086 +386999,1263,3532 +365967,3621,2506 +332692,1373,4014 +331583,2070,3982 +307311,2537,3624 +31664,2750,3129 +390998,1976,3773 +148230,3433,2282 +410682,3654,3032 +20172,4312,2306 +295831,574,3439 +398851,3304,2511 +267956,2693,2848 +50903,3332,2153 +405844,1838,2875 +308738,2789,3640 +154943,1814,2958 +77773,5184,2339 +93973,1759,3855 +209736,2582,2000 +17149,3725,2130 +211298,3341,2015 +493474,3319,2540 +202279,5570,1875 +334517,2942,4039 +312196,933,3698 +19781,2154,2316 +324485,1275,3887 +449571,3481,3267 +244087,5208,2464 +503873,2612,2983 +474033,2871,2511 +463820,3865,1960 +51606,1876,2195 +17947,2788,2216 +182496,2416,1557 +53150,1499,2264 +410886,2281,3043 +415964,3938,3330 +323287,1766,3867 +190505,2362,1698 +476909,3526,2626 +51503,3711,2179 +243414,2459,2462 +458378,2191,3720 +155348,1912,3007 +88888,3163,3457 +30435,4193,3029 +444447,2662,3016 +143648,3206,1672 +294312,4090,3388 +312699,2415,3702 +253667,410,2643 +441223,1674,2863 +260265,4058,2720 +407076,3366,2905 +93318,1391,3825 +46933,3649,1968 +513430,3079,3737 +266327,1849,2815 +6479,3778,1993 +79922,3828,2581 +436978,1802,2693 +107147,4540,1889 +234553,4931,2332 +134783,4135,2357 +261470,3737,2737 +290442,392,3350 +363421,1940,2418 +422577,2998,1850 +491640,2506,3514 +470408,4022,2334 +303179,2202,3569 +198065,4685,1827 +230247,3384,2275 +18897,2601,2265 +177004,2308,1462 +441721,1450,2896 +470773,3039,2348 +427890,2177,2359 +458799,1902,3744 +268712,1060,2877 +92040,389,3704 +82171,3652,2768 +472187,2027,2424 +459505,2163,3805 +444533,3024,3020 +175601,4804,1399 +346288,2181,4265 +348366,1268,4324 +454967,3039,3525 +172753,4281,1320 +334425,2765,4020 +216432,2489,2081 +505973,2007,3171 +20285,2228,2332 +94469,1411,3904 +11353,3143,2655 +444204,1754,3005 +47756,2777,2027 +213217,839,2055 +460318,2201,3984 +490992,2325,3465 +404487,3040,2806 +235734,3827,2351 +381455,1386,3301 +350789,3801,4383 +493680,3215,2643 +69330,2187,1581 +128133,2258,4372 +32041,2214,3150 +231442,2942,2285 +13007,2411,2867 +44542,2320,1857 +324165,247,3880 +79120,1995,2517 +311228,2154,3684 +349951,1655,4380 +2444,2548,1546 +386465,1312,3510 +456422,1571,3606 +351705,2582,4409 +205730,3228,1933 +91748,2815,3686 +387006,1276,3539 +152756,3679,2688 +206163,4673,1932 +440387,3422,2831 +394071,2713,2062 +196699,4553,1786 +70137,3433,1679 +352262,1184,4426 +252426,835,2612 +211403,3636,2014 +437019,1927,2694 +502817,3559,2905 +240746,2501,2433 +129259,2494,4509 +314856,765,3745 +440134,2122,2817 +78558,2094,2470 +502559,2349,2904 +64291,3307,2837 +92195,1645,3727 +143857,3436,513 +223614,3751,2171 +400939,3143,2631 +472659,1763,2453 +146986,3610,2192 +224723,2847,2198 +36437,2881,3439 +74128,2867,2068 +208030,1470,1969 +452530,3027,3418 +422164,2074,2785 +363377,3990,2388 +298126,3353,3467 +238863,802,2410 +42400,1720,1691 +95108,1861,3914 +295224,2712,3427 +96685,2301,4078 +484765,1456,3126 +34118,3005,3295 +11446,1360,2670 +250237,2515,2561 +419107,2558,3589 +111509,5168,2278 +484078,3120,3064 +334578,3163,4033 +408162,3627,2947 +317703,1052,3782 +501132,3904,2779 +382157,1709,3323 +269616,3459,2892 +393548,2911,2008 +99190,4001,4404 +73669,3899,1997 +175837,2863,1424 +493810,3363,2719 +345451,4469,4227 +290910,1869,3351 +503010,2619,2937 +209227,970,1988 +10082,1351,2567 +338301,2596,4088 +213980,3258,2053 +125161,2586,3970 +440544,1515,2839 +254001,1676,2645 +400962,3223,2635 +109374,5064,2104 +60643,3233,2595 +101282,3866,1111 +301814,2270,3534 +401722,4599,2664 +226368,3866,2211 +29302,3118,2961 +319977,4462,3807 +455645,3436,3555 +15618,3331,1998 +155526,3005,3025 +165091,2586,1117 +104697,2391,1640 +221417,1042,2162 +52676,1862,2242 +488927,2316,3326 +261103,2543,2730 +167208,3799,1181 +513185,2078,3720 +480926,1575,2888 +154682,2988,2926 +367063,3371,2567 +306015,2647,3596 +76404,2557,2264 +283541,4099,3206 +317032,3304,3758 +422764,3098,1877 +385561,2025,3459 +391831,2235,3939 +25532,4122,2633 +426109,2476,2254 +428527,2258,2374 +393407,3965,1890 +412544,2799,3121 +34832,1951,3341 +386102,1852,3489 +376405,2215,2999 +200493,3738,1850 +53610,1334,2278 +174692,3216,1379 +12265,2338,2742 +28499,4386,2869 +180050,3157,1524 +320054,160,3836 +287821,519,3300 +291897,687,3364 +106516,3564,1836 +164353,3612,1046 +84656,1144,3051 +439069,2997,2783 +501664,2128,2859 +250205,2416,2571 +135288,3202,2424 +468063,3421,2226 +185320,2743,1619 +42218,3460,1652 +218767,1371,2113 +258710,3446,2695 +88889,3167,3451 +401519,3285,2658 +96269,2438,3999 +337499,2584,4076 +83041,1797,2854 +106202,1239,1851 +330739,3690,3966 +102225,3451,1351 +377464,1865,3081 +150873,2273,2539 +88804,2452,3419 +174839,3425,1378 +182555,2551,1573 +499626,2847,2693 +449837,1823,3327 +461095,2693,1727 +262783,3687,2769 +371279,1920,2754 +148735,3988,2334 +473148,4153,2450 +312748,2531,3700 +206906,2424,1957 +126038,1615,4068 +122859,1208,3693 +444286,2016,3026 +497572,2921,2540 +239051,1473,2409 +467186,2048,2202 +249798,1241,2562 +346727,3824,4259 +1200,2826,1343 +225549,1341,2222 +458253,1940,3694 +255984,3492,2666 +498038,3260,2575 +299758,4426,3505 +158558,1555,3307 +424175,3320,2093 +317885,1869,3784 +223440,3134,2176 +444418,2530,3025 +87425,4254,3296 +305748,1994,3600 +501118,3613,2795 +75438,3980,2124 +71138,2751,1796 +187407,4640,1638 +300219,1714,3509 +243653,3206,2462 +8739,1557,2365 +504573,1424,3064 +85822,1176,3149 +381304,3257,3285 +439925,1502,2825 +430485,2704,2442 +435401,2899,2624 +503709,3885,2943 +127245,3583,4154 +318324,3193,3779 +30458,1822,3068 +394268,3512,2043 +177326,3085,1465 +484189,3935,3062 +507092,3475,3215 +105540,4332,1714 +171691,2439,1334 +202247,5517,1881 +444537,3035,3038 +247587,2536,2519 +34575,2730,3326 +53578,3870,2261 +22398,2747,2452 +64175,2921,2813 +317823,1448,3787 +87135,2885,3290 +245113,3433,2484 +131531,3557,2006 +217962,3035,2098 +143718,3291,1757 +484382,1932,3097 +367598,3273,2575 +415613,2415,3344 +466670,2190,2170 +402795,2473,2738 +223095,2118,2178 +114669,4967,2610 +375321,2175,2939 +107326,1087,1931 +131285,3669,1957 +142496,3821,3340 +333206,3135,3997 +115850,1092,2754 +360392,3069,2190 +191954,2653,1717 +37648,3640,3549 +176305,3690,1440 +27034,4419,2725 +180549,4222,1520 +277191,1530,3079 +222517,5126,2152 +147455,3906,2227 +240869,2832,2438 +459282,3185,3755 +20512,3319,2338 +414815,3732,3273 +348544,1570,4326 +12209,1655,2725 +155002,2229,2982 +438918,2239,2778 +191289,4189,1693 +93306,1220,3806 +170457,2806,1301 +187996,2740,1661 +398157,2092,2504 +206368,697,1962 +163616,295,1045 +185559,3367,1601 +88447,3688,3391 +245189,3778,2494 +48315,2848,2043 +336638,2325,4070 +396588,4594,2337 +162859,3576,593 +91910,3888,3680 +156096,1492,3117 +12402,3573,2751 +12738,3596,2805 +191043,3521,1690 +275847,1652,3032 +341991,2170,4155 +264981,1845,2800 +142046,3153,3281 +24616,4513,2589 +114077,3546,2552 +250662,4006,2569 +152584,2758,2728 +318111,2509,3791 +421688,1295,2605 +387763,2110,3542 +330756,3725,3970 +35067,3048,3331 +287075,2524,3266 +120267,1754,3387 +498592,1703,2637 +413348,4042,3154 +181052,2239,1545 +313507,799,3732 +262550,3133,2748 +479222,1661,2807 +42146,3299,1647 +416463,3838,3388 +275093,3683,3019 +228313,1496,2263 +459316,3262,3743 +118903,3870,3190 +84369,3285,2957 +185948,4406,1616 +241011,3244,2438 +68883,2809,1507 +347704,2621,4299 +302316,3700,3549 +244062,5153,2461 +11617,2066,2676 +163053,3612,710 +485855,1361,3198 +77105,3795,2303 +113677,430,2550 +244428,1170,2495 +334257,1842,4031 +45018,2238,1879 +41521,2344,1599 +124280,82,3908 +312747,2523,3711 +187685,1964,1643 +164317,3592,1079 +287766,354,3297 +72496,3866,1883 +308057,721,3649 +191750,2104,1736 +15211,3592,1953 +128678,2396,4485 +243512,2663,2474 +191757,2201,1728 +333340,3491,4004 +40779,4097,1455 +209915,3231,1996 +106294,1704,1839 +256164,4064,2650 +276342,3492,3042 +8494,2795,2347 +298577,702,3502 +417246,3191,3438 +166193,4074,1125 +513290,2593,3749 +66145,2378,3002 +425081,2861,2178 +180492,4121,1521 +388360,2204,3570 +181917,4259,1545 +490599,2667,3431 +33921,2048,3298 +251307,1712,2600 +274521,1747,3012 +444028,3364,2974 +374657,1793,2899 +488600,3754,3286 +246551,3922,2508 +144482,3027,1926 +23258,2252,2511 +490262,3741,3391 +112622,493,2432 +41251,4086,1499 +76144,653,2281 +242068,2503,2457 +298055,3143,3465 +218239,3805,2095 +407096,3442,2909 +231540,3277,2296 +326033,1891,3913 +438654,3904,2758 +325223,3492,3899 +53959,3247,2280 +426798,2695,2288 +421327,2908,2197 +406714,3807,2878 +378734,2295,3140 +343389,2420,4195 +411411,2363,3071 +405689,3756,2858 +215540,3910,2064 +367437,2412,2582 +330891,4584,3968 +21799,2396,2417 +275750,1471,3038 +185881,4240,1609 +326534,3485,3914 +468575,3204,2247 +315314,2278,3747 +18804,4722,2227 +207505,4586,1957 +77209,5119,2299 +344905,2305,4222 +190571,2526,1714 +385222,3334,3435 +151757,2585,2606 +118338,3607,3155 +432229,2301,2513 +385666,2659,3481 +478244,2145,2739 +139082,1685,3059 +27847,3291,2823 +360090,2453,2212 +498359,2856,2615 +80976,2981,2674 +4920,2629,1807 +148906,2513,2375 +507190,1671,3265 +393661,3314,1924 +471580,1824,2413 +296238,1838,3439 +148583,3073,2325 +74742,3201,2098 +7738,2820,2192 +160599,3892,2224 +454617,1569,3525 +337247,1360,4082 +425228,3196,2174 +23318,2503,2511 +39153,3296,1027 +358744,1817,4688 +340991,3039,4138 +275931,1976,3039 +68428,3493,1395 +15938,2783,2055 +200802,4868,1848 +136357,3250,2570 +347646,2341,4312 +124355,648,3891 +32585,2450,3176 +325690,781,3912 +498440,3028,2586 +193595,3306,1743 +234014,2568,2336 +74024,2124,2041 +183239,4375,1553 +414110,2979,3234 +281922,3340,3172 +136750,3329,2628 +263918,3025,2769 +476611,2067,2646 +178572,2862,1498 +343319,2173,4202 +36569,3489,3474 +387172,1961,3534 +469053,2700,2268 +448573,1668,3258 +507066,3332,3241 +339023,1437,4106 +408520,3179,2961 +329034,2870,3939 +245045,3256,2493 +296545,2586,3449 +209704,2496,1993 +56745,1968,2400 +454578,1443,3523 +239306,2332,2415 +305371,730,3596 +349257,3155,4338 +16281,4096,2040 +322223,2683,3845 +102061,2822,1326 +332673,1325,4017 +59231,1748,2529 +178382,2347,1480 +336404,1326,4066 +271597,1309,2946 +491804,2857,3527 +317873,1830,3789 +294003,3153,3383 +472680,1819,2448 +153341,2462,2822 +296390,2116,3451 +286829,1833,3280 +368912,3883,2642 +173647,3590,1364 +243983,4851,2475 +157562,2882,3214 +122993,2348,3703 +451730,2066,3396 +389825,1716,3641 +365335,3347,2500 +139712,3874,3073 +148713,3823,2343 +464569,2809,2023 +422250,3583,2729 +465753,2977,2110 +5985,2834,1940 +477390,3199,2669 +313740,1597,3733 +169302,3112,1246 +84190,1846,2967 +210490,747,2018 +355835,2800,4542 +46582,2285,1970 +254352,2554,2636 +99546,2357,4486 +356489,1502,4589 +49620,2241,2122 +286975,2172,3269 +97092,2023,4098 +10596,2009,2569 +239219,2133,2399 +304070,882,3592 +438114,1578,2746 +294281,3989,3403 +2033,4072,1494 +343005,1488,4178 +456647,2410,3614 +126186,3227,4056 +274025,4733,2980 +16160,3576,2037 +223089,2102,2183 +211771,552,2025 +34400,2060,3322 +253525,4801,2617 +299140,2270,3501 +89202,321,3490 +468008,3194,2224 +153478,3159,2822 +117833,4044,3074 +161692,3641,2140 +88492,3826,3363 +445594,2148,3082 +159390,1997,3405 +29171,2353,2954 +421617,1861,2463 +365971,3644,2514 +431551,2052,2501 +403132,3947,2726 +47650,2444,2024 +358018,1679,4877 +6792,3350,2056 +398216,2658,2492 +382131,1645,3338 +233689,1326,2330 +253450,4187,2617 +471406,3396,2377 +133732,4283,2242 +485280,3727,3128 +463997,2836,1984 +491112,2578,3459 +425546,2570,2198 +78820,3878,2472 +192321,3446,1720 +179735,2319,1503 +345078,3061,4217 +191398,4469,1708 +98616,4437,4231 +464064,3003,2019 +472578,3938,2432 +177037,2379,1467 +176353,3793,1428 +381973,1220,3318 +428058,2704,2355 +389228,1446,3629 +464743,3374,2022 +273432,2723,2992 +57807,2590,2463 +177186,2815,1459 +5832,4001,1914 +447770,3676,3179 +368034,2640,2613 +72027,4944,1834 +113855,1367,2529 +48077,1819,2055 +174507,2877,1380 +1370,3354,1384 +216527,2751,2086 +250726,4235,2569 +362217,3743,2317 +58813,2501,2490 +335640,2513,4052 +465730,2903,2108 +47809,2951,2012 +202726,2238,1893 +158997,1774,3370 +133482,3366,2259 +281653,2144,3171 +233145,4203,2313 +102289,3733,1330 +329788,707,3963 +97738,2679,4189 +261387,3523,2735 +133603,3840,2230 +223960,577,2195 +206951,2554,1956 +442267,3713,2909 +66352,2995,3002 +441030,3662,2850 +491652,2531,3516 +61094,2909,2643 +112944,2867,2426 +388778,1618,3597 +94999,905,3947 +271216,4038,2924 +285387,1577,3251 +395174,2551,2255 +115269,618,2730 +286721,1585,3278 +484238,1536,3083 +333676,109,4031 +199152,3768,1846 +32716,3260,3191 +388114,1340,3561 +375354,2330,2934 +457834,2386,3676 +456594,2133,3619 +481520,1725,2923 +400502,3585,2608 +319557,2773,3809 +452252,1807,3423 +212423,2440,2035 +196983,1264,1813 +24394,2900,2576 +175732,2526,1442 +181865,4146,1537 +231801,4082,2285 +495578,2553,2117 +352353,1294,4447 +261556,3988,2728 +26418,3679,2689 +483301,2072,3050 +234946,1151,2348 +463269,3796,1916 +26757,2772,2755 +223541,3466,2183 +200509,3784,1850 +108549,2092,2064 +489591,2947,3364 +164064,3434,939 +421989,1422,2705 +494770,3219,3287 +100131,1803,4584 +37530,3265,3542 +385918,1282,3498 +453923,1311,3495 +63141,2652,2760 +23739,2257,2538 +315583,3031,3743 +205981,3914,1930 +42961,2284,1724 +380190,3331,3214 +66299,2892,2981 +226523,5046,2211 +193552,3225,1744 +314376,3353,3729 +110066,1376,2191 +3076,4152,1615 +362963,2657,2383 +77325,1345,2379 +403366,2763,2768 +147776,3368,2276 +172655,4028,1322 +201321,2062,1881 +353911,1574,4496 +390038,2381,3637 +208036,1486,1972 +157231,3374,3192 +132930,3903,2154 +264299,4063,2780 +121238,946,3563 +109788,3534,2141 +342069,2483,4163 +162421,3426,776 +123052,2797,3727 +501545,3653,2822 +269848,4141,2871 +183088,4071,1559 +127592,2106,4267 +54430,3048,2304 +394731,2871,2124 +461410,3226,1688 +364515,1792,2458 +21869,2663,2423 +207286,3663,1946 +376356,2015,3008 +136983,2511,2666 +190816,3049,1713 +343149,1792,4181 +435025,3888,2602 +352772,1841,4443 +360362,3037,2199 +487778,2265,3257 +315508,2836,3746 +126946,1634,4185 +29052,1998,2969 +382684,1634,3346 +148228,3423,2304 +390562,2174,3693 +123231,131,3804 +509844,2587,3421 +239795,3847,2406 +39901,2639,1372 +216526,2746,2079 +433356,1845,2558 +508957,2207,3382 +34997,2522,3351 +296416,2177,3435 +280727,3883,3150 +366805,2287,2559 +499173,2734,2653 +307372,2665,3628 +173481,3360,1364 +340110,4490,4127 +327803,3201,3935 +61804,1307,2695 +59781,2013,2554 +419581,3628,3570 +401027,3358,2633 +376655,3215,3000 +298667,955,3484 +486886,3390,3219 +455536,2888,3558 +263392,1356,2780 +137666,2610,2773 +471827,2769,2396 +357347,2837,4566 +197942,4355,1813 +334592,3197,4032 +495919,3408,2119 +453070,2822,3454 +30500,1903,3076 +198849,2817,1841 +103718,3134,1529 +280494,3324,3130 +25943,3517,2678 +69641,3927,1555 +160641,2751,2536 +343181,1850,4197 +348286,1155,4336 +30590,2195,3072 +37225,2510,3583 +148477,2388,2333 +217493,1587,2106 +466791,2644,2170 +514226,2602,3820 +327044,825,3931 +490208,3243,3382 +112193,1311,2386 +232149,820,2310 +179318,4429,1487 +152018,1681,2678 +412783,3881,3110 +118613,1366,3192 +363776,3587,2402 +446268,2263,3120 +102740,3589,1433 +37632,3613,3580 +97091,2021,4105 +151144,3905,2544 +51951,3505,2195 +466178,2509,2125 +59867,2257,2545 +152776,3827,2712 +140509,1921,3184 +151552,3901,2601 +511579,2582,3579 +438647,3876,2755 +274307,1345,3028 +434163,2820,2574 +399017,3898,2526 +193161,2357,1743 +498129,3996,2573 +429038,3968,2365 +200957,5592,1856 +225735,1851,2223 +79543,687,2566 +145058,3751,2021 +399059,4013,2511 +370060,3958,2684 +359897,3121,2184 +185357,2844,1605 +355053,1341,4523 +299425,3169,3487 +84043,823,3001 +187778,2211,1658 +23528,3534,2504 +502228,2713,2870 +180864,5361,1515 +62744,3288,2721 +382226,2292,3331 +424578,3087,2116 +249370,4129,2539 +97482,1119,4163 +313282,106,3730 +68781,2538,1513 +377599,2427,3068 +319694,3253,3813 +303341,2632,3567 +444797,1731,3062 +382603,1390,3353 +158814,3130,3314 +206449,1052,1954 +285600,2100,3251 +1690,3411,1387 +267448,1211,2853 +20221,4599,2302 +133883,3249,2267 +275354,4179,3000 +82581,2650,2838 +305696,1871,3616 +267827,2086,2856 +178113,4641,1461 +509915,2771,3432 +475964,1790,2616 +15535,3137,1994 +118010,996,3148 +4467,1787,1792 +234300,3630,2326 +387256,2326,3529 +228019,560,2250 +302815,1035,3574 +256735,1363,2672 +121189,614,3558 +397203,2705,2422 +296277,1900,3440 +344381,1363,4225 +257589,4233,2684 +155616,3567,3021 +153050,3100,2769 +172705,4158,1308 +113828,1162,2544 +469457,2001,2291 +293935,2978,3403 +184786,4807,1580 +189603,3382,1675 +252916,2378,2613 +363677,3261,2414 +237643,1230,2387 +464400,4224,2014 +474969,2112,2561 +471684,2254,2397 +182198,4963,1537 +451230,2616,3365 +181381,3080,1531 +276875,951,3091 +213989,3321,2046 +311984,412,3709 +65582,2544,2976 +166973,3493,1158 +410322,4195,3005 +64258,3169,2837 +343857,3538,4184 +439050,2920,2775 +170245,4545,1251 +453383,1527,3489 +388696,1418,3585 +453303,1251,3493 +22486,3151,2451 +54785,2525,2334 +140936,2446,3216 +271759,1628,2943 +144630,3423,1946 +448779,2526,3251 +476434,4119,2626 +75183,2012,2124 +356385,1394,4578 +404071,3429,2786 +13505,3175,1774 +317383,254,3783 +496392,3959,2326 +283561,66,3218 +268622,867,2895 +375856,2240,2947 +351283,1667,4414 +210645,1132,2012 +221463,1151,2161 +70096,3105,1618 +148037,2193,2305 +366075,3992,2505 +314135,2678,3736 +446648,1375,3162 +143308,2320,3481 +242044,2420,2446 +122495,2669,3676 +477585,1862,2710 +484412,2034,3103 +261226,3061,2727 +221495,1365,2150 +101157,3546,1125 +332500,648,4013 +181976,4381,1539 +104828,3109,1665 +90189,3759,3510 +146325,4242,2120 +474715,3756,2541 +104431,3971,1604 +372984,1942,2829 +277477,2166,3065 +355682,2569,4544 +398508,3961,2502 +207042,2859,1958 +236717,2558,2364 +368815,3660,2637 +169682,3539,1223 +219780,5073,2127 +313080,3451,3709 +330303,2526,3960 +457701,1923,3671 +205571,2757,1927 +192021,2792,1727 +355232,1666,4513 +231145,1996,2294 +368312,3817,2608 +108356,661,2031 +377242,3185,3038 +384945,1850,3444 +108269,4576,2008 +44453,2102,1874 +367439,2416,2597 +501704,2272,2840 +442784,3350,2926 +87874,3668,3322 +94391,729,3882 +438045,3913,2736 +390712,2745,3689 +74383,5085,2054 +159633,3165,3426 +47677,2557,2017 +51869,3189,2212 +370309,2547,2699 +411359,1443,3070 +349405,3732,4340 +457289,2589,3648 +221098,4968,2130 +464168,3329,1996 +453813,3457,3492 +504012,3403,2978 +395345,3427,2214 +375315,2163,2934 +89871,1418,3513 +161215,2435,3306 +21878,2692,2416 +332530,737,4001 +209768,2661,1997 +106410,2545,1831 +300251,1805,3518 +148836,2049,2350 +360463,3169,2201 +24846,2743,2602 +110817,2886,2233 +81928,1644,2768 +75151,1757,2140 +513543,3301,3719 +244045,5078,2470 +321483,331,3850 +288154,1657,3296 +140801,1589,3202 +388618,3607,3571 +213544,1917,2043 +326604,3651,3913 +468967,2358,2277 +120920,2772,3475 +183789,2269,1588 +490261,3733,3378 +155632,3736,3024 +310887,1123,3688 +380843,1301,3283 +358467,1775,4782 +495851,3325,2155 +450192,3508,3322 +218231,3793,2102 +475118,2749,2548 +364349,3672,2440 +5222,2335,1838 +135007,3543,2389 +284722,3404,3237 +10169,1550,2545 +472966,3033,2461 +460368,2244,3860 +85227,1118,3086 +369138,2417,2658 +267331,1010,2841 +227830,4985,2235 +441926,1984,2897 +457695,1908,3656 +303191,2235,3558 +247846,3529,2529 +486241,2976,3179 +222878,1431,2168 +20825,2396,2357 +288894,4142,3290 +420596,3686,1681 +138731,1688,2982 +457980,2928,3661 +38065,2889,3617 +437255,2990,2699 +455953,1990,3591 +448945,3343,3243 +110796,2716,2243 +318732,244,3808 +485663,2830,3147 +445500,1892,3103 +13933,3811,1759 +226723,717,2244 +452906,1901,3443 +212867,3845,2023 +62553,2488,2715 +160401,2437,3698 +110171,1953,2172 +45604,2761,1932 +104306,3315,1609 +269411,2732,2883 +3246,3677,1646 +196982,1249,1818 +18166,3888,2214 +61915,2271,2679 +180876,5377,1515 +427483,2866,2310 +268628,875,2891 +372821,3799,2803 +359659,2642,2155 +351920,3403,4411 +382882,2584,3348 +458453,2403,3708 +387354,2868,3525 +473484,2901,2480 +431349,3720,2467 +280689,3761,3134 +262407,2559,2760 +172214,3331,1338 +305313,597,3599 +342834,1026,4192 +147936,4217,2251 +322405,3236,3847 +179623,5493,1500 +215773,5197,2067 +196433,3666,1793 +96276,2493,4008 +62810,3458,2731 +99125,3422,4336 +175370,4343,1406 +52330,2941,2225 +324680,1867,3896 +22339,2523,2444 +356028,3101,4530 +143145,2980,3418 +304031,804,3576 +275435,337,3042 +315729,3405,3737 +222510,5116,2155 +271633,1353,2950 +134418,4045,2324 +209193,877,1999 +102413,4512,1328 +510519,3381,3454 +143446,2485,3476 +97203,2762,4157 +402556,3494,2711 +118209,2450,3146 +81123,4232,2674 +341699,1457,4156 +190741,2866,1689 +230834,956,2290 +479725,3821,2810 +5939,2490,1964 +307334,2591,3635 +246758,5092,2508 +262682,3444,2767 +177450,3325,1453 +16139,3514,2072 +6947,2060,2111 +46708,2834,1975 +368295,3778,2608 +184430,4028,1576 +363632,3004,2417 +355145,1455,4529 +198140,4852,1811 +229170,4920,2265 +80035,4887,2575 +20288,2240,2349 +38505,3380,3126 +341824,1697,4159 +508331,3344,3312 +265963,833,2838 +63338,3674,2774 +81957,1814,2754 +171535,4388,1300 +149604,1843,2454 +399142,4291,2515 +252445,887,2617 +330298,2508,3960 +308866,3090,3655 +300810,3307,3513 +226016,2757,2214 +287330,3300,3283 +360413,3098,2199 +162270,2351,270 +241591,865,2448 +190322,1866,1700 +92459,3661,3727 +53629,1517,2288 +67749,2984,1332 +369877,3304,2687 +168094,3195,1192 +102715,3466,1385 +350461,2920,4364 +321607,707,3841 +349552,1117,4361 +198428,1483,1837 +243101,1508,2474 +105482,3908,1741 +337617,3128,4081 +147528,4215,2219 +435865,2152,2664 +329293,3548,3947 +355792,2751,4536 +113104,283,2499 +453154,3138,3463 +232554,2158,2311 +329854,889,3970 +271902,1953,2934 +256577,938,2673 +292499,2552,3374 +440844,2608,2846 +421804,3462,2600 +55784,2475,2358 +373871,3508,2861 +221008,3925,2136 +16879,1814,2154 +48450,3559,2041 +341998,2186,4154 +297181,583,3468 +211781,585,2035 +233751,1578,2334 +356913,1870,4637 +393383,3927,1873 +162099,3382,2673 +231680,3769,2300 +456329,1357,3605 +393381,3926,1855 +378666,2023,3134 +216043,1300,2079 +60434,2706,2578 +299044,2077,3482 +102198,3370,1349 +158933,1581,3345 +435432,3075,2637 +262707,3492,2763 +135827,4164,2470 +81846,1193,2752 +151283,2196,2599 +108728,3790,2064 +414879,3911,3259 +263475,1550,2775 +95348,4306,3933 +91111,2171,3631 +212158,1584,2031 +132129,3494,2104 +31983,2019,3163 +513681,2327,3816 +296682,3099,3433 +320649,1897,3823 +427640,3367,2320 +389407,2066,3631 +395053,4681,2128 +20565,3738,2350 +411880,1822,3086 +253863,1224,2638 +293557,1821,3400 +162445,3434,831 +208031,1471,1980 +107662,3896,1923 +244311,949,2490 +136258,2539,2554 +43047,2836,1737 +460881,3353,1568 +83249,3421,2897 +232220,1025,2307 +275444,722,3042 +288354,2143,3297 +129765,1771,4727 +406007,2954,2865 +252286,421,2625 +153567,3589,2788 +448351,3338,3214 +216522,2732,2086 +437851,2990,2723 +189393,2866,1674 +295928,944,3452 +427429,2688,2319 +193784,3799,1749 +278403,1166,3102 +334671,3406,4023 +188140,3070,1648 +136730,3252,2637 +157301,3864,3181 +251901,3577,2595 +318472,3496,3796 +236028,415,2375 +76276,1639,2282 +129648,1684,4667 +365623,1948,2525 +372548,2703,2800 +344862,2187,4235 +89081,3959,3426 +491546,2345,3530 +211191,2946,2004 +396769,2829,2372 +359552,2536,2149 +443143,2256,2947 +278842,2112,3120 +5007,3398,1796 +343523,2808,4185 +58418,2879,2484 +37120,3706,3521 +146670,3974,2156 +249533,333,2578 +46289,3255,1945 +286635,1405,3276 +115253,559,2707 +387388,2991,3527 +237439,562,2394 +419739,2723,3792 +124158,3171,3825 +500435,2586,2748 +247053,886,2523 +329911,1040,3964 +261434,3636,2732 +321011,3077,3835 +343367,2250,4180 +243115,1581,2475 +178214,5333,1458 +461826,3006,1815 +62473,2130,2741 +349904,1590,4357 +30262,3067,3022 +378594,1453,3132 +469392,1852,2305 +115572,2715,2734 +261223,3049,2736 +495383,3129,2004 +20200,4503,2301 +489075,3162,3326 +363190,3385,2370 +142271,1993,3316 +502279,2952,2881 +106552,3953,1830 +428497,2099,2371 +84000,4166,2947 +411999,2567,3101 +252969,2497,2604 +387867,2718,3549 +239183,2020,2414 +23702,2145,2549 +115087,2894,2677 +392305,3760,1655 +502638,2693,2911 +195014,3676,1785 +67733,2909,1316 +365435,3660,2479 +75991,3814,2226 +271910,1973,2948 +345127,3173,4207 +311139,1889,3692 +308547,2308,3639 +9871,1677,2508 +130742,3173,1860 +388259,1909,3570 +352143,3850,4425 +120939,2976,3444 +394617,2675,2121 +447211,1339,3192 +218271,3915,2104 +210099,3816,1993 +168930,4567,1209 +485023,2229,3126 +163554,3793,769 +340153,4561,4116 +445838,3238,3098 +387550,1277,3557 +325248,3590,3894 +293912,2786,3404 +365825,3135,2508 +252810,2034,2616 +227566,3473,2243 +115088,2897,2657 +96770,2975,4061 +218019,3155,2097 +126567,2603,4139 +231075,1740,2288 +298017,3036,3464 +226616,5290,2215 +82478,1704,2836 +458731,3498,3691 +246578,4096,2502 +269472,3164,2893 +174956,3657,1411 +99042,2937,4343 +289534,1724,3328 +299653,3858,3490 +490978,2302,3503 +20324,2380,2350 +270846,3264,2906 +294358,4382,3390 +88450,3697,3358 +282209,68,3187 +208237,2195,1973 +171624,4576,1274 +263927,3045,2769 +167111,3663,1166 +35413,2366,3372 +248502,1275,2545 +348836,1940,4333 +362607,3358,2344 +290509,585,3336 +11925,2034,2698 +356911,1868,4593 +200637,4404,1864 +225049,3960,2191 +195297,4404,1771 +346026,1749,4256 +474610,3080,2545 +390681,2446,3701 +369085,2115,2657 +304571,2460,3587 +219194,2766,2119 +147676,2674,2259 +438916,2233,2781 +247484,2237,2537 +481538,1764,2942 +249605,527,2570 +491432,2149,3561 +388865,2140,3598 +213807,2624,2054 +138540,3533,2966 +62671,2968,2740 +37280,2577,3547 +410979,2594,3050 +423611,3277,2000 +266232,1547,2817 +172915,4582,1326 +418656,2852,3566 +220151,1409,2140 +330355,2750,3976 +506708,3742,3207 +414442,4260,3222 +179016,3840,1496 +431885,3577,2500 +137637,2446,2804 +479657,3507,2817 +502990,2405,2926 +318696,36,3803 +268660,975,2882 +177588,3563,1456 +19331,2351,2297 +100319,2355,1018 +466058,4208,2123 +463879,2449,1997 +239033,1416,2411 +309790,2022,3658 +141314,2546,3247 +46205,2935,1941 +45940,1622,1945 +339812,3312,4123 +292366,2322,3377 +151713,2315,2631 +304183,1150,3586 +146519,3167,2185 +246455,3519,2510 +81769,473,2788 +338377,2818,4094 +160335,2402,3697 +196306,3372,1791 +418927,3531,3530 +271057,3715,2926 +472901,2644,2455 +263707,2033,2777 +30649,2437,3064 +252407,764,2611 +424826,3561,2154 +356530,1532,4598 +7925,3736,2187 +309409,791,3674 +496382,3947,2366 +432893,2559,2537 +250674,4068,2580 +461960,3246,1832 +127383,1147,4292 +109987,814,2197 +324364,860,3897 +260846,1820,2727 +460918,3378,1611 +181077,2275,1529 +75328,3147,2160 +410657,3593,3033 +469286,3905,2272 +97684,2266,4222 +424323,2584,2125 +513055,3325,3692 +265707,4177,2801 +354432,2573,4491 +275650,1305,3032 +68439,3531,1465 +229073,4002,2256 +80518,4018,2612 +287002,2230,3267 +190688,2772,1705 +16891,2597,2134 +410934,2439,3054 +127793,3488,4244 +444956,2177,3050 +496213,3348,2193 +305144,4404,3592 +278845,2115,3111 +338809,4511,4096 +261578,4038,2742 +431336,3681,2480 +360274,2815,2209 +72786,1851,1932 +73281,716,2018 +169353,3170,1254 +418531,3861,3507 +86740,3639,3232 +133051,4309,2177 +77489,2547,2357 +391272,2303,3787 +496988,2679,2460 +175921,3029,1427 +344868,2192,4224 +506302,1365,3182 +167757,2741,1216 +291785,427,3360 +155732,1644,3082 +281763,2664,3155 +407662,3695,2915 +17295,4532,2141 +326664,3853,3919 +503660,3745,2958 +79036,1159,2503 +294652,1047,3420 +431636,2420,2494 +409884,2217,3022 +38817,3121,3701 +500363,2147,2768 +474059,2988,2510 +139061,1643,3020 +233637,1208,2335 +378794,2630,3150 +310181,2979,3660 +393219,3453,1876 +320072,197,3835 +299184,2424,3499 +362393,2615,2359 +169979,3904,1230 +305303,579,3597 +106562,4269,1826 +345096,3134,4216 +350017,1764,4377 +347471,1874,4297 +364096,2683,2444 +309410,795,3663 +397278,2836,2441 +395592,2147,2303 +485413,1713,3154 +59359,2666,2523 +111204,1664,2261 +388234,1730,3570 +253645,352,2646 +17763,4362,2189 +165343,3142,1100 +99515,2133,4412 +418984,3641,3547 +95757,2502,3975 +438716,1530,2769 +76278,1664,2233 +137242,1981,2759 +123595,3045,3750 +510856,2831,3506 +233149,4222,2309 +426267,2843,2248 +298964,1908,3485 +149213,1920,2398 +174514,2883,1393 +449060,1340,3294 +432034,4044,2508 +209214,940,1988 +15935,2771,2037 +142583,1786,3363 +18399,2618,2237 +463584,3199,1971 +88050,295,3356 +392197,3659,1567 +225402,784,2211 +236670,2400,2371 +345287,3645,4228 +122189,361,3653 +144828,2867,1969 +391403,3117,3760 +438080,1498,2745 +241638,989,2455 +177733,3868,1464 +119524,333,3351 +375493,3136,2938 +403717,4265,2756 +72239,1982,1924 +221661,1841,2157 +509707,3665,3400 +504917,3537,3040 +138210,3549,2889 +370609,3893,2696 +151744,2483,2636 +150797,4175,2520 +167055,3595,1158 +514096,2223,3877 +80785,1537,2653 +60557,2937,2594 +133236,3874,2217 +502613,2528,2910 +82491,1808,2817 +350010,1753,4384 +417932,3714,3459 +319883,3729,3803 +32658,2879,3204 +436982,1816,2700 +420698,2174,1795 +277878,3685,3078 +357318,2726,4551 +272448,3728,2933 +256646,1138,2673 +91256,3307,3619 +12896,2132,2845 +151833,2884,2642 +103455,4614,1457 +175277,4178,1387 +81011,3307,2642 +373921,3670,2846 +267790,1976,2859 +104495,4594,1629 +264809,1438,2813 +146101,3052,2144 +160513,2845,4491 +161869,1626,2389 +507766,2640,3293 +340351,1427,4143 +274061,270,3009 +399015,3886,2528 +174375,2431,1385 +57428,2953,2435 +411577,3261,3065 +198368,1301,1838 +79564,904,2569 +12055,3545,2713 +414072,2757,3226 +460057,2081,3843 +91787,3144,3662 +82511,1978,2798 +54967,3247,2323 +344749,1957,4206 +508850,3676,3342 +419011,3674,3546 +196597,4301,1793 +37548,3312,3586 +11908,1721,2704 +348061,3755,4302 +32587,2462,3200 +87999,4336,3323 +17909,2694,2207 +172914,4580,1312 +185679,3806,1601 +5315,3274,1860 +86723,3563,3251 +25045,4122,2601 +438844,1921,2779 +199401,4718,1845 +325254,3605,3898 +406079,3292,2870 +299479,3282,3487 +430418,2423,2446 +477632,1962,2688 +147478,4017,2220 +210574,937,2005 +508265,2959,3306 +10582,1878,2592 +23797,2424,2554 +275326,4145,3027 +25389,2971,2635 +462826,2728,1928 +284135,1693,3231 +306709,763,3622 +293295,1066,3391 +396735,2775,2374 +140296,3030,3163 +15048,3226,1967 +390219,3419,3638 +256105,3847,2664 +121696,592,3601 +133273,3950,2197 +465434,3904,2074 +109472,936,2134 +271280,4248,2910 +276707,4700,3048 +3555,3365,1668 +54536,3482,2303 +394977,4459,2173 +37781,2696,3722 +179661,2163,1525 +11586,1689,2678 +211957,1015,2029 +392241,3695,1588 +282819,1803,3183 +421412,1507,2397 +230452,4043,2267 +299814,385,3526 +57681,1557,2448 +1347,3260,1381 +435363,2709,2626 +488435,2807,3306 +302943,1485,3571 +75938,3446,2219 +423436,3071,1985 +379731,1374,3224 +234909,970,2354 +352383,1336,4465 +148675,3662,2345 +195521,4975,1776 +169316,3127,1241 +106261,1527,1815 +19969,2862,2307 +371474,2911,2742 +259308,1262,2708 +278247,321,3113 +306398,4012,3604 +472077,1506,2427 +204727,4570,1908 +347719,2729,4298 +299824,412,3529 +404000,3161,2793 +151841,3006,2626 +79843,3125,2579 +449519,3190,3282 +189860,4099,1688 +365142,2383,2475 +488202,1787,3306 +383262,1566,3375 +513163,1898,3723 +475558,2203,2589 +359886,3107,2138 +163061,3613,611 +159697,3615,3441 +495821,3295,2170 +96290,2582,4035 +5583,2597,1908 +113141,492,2515 +461356,3178,1717 +224772,2972,2205 +340418,1535,4149 +136131,3966,2548 +472699,1875,2452 +245924,1763,2508 +141131,1493,3243 +56481,3197,2391 +145823,3813,2095 +414907,3962,3274 +222187,3465,2162 +133153,3323,2219 +162769,3555,757 +496253,3613,2180 +242379,3372,2456 +218905,1807,2127 +148222,3372,2305 +464246,3563,1989 +493113,2124,2368 +230753,627,2300 +65061,2691,2902 +400097,4073,2567 +467300,2395,2209 +501634,1957,2842 +16645,3599,2113 +26145,2322,2697 +381868,3209,3290 +353172,2789,4455 +34239,3824,3296 +242922,890,2470 +194798,3077,1776 +196572,4257,1795 +189754,3807,1678 +274377,1480,3003 +365766,2881,2525 +115467,1690,2752 +384567,2718,3421 +347134,1424,4279 +201382,2309,1881 +380539,2556,3247 +456911,1324,3632 +21602,3877,2393 +42882,1656,1742 +391524,2035,3804 +154289,3096,2876 +252162,4898,2588 +305214,381,3610 +307375,2672,3633 +340164,4582,4117 +44250,3391,1810 +23963,3259,2560 +176117,3317,1425 +426637,3952,2258 +325973,1713,3919 +199849,1761,1866 +470565,2104,2353 +366846,2482,2559 +497471,2708,2526 +159292,3689,3368 +369217,2740,2658 +282424,880,3188 +324929,2681,3896 +438303,2324,2756 +42542,2333,1706 +139202,2913,3035 +28841,3318,2925 +198841,2803,1847 +251546,2322,2591 +385266,3494,3436 +430557,2995,2442 +415324,3294,3293 +435679,1539,2647 +291839,524,3377 diff --git a/modules/sanger/postcode/tests/iss_peak_profile_sample.npy b/modules/sanger/postcode/tests/iss_peak_profile_sample.npy new file mode 100644 index 00000000000..9dd94010705 Binary files /dev/null and b/modules/sanger/postcode/tests/iss_peak_profile_sample.npy differ diff --git a/modules/sanger/postcode/tests/main.nf.test b/modules/sanger/postcode/tests/main.nf.test new file mode 100644 index 00000000000..3f83241e5f0 --- /dev/null +++ b/modules/sanger/postcode/tests/main.nf.test @@ -0,0 +1,101 @@ +// nf-core modules test bioinfotongli/postcode +nextflow_process { + + name "Test Process POSTCODE" + script "../main.nf" + process "POSTCODE" + + tag "modules" + tag "modules_sanger" + tag "POSTCODE" + + test("iss - csv") { + + when { + params { + module_args = '--codebook_targer_col L-probe --codebook_code_col code' + } + process { + """ + input[0] = [ + [ id:'iss_test'], + file(params.modules_testdata_base_path + 'iss_peak_profile_sample.npy', checkIfExists: true), + file(params.modules_testdata_base_path + 'iss_peak_locations_sample.csv', checkIfExists: true), + file(params.modules_testdata_base_path + 'iss_codebook.csv', checkIfExists: true), + file(params.modules_testdata_base_path + 'dummy.txt', checkIfExists: false), + 6 + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("merfish - csv") { + + when { + params { + module_args = '--codebook_targer_col Gene --codebook_code_col Code --coding_col_prefix Readout_*' + } + process { + """ + input[0] = [ + [ id:'merfish_test'], + file(params.modules_testdata_base_path + 'merfish_peak_profile_sample.npy', checkIfExists: true), + file(params.modules_testdata_base_path + 'merfish_peak_locations_sample.csv', checkIfExists: true), + file(params.modules_testdata_base_path + 'merfish_codebook.csv', checkIfExists: true), + file(params.modules_testdata_base_path + 'merfish_readouts.csv', checkIfExists: true), + 9 + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + + test("stub") { + + options "-stub" + + when { + params { + module_args = '' + } + process { + """ + input[0] = [ + [ id:'merfish_test'], + file(params.modules_testdata_base_path + 'merfish_peak_profile_sample.npy', checkIfExists: true), + file(params.modules_testdata_base_path + 'merfish_peak_locations_sample.csv', checkIfExists: true), + file(params.modules_testdata_base_path + 'merfish_codebook.csv', checkIfExists: true), + file(params.modules_testdata_base_path + 'merfish_readouts.csv', checkIfExists: true), + 7 + ] + """ + } + } + + then { + assertAll( + { assert process.success }, + { assert snapshot(process.out).match() } + ) + } + + } + +} diff --git a/modules/sanger/postcode/tests/main.nf.test.snap b/modules/sanger/postcode/tests/main.nf.test.snap new file mode 100644 index 00000000000..fb904f8ac44 --- /dev/null +++ b/modules/sanger/postcode/tests/main.nf.test.snap @@ -0,0 +1,110 @@ +{ + "merfish - csv": { + "content": [ + { + "0": [ + [ + { + "id": "merfish_test" + }, + "merfish_test_decoded_spots.csv:md5,73bb8a4215143145560d15e0e8be1bc4" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,74065acdb730aacba1112d6248309b1c" + ], + "decoded_peaks": [ + [ + { + "id": "merfish_test" + }, + "merfish_test_decoded_spots.csv:md5,73bb8a4215143145560d15e0e8be1bc4" + ] + ], + "versions": [ + "versions.yml:md5,74065acdb730aacba1112d6248309b1c" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.04.4" + }, + "timestamp": "2025-03-15T23:00:48.523789213" + }, + "iss - csv": { + "content": [ + { + "0": [ + [ + { + "id": "iss_test" + }, + "iss_test_decoded_spots.csv:md5,96b1c12b06f1b340e803060a5000e6de" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,74065acdb730aacba1112d6248309b1c" + ], + "decoded_peaks": [ + [ + { + "id": "iss_test" + }, + "iss_test_decoded_spots.csv:md5,96b1c12b06f1b340e803060a5000e6de" + ] + ], + "versions": [ + "versions.yml:md5,74065acdb730aacba1112d6248309b1c" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.04.4" + }, + "timestamp": "2025-03-15T23:00:31.695060821" + }, + "stub": { + "content": [ + { + "0": [ + [ + { + "id": "merfish_test" + }, + "merfish_test_decoded_spots.csv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "1": [ + + ], + "2": [ + "versions.yml:md5,74065acdb730aacba1112d6248309b1c" + ], + "decoded_peaks": [ + [ + { + "id": "merfish_test" + }, + "merfish_test_decoded_spots.csv:md5,d41d8cd98f00b204e9800998ecf8427e" + ] + ], + "versions": [ + "versions.yml:md5,74065acdb730aacba1112d6248309b1c" + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.04.4" + }, + "timestamp": "2025-03-15T23:01:04.320288589" + } +} \ No newline at end of file diff --git a/modules/sanger/postcode/tests/merfish_codebook.csv b/modules/sanger/postcode/tests/merfish_codebook.csv new file mode 100644 index 00000000000..dfde6c8c40f --- /dev/null +++ b/modules/sanger/postcode/tests/merfish_codebook.csv @@ -0,0 +1,111 @@ +,Gene,Code,Readout_1,Readout_2,Readout_3,Readout_4,Readout_5,Readout_6,Readout_7,Readout_8,Readout_9,Readout_10,Readout_11,Readout_12,Readout_13,Readout_14,Readout_15,Readout_16 +0,PRDX3_rs3377_A,1111000000000000,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0 +1,PRDX3_rs3377_C,1100110000000000,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0 +2,GPX4_rs713041_C,1100001100000000,1,1,0,0,0,0,1,1,0,0,0,0,0,0,0,0 +3,GPX4_rs713041_T,1100000011000000,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0 +4,RPL36AL_rs1054427_C,1100000000110000,1,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0 +5,RPL36AL_rs1054427_T,1100000000001100,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0 +6,PSMB6_rs3169950_G,1100000000000011,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1 +7,PSMB6_rs3169950_A,1010101000000000,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0,0 +8,IFITM3_rs34481144_G,1010010100000000,1,0,1,0,0,1,0,1,0,0,0,0,0,0,0,0 +9,IFITM3_rs34481144_A,1010000010100000,1,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0 +10,H3F3B_rs1060120_G,1010000001010000,1,0,1,0,0,0,0,0,0,1,0,1,0,0,0,0 +11,H3F3B_rs1060120_A,1010000000001010,1,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0 +12,PSMA4_rs3813571_G,1010000000000101,1,0,1,0,0,0,0,0,0,0,0,0,0,1,0,1 +13,PSMA4_rs3813571_T,1001100100000000,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0,0 +14,DDOST_rs4704_C,1001011000000000,1,0,0,1,0,1,1,0,0,0,0,0,0,0,0,0 +15,DDOST_rs4704_T,1001000010010000,1,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0 +16,SRSF2_rs3744061_C,1001000001100000,1,0,0,1,0,0,0,0,0,1,1,0,0,0,0,0 +17,SRSF2_rs3744061_T,1001000000001001,1,0,0,1,0,0,0,0,0,0,0,0,1,0,0,1 +18,CALM3_rs10113_T,1001000000000110,1,0,0,1,0,0,0,0,0,0,0,0,0,1,1,0 +19,CALM3_rs10113_C,1000100010001000,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0 +20,APEX1_rs1130409_T,1000100001000100,1,0,0,0,1,0,0,0,0,1,0,0,0,1,0,0 +21,APEX1_rs1130409_G,1000100000100010,1,0,0,0,1,0,0,0,0,0,1,0,0,0,1,0 +22,TMED10_rs3742771_T,1000100000010001,1,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1 +23,TMED10_rs3742771_C,1000010010000100,1,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0 +24,FXYD5_rs1046294_T,1000010001001000,1,0,0,0,0,1,0,0,0,1,0,0,1,0,0,0 +25,FXYD5_rs1046294_C,1000010000100001,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 +26,COPE_rs3177137_A,1000010000010010,1,0,0,0,0,1,0,0,0,0,0,1,0,0,1,0 +27,COPE_rs3177137_G,1000001010000010,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0 +28,AKR1A1_ rs9147_T,1000001001000001,1,0,0,0,0,0,1,0,0,1,0,0,0,0,0,1 +29,AKR1A1_ rs9147_C,1000001000101000,1,0,0,0,0,0,1,0,0,0,1,0,1,0,0,0 +30,SERBP1_rs4655707_A,1000001000010100,1,0,0,0,0,0,1,0,0,0,0,1,0,1,0,0 +31,SERBP1_rs4655707_G,1000000110000001,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1 +32,PARK7_rs226249_T,1000000101000010,1,0,0,0,0,0,0,1,0,1,0,0,0,0,1,0 +33,PARK7_rs226249_C,1000000100100100,1,0,0,0,0,0,0,1,0,0,1,0,0,1,0,0 +34,EIF3G_rs7401_T,1000000100011000,1,0,0,0,0,0,0,1,0,0,0,1,1,0,0,0 +35,EIF3G_rs7401_C,0110100100000000,0,1,1,0,1,0,0,1,0,0,0,0,0,0,0,0 +36,VDAC2_rs11543_G,0110011000000000,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0 +37,VDAC2_rs11543_C,0110000010010000,0,1,1,0,0,0,0,0,1,0,0,1,0,0,0,0 +38,NDUFB7_rs9543_C,0110000001100000,0,1,1,0,0,0,0,0,0,1,1,0,0,0,0,0 +39,NDUFB7_rs9543_G,0110000000001001,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,1 +40,PDIA6_rs4758_G,0110000000000110,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,0 +41,PDIA6_rs4758_A,0101101000000000,0,1,0,1,1,0,1,0,0,0,0,0,0,0,0,0 +42,EIF5A_rs1054378_T,0101010100000000,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0,0 +43,EIF5A_rs1054378_C,0101000010100000,0,1,0,1,0,0,0,0,1,0,1,0,0,0,0,0 +44,HSBP1_rs4522_G,0101000001010000,0,1,0,1,0,0,0,0,0,1,0,1,0,0,0,0 +45,HSBP1_rs4522_A,0101000000001010,0,1,0,1,0,0,0,0,0,0,0,0,1,0,1,0 +46,COX7A2L_rs8162_T,0101000000000101,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,1 +47,COX7A2L_rs8162_C,0100100010000100,0,1,0,0,1,0,0,0,1,0,0,0,0,1,0,0 +48,RPL36AL_rs17121611_G,0100100001001000,0,1,0,0,1,0,0,0,0,1,0,0,1,0,0,0 +49,RPL36AL_rs17121611_A,0100100000100001,0,1,0,0,1,0,0,0,0,0,1,0,0,0,0,1 +50,SCD_rs1054411_C,0000011010010000,0,0,0,0,0,1,1,0,1,0,0,1,0,0,0,0 +51,SCD_rs1054411_G,0000011001100000,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0 +52,XRN2_rs11471969_C,0000011000001001,0,0,0,0,0,1,1,0,0,0,0,0,1,0,0,1 +53,XRN2_rs11471969_CTT,0000011000000110,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0 +54,HSP90AB1_rs13296_A,0000010110100000,0,0,0,0,0,1,0,1,1,0,1,0,0,0,0,0 +55,HSP90AB1_rs13296_G,0000010101010000,0,0,0,0,0,1,0,1,0,1,0,1,0,0,0,0 +56,NDUFA8_rs4679_G,0000010100001010,0,0,0,0,0,1,0,1,0,0,0,0,1,0,1,0 +57,NDUFA8_rs4679_A,0000010100000101,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1 +58,H1-10_rs13438_A,0000001111000000,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0 +59,H1-10_rs13438_G,0000001100110000,0,0,0,0,0,0,1,1,0,0,1,1,0,0,0,0 +60,PPP1R11_rs6539_C,0000001100001100,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0 +61,PPP1R11_rs6539_T,0000001100000011,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 +62,MRPS21_rs8006_G,0000000011110000,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0 +63,MRPS21_rs8006_C,0000000011001100,0,0,0,0,0,0,0,0,1,1,0,0,1,1,0,0 +64,SLC39A6_rs1050631_C,0000000011000011,0,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1 +65,SLC39A6_rs1050631_T,0000000010101010,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1,0 +66,CKS2_rs14867_T,0000000001010101,0,0,0,0,0,0,0,0,0,1,0,1,0,1,0,1 +67,CKS2_rs14867_C,0000000000111100,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0 +68,RRAGA_rs2233802_C,0000000000110011,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1 +69,RRAGA_rs2233802_A,0000000000001111,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1 +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, +,,,,,,,,,,,,,,,,,, \ No newline at end of file diff --git a/modules/sanger/postcode/tests/merfish_nextflow.config b/modules/sanger/postcode/tests/merfish_nextflow.config new file mode 100644 index 00000000000..308a54e7b08 --- /dev/null +++ b/modules/sanger/postcode/tests/merfish_nextflow.config @@ -0,0 +1,8 @@ +nextflow.enable.moduleBinaries = true + +docker.enabled = true + +//params.modules_testdata_base_path = "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/" +params.modules_testdata_base_path = "/lustre/scratch126/cellgen/cellgeni/tl10/modules/modules/sanger/postcode/tests/" + +process.ext.args = "--codebook_target_col L-probe" \ No newline at end of file diff --git a/modules/sanger/postcode/tests/merfish_peak_locations_sample.csv b/modules/sanger/postcode/tests/merfish_peak_locations_sample.csv new file mode 100644 index 00000000000..360dd8237c5 --- /dev/null +++ b/modules/sanger/postcode/tests/merfish_peak_locations_sample.csv @@ -0,0 +1,10001 @@ +,y_int,x_int +564724,17166,17438 +594247,19001,18654 +545244,5204,16735 +215249,17541,3739 +527790,4064,15977 +378382,15567,10113 +1434,5176,1162 +309880,2199,7406 +624230,6771,20010 +565417,3046,17521 +615676,8000,19659 +521182,4701,15628 +538819,8712,16465 +91468,15510,14127 +361632,6144,9475 +291044,15416,6582 +345786,7045,8784 +615269,4506,19650 +588382,6988,18477 +330194,2171,8206 +546949,19111,16754 +357623,9320,9266 +473380,1654,13869 +133906,17667,20498 +643741,4033,20819 +204028,18183,3277 +632385,20133,20272 +6349,7126,1729 +212768,14327,3642 +140298,3429,21241 +519710,9736,15558 +66008,1354,10432 +479275,14388,13995 +113681,11400,17421 +409874,14162,11274 +583040,19764,18164 +487755,9158,14346 +207920,11500,3454 +44689,17069,6976 +359612,7478,9401 +16773,3144,3161 +654505,18661,21189 +512616,10300,15284 +197189,15710,3065 +132171,6704,20387 +498400,4164,14774 +90353,15868,13891 +287041,19219,6373 +475489,335,13924 +434463,14536,12292 +424671,3970,11848 +37075,10265,6009 +205435,11307,3386 +104420,13903,15975 +531986,1513,16098 +466794,2984,13597 +415270,2028,11541 +251217,2680,5128 +610686,6476,19411 +272703,12998,5911 +296220,1370,6806 +270425,12397,5839 +411010,3321,11376 +600503,14993,19013 +473420,1907,13800 +480159,1378,14158 +435507,4781,12299 +79642,15493,12355 +167817,18158,1922 +65905,19894,10352 +533758,16363,16103 +166387,5690,1945 +438980,16825,12458 +329841,19137,8076 +632129,18021,20277 +249787,9857,5087 +521131,4467,15624 +59722,15538,9435 +196106,6646,3056 +305508,3260,7200 +277732,17275,6039 +351960,542,9069 +86772,14752,13405 +374940,3992,10020 +378250,13580,10163 +524226,12432,15786 +430463,15322,12130 +289255,19100,6451 +19002,663,3487 +655839,5968,21298 +303301,3083,7089 +390803,5040,10577 +478918,11666,14067 +295151,11834,6788 +397808,6025,10821 +385126,14093,10400 +136426,19624,20687 +570141,5614,17800 +430821,18395,12032 +258969,9658,5402 +35089,16335,5545 +106647,12501,16426 +38528,13676,6101 +434762,18505,12297 +609460,14219,19330 +617102,1602,19736 +210534,14102,3585 +467687,12199,13550 +56791,7526,9074 +30593,140,5006 +192969,18953,2904 +559633,10789,17183 +83379,18165,12856 +509524,3296,15205 +450847,2122,12976 +391462,11311,10561 +116302,17144,17848 +588927,12004,18530 +544470,17809,16649 +506654,17098,15045 +120724,12521,18441 +182007,2559,2475 +381525,2191,10323 +616375,15423,19603 +589293,15168,18476 +133928,17855,20495 +618472,14487,19729 +366829,12954,9677 +483061,8809,14224 +628545,3963,20184 +178147,10146,2320 +516335,1861,15489 +224513,5045,4102 +614702,25,19649 +426716,2090,12020 +395156,3775,10716 +468177,16055,13553 +370926,8839,9826 +501919,14850,14849 +229556,8814,4359 +36414,18470,5742 +489217,2540,14496 +172343,17970,2115 +194988,17194,2967 +603460,848,19204 +375679,11888,9995 +17043,7375,3168 +62011,14560,9778 +296515,3228,6837 +517349,10586,15518 +624017,5029,20072 +74347,3089,11594 +600100,11197,18973 +562304,15415,17310 +258284,4912,5408 +294730,7439,6737 +8043,15988,1964 +387149,11384,10416 +469057,3065,13668 +112360,9717,17128 +387371,13703,10452 +453987,9749,13046 +479973,20028,14003 +370341,2785,9800 +358936,2368,9402 +339684,12706,8516 +181637,19399,2371 +64690,19610,10135 +547730,6608,16811 +648870,8481,21061 +301547,7046,7042 +388238,1849,10497 +250905,19073,5075 +132040,4589,20334 +528738,13136,15990 +94527,6363,14625 +354533,3241,9174 +424494,3194,11864 +267782,9410,5747 +46532,10380,7410 +147414,15431,1082 +93151,2898,14501 +142399,16277,892 +599752,8319,19005 +270320,11159,5792 +604728,12794,19204 +219278,12132,3937 +372981,8440,9901 +191570,6506,2842 +287858,5988,6478 +513725,19775,15256 +92049,4229,14261 +171660,11655,2096 +460529,8872,13314 +64134,9883,10196 +119025,3845,18281 +508919,17409,15106 +470855,19527,13704 +87483,6680,13552 +531514,16691,16039 +76339,17232,11827 +178942,15979,2360 +139651,15569,21126 +538368,4009,16409 +284529,16142,6331 +294467,4628,6717 +498772,6956,14760 +447373,11037,12785 +411922,11215,11360 +160212,10506,1650 +255446,269,5341 +450717,498,13009 +116960,8473,17960 +381864,5625,10301 +500014,17113,14822 +344236,11977,8671 +83664,2724,13059 +401465,19532,10922 +101921,9071,15520 +239750,392,4744 +1891,11660,1145 +539724,16623,16415 +387561,15670,10471 +418942,14808,11587 +354074,18324,9101 +35403,1460,5790 +129855,7446,20078 +367768,370,9708 +10289,13563,2200 +19073,1545,3417 +62234,17398,9763 +151945,17440,1286 +512094,5575,15278 +415277,2049,11492 +560193,15748,17175 +345941,8071,8849 +191016,2735,2837 +270594,14072,5854 +24143,7297,3950 +505093,2753,15039 +236763,16253,4611 +136414,19477,20788 +207495,8347,3442 +423350,12605,11788 +450602,19487,12930 +6288,5976,1788 +194007,7492,2962 +77962,5137,12237 +102800,4708,15684 +262840,5233,5559 +205079,7896,3396 +172137,16013,2118 +104683,18267,15990 +627521,14084,20139 +390765,4538,10624 +41487,3309,6546 +154653,369,1463 +134258,3556,20601 +561085,4875,17324 +215358,19043,3739 +653041,5659,21229 +79436,10544,12348 +266114,14350,5639 +83222,15254,12906 +614586,19730,19512 +353353,11982,9086 +407033,9275,11144 +492700,13076,14572 +340193,17167,8520 +281197,7341,6225 +593222,10917,18661 +307412,26,7266 +217478,16161,3800 +312229,2244,7512 +318457,18647,7640 +126667,12480,19359 +243263,11683,4797 +13107,1172,2680 +5042,5599,1599 +215589,72,3826 +302866,19257,7059 +307069,16101,7155 +321044,1089,7837 +341925,12782,8573 +617236,2742,19699 +149058,10711,1121 +441535,19688,12545 +404025,2406,11137 +97945,3763,15033 +654619,19893,21207 +57705,635,9189 +237724,3210,4644 +382903,13849,10327 +133939,18087,20537 +235784,6003,4545 +243800,16968,4813 +348426,11015,8935 +349541,19724,8875 +358456,16346,9271 +104167,8649,15938 +364643,13165,9526 +553903,808,17043 +160983,17284,1660 +314554,4366,7548 +246578,1055,5017 +48481,2487,7742 +240896,10245,4720 +38659,16667,6166 +364817,14416,9515 +19843,15129,3451 +215364,19082,3699 +380564,13363,10229 +284468,15979,6334 +424388,1943,11869 +208288,15075,3506 +327169,15621,7938 +346785,13148,8857 +651316,11480,21139 +502021,15511,14883 +336089,19686,8312 +578026,15862,17991 +439464,1491,12509 +81692,10164,12712 +189439,9071,2761 +115031,16590,17635 +630266,18263,20184 +104359,12533,15875 +290990,15151,6596 +218844,8845,3869 +92144,5761,14286 +557993,16888,17115 +351056,12175,9031 +630954,5381,20272 +167952,18918,1921 +70004,10413,10896 +278012,155,6140 +325354,19062,7886 +401297,17494,10931 +539741,16703,16432 +618429,14035,19760 +411320,6424,11371 +81373,3445,12763 +112128,5409,17213 +395144,3624,10792 +482918,6998,14195 +391124,8428,10622 +536101,2370,16289 +412171,13816,11321 +252843,16432,5166 +300531,17823,6911 +394563,18589,10636 +398185,9916,10833 +635406,9970,20425 +252960,17443,5150 +504818,334,15016 +637168,5097,20541 +430567,16074,12081 +516442,2689,15506 +455429,2902,13184 +156794,19582,1429 +488354,14430,14404 +109593,4020,16889 +54027,19119,8419 +407453,12549,11147 +462272,3057,13418 +11949,2434,2574 +225337,12564,4121 +90435,16990,13942 +511241,17439,15240 +443056,13301,12582 +611393,11972,19430 +401498,19640,10915 +58596,15695,9209 +88417,2652,13774 +456559,13282,13135 +498448,4370,14840 +111354,12618,17013 +580811,19932,18160 +530010,4215,16030 +388185,1327,10549 +472851,16576,13735 +491145,19299,14497 +258315,5248,5429 +449024,6424,12925 +512540,9009,15296 +526036,8288,15865 +641777,6471,20714 +390110,18600,10541 +600384,14294,18962 +484703,2136,14332 +483725,13986,14182 +79776,17164,12379 +100082,19916,15246 +87723,11058,13553 +49686,2470,7812 +201536,15802,3255 +399050,17444,10812 +500983,6657,14913 +44966,2824,7188 +167813,18150,1919 +60417,7360,9623 +273862,3501,6003 +628321,572,20172 +537872,18033,16322 +50920,2568,8161 +47812,11548,7523 +648191,2588,21053 +356337,19162,9222 +253236,374,5259 +327324,16585,8010 +326672,11128,7948 +461958,22,13447 +435258,2920,12337 +342686,18712,8619 +228310,19002,4210 +295221,12767,6731 +100414,5589,15380 +192844,18417,2867 +448904,4963,12856 +234028,11471,4467 +448924,5069,12893 +573224,13199,17879 +201785,17968,3233 +490455,13168,14458 +352204,3209,9121 +245539,11697,4891 +52993,1220,8436 +301704,8243,7060 +499035,9638,14760 +480707,8137,14141 +113277,5651,17445 +558486,1004,17189 +470019,12738,13628 +308573,10089,7257 +140316,3497,21298 +458202,7142,13237 +280779,3267,6227 +160076,9380,1591 +540481,3040,16566 +393385,8644,10656 +64127,9763,10035 +49107,14581,7736 +411322,6448,11363 +361729,7236,9464 +241299,15507,4777 +564946,18992,17408 +505423,6419,15040 +72326,9261,11225 +125879,18901,19261 +56783,7471,9067 +536425,5091,16305 +530831,11293,16080 +144995,14225,995 +221131,8551,4017 +581112,2893,18197 +347175,18723,8804 +4733,19862,1420 +176426,14024,2232 +403887,200,11120 +478187,4448,14063 +245336,9971,4887 +346322,10826,8799 +378745,17611,10095 +454447,13399,13099 +401630,264,11019 +205915,15786,3375 +318966,2272,7685 +506162,12953,15025 +606825,11092,19246 +28655,7408,4808 +377537,6842,10080 +604406,10174,19178 +646561,8526,20914 +424740,5270,11847 +643516,1298,20888 +238900,12880,4674 +549135,18328,16834 +321026,903,7798 +239417,18126,4659 +311889,19455,7347 +380151,9093,10243 +263424,10706,5570 +112865,18537,17252 +125992,591,19522 +214522,10773,3730 +651980,17109,21115 +641454,3615,20792 +570897,12278,17756 +514655,7328,15354 +139576,14344,21094 +553189,14109,16950 +390770,4564,10612 +165556,17473,1783 +334015,2291,8351 +454276,11880,13028 +220383,1844,4003 +133052,3203,20530 +36313,16616,5819 +645042,16315,20886 +453573,6325,13059 +139844,18010,21160 +81988,15566,12710 +210412,12796,3567 +550505,11874,16892 +448947,5211,12876 +307263,18113,7254 +295712,17005,6710 +219862,17781,3875 +542574,1533,16604 +541213,10244,16569 +542839,4367,16655 +579314,8072,18148 +464295,775,13517 +3832,4560,1456 +635176,8152,20442 +516272,1213,15428 +347596,2345,8949 +429744,9976,12041 +207189,5508,3500 +511106,16533,15172 +466785,2927,13598 +133222,5846,20434 +6716,14129,1751 +448321,19474,12804 +205214,8817,3421 +321307,2547,7779 +574945,7949,17944 +114486,6422,17611 +496757,9478,14662 +11973,2990,2519 +194334,10462,2955 +176289,12878,2227 +297421,10511,6863 +81642,9362,12814 +648914,8579,21069 +103405,16829,15856 +253798,6044,5270 +92920,18402,14266 +311675,18102,7349 +294906,9168,6714 +637057,4398,20542 +26995,19260,4363 +324983,16557,7899 +468272,16448,13616 +137494,18466,20835 +202902,7566,3302 +278292,1903,6178 +473372,1615,13851 +271964,6720,5899 +63,2875,959 +49925,6416,7945 +463752,17250,13380 +26983,19156,4311 +468209,16112,13582 +89250,16678,13842 +317473,9806,7637 +178400,12287,2348 +234313,14266,4506 +579271,7901,18090 +537978,19481,16343 +139194,6336,21189 +300951,2427,7027 +502645,931,14969 +439439,575,12566 +17766,19760,3185 +66593,11808,10498 +368575,7892,9735 +648856,8390,21064 +605016,15702,19129 +504616,18390,15003 +58663,16629,9130 +241524,16737,4748 +383444,19015,10272 +638348,15354,20592 +215656,504,3808 +137842,4051,21032 +493274,18585,14564 +598851,20030,18881 +315692,13284,7565 +575187,10198,17912 +292609,8596,6638 +505191,3830,15049 +328907,10952,8085 +601754,7355,19032 +386432,5874,10487 +399685,3172,10939 +194529,12996,2968 +87341,4202,13647 +189137,5970,2727 +628327,599,20192 +233158,1625,4483 +643553,2788,20895 +494908,12265,14623 +266655,19926,5631 +109335,18838,16674 +506592,16738,15012 +642896,16498,20712 +30426,17286,4883 +440481,10016,12521 +309746,1125,7354 +374721,1778,9982 +244622,3734,4922 +410067,15986,11300 +607443,16357,19303 +469334,5291,13634 +286134,10100,6389 +399635,2775,10915 +310310,5935,7356 +134813,12542,20631 +125229,9617,19249 +177702,6819,2357 +649893,17995,21027 +571466,16947,17784 +495212,15410,14596 +276770,8921,6042 +212076,9730,3598 +235272,1248,4582 +234418,15169,4536 +299458,8309,6969 +593452,12794,18650 +399827,4495,10974 +562412,15988,17314 +376964,1776,10085 +254117,8220,5218 +134845,12847,20586 +509439,1933,15178 +349168,17833,8906 +130874,4502,20275 +102700,3395,15805 +413008,1267,11466 +171206,8512,2104 +421350,14331,11672 +423509,13658,11808 +149057,10706,1140 +433038,2009,12249 +296750,4413,6799 +594802,4076,18752 +263830,14125,5613 +158899,18165,1553 +35842,9444,5828 +149061,10717,1128 +50541,17882,7802 +392895,3352,10643 +5472,12594,1576 +655764,5720,21358 +381307,422,10320 +444161,2852,12691 +404283,3954,11132 +508452,12706,15113 +605245,17557,19184 +452113,12867,12963 +570156,5672,17701 +294395,4078,6766 +223733,17154,4038 +97431,15297,14954 +123476,18208,18966 +122300,18800,18699 +450679,87,13021 +161548,925,1714 +144607,10307,987 +395492,7050,10749 +7989,15201,1853 +397705,5266,10869 +275955,1570,6074 +310099,4371,7344 +224832,7264,4126 +536416,5059,16345 +104946,2339,16188 +397339,2080,10848 +593927,15751,18665 +108681,8943,16635 +307817,4157,7332 +244111,19233,4847 +177560,4950,2347 +111649,17761,17019 +367384,16926,9705 +85283,10125,13215 +241133,13500,4716 +53754,16421,8472 +263374,10141,5548 +166724,7792,1927 +479331,14846,14075 +650032,18754,21031 +236727,16086,4551 +466301,18512,13489 +161745,1946,1706 +227846,14946,4272 +305531,3354,7192 +19248,4981,3404 +613552,10975,19541 +118061,8007,18198 +472546,13433,13716 +639042,2800,20637 +18923,19116,3260 +539323,11908,16409 +584965,16189,18279 +80923,16484,12622 +259869,19360,5397 +66440,9339,10470 +580326,16168,18113 +519815,10312,15558 +350109,4625,9017 +321360,2808,7765 +166048,1754,1896 +226027,18222,4158 +83918,7398,13108 +286293,11559,6373 +162236,7672,1726 +404803,10486,11122 +234508,15915,4525 +292703,9446,6672 +387103,10962,10442 +534155,303,16239 +455637,5172,13166 +168907,7966,2045 +106358,5948,16322 +296111,524,6855 +291354,17704,6529 +163901,1636,1853 +333115,14077,8271 +498183,2153,14817 +259591,17109,5418 +214815,13108,3740 +582506,14505,18174 +435321,3554,12302 +566572,14768,17503 +460620,9550,13365 +553264,15299,16952 +603211,19041,19050 +404458,6372,11079 +204328,648,3398 +331653,561,8280 +38871,19923,6031 +547173,1648,16826 +243083,9959,4863 +24795,1124,4113 +140012,43,21372 +122158,15932,18632 +267560,8200,5743 +37479,17007,5873 +358549,18059,9266 +140774,11351,21224 +303268,2945,7143 +248840,1226,5050 +584437,12365,18291 +644139,8244,20894 +338910,5624,8540 +637199,5342,20553 +251545,6213,5159 +467392,7300,13606 +312712,7867,7497 +239672,19902,4686 +230228,15756,4274 +9581,2397,2136 +265179,5696,5655 +150832,6810,1198 +228264,18676,4219 +596914,3465,18844 +542977,5309,16618 +243202,11151,4816 +346920,15393,8855 +24426,13648,4036 +413283,4336,11413 +211527,5416,3616 +36973,9016,5949 +276140,3332,6049 +335605,16218,8365 +405346,14485,11079 +241762,18276,4747 +482138,18784,14126 +138072,7636,20944 +425996,16894,11913 +117551,18480,18062 +285753,7099,6394 +59219,6597,9383 +179765,2779,2429 +382119,7358,10273 +629127,9867,20237 +387554,15595,10462 +607786,19163,19218 +293609,18323,6669 +541878,15851,16541 +528711,12477,15991 +30048,9896,4896 +597467,8213,18893 +356021,15651,9191 +471847,8051,13768 +484,10884,973 +408799,3038,11264 +91608,17422,14121 +240936,10948,4714 +302978,971,7108 +425458,11752,11911 +519880,11103,15568 +501196,8970,14846 +207196,5622,3464 +362050,10083,9479 +345076,19453,8660 +36110,13110,5739 +538393,4368,16455 +638358,15384,20605 +468216,16120,13550 +635622,12105,20509 +307123,16504,7204 +93632,11670,14404 +140234,2280,21283 +505955,10850,15006 +261969,17838,5483 +373459,12669,9886 +160354,11293,1605 +134680,10505,20608 +509493,2937,15182 +513991,1468,15412 +410979,3225,11348 +552472,9232,16990 +248421,17449,4978 +304463,11431,7096 +448677,2622,12918 +631845,15667,20292 +534333,1751,16274 +167121,11372,1965 +183624,17719,2490 +312366,4918,7463 +76029,11377,11902 +456248,10428,13135 +493081,16490,14532 +161436,616,1698 +345429,3326,8831 +475761,2674,13967 +390639,3291,10567 +489195,2278,14484 +505066,2574,15006 +50228,13549,7879 +628638,5376,20201 +438552,12475,12409 +375145,6817,9975 +26722,14751,4456 +331117,14102,8203 +120204,2661,18587 +74966,13745,11582 +217255,13245,3802 +263923,14780,5540 +501896,14521,14925 +96925,6628,14876 +321261,2376,7781 +337070,8743,8484 +109049,15280,16700 +166626,6984,1952 +548600,13815,16802 +110537,19175,16803 +202789,6728,3295 +565342,2531,17482 +39637,12874,6255 +333352,15931,8233 +473809,6820,13827 +485852,13051,14292 +190380,17495,2754 +300188,14985,6899 +256386,8778,5343 +478627,9450,14012 +123577,20117,18870 +304135,9155,7137 +269293,2847,5828 +463041,10958,13409 +69228,17144,10711 +87228,1864,13627 +139657,15665,21202 +275600,18519,5982 +182689,9197,2540 +158498,14339,1517 +472541,13237,13760 +587448,17542,18432 +401559,19942,10903 +143080,19257,877 +491118,18905,14446 +429864,10878,12087 +641730,6217,20724 +645263,17661,20901 +401319,18303,10925 +446753,6013,12757 +493547,668,14610 +517817,15549,15476 +427393,9137,11993 +119241,7321,18401 +528694,12365,15955 +416836,16299,11478 +411803,10339,11311 +437986,7401,12421 +524390,13663,15711 +338431,844,8531 +621538,1599,19972 +447431,11347,12784 +712,14318,996 +623820,2776,19996 +548401,12127,16800 +243639,16106,4821 +247140,6642,5000 +65737,16730,10344 +309181,15078,7284 +457444,20011,13120 +102076,11948,15584 +57076,11907,9095 +595614,11652,18732 +374543,516,9967 +190018,14766,2771 +463632,15730,13458 +325436,19652,7860 +446218,487,12837 +215277,17735,3691 +201763,17712,3180 +360394,14477,9388 +99630,14633,15321 +246683,2026,4957 +595950,14557,18751 +109732,6137,16804 +562312,15435,17302 +439264,19110,12425 +555314,13529,17059 +130590,18244,19956 +473010,17505,13778 +215250,17544,3764 +450483,19004,12864 +94411,3632,14547 +96520,18843,14704 +333656,19056,8235 +246706,2124,4971 +85666,16635,13264 +490252,11810,14485 +606855,11162,19258 +94003,16897,14442 +319678,9090,7731 +54911,16338,8592 +638718,17858,20560 +616924,20077,19664 +410302,17382,11257 +380570,13607,10175 +83136,14239,12940 +195311,228,3008 +148685,7738,1130 +444181,3189,12668 +60459,8469,9491 +46195,5086,7416 +6879,16374,1795 +520073,14820,15566 +186925,6837,2682 +297344,9974,6864 +372862,6552,9880 +77285,12522,12007 +131937,2129,20395 +322750,16967,7814 +392527,5,10686 +357032,3991,9270 +405114,12410,11078 +231795,10427,4373 +110117,13305,16846 +380007,8079,10168 +297252,9307,6861 +228142,16845,4203 +256139,7133,5317 +625407,15085,20052 +152452,480,1344 +59042,3226,9460 +365687,2460,9701 +594669,3141,18734 +267129,3975,5711 +152719,2518,1351 +504624,18492,14993 +240643,8043,4748 +335789,17708,8336 +69735,4367,10967 +59391,10066,9413 +427856,12367,11953 +381971,6200,10270 +609072,11024,19383 +133844,16508,20432 +190112,15400,2728 +127406,4681,19597 +524976,19179,15744 +342857,19985,8648 +320384,16541,7686 +146208,5583,1061 +613151,7176,19594 +124715,19413,19141 +467639,11022,13593 +536705,8256,16290 +373804,15242,9874 +210672,16033,3533 +8696,7263,2008 +216995,11837,3791 +648798,7474,21042 +512564,9655,15341 +77518,16006,11959 +105625,14776,16189 +578316,17903,17994 +433212,3496,12225 +315793,14808,7591 +434944,1190,12319 +319320,4518,7689 +9026,12444,2010 +7468,6305,1980 +509105,18677,15094 +536748,8718,16365 +254230,9035,5215 +8245,19373,1897 +278245,1649,6130 +473111,18730,13716 +142223,15339,819 +554394,5010,17009 +502052,15601,14923 +356114,16232,9212 +347460,1280,8887 +576661,3753,18059 +490124,11148,14466 +100776,11880,15433 +483887,15142,14191 +212976,17569,3601 +311882,19427,7354 +551918,3938,16937 +613405,9001,19524 +234009,10661,4483 +537580,16167,16342 +33060,1076,5377 +347062,17096,8818 +304061,8466,7077 +285263,2473,6384 +596825,2318,18886 +443788,19565,12650 +453412,4125,13082 +259640,17373,5430 +28330,1319,4768 +60458,8460,9654 +581017,2258,18243 +37089,10349,5923 +421193,13024,11734 +555486,15174,17023 +308375,8364,7338 +308661,10662,7262 +634003,16761,20351 +533718,16186,16110 +194693,14601,2947 +246634,1559,5030 +279904,15975,6164 +82720,8446,12843 +298299,19423,6860 +323793,4580,7844 +371256,11634,9830 +389066,10003,10508 +539815,17258,16427 +141016,17142,21247 +473018,17617,13735 +590757,8948,18546 +110980,6596,16972 +133172,5205,20509 +126802,15458,19425 +522548,17746,15635 +69910,7979,10936 +133365,8648,20442 +232891,19806,4373 +182902,10705,2519 +436599,16507,12336 +466304,18524,13488 +128208,19192,19662 +115944,12388,17905 +138021,7023,21042 +225026,8808,4165 +217696,17862,3851 +410006,15356,11282 +517649,14370,15471 +305934,7093,7241 +650614,3022,21156 +393029,4432,10682 +381479,1666,10331 +275177,15328,5976 +595001,5930,18817 +57738,1001,9195 +117540,18298,17933 +111143,9495,17058 +635594,11711,20425 +60596,11419,9538 +10172,12124,2189 +421205,13069,11725 +148045,2036,1121 +601549,5815,19051 +423951,18279,11776 +340621,32,8633 +575639,15168,17946 +389616,14412,10540 +40975,15143,6414 +180242,8123,2434 +588283,6145,18462 +267794,9466,5775 +297104,8432,6858 +228778,2416,4294 +550235,9000,16851 +63881,5490,10108 +567792,4871,17666 +178422,12352,2326 +507100,554,15090 +162048,5918,1690 +242749,7385,4858 +622944,12867,19948 +303021,1153,7140 +173327,7538,2130 +635379,9851,20481 +626460,6279,20139 +94786,11055,14657 +363535,3170,9503 +478022,3446,14044 +313130,11748,7481 +116261,16876,17758 +471016,799,13735 +143102,19342,828 +307101,16203,7159 +268380,14494,5715 +104947,2531,16157 +227703,13790,4220 +511429,19140,15193 +567513,1810,17613 +63951,6778,10122 +420798,10255,11691 +102787,4630,15746 +34555,7461,5527 +616130,12783,19613 +458462,8952,13285 +403234,15051,11029 +470555,16884,13703 +654006,15754,21223 +213170,19338,3599 +57253,14147,9013 +555564,16032,17049 +537294,13888,16315 +597968,12587,18837 +57775,2213,9101 +591851,17279,18611 +567215,19668,17571 +68432,2734,10809 +635958,15325,20480 +11964,2730,2433 +568851,15451,17620 +542410,19128,16496 +112564,13027,17118 +582913,18004,18196 +117713,1492,18199 +373763,14863,9929 +387238,12334,10483 +471817,7895,13788 +646476,7141,20982 +78314,11945,12221 +120345,5841,18450 +378440,15810,10126 +479830,18582,14045 +442314,6033,12656 +149279,12519,1119 +41799,8677,6721 +276171,3586,6086 +230935,1674,4418 +174884,19646,2124 +410149,16411,11279 +226740,3884,4231 +463720,16934,13442 +235453,2700,4566 +597443,8155,18924 +445400,14343,12723 +644508,12319,20889 +272299,10081,5866 +65662,15424,10354 +11728,18321,2334 +348717,12746,8949 +499707,15048,14755 +29799,6511,4974 +566901,17020,17558 +636606,20035,20460 +253115,18743,5126 +423767,17297,11780 +520608,552,15705 +357864,11682,9304 +329073,12084,8091 +69043,14081,10739 +592219,1574,18706 +576325,20067,17925 +647731,18659,20994 +574491,3862,17926 +217920,492,3910 +621761,4513,19968 +265461,8873,5673 +471241,3018,13763 +332443,8620,8212 +208140,13804,3468 +564468,15117,17367 +183411,15764,2500 +25174,6436,4137 +609725,16192,19308 +354262,649,9210 +128248,19710,19720 +401321,18305,10888 +496088,2979,14730 +644088,7148,20857 +632654,3924,20418 +343330,5459,8729 +8028,15885,1867 +498445,4347,14782 +510413,10620,15192 +201520,15617,3200 +474022,8242,13887 +467004,4415,13548 +172433,18669,2068 +445667,16251,12713 +586722,13085,18375 +116979,8688,17965 +235520,3879,4569 +431923,10640,12139 +369159,13110,9718 +549786,4904,16847 +645993,3230,20939 +82435,1743,12962 +539414,13464,16479 +269563,5412,5858 +255292,17845,5258 +97687,18926,15015 +625834,18563,20059 +492875,14425,14550 +353509,12859,9118 +242567,5754,4816 +136856,7762,20862 +274812,12308,6023 +425727,14009,11870 +575866,16722,17928 +134475,7811,20568 +299613,9628,6939 +397421,2600,10869 +551099,16835,16889 +336142,441,8409 +571418,16784,17794 +608263,3485,19309 +568611,12253,17610 +591303,14151,18610 +595982,14700,18802 +501335,10717,14884 +82373,235,12833 +106259,4223,16432 +225988,18027,4112 +57464,17564,9069 +398562,12846,10877 +651102,7340,21114 +609300,12486,19393 +29316,18635,4757 +104711,18434,15894 +363563,3365,9560 +337471,12799,8420 +276226,3930,6070 +513948,1067,15390 +547476,4709,16823 +442400,7056,12655 +367950,1703,9744 +341617,10110,8641 +115223,18815,17572 +334723,8744,8330 +31274,12573,4988 +360486,15142,9350 +599134,3107,19020 +307103,16209,7212 +292245,5078,6651 +325993,4328,7999 +449769,12740,12930 +523878,8490,15782 +575265,10824,17916 +367127,14793,9668 +38101,6812,6183 +75164,16779,11604 +627654,15099,20109 +480365,3048,14137 +539728,16634,16481 +614740,192,19616 +10318,14419,2264 +320363,16487,7740 +435442,4400,12332 +385638,18704,10367 +196349,8197,3042 +470353,14780,13662 +452341,14747,12959 +327572,18960,8035 +397389,2296,10829 +585224,18805,18348 +372133,18796,9818 +429504,7109,12096 +517425,11167,15502 +71987,2084,11261 +577512,12099,18026 +216666,9232,3816 +12269,8378,2455 +564218,12110,17384 +21933,9950,3768 +348889,14105,8931 +444874,9712,12678 +106646,12499,16289 +393215,6708,10638 +619305,1720,19837 +642247,11353,20779 +417490,1856,11649 +501296,9897,14854 +651817,16221,21141 +528443,9692,15993 +603693,2802,19165 +433969,9954,12245 +392431,19223,10625 +63053,13388,9902 +569668,1595,17730 +437746,5291,12431 +460557,9130,13350 +54984,17357,8606 +260957,9111,5467 +506475,15793,15056 +203837,16376,3291 +210797,17483,3562 +161611,1286,1780 +237989,5076,4669 +508729,16349,15145 +141162,6072,905 +21462,2166,3793 +80230,4680,12513 +79625,14983,12429 +655513,4256,21409 +638977,2257,20615 +470016,12719,13693 +272109,8883,5862 +6677,13641,1751 +74397,3967,11633 +77235,11866,11979 +240595,7734,4744 +52882,19538,8257 +508804,16682,15085 +35821,9097,5702 +565723,6367,17488 +60118,1736,9609 +28355,1497,4800 +93470,8383,14438 +159950,7919,1654 +382159,7695,10308 +311157,12586,7420 +466387,19042,13483 +103266,13920,15718 +83750,3820,13113 +619371,2191,19790 +166843,8809,1888 +531420,16166,16021 +380814,15862,10205 +106331,5728,16371 +548058,9898,16796 +152734,2645,1318 +234364,14922,4525 +500957,6515,14930 +170165,18270,1981 +44508,14613,7080 +637570,9117,20538 +67870,14076,10628 +204381,843,3408 +425668,13573,11887 +83677,2849,13096 +309682,358,7384 +573682,17054,17867 +568082,7982,17648 +263459,10786,5585 +27688,11933,4466 +55524,5987,8772 +86104,3174,13406 +427907,12679,11988 +633006,6112,20382 +75067,14820,11566 +538297,3536,16434 +449550,10984,12875 +109346,18916,16702 +442979,12757,12590 +543040,5894,16585 +45380,9659,7239 +331089,13662,8134 +204728,3960,3342 +203754,15899,3316 +55079,18268,8644 +552473,9239,17003 +329721,18527,8072 +218264,2614,3892 +548649,14858,16771 +336465,2550,8412 +94388,3535,14618 +33720,12025,5460 +192368,15378,2829 +443648,17649,12648 +33019,794,5374 +231781,10186,4398 +604568,11103,19206 +212330,11043,3611 +224053,878,4130 +605208,17139,19121 +551427,19046,16864 +375451,10439,10032 +547501,4906,16810 +151689,14908,1276 +157070,1457,1503 +82586,4757,12856 +119109,5394,18429 +38426,11675,6072 +110364,16990,16927 +43812,2519,7059 +348005,7838,8916 +207597,8830,3449 +89425,19603,13858 +569013,16444,17592 +386643,7280,10490 +648254,3037,21081 +390055,18056,10516 +516473,3323,15486 +532932,10756,16161 +489045,788,14448 +235347,1592,4564 +413933,10563,11476 +400767,13994,10947 +107321,5831,16615 +236749,16202,4632 +652194,18359,21148 +332742,10732,8255 +339347,9703,8499 +579570,10413,18131 +11943,2306,2509 +363799,5372,9513 +189968,14232,2732 +367362,16594,9635 +594300,19649,18638 +149541,14202,1186 +547288,2758,16787 +71560,16196,11168 +562839,20095,17284 +279185,9220,6186 +220063,19449,3922 +235619,5008,4583 +156297,14056,1393 +233094,1366,4481 +426662,1476,12001 +26131,4114,4454 +217339,14526,3784 +482614,4153,14199 +400693,13774,10902 +153512,9818,1387 +217079,12153,3784 +543717,12191,16652 +462540,4834,13420 +651448,13118,21119 +487146,4833,14396 +615536,6763,19683 +458283,7809,13259 +249524,8358,5109 +78992,2961,12370 +443922,207,12668 +136531,2735,20862 +621300,18208,19795 +224143,1484,4179 +399457,860,10965 +32670,15823,5301 +364484,11925,9566 +460116,3993,13343 +63324,17356,9957 +147308,14582,1065 +488272,13585,14409 +28055,18220,4473 +472671,14582,13771 +465427,11165,13505 +509904,5704,15191 +339322,9529,8540 +299484,8431,6917 +564990,19134,17397 +624362,7195,20010 +634343,19757,20422 +612672,2005,19587 +487155,4863,14350 +543857,13172,16672 +578578,20033,18006 +656606,13832,21269 +274457,8970,6023 +7380,5410,1968 +197927,3485,3100 +464032,18905,13431 +298622,2030,6958 +163766,943,1858 +326271,6416,7946 +483498,12547,14236 +605144,16423,19211 +213987,5790,3760 +285567,4939,6413 +155216,4926,1420 +272610,12548,5888 +425031,8724,11877 +226569,2290,4204 +478922,11710,14055 +336245,882,8469 +449892,13901,12869 +578597,437,18139 +292190,4158,6629 +53688,15242,8493 +73790,14658,11437 +317670,11696,7618 +454083,10410,13034 +252672,15724,5125 +351684,17804,8986 +598752,18907,18908 +570814,12005,17800 +618236,12488,19742 +263791,13809,5560 +67279,3369,10615 +617929,9088,19701 +501349,10769,14914 +303819,6972,7112 +72524,13622,11271 +569039,16668,17671 +243637,16098,4805 +119193,6593,18267 +234275,14143,4491 +8435,2707,2109 +25598,15820,4249 +499007,9287,14807 +472299,11403,13749 +358142,13561,9261 +393125,5839,10652 +586112,7858,18448 +234949,18500,4533 +7930,14027,1971 +236406,11885,4562 +239893,1384,4723 +474054,8583,13835 +514098,2229,15421 +605774,2175,19247 +583611,5424,18343 +44266,10015,6970 +381381,833,10304 +565248,1027,17506 +215773,1419,3855 +381707,4388,10314 +182903,10709,2491 +195808,4442,3029 +492081,8501,14503 +601189,702,19066 +443989,508,12727 +410569,19850,11226 +378974,19829,10088 +570431,8056,17787 +486528,18103,14307 +231458,6360,4428 +213159,19283,3662 +234936,18433,4536 +475177,17366,13835 +561848,11258,17340 +185660,15169,2630 +547877,7697,16820 +498028,324,14800 +631632,13048,20339 +170452,1103,2096 +616187,13270,19612 +140998,16530,21251 +492763,13447,14525 +435706,6301,12336 +655577,4780,21287 +506601,16774,15011 +155351,6386,1420 +364764,13706,9523 +251026,1123,5128 +9647,3350,2223 +300844,1458,7035 +315451,11407,7527 +36854,6532,5933 +442865,11873,12575 +260624,6301,5488 +9281,16840,2030 +76993,7413,12081 +149848,17497,1180 +125877,18897,19260 +75811,8003,11736 +10036,10225,2240 +49058,13910,7665 +105204,7413,16066 +166570,6883,1944 +222059,16959,4005 +51746,19945,8078 +190664,19082,2735 +41005,15935,6493 +36705,3528,6003 +433351,4581,12251 +85654,16526,13241 +192973,18973,2900 +272801,14186,5940 +395321,5669,10766 +43582,19460,6849 +104755,19023,15942 +217783,19260,3782 +581866,9877,18205 +486384,16780,14259 +367887,1216,9729 +319308,4490,7680 +554168,3830,17029 +350883,11056,9002 +646231,4929,20974 +550712,13350,16848 +636883,3268,20595 +112576,13224,17163 +153418,9103,1338 +53117,4162,8411 +311658,18052,7351 +93814,13355,14509 +175501,7158,2210 +68919,12134,10829 +198511,7928,3128 +50026,8803,7886 +464741,4823,13510 +112147,5852,17193 +164683,9502,1865 +593589,14093,18697 +303647,5519,7130 +312969,10474,7502 +469214,4516,13632 +165942,705,1900 +651374,12142,21151 +122721,6752,18961 +609361,12818,19330 +577474,11915,17996 +165062,12587,1844 +77050,8690,11951 +364894,15148,9599 +78931,2206,12344 +299806,10664,6929 +455874,7120,13187 +232841,19474,4398 +150561,5151,1240 +260218,1934,5481 +176810,16928,2217 +145783,1634,1070 +533076,11460,16172 +54510,9330,8598 +476220,8507,13972 +17328,11682,3155 +519428,6992,15606 +9397,18692,2064 +314802,5949,7547 +339752,13021,8522 +171982,14394,2049 +96345,16547,14807 +498538,5145,14792 +261574,14069,5441 +325300,18530,7848 +177725,7231,2367 +130870,4381,20137 +314757,5648,7559 +90511,17853,13965 +585885,5882,18429 +612126,17263,19488 +271078,19190,5813 +567457,1511,17614 +183908,19481,2541 +74165,19637,11414 +360257,12884,9378 +61015,17389,9577 +269408,3938,5828 +170888,5843,2081 +566703,15963,17514 +354764,4945,9156 +45027,3364,7127 +609236,12070,19319 +543903,13397,16667 +121458,5123,18688 +553813,168,17033 +537251,13397,16306 +391992,15788,10629 +314085,19214,7448 +361985,9571,9480 +64922,2372,10267 +307728,3176,7313 +485464,9650,14269 +380008,8089,10177 +573186,12974,17830 +126502,10514,19353 +290755,13334,6584 +581006,2224,18237 +327811,861,8048 +199749,19033,3116 +609162,11374,19330 +376235,17526,10026 +549322,373,16925 +69153,15795,10707 +245569,12210,4912 +453792,8550,13066 +345256,628,8817 +348971,15699,8881 +473031,17696,13747 +515353,14415,15347 +82569,4544,12967 +461555,17509,13309 +418845,14291,11569 +367091,14601,9665 +369431,15467,9778 +511184,17027,15220 +588789,11149,18464 +140570,7526,21311 +443259,15371,12643 +589634,17304,18486 +607305,14715,19283 +105653,15550,16183 +436391,12902,12363 +393594,10647,10652 +369922,19249,9754 +6652,12816,1737 +212214,10445,3653 +237521,1160,4706 +255846,4673,5308 +541932,16059,16506 +387902,18925,10468 +515133,12103,15413 +503935,13621,14957 +564622,16122,17422 +206879,2427,3476 +425382,11358,11853 +638272,14822,20516 +1943,12630,1155 +69281,17897,10755 +271949,6672,5880 +347484,1406,8945 +272760,13910,5933 +577656,13163,18049 +326286,6792,8019 +495569,18936,14643 +576902,6085,17990 +342817,19429,8621 +142660,17622,859 +217403,15616,3839 +300351,16540,6898 +198492,7865,3096 +547081,217,16801 +564315,12939,17409 +114074,19067,17363 +597035,5185,18898 +371960,17428,9852 +445821,17597,12672 +176213,12407,2221 +380013,8138,10247 +587401,17167,18443 +228663,1522,4319 +630130,17334,20241 +332507,8992,8211 +551378,18504,16909 +544970,2583,16704 +276417,5806,6060 +31692,18404,5001 +418070,7402,11611 +56204,17046,8857 +595668,12165,18802 +253542,3257,5213 +98783,17816,15135 +584117,9782,18268 +551730,1991,16960 +265817,11695,5640 +436125,10334,12302 +345447,3646,8800 +190389,17516,2742 +203399,11691,3341 +491459,1959,14576 +188470,19452,2677 +95435,690,14697 +528185,7082,15968 +256765,11580,5311 +408229,19451,11190 +59197,6154,9357 +398010,7974,10867 +488294,13673,14387 +592921,7910,18698 +244974,7220,4919 +49381,18558,7768 +70140,12797,10866 +136541,3012,20819 +296778,4760,6791 +588709,10507,18470 +296167,924,6809 +419587,19566,11597 +230164,15223,4330 +518993,4519,15524 +29832,7179,4934 +249883,10695,5067 +313110,11637,7434 +248364,17228,5012 +89763,5944,14028 +36486,19755,5766 +509150,19080,15156 +410920,2755,11315 +319917,12528,7726 +264717,2864,5671 +229964,12806,4304 +277314,13210,6085 +489789,7971,14429 +229616,9094,4362 +207019,3435,3435 +485189,6210,14322 +249177,4630,5096 +611845,15809,19471 +115962,12635,17784 +208671,18430,3445 +597069,5431,18874 +284150,12864,6307 +436364,12772,12325 +357422,8070,9265 +477709,19941,13968 +423026,9884,11783 +74195,19981,11405 +217354,14770,3842 +498155,1683,14796 +25656,16418,4117 +552009,4256,16966 +569374,18467,17589 +274018,4852,5977 +460435,8066,13313 +295352,13989,6774 +328060,1980,8132 +221394,11099,3993 +584023,8989,18315 +96436,17331,14801 +222704,4101,4042 +445432,14825,12713 +342269,15708,8579 +293664,18704,6678 +190330,17063,2734 +78026,6099,12133 +478320,5996,14061 +461265,14111,13324 +464178,19628,13432 +136289,17715,20715 +297929,15976,6821 +324645,12712,7928 +572862,10357,17850 +134745,11553,20585 +379465,3816,10177 +426091,17397,11873 +324145,7912,7922 +392726,1899,10661 +403922,813,11101 +559136,6863,17192 +324036,6313,7916 +135268,56,20779 +610485,3586,19425 +110246,15601,16914 +594723,3500,18788 +248895,1553,5045 +455269,753,13197 +117229,13763,18030 +407432,12350,11178 +492416,11529,14519 +32336,8433,5298 +119420,10835,18287 +479468,15959,14029 +234329,14435,4456 +654270,16857,21217 +356289,18257,9196 +231396,6061,4405 +440982,13879,12569 +189079,5502,2740 +591028,11123,18553 +41469,3205,6703 +291356,17711,6568 +396386,14636,10778 +346700,12644,8825 +485611,10914,14269 +656231,8726,21345 +214343,9093,3705 +196035,6364,3003 +448008,17757,12843 +521843,9708,15636 +455310,1270,13162 +614022,15544,19596 +342954,538,8673 +178830,15171,2345 +201613,16284,3242 +54640,11403,8705 +562681,18855,17254 +288246,9185,6498 +272237,9602,5912 +115538,4198,17862 +7040,19044,1817 +75572,3407,11801 +560962,3333,17293 +541215,10248,16569 +306641,11591,7209 +126590,11255,19518 +508840,16833,15088 +650648,3402,21145 +570490,8595,17756 +369642,17044,9780 +178595,13808,2357 +269519,4996,5805 +146434,6946,1024 +476853,12943,13916 +7511,7009,1982 +577791,14367,18016 +251689,7198,5115 +56886,8567,8976 +515674,17025,15361 +660,13612,926 +616445,15940,19643 +395380,5904,10717 +459691,19874,13208 +253094,18413,5140 +336314,1220,8436 +585050,17296,18356 +344482,14213,8751 +327680,19854,7981 +568620,12318,17622 +397045,19993,10780 +474476,11639,13807 +87567,8124,13620 +338613,3089,8558 +299657,10043,6941 +283617,9009,6302 +321434,3315,7795 +601537,5777,19040 +602759,15290,19093 +480088,1009,14119 +514161,2774,15370 +358823,1543,9359 +617619,5945,19716 +351806,18839,9011 +212467,11903,3621 +49468,19265,7713 +535447,14333,16254 +572643,8365,17859 +278900,6784,6164 +492195,9475,14507 +57776,2232,9232 +474599,12735,13866 +646324,6215,20951 +6601,11723,1801 +4669,18765,1497 +83817,5653,13154 +393411,9046,10656 +315066,7808,7588 +216382,6241,3804 +474730,13695,13811 +276396,5679,6045 +306266,8773,7186 +126093,2293,19552 +9136,14557,1994 +349946,3240,9045 +454265,11708,13063 +330501,5977,8177 +100739,10973,15476 +183172,13258,2498 +138730,18529,20960 +276790,9076,6059 +326536,9006,7972 +598784,19069,18826 +310918,11288,7395 +324591,12455,7850 +6218,4809,1777 +57389,16855,9085 +617646,6068,19729 +93979,16558,14468 +87920,13830,13675 +297924,15964,6813 +321519,3799,7763 +61363,2461,9760 +326800,12714,7988 +398506,12583,10813 +413377,4916,11472 +118530,15206,18192 +218306,2875,3885 +26300,7188,4432 +96768,3346,14980 +75742,6091,11869 +211242,2082,3603 +379620,5168,10229 +496907,11053,14684 +213814,4455,3762 +366438,9653,9667 +276205,3758,6048 +48763,7163,7707 +13691,12017,2678 +620970,15119,19796 +568804,14266,17644 +422582,5445,11831 +388125,1045,10492 +61247,764,9810 +157542,5766,1534 +654359,17424,21184 +497187,12509,14683 +114779,11931,17627 +516409,2327,15475 +618851,17424,19712 +634492,2325,20491 +138096,8264,20940 +14664,7728,2894 +442871,11888,12651 +521447,6662,15628 +29586,2603,4835 +453175,2849,13096 +383352,18285,10296 +563018,1831,17375 +178460,12796,2337 +21377,569,3807 +462549,4877,13439 +587316,16788,18397 +591263,14058,18601 +595127,6931,18818 +578392,18509,18074 +207362,6995,3506 +594645,3016,18735 +370140,1264,9815 +530023,4258,16029 +499393,12585,14824 +29527,1481,4831 +276609,7534,6106 +121618,7849,18619 +309078,13902,7290 +375654,11812,9974 +631198,8062,20289 +577682,13305,18032 +477582,18156,13903 +39181,4507,6237 +623459,16975,19956 +129905,8369,20087 +617816,8205,19764 +228000,16042,4246 +610422,2242,19451 +250619,17152,5098 +320630,17867,7723 +224978,8371,4122 +268902,19767,5724 +80500,9989,12539 +350634,9089,8986 +640068,12645,20635 +308362,8295,7335 +122385,19870,18644 +623664,19077,19970 +452690,18655,12999 +38017,4783,6151 +58832,219,9312 +58570,15228,9117 +223811,18615,4057 +328882,10792,8121 +543229,7634,16603 +578219,17052,18031 +622175,7046,19921 +317432,8813,7647 +16080,10542,2924 +495056,13316,14626 +155002,3418,1402 +495752,273,14729 +314097,19488,7446 +543345,8966,16609 +305028,17756,7146 +114947,15511,17511 +436870,18112,12309 +473310,1079,13872 +321437,3327,7763 +536514,5818,16373 +48602,4369,7783 +510344,9421,15179 +435267,2939,12371 +476590,10521,13898 +196190,7469,3012 +616067,12514,19688 +90173,13171,13963 +190918,2150,2827 +55897,11839,8825 +428917,2453,12042 +542553,1125,16605 +577715,13722,18019 +431366,5130,12201 +389152,10678,10494 +339741,12976,8529 +146549,8006,1085 +258233,4733,5384 +90736,1672,14131 +127587,7587,19624 +26290,6608,4419 +79774,17149,12347 +335775,17671,8332 +268683,17135,5736 +107358,6792,16576 +299660,10053,6962 +574990,8348,17914 +84690,19372,13005 +433347,4573,12257 +88265,19835,13639 +408113,18005,11141 +374601,1108,9962 +453808,8601,13029 +279307,10238,6174 +440539,10398,12533 +476436,9922,13974 +654049,15921,21177 +76865,5138,12009 +222870,5631,4085 +364733,13644,9579 +108070,17896,16533 +100545,7194,15481 +233492,5771,4460 +286061,9681,6376 +343181,3965,8685 +420400,7090,11692 +245049,7713,4879 +454917,17998,13062 +446492,3393,12794 +342486,17430,8603 +261231,11401,5503 +644818,14363,20899 +145079,14955,995 +89168,15018,13745 +251935,8590,5156 +494157,5022,14596 +633440,10966,20393 +51743,19883,8151 +226295,602,4232 +491306,705,14538 +569562,19705,17582 +549710,4500,16851 +504485,17622,14987 +519076,4935,15522 +112317,9071,17159 +305548,3507,7175 +5285,9936,1635 +410283,17293,11247 +528925,14501,15910 +130326,14490,20108 +253865,6782,5206 +51556,16113,8003 +239357,17853,4643 +462113,1183,13382 +144419,8875,955 +424903,7245,11890 +211105,693,3600 +649609,15905,20999 +233527,6022,4504 +278918,6939,6182 +350392,7612,8969 +77668,18325,11943 +457126,17986,13196 +541614,14413,16549 +487136,4818,14394 +295257,13124,6718 +3115,11823,1313 +35619,5064,5680 +384654,9482,10399 +222875,5661,4041 +395532,7370,10755 +529482,19251,15968 +270146,10366,5798 +270704,14861,5858 +283037,3160,6314 +493393,19499,14536 +651627,14777,21087 +107991,17433,16480 +633337,9914,20383 +193146,1331,2972 +90290,14909,14004 +95889,10345,14698 +435033,1669,12309 +259980,458,5501 +591704,16224,18550 +603313,19504,19045 +378806,18487,10101 +636896,3379,20532 +413123,2078,11419 +275509,18215,5959 +603690,2792,19132 +63108,14230,9881 +448127,18205,12812 +457095,17878,13169 +308958,12683,7303 +17423,13210,3197 +317459,9042,7646 +477158,15581,13976 +339920,14836,8489 +335172,12880,8314 +618899,18136,19763 +283787,10146,6335 +76704,2186,11985 +92212,7101,14376 +633742,14996,20413 +392519,19984,10575 +43562,19310,6861 +404371,4877,11122 +322792,17118,7821 +366212,7828,9703 +185051,9993,2603 +74564,6519,11674 +64504,16956,10200 +193258,2433,2999 +244565,3045,4901 +586732,13146,18435 +199685,18460,3150 +217038,12005,3834 +102270,16852,15547 +55324,811,8730 +228811,3108,4294 +453002,1125,13056 +633499,11746,20413 +5942,641,1713 +187109,8382,2668 +517172,9509,15499 +350930,11256,8970 +83714,3406,13148 +193601,4705,2995 +85610,14868,13278 +174891,19670,2194 +635330,9258,20456 +263186,8435,5569 +7151,964,1943 +67938,14918,10681 +284022,11481,6343 +240511,6338,4726 +15742,5591,2946 +47348,4397,7585 +283515,8316,6307 +111813,542,17192 +559917,13442,17213 +422015,1116,11758 +74184,19870,11515 +560227,16115,17228 +386134,2614,10470 +640789,16824,20696 +255896,5016,5292 +643727,3991,20894 +250481,15953,5041 +256724,11301,5328 +302068,10830,6981 +262819,5127,5548 +195281,19440,2966 +20823,10849,3629 +161977,5726,1776 +153914,12743,1362 +204432,1058,3411 +204366,727,3350 +611102,9878,19452 +566957,17460,17499 +651716,15576,21125 +440555,10500,12532 +517052,8450,15516 +233232,2498,4495 +587669,533,18528 +598470,16426,18895 +635404,9954,20476 +603925,5675,19156 +40789,11497,6414 +509017,18044,15107 +409102,6542,11285 +352951,8652,9138 +325313,18593,7933 +650216,189,21098 +36311,16609,5796 +114616,9261,17524 +27897,16406,4543 +215471,19496,3714 +26031,2712,4414 +168693,6297,1984 +28804,10101,4684 +377911,10197,10150 +393256,7319,10712 +313062,11421,7496 +237139,18165,4592 +141486,9081,929 +519342,6661,15611 +622035,6311,19951 +398772,14529,10803 +109446,509,16824 +9050,12796,2036 +596979,4656,18861 +169684,13224,1976 +190923,2161,2845 +454925,18012,13100 +352559,5459,9104 +82053,16256,12708 +648845,8277,21076 +167306,12018,1949 +462385,3633,13426 +496693,8964,14714 +284058,11841,6342 +35460,2515,5834 +145655,663,1071 +498027,317,14801 +438847,16100,12474 +543616,11339,16609 +58891,757,9381 +222955,7447,4071 +349123,17526,8949 +187471,11276,2675 +172897,2400,2138 +172830,2053,2130 +165944,708,1894 +35708,6579,5774 +577570,12727,18065 +404287,4083,11114 +83423,18760,12978 +630789,3825,20347 +98319,10628,15103 +342302,16066,8594 +445457,15278,12704 +161678,1651,1728 +202779,6673,3320 +182925,11070,2475 +468980,2544,13626 +248793,758,5108 +255530,1260,5344 +274855,12551,5947 +536643,6946,16359 +219285,12200,3878 +425198,10113,11879 +572415,6054,17817 +56596,3120,9061 +469308,5158,13709 +240454,6079,4794 +555977,19776,17049 +466053,16133,13539 +458165,6843,13214 +131341,12079,20259 +550778,13713,16893 +318417,18563,7665 +287768,4769,6500 +330564,7829,8168 +580496,17968,18109 +268475,14920,5734 +44649,16630,7050 +545010,2755,16745 +181571,19060,2430 +656440,11973,21283 +35165,17789,5506 +619421,2926,19807 +5900,19590,1651 +450319,17696,12851 +195474,1605,3065 +604433,10256,19199 +460277,5788,13321 +651801,16098,21164 +388022,155,10509 +477117,15477,13952 +638231,14617,20519 +189565,10263,2752 +58199,8748,9108 +470637,17649,13664 +438469,11845,12439 +138139,8645,21015 +587628,131,18470 +446841,6877,12783 +86893,17320,13367 +379205,1493,10216 +266253,15439,5695 +272923,15101,5924 +531720,18266,16023 +80158,3313,12630 +107453,8591,16471 +29774,6270,4947 +93175,3358,14449 +568099,8100,17658 +248434,17543,5007 +152028,17708,1229 +472150,10567,13771 +232088,12931,4426 +450321,17702,12906 +79409,10230,12455 +76219,15115,11873 +404233,3615,11086 +332830,11736,8237 +295968,19271,6709 +543625,11399,16614 +128268,19887,19632 +344120,11334,8664 +526548,12429,15802 +146724,9338,1064 +498864,7443,14747 +335273,13137,8315 +379268,1878,10191 +34019,18516,5334 +449998,14617,12912 +103928,4497,15978 +618302,12669,19701 +373668,14469,9907 +590977,10894,18625 +264744,3120,5656 +118828,19970,18208 +184731,7520,2605 +652101,17951,21145 +479828,18525,14075 +555853,18640,17086 +250830,18569,5056 +31483,16240,5092 +492709,13209,14544 +149887,18284,1180 +378746,17613,10092 +576630,3689,18046 +238307,7880,4696 +169136,9803,2039 +472434,12357,13777 +347026,16795,8812 +402853,12201,11051 +450203,16475,12877 +350,8323,903 +639098,3140,20620 +423449,13335,11752 +323792,4572,7848 +261256,11476,5466 +121943,12965,18633 +470692,18351,13711 +484143,17076,14165 +26837,16390,4422 +207048,3658,3472 +175537,7539,2269 +580864,797,18223 +215721,948,3833 +207511,8377,3480 +49183,15746,7761 +257521,18796,5314 +395053,3345,10738 +339227,8989,8514 +265385,8401,5692 +333774,19531,8265 +545428,6745,16703 +177993,9037,2320 +9593,2467,2265 +120197,2622,18560 +511827,3348,15251 +182173,5379,2495 +473553,3720,13866 +411853,10920,11384 +559404,9396,17247 +646219,4853,20973 +72214,6521,11358 +28322,1232,4775 +470747,18749,13640 +34753,10743,5625 +217589,17079,3791 +579944,13726,18114 +453055,1522,13048 +421399,14732,11660 +4789,757,1647 +259643,17385,5385 +599844,9359,18942 +243659,16225,4837 +53063,3109,8468 +529081,16315,15930 +32164,6789,5162 +193612,4786,2988 +283770,10091,6339 +330831,11027,8135 +344025,10782,8666 +488594,17314,14345 +563128,2712,17373 +286120,10035,6417 +217459,15810,3801 +499204,11595,14760 +176411,13851,2281 +100496,6572,15395 +158813,17555,1545 +134611,9339,20561 +432850,19571,12210 +410097,16208,11246 +367149,14892,9626 +31807,372,5221 +625895,19167,20050 +376628,19597,9988 +354829,5797,9159 +173565,9089,2133 +527460,1151,15978 +380942,16838,10187 +117604,18983,18052 +146543,7955,1100 +448397,20009,12788 +474117,8889,13862 +587238,16384,18385 +393716,11751,10633 +450284,17578,12861 +445368,13738,12726 +158753,17055,1557 +185399,12458,2581 +299456,8301,6891 +313974,18328,7475 +245662,13603,4949 +126541,11053,19375 +429163,4649,12126 +636514,19276,20453 +172024,15310,2089 +653972,15626,21234 +497812,18388,14683 +607434,16315,19216 +101554,3461,15567 +537995,154,16412 +468018,14058,13563 +370194,1725,9866 +533670,16094,16116 +215961,2463,3832 +281472,9512,6255 +325150,17399,7857 +306735,12373,7213 +287082,243,6485 +129764,6651,19968 +466156,16954,13522 +111285,11199,17050 +515665,16962,15381 +620176,8323,19854 +352002,1504,9143 +72680,16058,11353 +60081,1299,9520 +68658,7018,10698 +205868,15117,3422 +299464,8337,6952 +324351,9349,7842 +633589,12396,20363 +58975,2324,9335 +229117,4738,4290 +11032,8393,2350 +580941,1579,18199 +521867,9799,15686 +345105,19579,8740 +602749,15255,19075 +280542,2017,6251 +212543,12798,3598 +545470,6882,16698 +619597,3809,19820 +45120,5391,7260 +258306,5196,5362 +15305,18683,2882 +131660,17442,20206 +254072,8087,5258 +452314,14278,12983 +326032,4496,7966 +552529,9598,17005 +578587,134,18082 +9468,19744,2088 +79353,8910,12458 +59296,8753,9363 +652203,18386,21145 +106688,13459,16358 +259301,12275,5392 +231206,4840,4382 +369483,15811,9741 +110939,5516,16996 +104720,18512,15940 +193206,1721,2987 +117812,2866,18200 +391691,13742,10589 +284188,12994,6290 +519633,9337,15602 +134221,3014,20551 +274731,11066,5999 +537733,16994,16327 +622635,10600,19966 +160074,9366,1670 +623992,4647,20003 +555333,13626,17024 +352596,6164,9152 +76203,14946,11850 +238667,11346,4696 +532157,3249,16152 +322408,13892,7768 +390725,4267,10576 +634716,4242,20471 +264291,18832,5596 +586049,6902,18409 +341487,9309,8636 +381706,4382,10281 +454462,13528,13099 +456466,12361,13126 +570869,12177,17767 +624843,11206,20006 +9868,8024,2168 +171275,9130,2090 +507484,4143,15152 +237706,2780,4675 +617872,8477,19708 +503013,5004,14941 +654591,19828,21193 +125312,10532,19315 +594292,19570,18670 +232207,14455,4424 +429678,9311,12048 +446921,8247,12838 +467453,8380,13613 +265035,5030,5680 +380247,9673,10220 +119048,4148,18340 +160299,10962,1662 +654031,15870,21219 +580900,1203,18171 +341047,5397,8657 +577911,15116,18000 +271179,19818,5853 +277708,17183,6049 +299017,4310,6930 +486777,876,14389 +453223,3173,13049 +317987,14790,7609 +621590,2466,19904 +28020,17762,4638 +80140,2673,12510 +443780,19365,12619 +232573,16679,4400 +336389,2080,8407 +281451,9235,6223 +348629,12319,8871 +42137,15692,6566 +84974,4405,13269 +617468,4638,19743 +273486,371,6004 +214732,12516,3705 +605542,19406,19144 +624035,5280,20056 +298250,19070,6818 +511969,4615,15258 +189508,9750,2755 +572641,8361,17870 +256377,8716,5348 +215677,551,3821 +167935,18861,1924 +508258,11156,15103 +424497,3201,11902 +69317,18454,10785 +482215,19805,14105 +533440,13891,16106 +212448,11803,3636 +388972,9381,10541 +553315,15944,16964 +636276,17763,20427 +529982,3924,16091 +283050,3566,6311 +367040,14341,9640 +524539,14520,15766 +152444,442,1378 +463880,18204,13421 +19946,16853,3362 +565902,8260,17486 +445504,15463,12669 +377480,6305,10150 +103751,1460,15894 +184083,1125,2611 +234809,17692,4489 +453679,7391,13081 +603311,19469,19094 +153168,7466,1369 +183554,16946,2471 +143434,1433,1006 +383435,18977,10276 +372347,941,9952 +647296,15592,20973 +54494,9038,8711 +121101,17687,18608 +258703,8087,5410 +326098,5327,7945 +280329,507,6267 +242040,614,4865 +296978,6650,6805 +151971,17532,1209 +599669,7801,18982 +549511,2557,16875 +330447,4995,8170 +305760,5492,7176 +448212,19013,12788 +564662,16534,17399 +240931,10622,4784 +399721,3461,10913 +563494,5964,17363 +178310,11424,2314 +72255,7238,11270 +578592,226,18136 +408337,19950,11195 +8730,7702,2023 +50663,19235,7829 +622817,11435,19938 +591467,15181,18626 +504348,16748,14982 +470704,18438,13691 +389846,16319,10522 +464063,19002,13459 +186245,321,2687 +200442,4916,3223 +512453,8289,15323 +40996,15588,6505 +152618,1466,1322 +611791,15511,19484 +542979,5315,16620 +431599,8044,12159 +285608,5685,6428 +548315,11698,16781 +348839,13133,8866 +414580,16279,11411 +368759,9329,9739 +284722,18576,6287 +84681,19305,13080 +150761,6530,1302 +634449,962,20435 +255190,17184,5222 +101803,6825,15629 +128790,7622,19907 +428799,920,12057 +236567,14911,4594 +382769,12542,10283 +332002,3063,8216 +132028,4276,20377 +412495,16973,11332 +143766,4305,978 +349806,2251,8981 +314,7906,916 +259920,19954,5426 +354197,322,9233 +314927,6624,7593 +221362,10905,4014 +9597,2515,2190 +9248,16620,2111 +84642,18694,13143 +244390,1483,4894 +534715,6160,16284 +128440,3115,19767 +158175,10574,1493 +192330,15255,2877 +292712,9472,6662 +322250,12579,7827 +326842,13128,8020 +373911,16364,9895 +434769,18589,12231 +31992,3506,5210 +49945,7076,7826 +232327,15402,4394 +176994,18397,2221 +580004,13940,18109 +500620,3756,14919 +246260,18484,4915 +308745,11292,7318 +379479,3862,10168 +421894,19824,11659 +256700,11195,5352 +35840,9418,5780 +601426,3181,19062 +270173,10497,5837 +257549,18935,5307 +98041,5980,15145 +180387,9395,2409 +541173,9891,16505 +199797,19934,3136 +30286,15292,4954 +184333,4358,2601 +535412,13802,16269 +429687,9681,12125 +351142,12637,9013 +617666,6244,19743 +643594,3131,20811 +418153,7969,11626 +141116,5292,914 +606868,11382,19290 +636827,2866,20540 +65388,10462,10249 +246657,1683,5004 +654263,16843,21190 +578572,20021,18040 +262336,1063,5536 +237692,2694,4700 +45890,18674,7288 +42996,9213,6737 +49884,5459,7977 +94629,8206,14571 +226051,18530,4168 +418130,7729,11571 +51779,641,8199 +476176,8212,13921 +117275,14563,18065 +177213,186,2363 +246052,16979,4941 +268945,360,5857 +292260,5301,6699 +394552,18504,10690 +59629,14255,9311 +199316,15257,3102 +502095,15806,14891 +24372,12666,3989 +563379,5083,17377 +367080,14574,9638 +422797,7013,11803 +584894,15951,18306 +318811,769,7723 +461574,17647,13312 +466064,16207,13483 +448691,2694,12899 +6458,9085,1731 +626728,7746,20140 +435861,7481,12388 +495345,16870,14600 +535669,16333,16248 +644878,14818,20830 +614908,1607,19639 +137619,19952,20845 +578383,18430,18050 +598623,17436,18847 +429515,8270,12035 +415081,19699,11454 +627076,11112,20151 +35798,8873,5690 +359395,5840,9411 +384515,7734,10381 +294913,9213,6737 +233082,1328,4478 +43365,16445,6779 +122616,4861,18861 +515453,15409,15388 +154505,18810,1360 +308079,6655,7264 +553112,13786,16999 +518531,1396,15560 +314251,1251,7577 +143908,5319,970 +372524,2705,9932 +468433,18058,13610 +29501,800,4865 +570451,8135,17739 +520209,16494,15533 +508352,12328,15133 +651063,7215,21090 +517110,9013,15474 +1859,11091,1168 +227386,10713,4235 +433162,2890,12220 +224250,1971,4166 +47735,10438,7521 +364745,13663,9571 +218666,6090,3939 +488053,12363,14409 +456603,13502,13173 +417104,18473,11513 +430804,18314,12049 +148122,3376,1175 +530311,6546,16004 +422376,3691,11760 +209413,4908,3574 +548271,11336,16817 +542318,18372,16543 +237780,3898,4670 +187242,9283,2711 +44243,9558,6919 +656026,7341,21285 +876,16698,851 +159331,1489,1591 +312724,8138,7506 +448855,4687,12919 +569054,16791,17632 +18665,15163,3228 +564460,14759,17452 +647753,18853,20937 +531243,14945,16021 +638946,2063,20658 +205285,9650,3399 +626036,313,20155 +234468,15619,4458 +518087,17973,15474 +234082,11785,4511 +249127,3782,5081 +339637,11484,8551 +578240,17177,18028 +184633,7184,2590 +292790,10071,6673 +564208,12028,17419 +463846,17968,13382 +97330,13704,14974 +399038,17202,10857 +1568,6880,1160 +577714,13713,18014 +84126,10500,13148 +4040,8169,1381 +95499,2448,14781 +552757,11180,16958 +147055,12520,1037 +333704,19316,8284 +147794,19743,1052 +552176,5312,16996 +19037,1037,3500 +55134,18722,8612 +318568,19392,7615 +620646,13094,19829 +349936,3213,9054 +461566,17538,13314 +180948,14468,2384 +54376,7138,8661 +156721,18769,1398 +399270,19735,10828 +67963,15425,10639 +76480,18332,11801 +40654,8932,6420 +550424,10890,16927 +341466,9166,8641 +24992,4513,4194 +360142,12186,9412 +143001,18995,933 +636033,15756,20511 +465123,8642,13484 +172910,2426,2173 +225565,13796,4118 +494859,12049,14630 +134441,6922,20646 +441973,3436,12595 +451430,8395,13008 +92075,4656,14283 +405948,18900,11087 +429787,10183,12088 +134936,14442,20649 +312872,9667,7467 +478021,3440,14012 +471974,9057,13765 +531516,16694,16037 +505052,2515,15061 +501677,13340,14868 +304306,10643,7139 +594017,16268,18640 +232216,14564,4375 +99741,15719,15158 +396030,11918,10764 +599259,5548,19006 +306280,9075,7226 +461245,14049,13327 +535266,12878,16241 +340549,19578,8516 +615815,10777,19684 +250355,15228,5101 +537583,16222,16365 +531106,13914,16035 +314732,5438,7522 +483496,12539,14246 +5554,14127,1601 +311595,17823,7425 +102575,1332,15676 +337703,14949,8435 +357164,5408,9264 +346906,15301,8770 +453936,9629,13063 +418228,8661,11648 +185864,16583,2549 +350184,5735,8980 +474357,10526,13876 +620420,10918,19824 +389453,12976,10501 +405739,17523,11109 +10046,10330,2255 +245399,10484,4908 +253016,17832,5117 +606895,11896,19227 +392091,16565,10605 +303103,1965,7085 +93132,2681,14439 +34071,18934,5416 +330761,10412,8188 +79750,16933,12418 +390222,19378,10495 +243572,15616,4804 +637096,4575,20566 +583784,6582,18290 +480423,3940,14154 +629899,15111,20240 +140320,3699,21378 +469093,3271,13669 +4378,13694,1511 +392200,17369,10599 +479007,12658,14008 +431984,11121,12157 +33882,16614,5359 +281722,11830,6230 +354282,892,9225 +152065,18058,1210 +496262,4230,14681 +608837,9463,19370 +312490,5810,7463 +373894,16142,9912 +242226,1854,4844 +578199,16789,18059 +8051,16010,1880 +524796,18009,15721 +71880,564,11333 +509346,855,15167 +446313,1636,12772 +305642,4553,7206 +542420,19157,16545 +138408,13664,21048 +68819,9915,10833 +68499,3723,10795 +647882,20027,20962 +580709,19158,18141 +384230,5910,10390 +423312,12144,11766 +98595,15517,15065 +302780,17494,7022 +272011,7274,5919 +522593,18034,15662 +328820,10240,8055 +281613,10994,6214 +655110,1731,21341 +253506,2965,5248 +638046,12958,20519 +23224,12215,3818 +175412,5858,2262 +386686,7565,10420 +652557,1282,21202 +264640,1557,5636 +416274,11332,11543 +578095,16011,18067 +456068,8675,13162 +521412,6409,15641 +631791,15115,20308 +221883,15096,3950 +324809,14993,7916 +199401,16197,3160 +644052,7062,20844 +443327,15789,12627 +173461,8462,2168 +206489,19459,3380 +138919,1340,21195 +322078,10722,7821 +251913,8490,5138 +648511,4600,20999 +123072,11744,18922 +515044,11234,15418 +345481,3785,8785 +267989,10541,5702 +270085,10030,5824 +314556,4369,7530 +200080,2597,3188 +497436,14719,14705 +301968,10061,7018 +421045,11966,11714 +91252,12201,14192 +140177,1618,21336 +593870,15435,18641 +249743,9547,5106 +151178,9770,1261 +40474,6204,6399 +493601,907,14617 +456365,11502,13107 +165103,12678,1884 +37982,4547,6080 +125076,6430,19236 +542205,17708,16546 +433559,6022,12262 +241353,15859,4717 +47173,406,7469 +362540,14615,9453 +147899,1071,1166 +108204,19508,16563 +247830,11209,4987 +370788,7230,9858 +51947,3508,8323 +463168,12104,13430 +175820,9068,2285 +84038,9513,13054 +1599,7139,1141 +183582,17137,2504 +265335,8016,5614 +226956,5899,4265 +241839,18640,4725 +393262,7349,10660 +469910,11491,13688 +73686,13315,11451 +400588,12765,10951 +217847,19811,3811 +409480,10138,11226 +350112,4633,9018 +135367,2660,20716 +637604,9206,20522 +111878,1047,17148 +188735,2815,2771 +321350,2757,7821 +40586,8242,6428 +12908,18671,2545 +550979,16022,16873 +148095,2147,1179 +397013,19823,10757 +212410,11550,3675 +197085,14540,3072 +173414,8139,2162 +372607,3419,9902 +212697,13756,3661 +83723,3449,13054 +655409,3493,21325 +506689,17355,15048 +473516,3560,13867 +20384,3622,3567 +368730,9050,9763 +571145,15148,17758 +444356,5102,12719 +473450,2463,13810 +523533,5737,15748 +26793,15843,4415 +141733,11332,921 +86559,11810,13470 +334557,7509,8342 +560249,16426,17192 +320911,19945,7729 +568060,6692,17662 +490078,10450,14460 +366762,12590,9660 +171811,12766,2073 +480090,1013,14095 +653375,8638,21225 +12628,13207,2487 +166148,3384,1952 +626781,8859,20080 +590759,8965,18560 +235328,1530,4573 +196089,6591,3017 +273785,3008,6009 +248330,17135,4960 +259790,18718,5425 +174188,13481,2157 +13442,7730,2717 +81074,18376,12477 +645360,18360,20908 +494741,11399,14590 +620320,10492,19827 +447259,10590,12819 +456746,14280,13158 +132340,10203,20419 +35446,1937,5810 +549562,2951,16893 +10358,15000,2258 +517471,11852,15497 +278185,1277,6165 +199176,13832,3148 +466845,3190,13618 +579449,9650,18141 +253067,18294,5179 +64812,1011,10344 +182424,7652,2491 +576732,4092,18023 +573439,15563,17881 +348490,11632,8873 +457196,18456,13153 +156262,13813,1438 +112466,10869,17198 +400321,9900,10940 +356448,269,9275 +58498,14150,9149 +190002,14577,2783 +383773,1825,10382 +627622,14729,20154 +14116,18761,2708 +459869,1452,13318 +577692,13432,18016 +73161,2842,11478 +549395,1632,16893 +469475,7141,13650 +563539,6395,17437 +639357,5081,20624 +112896,18933,17168 +553345,16276,16982 +580933,1529,18180 +222144,17795,3954 +337380,11368,8471 +149928,18643,1169 +537151,12235,16356 +579669,11600,18114 +166016,1469,1943 +332509,9001,8212 +268948,378,5843 +556210,1295,17114 +41,1824,1003 +548160,10493,16793 +32322,8340,5248 +631044,5851,20316 +468606,19224,13588 +394384,17176,10703 +432469,15789,12195 +498856,7371,14805 +233851,9323,4480 +623044,13899,19893 +120884,15124,18542 +260224,1955,5474 +78744,18367,12199 +77291,12546,12061 +655718,5663,21273 +459769,596,13335 +385140,14174,10403 +629660,13324,20197 +541782,15605,16545 +51501,15613,8109 +330041,1156,8146 +575237,10509,17922 +364816,14402,9563 +130636,19224,19994 +372786,5745,9940 +35700,6097,5807 +124415,15690,19170 +302316,13058,6995 +160668,14652,1627 +14060,17516,2740 +421356,14344,11664 +160298,10955,1662 +153477,9693,1371 +461983,118,13433 +75909,9809,11870 +66314,6950,10468 +413599,6832,11415 +514604,7039,15375 +557362,12167,17157 +547023,20083,16684 +249599,8995,5038 +245567,12085,4893 +384590,8413,10337 +265688,10681,5685 +49362,18065,7747 +136450,20152,20751 +14692,8964,2751 +463785,17431,13442 +460985,12718,13301 +210204,10631,3567 +74370,3613,11722 +631788,15099,20276 +580166,14832,18128 +211917,8684,3663 +74304,2312,11662 +624547,8633,20006 +577057,7800,18019 +589597,17034,18470 +251187,2024,5138 +3244,15044,1335 +195059,17900,2994 +436317,12442,12310 +135449,3791,20771 +175118,2259,2211 +588937,12046,18521 +501878,14336,14894 +55195,19130,8641 +561105,5036,17268 +554350,4798,17070 +470543,16812,13710 +209228,3101,3560 +248722,253,5099 +210442,13033,3522 +411185,4809,11389 +312141,1703,7506 +650814,4729,21092 +416186,10934,11558 +650077,19322,21063 +115019,15979,17527 +648925,8634,21031 +248037,14830,4976 +212948,17093,3604 +169185,10250,2022 +422429,3902,11830 +171510,10739,2103 +240506,6331,4752 +98441,12565,15096 +220558,2767,3984 +449144,8465,12879 +543947,14222,16623 +150735,6463,1253 +397806,6021,10855 +354329,1483,9243 +651920,16762,21154 +474924,15422,13821 +169575,12750,2045 +191789,8715,2844 +604874,14385,19157 +507430,3778,15136 +294909,9183,6766 +340379,18306,8565 +456311,10850,13163 +200068,2470,3248 +321367,2840,7774 +114961,15585,17540 +466532,700,13590 +314112,19650,7509 +295252,13107,6782 +592836,6673,18683 +655439,3911,21382 +316858,3784,7632 +603088,18058,19031 +509452,1978,15236 +293148,14738,6675 +86182,4385,13517 +535287,12929,16227 +141412,8803,927 +250993,410,5153 +609526,14479,19334 +471945,8858,13766 +285956,8916,6379 +312785,8657,7434 +232153,14060,4418 +613825,13244,19523 +240714,8658,4734 +147852,330,1125 +384733,9859,10379 +299756,10483,6881 +56202,17039,8830 +93034,595,14527 +388415,3520,10525 +258251,4752,5404 +643423,137,20885 +35092,16379,5535 +169381,11423,2032 +66286,6502,10474 +647668,18298,20930 +603892,5009,19183 +162007,5817,1715 +542812,4211,16674 +387390,14050,10453 +244002,18548,4822 +651820,16248,21092 +207724,10019,3451 +328454,5770,8060 +138620,17017,20989 +284141,12820,6280 +338372,19818,8485 +76779,3657,11956 +374742,2053,9964 +337247,9897,8420 +447997,17731,12770 +382700,11690,10283 +290591,11228,6613 +349632,20015,8863 +468071,14580,13616 +604083,6879,19139 +71183,10628,11128 +47561,7448,7602 +231949,11669,4425 +580210,15148,18154 +521679,8577,15671 +655988,7185,21343 +598064,13512,18880 +511924,4293,15302 +323669,3088,7910 +150850,6941,1268 +230441,18233,4355 +281953,14274,6267 +589698,18108,18490 +83693,3130,13024 +332712,10349,8211 +620335,10538,19783 +394929,1648,10734 +57014,11156,9010 +403299,15389,11011 +3718,2748,1373 +200393,4794,3193 +132986,2057,20435 +97157,10854,14993 +243189,11050,4856 +125315,10540,19237 +609485,14304,19326 +261874,17047,5464 +624920,11674,19996 +22431,18925,3735 +655811,5885,21266 +370353,2920,9838 +400233,8730,10898 +314872,6398,7552 +40066,37,6530 +516826,6075,15463 +210276,11059,3568 +20668,8591,3531 +143072,19220,883 +103463,17728,15777 +21416,1537,3755 +16477,17311,2921 +21883,9177,3668 +322240,12562,7767 +611546,13133,19481 +221045,7472,3975 +517996,17169,15486 +405478,15225,11068 +167208,11666,1923 +488055,12370,14357 +541355,10809,16519 +290260,7401,6540 +484667,2017,14284 +317276,7112,7668 +128701,6846,19819 +333539,18557,8219 +417479,1832,11602 +167385,12833,1927 +567585,2805,17620 +426872,3537,12015 +329370,15206,8040 +558043,17136,17137 +298121,17526,6846 +280851,4341,6205 +438554,12478,12426 +19049,1081,3443 +296925,6078,6860 +30247,14240,4851 +61962,13604,9685 +565416,2862,17570 +245548,11784,4946 +330331,2994,8155 +118063,8031,18152 +164821,10767,1852 +105591,13982,16222 +216075,3708,3815 +461074,13108,13298 +137950,5717,20956 +537602,16369,16327 +199582,17711,3162 +497640,16471,14662 +200030,2228,3255 +346128,9100,8843 +153818,11580,1386 +346423,11175,8815 +292098,3652,6619 +63380,17810,9847 +545487,6940,16692 +278139,1051,6125 +562248,14492,17346 +653834,14524,21167 +441708,515,12654 +205035,7247,3416 +380213,9409,10183 +266102,14260,5627 +348606,12224,8909 +587982,2476,18539 +98094,6737,15066 +366757,12584,9654 +229956,12355,4298 +544333,16842,16668 +265089,5327,5692 +33544,9729,5429 +145218,16211,1005 +523251,3751,15719 +173212,6293,2205 +280189,19419,6128 +261297,11667,5489 +431832,10117,12201 +221934,15529,3946 +365180,16768,9602 +265191,5776,5625 +399981,6855,10939 +505501,6998,15026 +74674,9363,11685 +534141,251,16274 +236870,16712,4628 +63615,1313,10159 +131122,9007,20190 +408073,17269,11204 +247703,10703,4977 +398587,12925,10836 +153599,10305,1354 +264341,19083,5558 +235134,19817,4490 +42615,2982,6795 +496108,3458,14738 +621232,17447,19868 +159427,1779,1641 +187684,12941,2671 +600562,15413,18993 +190812,992,2901 +304616,14019,7148 +120194,2563,18507 +507487,4162,15078 +289509,1622,6529 +573971,19624,17844 +142364,16145,899 +656554,13272,21290 +652666,1622,21183 +626180,3489,20120 +566099,10189,17493 +560277,16628,17219 +596000,14775,18778 +561991,12670,17336 +357452,8626,9268 +216856,10955,3804 +590374,4864,18607 +304085,8523,7071 +438151,8760,12407 +161291,19599,1583 +67146,809,10609 +177552,4901,2360 +98825,18298,15080 +80342,6078,12524 +150764,6533,1292 +62986,12416,9972 +3426,18344,1231 +530395,7064,16027 +124843,2043,19295 +591600,15693,18553 +631657,13746,20269 +246553,854,5021 +290497,10094,6538 +238401,9031,4700 +569941,3911,17778 +579114,6081,18131 +483192,10378,14165 +141880,12130,917 +321104,1375,7758 +229620,9105,4292 +284809,96,6394 +396712,17590,10780 +91769,19307,14103 +135507,5013,20791 +436567,15784,12387 +543548,11014,16637 +242152,1475,4826 +304588,13788,7150 +60228,3483,9499 +17274,10467,3087 +307497,1442,7269 +617912,8838,19778 +481007,10581,14141 +471325,3820,13777 +34668,9122,5557 +562840,20096,17270 +198805,9577,3173 +611432,12107,19446 +447451,11600,12771 +153463,9608,1369 +622398,8417,19933 +258191,3996,5398 +64485,16631,10134 +422438,3926,11758 +624284,6943,20000 +117018,9446,17956 +173622,9595,2190 +523638,6569,15742 +80631,12015,12570 +489651,6586,14453 +406492,3172,11177 +191791,8724,2838 +316553,1152,7637 +648192,2590,21006 +156055,11616,1397 +526560,12511,15844 +260888,8450,5513 +412634,18205,11310 +174100,12734,2136 +492938,14676,14520 +273637,1481,5982 +539709,16502,16398 +316734,2485,7654 +261882,17080,5525 +203683,15185,3281 +563823,9047,17376 +138747,18869,21007 +269380,3760,5847 +73568,10350,11476 +193087,327,2996 +283611,9001,6305 +236924,16951,4607 +386449,5965,10472 +352035,1684,9067 +487397,6624,14383 +253386,1815,5243 +167833,18206,1907 +287062,19702,6403 +594964,5788,18800 +47024,18143,7348 +364230,9547,9507 +160026,8747,1653 +436834,17437,12324 +540740,4955,16512 +587960,2216,18502 +513574,18303,15320 +287786,4932,6495 +321294,2495,7836 +529481,19250,15913 +654915,665,21417 +247374,8487,5031 +71157,10151,11158 +166582,6898,1956 +319448,6357,7693 +619061,19146,19707 +357126,5068,9291 +561790,10568,17325 +338618,3110,8552 +108517,5922,16755 +120115,1233,18549 +235257,1217,4585 +161020,17568,1676 +528431,9662,15971 +132,5047,968 +443881,55,12716 +594215,18910,18687 +322602,15670,7768 +371270,11943,9855 +120458,8065,18488 +190312,17010,2808 +264683,1912,5665 +465537,12317,13494 +58801,19304,9174 +133235,6029,20452 +236276,10434,4612 +420619,8861,11660 +172591,19666,2117 +311592,17819,7361 +425144,9815,11869 +641429,3468,20761 +371811,16228,9847 +395457,6183,10797 +378930,19625,10067 +278881,6548,6146 +610872,8029,19441 +383927,3343,10389 +200659,7064,3240 +324808,14993,7884 +84170,10996,13091 +69810,6493,11009 +518466,1004,15524 +574566,4118,17932 +95049,14545,14533 +496768,9565,14694 +589922,830,18625 +488611,17395,14377 +119,4906,1009 +572961,11675,17853 +1869,11377,1153 +164194,5744,1885 +363509,2774,9513 +3544,19738,1312 +11685,17823,2352 +511347,18372,15215 +650750,4037,21123 +594765,3811,18814 +437948,7036,12467 +207389,7250,3435 +440786,12635,12554 +338804,4679,8510 +15081,15399,2829 +623332,15967,19910 +540716,4821,16546 +423919,18006,11836 +268891,19727,5745 +302137,11065,7009 +136163,15972,20681 +66276,6391,10458 +317289,7157,7655 +30429,17297,4882 +529871,3398,16045 +8098,17056,1971 +320976,198,7759 +530117,4753,16057 +533726,16202,16203 +191199,3774,2860 +415651,5807,11524 +291870,2610,6678 +381991,6233,10287 +655180,2024,21303 +525365,1631,15807 +91277,12839,14095 +61079,18046,9518 +282659,851,6288 +235339,1565,4558 +521042,3697,15673 +173172,5721,2167 +598282,14936,18857 +145217,16201,989 +123524,19217,18859 +500934,6351,14906 +651366,12089,21126 +180792,12263,2413 +106220,3653,16263 +409411,9456,11301 +225210,11003,4155 +167425,12995,1948 +5949,683,1732 +1032,18764,775 +118504,14836,18141 +90702,1111,14121 +11356,12507,2316 +339615,11392,8508 +120587,10723,18464 +479264,14314,14050 +315566,12300,7556 +580406,17405,18130 +99788,16620,15271 +21213,18424,3573 +298765,3101,6880 +344946,18585,8755 +211266,2206,3653 +112857,18455,17191 +213999,5805,3748 +415622,5606,11529 +601695,6857,19066 +628063,18311,20111 +561567,8546,17281 +64246,12210,10072 +140966,15946,21223 +239211,16594,4700 +340480,18994,8559 +14149,19019,2645 +317155,6474,7650 +402663,10959,11020 +280704,2928,6223 +24471,14655,3951 +241195,14119,4750 +333047,13347,8300 +205484,11837,3417 +431961,10935,12162 +558319,109,17234 +637740,10299,20601 +435449,4434,12338 +76009,11214,11829 +293939,1456,6721 +31491,16353,5089 +618507,14587,19730 +247866,12585,4970 +390995,7140,10581 +172090,15687,2120 +99862,17345,15270 +415490,4397,11500 +607584,17743,19244 +642845,16252,20805 +423969,18348,11800 +363336,1319,9586 +278272,1867,6159 +16193,13036,3051 +578483,19324,17994 +571649,18437,17746 +392000,15801,10632 +152264,19354,1275 +240237,4288,4727 +380040,8485,10250 +278071,613,6143 +424009,18502,11789 +61162,19621,9609 +321318,2591,7772 +459319,17355,13277 +77593,17402,12040 +276500,7046,6076 +591714,16252,18577 +31490,16351,5104 +224616,5404,4156 +530799,11117,16006 +452116,12879,12976 +545361,5982,16694 +90860,4397,14077 +601155,607,19037 +577956,15558,18030 +242797,7616,4813 +317916,14340,7651 +632674,4004,20416 +146482,7292,1076 +535305,13025,16226 +330069,1241,8135 +407908,16094,11172 +266101,14259,5616 +332922,12567,8248 +270558,13420,5787 +542619,2056,16601 +96966,7076,14916 +209095,2209,3565 +580588,18439,18135 +547154,1551,16784 +591232,13644,18619 +540633,4338,16513 +579262,7586,18161 +411152,4580,11366 +501123,7579,14847 +120368,6765,18459 +576123,18439,17981 +272329,10206,5944 +440827,12750,12565 +296638,3770,6808 +230560,18953,4297 +142225,15345,830 +365105,16358,9548 +320213,15565,7690 +457768,3396,13199 +479992,219,14157 +147387,15281,1103 +442547,9781,12633 +339643,11495,8569 +125733,17034,19349 +554306,4592,17050 +472269,11101,13787 +484674,2033,14274 +351491,15981,9031 +442411,7111,12580 +229038,3888,4277 +101961,9506,15626 +469006,2737,13686 +433647,6677,12284 +486455,17307,14285 +465464,11857,13463 +384121,4859,10380 +327402,17148,8002 +639963,12053,20635 +504347,16744,14991 +570461,8250,17712 +491778,4610,14534 +169501,12141,1996 +20473,5208,3630 +131648,16936,20192 +30016,9714,4938 +596446,18059,18801 +1729,8965,1037 +390536,2242,10616 +637568,9113,20580 +495803,633,14713 +302193,11188,7037 +187125,8438,2679 +398079,8491,10834 +93214,3715,14456 +566926,17191,17562 +651741,15715,21116 +126976,17339,19535 +503492,10255,14998 +455089,19348,13042 +455888,7243,13130 +148838,8999,1196 +228578,922,4299 +486601,18328,14269 +647717,18603,20974 +8741,7930,2055 +606554,9479,19251 +148721,8040,1196 +41221,19371,6459 +542543,1107,16639 +631623,12788,20339 +553181,14094,16954 +116708,3951,18044 +616434,15867,19655 +247955,13814,4989 +9293,16946,2093 +457122,17977,13197 +535163,11696,16260 +190455,18055,2781 +427891,12588,11941 +390690,3716,10567 +29278,18206,4725 +414876,18514,11442 +275400,17287,5951 +536811,8961,16376 +498405,4184,14789 +221837,14417,4031 +141434,8908,937 +406232,1108,11200 +535583,15888,16264 +369210,13344,9768 +253877,7106,5250 +74568,6771,11593 +182319,6048,2473 +22579,1072,3918 +273667,1620,5975 +540237,19564,16461 +408744,2550,11246 +357444,8545,9326 +29360,19204,4786 +64308,13600,10156 +231926,11635,4399 +151038,8663,1273 +559197,7522,17244 +318057,15589,7647 +585417,902,18444 +164745,10393,1831 +141988,13469,877 +75678,5280,11903 +244731,4310,4874 +227593,12981,4245 +475317,18553,13812 +259030,10033,5367 +78866,1154,12317 +168972,8270,2034 +23744,1211,3955 +647433,16744,20994 +463332,13460,13401 +453997,9805,13026 +656502,12721,21303 +536274,3916,16366 +490652,14354,14443 +305386,2444,7197 +34625,8441,5529 +437635,4164,12408 +569386,18509,17648 +181058,15523,2451 +63285,16914,9892 +189179,6476,2766 +303962,8087,7109 +28151,18984,4548 +106013,19906,16160 +9278,16827,2057 +348560,11975,8955 +449756,12552,12908 +58788,19034,9272 +246320,18861,4873 +323525,2439,7916 +304878,16126,7124 +587446,17537,18400 +389927,16877,10511 +169796,14505,1973 +46186,4991,7400 +648539,4803,21050 +245537,11686,4890 +423246,11344,11784 +62215,17206,9789 +308732,11213,7281 +518440,785,15583 +571333,16226,17706 +73530,9947,11541 +337743,15409,8442 +510057,6488,15250 +544030,14788,16662 +145525,19704,1023 +601696,6861,19066 +280442,1273,6206 +614673,20054,19594 +505445,6537,15030 +590675,8407,18628 +423768,17299,11799 +139388,10442,21217 +177499,4420,2360 +88619,5874,13818 +318330,17690,7640 +182242,5548,2526 +9346,18074,1995 +70589,19407,10861 +447201,10050,12761 +334172,4328,8380 +462838,8691,13446 +326738,12032,7943 +445465,15300,12693 +344177,11649,8717 +284531,16158,6340 +497276,13131,14699 +23062,9328,3832 +21291,19658,3507 +117298,15026,17972 +90331,15648,13947 +454991,18389,13093 +193035,187,2984 +63341,17490,9873 +460490,8706,13322 +42591,2713,6790 +636913,3440,20518 +446845,7228,12758 +525812,6215,15840 +314805,5967,7557 +25300,9098,4156 +541978,16275,16537 +483165,10014,14182 +446945,8288,12793 +29647,3707,4874 +354953,6800,9204 +475990,5322,13907 +435135,2350,12323 +106516,9662,16382 +610989,9138,19427 +155994,10999,1397 +153433,9156,1388 +308624,10423,7308 +369470,15761,9755 +425210,10166,11879 +429110,4152,12081 +632839,5026,20398 +171052,7515,2047 +124026,9192,19040 +463237,12696,13426 +158023,10037,1531 +401795,1730,11049 +494987,12780,14592 +53212,5793,8527 +232012,11797,4372 +208381,16060,3493 +262813,5074,5583 +605091,16225,19171 +502566,440,14990 +8239,19323,1881 +442489,9113,12609 +459174,14754,13264 +348463,11380,8887 +572337,5629,17900 +86306,7109,13487 +625852,18888,20068 +647026,13560,20953 +235777,5973,4591 +334730,8767,8338 +85023,5198,13207 +43218,13379,6757 +611587,14022,19475 +452683,18626,13008 +525394,1776,15803 +645173,16923,20880 +2009,13955,1122 +500884,6133,14900 +407807,15470,11169 +270039,9768,5826 +653560,11934,21185 +299003,4259,6930 +293130,14675,6636 +242561,5740,4872 +339067,7284,8528 +521146,4498,15696 +631741,14528,20304 +215902,2206,3836 +62004,14520,9701 +303013,1119,7132 +463484,14273,13441 +359504,6731,9340 +67819,13505,10616 +429715,9817,12132 +85749,17763,13264 +80111,2124,12641 +519503,7277,15521 +155758,9782,1412 +595137,6984,18759 +429909,11189,12047 +89844,8166,14032 +636849,2987,20603 +73099,1311,11422 +39019,2055,6210 +7392,5539,1918 +622104,6758,19982 +270121,10229,5785 +300917,2046,7063 +53097,3608,8375 +111371,12869,17014 +547026,20116,16704 +208988,1667,3566 +102865,6301,15796 +260211,1919,5468 +43767,2003,7013 +366485,10680,9624 +96171,14331,14839 +58520,14431,9203 +9391,18661,2025 +203260,10295,3301 +624961,11803,19997 +222757,4778,4033 +443253,15357,12597 +634554,2823,20441 +192673,17195,2842 +535112,11249,16237 +477254,16098,13947 +165028,11792,1812 +112104,5239,17260 +468647,19348,13561 +122298,18633,18762 +100418,5630,15341 +528973,15204,15971 +396790,18087,10769 +511873,4010,15288 +140666,9274,21310 +189556,10203,2795 +130162,11963,20058 +173107,4127,2160 +166972,10217,1900 +285293,2596,6427 +485882,13190,14258 +78930,2190,12340 +100472,6422,15379 +505354,5718,15019 +617187,2052,19712 +129439,19131,19867 +138170,9152,20969 +154109,15043,1335 +75386,19873,11550 +317132,6373,7642 +532520,5691,16124 +459175,14759,13216 +219502,13611,3916 +165751,19237,1853 +290239,7294,6577 +82495,2423,12855 +472472,12689,13746 +225539,13730,4119 +31423,15268,4981 +228207,18119,4208 +458984,13870,13280 +40177,1338,6459 +226922,5710,4209 +85220,8801,13334 +277220,12376,6081 +8844,9468,2003 +597422,7954,18854 +508978,17800,15105 +148313,5239,1167 +591798,16607,18545 +67740,11441,10616 +445638,16090,12716 +383778,1902,10397 +511597,653,15322 +25777,18580,4110 +69127,14995,10787 +623602,18246,19922 +545034,2853,16719 +297200,9123,6843 +396483,15133,10773 +538012,237,16410 +302126,11024,6996 +257345,17550,5312 +129354,17648,19887 +329099,12258,8098 +270207,10726,5840 +599025,1985,18949 +35467,2764,5834 +279240,9803,6143 +423086,10306,11758 +81337,2845,12721 +280195,19442,6112 +497536,15516,14725 +131197,10537,20174 +44400,11425,7068 +515015,10906,15368 +406679,4648,11219 +393355,8269,10699 +289312,271,6567 +346737,12821,8763 +629758,14370,20190 +283622,9053,6345 +343098,3001,8672 +604348,9382,19138 +338264,18935,8411 +427887,12573,11946 +9591,2438,2243 +407381,11658,11171 +220932,5813,3959 +41611,5023,6679 +311403,15339,7384 +169349,11230,1979 +252948,17374,5136 +88372,1247,13723 +370304,2679,9851 +440645,10913,12569 +319188,3800,7747 +496930,11156,14671 +564367,13335,17365 +92365,9940,14329 +520847,2128,15671 +563536,6384,17416 +120173,2264,18604 +347148,18566,8825 +480675,7011,14145 +645342,18319,20868 +31677,18286,5065 +369420,15400,9744 +409442,9834,11284 +503436,9487,14995 +326802,12720,8003 +368917,10835,9750 +481342,13144,14116 +300200,15278,6939 +93487,8504,14472 +413721,8518,11458 +498064,550,14813 +305067,19084,7131 +523509,5232,15723 +90659,369,14118 +596767,1999,18907 +371309,12093,9799 +418294,9450,11632 +292962,13368,6674 +616776,19161,19669 +176139,11953,2212 +34992,14525,5650 +101205,18415,15378 +527988,5920,15968 +412708,18805,11321 +455511,3617,13196 +163216,16034,1693 +229582,8926,4333 +319115,3129,7726 +165966,939,1947 +203400,12082,3301 +247210,7031,5030 +450032,14763,12927 +204875,5866,3428 +264276,18752,5561 +131876,397,20394 +36574,1174,5959 +595468,10153,18770 +160840,16379,1618 +198277,5784,3150 +115025,16117,17546 +349039,16545,8925 +65466,12000,10299 +142766,18125,910 +560527,19603,17236 +72990,19552,11352 +635030,6306,20454 +25512,14142,4234 +609602,14907,19319 +38478,13063,6167 +54927,16713,8637 +292786,10056,6627 +369161,13137,9720 +375373,9497,10043 +217674,17732,3846 +581934,10363,18168 +249079,3319,5073 +653820,14423,21244 +452796,19319,12941 +213209,19532,3672 +133398,9180,20529 +376503,18689,10011 +195247,19308,2961 +472932,17079,13742 +155121,4453,1455 +95540,3577,14690 +59079,3638,9407 +627398,12982,20128 +364405,11238,9564 +271641,4383,5888 +629495,11926,20222 +552670,10632,16985 +620085,7110,19825 +517587,13845,15426 +354992,6945,9163 +524297,13007,15765 +15667,4387,2903 +311883,19430,7403 +267042,3411,5707 +457630,1639,13226 +368277,5654,9766 +255700,2931,5280 +16286,14827,3055 +352981,8715,9095 +508609,14872,15120 +17524,15062,3132 +488964,19857,14371 +426742,2241,11983 +41250,13,6678 +549149,18412,16796 +344020,10754,8675 +195499,1674,3026 +611878,16061,19493 +40396,4087,6508 +635392,9896,20436 +11313,11859,2418 +484384,18697,14193 +65081,6029,10365 +360174,12325,9385 +537804,17644,16302 +397773,5807,10848 +74031,17943,11437 +240707,8639,4738 +117013,9429,17925 +96359,16740,14736 +511220,17321,15243 +625552,16121,19990 +241782,18446,4764 +94353,2561,14615 +274187,6410,5973 +581472,6463,18174 +331820,2122,8235 +442068,4198,12578 +431776,9122,12140 +578221,17054,18019 +414562,15811,11412 +427363,8693,11966 +441211,16075,12496 +27521,9222,4582 +380242,9644,10229 +153365,8892,1319 +150611,5576,1254 +505214,4073,15029 +292981,13439,6679 +322871,17376,7761 +68426,2655,10733 +632726,4468,20374 +97010,7330,14945 +206755,1765,3438 +450421,18400,12932 +228072,16355,4202 +385457,17158,10354 +176659,15770,2239 +394886,1050,10761 +411784,10266,11309 +498105,1088,14750 +57377,16800,8966 +488080,12522,14364 +218185,2135,3879 +541089,9073,16523 +635238,8582,20476 +50288,13889,7929 +321880,8091,7784 +355894,14338,9198 +125975,339,19501 +10303,13972,2136 +64792,815,10312 +264280,18794,5547 +458023,5399,13214 +263353,10032,5561 +463455,14003,13391 +352570,5576,9148 +420941,11125,11707 +466045,16089,13525 +499999,17078,14818 +43744,1880,6925 +494844,11749,14633 +101658,5227,15567 +487295,5792,14416 +257207,16373,5299 +353643,13350,9099 +532002,1689,16200 +479425,15650,14035 +384023,3996,10367 +422134,2371,11786 +360385,14444,9402 +343037,1860,8703 +636890,3337,20591 +458097,6076,13224 +478905,11584,14071 +47373,4933,7574 +291197,16323,6572 +463393,13771,13455 +130772,1967,20219 +453428,4332,13025 +503382,9036,14987 +67125,390,10657 +114997,15735,17644 +573283,14746,17839 +308917,12474,7324 +118470,14433,18109 +575926,16958,17919 +383709,1462,10410 +119210,6714,18413 +642678,15050,20755 +347405,302,8931 +491516,2688,14535 +154153,15641,1391 +270302,10946,5861 +271166,19705,5786 +654448,18085,21247 +466863,3287,13583 +343729,8442,8667 +299537,8778,6969 +171521,10786,2057 +200513,5675,3194 +39162,4321,6274 +54880,15759,8599 +642531,13785,20729 +308538,9601,7284 +443008,12941,12578 +126402,8963,19455 +570726,10669,17748 +262665,3762,5551 +366824,12921,9615 +331477,18934,8164 +87133,709,13637 +361310,3212,9477 +451814,10233,12994 +387397,14157,10448 +481325,13046,14095 +180480,9937,2402 +227258,8839,4197 +231003,3497,4366 +577321,9847,17999 +70831,3209,11176 +286159,10221,6406 +93628,11656,14504 +136699,5257,20925 +35899,9932,5731 +258258,4763,5389 +564429,14524,17355 +439656,2960,12497 +570009,4341,17724 +144671,10831,961 +457086,17858,13106 +211537,5505,3648 +166950,10105,1967 +511180,17003,15183 +524252,12916,15783 +426495,451,11995 +358359,15619,9278 +453114,1882,13072 +424844,6779,11890 +492671,12852,14532 +179259,18495,2336 +354948,6787,9226 +327714,100,8113 +357673,9651,9299 +383870,2433,10356 +178697,14495,2359 +69168,16102,10829 +472203,10799,13791 +506134,12739,15063 +264497,915,5617 +8244,19363,1846 +309842,1707,7368 +100749,11276,15337 +78091,7436,12241 +321943,8569,7766 +52519,13754,8283 +538373,4094,16403 +260545,5490,5471 +610401,2002,19457 +617607,5732,19741 +154829,1453,1412 +614948,1779,19605 +490817,16822,14466 +522171,13783,15693 +103295,14117,15716 +559700,11821,17235 +642138,10296,20756 +16976,5848,3136 +10321,14439,2256 +558182,19108,17123 +29913,8433,4844 +535440,13986,16221 +621070,16134,19860 +300458,17247,6929 +380050,8540,10207 +651618,14690,21150 +131762,18642,20157 +413639,7507,11402 +250537,16307,5078 +344257,12040,8754 +581785,9522,18254 +562220,14412,17298 +608491,6083,19386 +270370,11363,5800 +532312,3925,16101 +497701,16925,14684 +172576,19608,2114 +57828,3043,9272 +265087,5319,5692 +48123,17184,7575 +566425,12908,17495 +91806,19865,14158 +368568,7878,9767 +326626,9663,8010 +510619,12558,15199 +72909,18739,11330 +192467,15976,2889 +553769,20083,17000 +139448,11963,21145 +408426,473,11294 +64106,9420,10084 +624582,9007,20026 +499112,10782,14834 +27235,3094,4598 +59075,3561,9319 +118790,19519,18250 +588299,6376,18491 +96983,7177,14941 +156923,138,1514 +501029,6970,14846 +427060,5209,12018 +353705,14116,9119 +179846,4492,2390 +95533,3400,14770 +219901,18533,3902 +255524,1124,5313 +305554,3547,7174 +612739,2691,19579 +455708,6160,13141 +86596,12219,13512 +402038,3844,11043 +281149,6897,6237 +602125,10019,19031 +103594,19444,15765 +656086,7558,21296 +88925,10780,13789 +508356,12341,15107 +400649,13081,10920 +85159,7961,13189 +221477,11567,3967 +584645,13734,18332 +65567,13855,10357 +425141,9805,11898 +71267,11453,11097 +559041,6350,17229 +285281,2545,6396 +208529,17292,3454 +22508,19754,3661 +141525,9461,927 +520617,756,15677 +46403,8159,7315 +38943,1031,6329 +226988,5996,4248 +566855,16684,17487 +314145,20001,7488 +471238,2974,13761 +552304,7371,16992 +239080,15510,4653 +65715,16485,10266 +333978,2092,8326 +316518,760,7665 +618528,14667,19758 +286610,14269,6381 +113736,12623,17414 +223598,15110,4068 +539439,14434,16449 +476425,9910,13988 +456176,9976,13187 +394158,15595,10685 +137043,11024,20836 +440032,5570,12505 +307776,3514,7324 +341657,10456,8623 +15981,9234,2977 +601858,8492,19054 +92795,16596,14227 +595537,10765,18755 +368434,6495,9754 +515000,10650,15344 +300452,17229,6890 +376590,19103,9972 +68957,12531,10809 +86524,11163,13503 +23313,13626,3839 +210973,19568,3569 +384444,7159,10341 +269507,4922,5809 +600352,13897,19002 +655423,3808,21333 +655724,5672,21285 +216159,4038,3809 +132488,12409,20370 +232494,16332,4432 +599295,5729,18951 +582331,13548,18176 +474969,15639,13858 +249691,9394,5072 +250719,18045,5104 +547219,2166,16780 +617960,9540,19762 +552884,12233,16944 +483595,13216,14190 +222385,139,4066 +522468,16942,15673 +52518,13702,8235 +409428,9787,11277 +338890,5446,8534 +638640,17062,20534 +441721,535,12641 +489192,2273,14444 +481531,15086,14142 +42809,5850,6847 +197608,1106,3162 +567749,4349,17613 +131216,10689,20122 +596231,16263,18810 +3744,3352,1465 +175716,8727,2259 +57163,12816,9068 +386833,9092,10486 +428333,16954,12020 +360450,14896,9401 +601440,3431,19071 +75738,5854,11805 +182854,10456,2467 +590587,7848,18619 +175172,2998,2262 +26207,5369,4309 +340955,4095,8600 +280245,19836,6137 +482508,2710,14191 +79448,10732,12336 +350176,5120,8975 +534320,1722,16270 +519363,6845,15565 +144793,12063,963 +293305,15988,6648 +517235,9811,15514 +403626,18429,11058 +455861,7096,13192 +166362,5478,1963 +78710,17773,12165 +10262,13173,2127 +500297,267,14884 +561450,7503,17284 +412422,16328,11342 +238277,7761,4681 +175758,8908,2252 +525373,1683,15851 +121477,5370,18625 +480442,3972,14144 +410260,17186,11295 +538341,3741,16472 +117654,20033,18006 +635134,7698,20424 +426818,2576,11952 +600154,11835,18986 +24545,16045,4028 +575705,15762,17952 +24367,12613,3969 +81433,4860,12817 +77628,17771,11968 +482101,18693,14116 +50294,14130,7975 +250370,15288,5071 +150936,8074,1283 +195088,18291,2991 +133183,5306,20434 +454357,12775,13100 +137626,20074,20873 +508542,14356,15098 +483190,10372,14183 +106930,18071,16358 +482605,3983,14211 +395665,8091,10722 +572096,2883,17861 +323389,1540,7928 +336828,6332,8432 +207788,10263,3483 +525737,5228,15815 +461582,17705,13335 +641753,6347,20807 +346711,12682,8857 +586399,10002,18395 +551509,19964,16869 +637719,10225,20561 +561752,10364,17266 +83496,19408,12904 +372697,5023,9872 +335479,15066,8378 +56245,17841,8732 +334925,9941,8322 +554795,9502,17040 +537565,16085,16343 +639121,3256,20613 +460233,5216,13321 +352839,8351,9101 +265364,8146,5650 +261273,11557,5490 +389231,11157,10504 +326872,13195,7977 +211431,3869,3630 +427149,5995,12023 +518533,1410,15530 +260971,9162,5442 +557106,9731,17125 +579051,4615,18087 +521804,9567,15662 +602048,9451,19060 +601880,8627,19116 +577161,8313,18054 +539859,17437,16390 +518317,98,15586 +314400,2486,7520 +450782,1744,13009 +208182,13948,3455 +394187,15788,10642 +573965,19575,17877 +587714,849,18519 +547268,2609,16835 +6053,1654,1734 +12233,7975,2553 +340934,3856,8583 +590832,9466,18614 +655363,3034,21341 +258791,8264,5378 +207981,11989,3504 +531936,1229,16189 +38476,13042,6071 +450937,2735,12984 +207965,11781,3500 +187602,12098,2717 +535996,1529,16352 +55376,2926,8803 +403039,13976,11025 +233346,4543,4459 +426418,19634,11895 +45003,3202,7208 +17731,18683,3173 +270296,10937,5830 +581710,8238,18179 +26275,6220,4299 +525302,1319,15808 +555283,13216,17011 +371417,12925,9835 +582703,16105,18253 +125500,13141,19288 +229017,3824,4287 +566856,16687,17509 +116566,1606,18066 +558615,1700,17212 +398071,8487,10860 +588754,10991,18455 +442444,8260,12652 +282005,14598,6228 +380625,13916,10184 +476065,7216,13961 +141455,8980,877 +70880,3588,11142 +229285,5832,4363 +359565,7253,9366 +403976,1784,11131 +516873,6520,15433 +332825,11720,8210 +655599,4904,21288 +270875,16663,5859 +168329,2132,1990 +309768,1349,7421 +208490,17137,3447 +538636,6805,16424 +181718,19890,2434 +48009,15684,7536 +135787,9151,20754 +199641,18029,3114 +555940,19615,17058 +452604,18177,13009 +113822,14507,17274 +656328,10930,21267 +104228,9670,16022 +21571,3908,3774 +42556,2066,6904 +332883,12378,8277 +261209,11350,5512 +296848,5446,6837 +197627,1193,3097 +512172,5850,15269 +560329,16922,17215 +75745,6199,11815 +183837,19014,2503 +254734,12783,5214 +559008,5580,17250 +20242,2008,3580 +107269,4463,16466 +305120,19243,7143 +293967,1651,6750 +210055,9763,3562 +43457,17839,6777 +251693,7236,5146 +320078,14363,7713 +43344,16032,6852 +519083,5088,15598 +59635,14292,9365 +160296,10955,1643 +175324,5245,2256 +508177,10480,15081 +324805,14941,7883 +526447,11131,15832 +383839,2254,10409 +524434,13919,15719 +391673,13661,10566 +116555,1455,17978 +527200,19212,15885 +124169,11695,19014 +272246,9670,5863 +122284,18221,18625 +135086,16184,20591 +43508,18753,6725 +482835,6086,14192 +414560,15804,11454 +366413,9462,9636 +17160,8748,3134 +226054,18588,4134 +142128,14658,817 +546356,14762,16683 +285083,1425,6435 +26013,2290,4333 +585805,5577,18367 +586545,12058,18379 +604994,15657,19177 +318913,1964,7700 +258173,3724,5401 +47099,18994,7312 +398107,8764,10829 +198759,9244,3088 +632494,2077,20351 +234920,18383,4490 +160329,11210,1621 +132871,19935,20308 +432283,14034,12181 +582357,13641,18172 +70492,17596,10949 +256839,11992,5316 +279511,12900,6111 +155678,9440,1478 +18979,543,3504 +537795,17601,16317 +163,5624,925 +10922,6361,2327 +38023,4810,6089 +135170,17883,20623 +137773,3126,21050 +173554,9015,2188 +637354,6987,20523 +273448,19883,5883 +352441,4695,9091 +171029,7440,2096 +586805,13385,18402 +88396,1724,13698 +287611,3328,6460 +408952,3958,11238 +391226,9485,10616 +616234,13777,19663 +260455,4008,5447 +555426,14688,17061 +50278,13805,7968 +427240,6832,12027 +567892,5653,17677 +238115,5872,4676 +545375,6095,16679 +153605,10363,1307 +517400,11018,15511 +375153,6899,10024 +366613,11479,9638 +605696,1073,19243 +589230,14867,18495 +108756,10284,16787 +15041,15013,2744 +536702,8250,16349 +59575,13130,9435 +137488,18412,20884 +387444,14530,10458 +245837,15495,4907 +95223,18446,14622 +74986,13876,11598 +469034,2931,13691 +132725,17142,20360 +407808,15475,11141 +637514,8636,20592 +597176,6100,18889 +342341,16352,8626 +96528,19112,14698 +600962,18142,19008 +346787,13165,8831 +366710,12510,9675 +483827,14793,14222 +303837,7081,7067 +553728,19834,16959 +612474,181,19545 +239157,16350,4661 +180537,10487,2445 +24915,2467,4097 +61494,5608,9739 +24804,1267,4212 +598953,1217,19013 +610385,1925,19423 +586487,11587,18434 +38321,10234,6148 +357783,10392,9306 +547623,5824,16817 +581501,6565,18206 +223145,9589,4085 +323637,2889,7874 +503154,6448,14942 +610133,19910,19305 +414677,16775,11421 +554166,3829,17046 +559507,10181,17217 +361763,7632,9422 +89753,5737,13969 +655130,1776,21307 +255211,17350,5247 +582626,15882,18235 +150339,2308,1300 +581054,2630,18186 +47883,12763,7510 +543596,11237,16640 +202480,3609,3314 +361752,7503,9413 +562110,13521,17279 +453079,1633,13025 +255813,4208,5278 +364464,11853,9552 +489143,1641,14439 +360278,13380,9346 +546742,17906,16731 +452615,18296,12956 +319626,8519,7699 +605901,3002,19278 +76198,14824,11765 +348262,9158,8904 +263858,14455,5597 +46755,12933,7364 +393290,7519,10654 +54305,5266,8652 +270346,11257,5820 +514357,5218,15376 +477434,17047,13921 +207242,5965,3445 +434631,16908,12256 +102121,13754,15594 +188958,4462,2738 +416967,17314,11518 +534880,8346,16276 +314977,7184,7569 +538139,1507,16426 +402350,7541,11047 +341920,12742,8623 +449678,12074,12890 +650592,2891,21161 +450882,2523,12998 +131949,2596,20400 +315838,15321,7554 +520317,17008,15570 +243201,11145,4832 +565454,3333,17557 +20985,13888,3605 +397479,3103,10848 +83275,16647,12854 +194501,12228,2949 +341890,12458,8659 +77147,10496,11992 +418999,15147,11631 +38833,19539,6031 +96870,5997,14971 +360725,17300,9388 +510201,7460,15233 +83722,3444,13071 +511092,16485,15224 +5510,13374,1666 +186025,18688,2584 +553119,13799,16935 +485786,12582,14299 +532049,2296,16149 +377631,7841,10103 +360178,12341,9400 +257882,1414,5404 +16618,823,3154 +508220,10801,15128 +368725,9013,9744 +315896,15715,7550 +164782,10503,1781 +495746,195,14661 +594315,19687,18698 +439228,18687,12415 +309839,1697,7367 +337458,12746,8424 +426743,2244,11936 +219774,16602,3861 +31441,15670,5041 +128340,590,19753 +251503,6097,5145 +317860,13256,7675 +364824,14504,9603 +645367,18375,20833 +189676,10871,2727 +161547,923,1687 +304195,9782,7106 +104600,17022,16001 +8477,3551,2115 +93750,12623,14417 +436296,11876,12308 +391311,10189,10577 +101269,19535,15421 +422405,3814,11834 +96563,167,14915 +477639,19046,13966 +485109,5761,14310 +113428,8010,17438 +518681,2128,15603 +317546,10812,7625 +372999,9020,9936 +21687,5803,3777 +651605,14512,21138 +618978,18923,19754 +266699,184,5755 +627024,10685,20114 +52139,8031,8300 +195821,4515,3084 +569735,1872,17688 +610325,1296,19498 +471676,6936,13790 +326527,8709,7955 +609029,10944,19330 +147569,16871,1060 +387131,11273,10434 +437613,4093,12465 +217176,12896,3796 +357233,6404,9311 +414306,13856,11430 +357199,6272,9259 +254104,8190,5261 +363174,18077,9413 +52053,6253,8322 +606945,12412,19298 +608281,3536,19325 +181778,645,2541 +283962,11156,6331 +86501,10997,13384 +533196,12866,16172 +186536,3639,2702 +231695,9675,4442 +248531,18528,4961 +190562,18742,2792 +518924,4028,15576 +346742,12867,8842 +331804,2075,8231 +13817,13793,2624 +214393,9576,3686 +40728,9990,6370 +53041,2522,8427 +265713,10769,5657 +619234,131,19797 +414414,14620,11448 +513944,1046,15350 +53939,18079,8377 +375828,12839,9986 +155784,9855,1418 +244794,5778,4908 +589396,15854,18504 +654564,19198,21246 +148156,3523,1125 +189042,5287,2794 +235603,4924,4630 +596008,14796,18744 +558153,18933,17169 +330783,10559,8138 +236438,12429,4614 +403595,18075,10994 +550164,8330,16909 +405288,14210,11084 +399348,135,10937 +93126,2612,14470 +178933,15937,2301 +291865,2600,6683 +50577,18326,7797 +147819,19907,1041 +7855,12654,1900 +354412,2373,9193 +583204,1899,18316 +378783,17829,10158 +304489,11823,7113 +561495,7959,17319 +199555,17534,3122 +338410,653,8508 +654608,19859,21227 +360564,15625,9390 +88813,8868,13837 +332270,7100,8253 +292874,11788,6701 +596873,3090,18886 +300559,19169,6880 +361785,7732,9482 +173720,10736,2197 +339078,7464,8559 +324078,6881,7876 +146934,11559,1093 +224751,6189,4128 +332696,10311,8243 +264675,1901,5687 +207425,7733,3431 +109920,10195,16856 +132077,5030,20342 +267000,3213,5761 +529473,19220,15971 +10503,18102,2209 +288465,11236,6507 +75518,2582,11898 +326546,9043,8008 +288374,10085,6498 +587036,15107,18364 +210817,17543,3589 +440965,13788,12539 +184203,2640,2624 +619137,19753,19698 +133957,18271,20475 +536458,5653,16350 +581804,9617,18254 +198163,4948,3123 +591351,14397,18581 +92179,6467,14327 +623480,17380,19939 +85513,13780,13269 +588033,3637,18471 +533969,17883,16117 +390797,5000,10602 +547418,4325,16788 +429424,6126,12123 +184611,6960,2554 +197387,17869,3042 +421527,16605,11694 +614583,19721,19573 +588480,8051,18453 +466358,18879,13536 +3968,6961,1418 +303933,7767,7128 +479177,13803,14034 +196210,7532,3051 +49360,18013,7720 +33151,3129,5423 +80390,7382,12491 +129302,16809,19800 +363960,7103,9502 +392610,570,10666 +24099,6099,4005 +123873,6884,19073 +337819,16106,8474 +396923,19258,10718 +47592,7858,7566 +321213,2039,7792 +198089,4644,3153 +271421,2532,5909 +563447,5663,17459 +190885,1547,2888 +452110,12851,12942 +272544,11369,5875 +306806,13192,7240 +292455,7266,6681 +425855,15499,11865 +213022,17764,3682 +436891,18207,12372 +467769,12823,13588 +620057,7010,19816 +157311,3456,1558 +190347,17384,2794 +240864,9865,4771 +471104,1201,13782 +568543,11908,17582 +474922,15422,13813 +573312,14811,17845 +256359,8445,5305 +94456,4107,14586 +476729,12023,13987 +241884,19105,4734 +643648,3448,20864 +183125,13070,2527 +400924,14848,10932 +547564,5593,16831 +193985,7400,2983 +316813,3209,7644 +365991,5922,9679 +195730,3713,3061 +233128,1501,4520 +442949,12499,12625 +81638,9156,12804 +655504,4108,21401 +108620,7752,16770 +471503,5068,13718 +232588,16789,4395 +523409,4685,15793 +352764,7527,9061 +117971,6337,18180 +405352,14564,11090 +210765,17236,3551 +239470,18428,4648 +565898,8247,17574 +591956,18380,18606 +58316,11287,9205 +148087,2129,1182 +436701,16832,12365 +566434,12983,17498 +402650,10851,11031 +116534,1026,17979 +357915,11942,9270 +225380,12718,4179 +232571,16670,4435 +435241,2889,12378 +234850,18047,4497 +355898,14378,9155 +490183,11637,14477 +170341,19247,1979 +78883,1272,12315 +602865,16078,19108 +290352,8365,6580 +7598,8898,1903 +36455,19445,5778 +581218,3789,18241 +340332,17820,8497 +93735,12560,14441 +128846,9123,19899 +506462,15735,15069 +157850,8772,1568 +386990,10009,10456 +496141,3551,14706 +648949,9113,21006 +469797,10767,13673 +214563,10983,3765 +313891,17870,7467 +159595,5167,1665 +529739,986,16090 +94784,11053,14566 +486798,952,14341 +543900,13389,16625 +100479,6457,15391 +385738,19886,10342 +223440,12921,4039 +624583,9010,20056 +655970,7119,21353 +470553,16873,13646 +458942,13692,13236 +278838,6097,6141 +210038,9616,3541 +55374,2924,8783 +553992,1656,17069 +278424,2879,6124 +616238,13799,19641 +523079,1689,15787 +394030,14614,10679 +637147,5028,20598 +489208,2473,14489 +37473,16967,5918 +478974,12145,14043 +45165,6177,7129 +606115,4743,19249 +132485,12383,20320 +529660,546,16071 +320229,15628,7706 +45170,6223,7169 +227126,7567,4217 +432374,14720,12172 +141361,8213,933 +571084,13790,17734 +549079,17933,16811 +55310,508,8758 +367282,16015,9630 +474584,12311,13815 +372233,119,9887 +531749,18480,16031 +352991,8726,9152 +133693,14512,20431 +337933,16875,8425 +587078,15524,18377 +626119,1935,20133 +635710,13023,20481 +129765,6651,19973 +217613,17447,3854 +184353,4453,2614 +157890,9100,1489 +271049,18634,5851 +374143,17792,9873 +422001,1063,11789 +27694,12187,4547 +170237,18666,1990 +121282,1593,18718 +356594,1053,9297 +156731,19033,1437 +591537,15446,18550 +602774,15322,19029 +528930,14525,15900 +469390,5960,13664 +299809,10683,6898 +463320,13410,13411 +243832,17085,4868 +187903,15137,2663 +492106,8638,14568 +654435,18010,21236 +30405,17092,4969 +648318,3509,21004 +329019,11763,8119 +552936,12556,17002 +330976,12394,8162 +160934,17045,1615 +602517,14093,19094 +38517,13556,6093 +362457,14075,9500 +593171,9958,18676 +496357,5275,14723 +496388,5485,14728 +350656,9210,9021 +226824,4795,4198 +56119,15433,8726 +351730,18234,9009 +228745,2287,4295 +535793,17616,16218 +98084,6541,15146 +644216,9399,20839 +641711,6092,20778 +303566,5175,7151 +35771,8586,5692 +524720,17317,15736 +97933,3534,15091 +40776,11268,6382 +565259,1073,17514 +30963,7379,5043 +287414,2322,6456 +588270,5800,18493 +603463,891,19198 +287907,6325,6443 +323831,4943,7929 +210209,10661,3578 +93674,11841,14500 +257130,15937,5360 +572841,10269,17856 +79504,12351,12432 +217437,15744,3808 +496267,4238,14689 +106652,12521,16365 +335120,12603,8395 +551624,732,16951 +524468,14004,15724 +404823,10578,11071 +442671,10373,12637 +515081,11612,15383 +590570,7429,18610 +489766,7707,14488 +113892,15971,17403 +61946,13446,9673 +296275,1708,6803 +646317,6112,20922 +67315,3866,10575 +199658,18169,3138 +302296,12930,6975 +156069,11762,1435 +654406,17862,21209 +544795,912,16684 +643589,3121,20893 +335450,14886,8342 +294633,6242,6785 +422043,1479,11792 +487601,8015,14411 +597195,6162,18921 +121333,2321,18702 +140466,6114,21304 +125717,16417,19258 +614579,19700,19565 +472770,16135,13776 +352484,4898,9140 +303384,3433,7089 +582398,13739,18243 +617118,1670,19711 +348146,8494,8938 +55966,12592,8858 +334431,6199,8328 +80206,3987,12551 +212828,16071,3625 +1911,11981,1056 +562269,15169,17352 +616846,19739,19670 +373165,10786,9890 +558591,1590,17222 +200189,3392,3258 +244280,533,4878 +224998,8477,4109 +241154,13583,4788 +14198,19496,2601 +89460,20022,13749 +267199,4344,5741 +618464,14470,19753 +130821,3583,20241 +306894,14562,7174 +371892,16988,9841 +537186,12520,16337 +305670,5146,7203 +478287,5568,14045 +468085,14739,13560 +52097,7291,8326 +502201,17180,14919 +627776,16005,20165 +579861,12779,18133 +553960,1384,17023 +597928,11788,18869 +6435,8810,1751 +50974,3538,8042 +605686,972,19300 +451731,9709,13016 +514156,2743,15424 +78545,15164,12160 +239913,1463,4746 +351783,18448,8964 +624632,9933,20060 +269026,972,5798 +555049,10630,17008 +607337,15172,19273 +237341,19124,4600 +137838,4013,20944 +377948,10369,10069 +82017,15986,12667 +41526,3671,6564 +334508,7149,8345 +633749,15051,20419 +26096,3573,4395 +288343,9932,6481 +487702,8521,14361 +43269,14987,6875 +519844,10599,15531 +441274,16743,12570 +457674,2820,13212 +196094,6616,3018 +558539,1356,17202 +299071,5090,6901 +282893,2663,6326 +368181,3732,9744 +88305,314,13700 +55381,2963,8840 +270514,12795,5848 +281580,10519,6270 +619527,3505,19879 +198049,4445,3099 +317472,9799,7646 +460473,8276,13309 +257413,18222,5321 +225714,15385,4172 +353435,12559,9094 +219432,13135,3909 +550243,9217,16919 +58899,1018,9444 +180029,5486,2434 +526449,11136,15802 +533841,16771,16169 +320348,16374,7727 +477003,14611,13911 +505986,11222,15052 +396431,14903,10792 +547030,2,16814 +212385,11308,3635 +180578,10767,2445 +102791,4633,15838 +164553,8761,1878 +224702,5901,4139 +54293,4794,8626 +20378,3601,3528 +246174,17742,4878 +543314,8812,16648 +474279,10156,13828 +481070,10946,14101 +370260,2540,9856 +334342,5679,8393 +575758,15972,17923 +143280,19780,900 +249180,4703,5068 +282650,781,6343 +456574,13379,13121 +547555,5577,16843 +292124,3794,6633 +55807,9836,8758 +490158,11521,14478 +502793,2626,15000 +276038,2834,6094 +83351,17781,12932 +59605,13472,9443 +47008,18061,7344 +152842,4596,1345 +94646,8490,14569 +408666,2044,11292 +458254,7388,13208 +633996,16749,20347 +40353,3246,6543 +578202,16793,18025 +65565,13848,10351 +213412,515,3720 +20643,8008,3637 +177287,1502,2326 +565994,9378,17493 +284259,13542,6328 +527303,19976,15841 +160322,11182,1600 +265482,9057,5621 +574748,5757,17910 +612763,2860,19542 +261669,15217,5442 +291103,15653,6565 +356270,18186,9234 +646408,6772,20943 +104831,20103,15862 +440879,12889,12509 +456119,9667,13119 +195925,5000,3024 +578793,2403,18127 +633693,14179,20400 +386165,3166,10464 +566564,14119,17504 +330517,7050,8163 +64508,17032,10123 +552780,11390,16977 +27097,418,4537 +625000,12382,20031 +619819,5507,19813 +461488,16978,13366 +109008,14500,16651 +251842,8176,5180 +203196,9608,3337 +302644,16208,7006 +260663,6790,5446 +548146,10388,16809 +502705,1529,14937 +437716,5123,12459 +245971,16426,4910 +451146,5140,12968 +413100,2036,11475 +653634,12865,21168 +502303,17835,14899 +226152,19490,4114 +283823,10329,6326 +191560,6432,2845 +539591,15310,16477 +591767,16361,18559 +618653,15591,19761 +489635,6223,14482 +381297,317,10317 +120479,8465,18588 +307561,1692,7303 +384910,11653,10353 +607116,13389,19277 +539969,17901,16473 +526124,8684,15874 +8348,1501,2059 +118967,2614,18429 +32540,12036,5146 +631982,16565,20266 +109403,20046,16649 +161062,17991,1666 +466956,4130,13616 +182915,10899,2522 +215519,19570,3765 +164619,8936,1873 +256915,12399,5348 +237333,19111,4589 +171345,9552,2087 +17547,15199,3063 +212773,14499,3653 +147683,18883,1063 +326490,8495,7946 +640392,14762,20655 +248743,342,5075 +575638,15165,17937 +225119,9368,4160 +586098,7526,18419 +96094,12877,14801 +437084,19602,12383 +188327,18745,2650 +339545,11001,8514 +389029,9911,10529 +172964,2687,2150 +320203,15481,7719 +609941,17948,19321 +256561,10048,5338 +553944,1313,17074 +481425,13653,14092 +302762,17094,7007 +333069,13414,8292 +215339,18855,3711 +329052,12015,8044 +363015,17227,9447 +466306,18529,13464 +295838,18042,6710 +445566,15859,12724 +328830,10258,8127 +17182,8949,3173 +640648,16143,20662 +82566,4518,12980 +486904,1669,14412 +183287,14956,2540 +368865,10211,9757 +217630,17551,3816 +188362,18875,2655 +448654,2472,12921 +74443,4754,11598 +249863,10631,5103 +94762,10703,14559 +647927,106,21046 +400438,11738,10965 +262497,1894,5604 +464278,703,13531 +30994,8274,5121 +266248,15425,5628 +65110,6249,10324 +184898,8873,2619 +101452,2014,15659 +36190,14539,5693 +149609,14996,1156 +329941,242,8139 +293815,19881,6638 +575573,14872,17946 +84201,11513,13149 +285531,4761,6419 +73980,17311,11453 +621815,4782,19898 +610988,9138,19486 +479625,17046,14018 +110377,17125,16822 +437660,4316,12410 +370546,5438,9847 +266523,18227,5695 +476138,7798,13941 +616300,14682,19650 +210010,9460,3537 +258559,7443,5392 +294779,8227,6719 +322374,13704,7796 +83716,3410,13140 +544033,14794,16646 +300833,1410,6988 +327649,19518,8011 +331735,1744,8228 +122094,15339,18638 +210061,9829,3520 +654988,1487,21288 +477655,19147,13930 +542252,17848,16565 +376352,18002,10011 +436582,16132,12322 +347013,16717,8765 +162361,8780,1763 +375887,13403,10035 +282365,17720,6201 +271705,4848,5926 +116262,16882,17785 +515145,12440,15351 +448154,18369,12790 +646708,10615,20974 +295278,13380,6758 +454563,14204,13093 +15011,14458,2812 +611339,11316,19423 +476067,7294,13897 +602354,12794,19104 +498423,4215,14802 +509320,506,15217 +206540,19750,3362 +291989,3261,6617 +521546,7025,15697 +509104,18665,15135 +419321,18203,11585 +152484,592,1335 +652156,18163,21101 +375571,11207,10059 +467499,8946,13565 +630899,4522,20330 +281867,13330,6235 +114243,1756,17655 +213887,5261,3751 +246456,333,4958 +634488,2305,20491 +582091,11799,18171 +25244,8149,4190 +18338,8734,3255 +148036,1876,1180 +129482,19855,19791 +358640,19192,9252 +258757,8188,5383 +516343,1930,15437 +425609,13333,11856 +272727,13202,5942 +69120,14962,10793 +233855,9334,4503 +162011,5823,1700 +387735,16951,10421 +101213,18558,15383 +419358,18301,11585 +381493,1764,10279 +60704,13352,9465 +236806,16470,4563 +421741,18547,11705 +492824,13847,14499 +170021,17072,2039 +610273,658,19420 +635745,13123,20448 +586118,7897,18430 +445731,16939,12688 +507307,2730,15105 +303496,4521,7073 +183022,12075,2482 +283732,9848,6320 +436600,16509,12342 +264391,19924,5537 +344318,12362,8727 +8175,18529,1977 +563983,10079,17399 +572278,4897,17866 +286364,12066,6393 +510586,12426,15207 +429566,8538,12058 +9157,14798,2106 +5393,11305,1659 +443321,15780,12626 +368147,3564,9743 +331508,19124,8186 +555916,19078,17034 +506862,18393,15011 +452767,19153,12942 +503616,10998,14955 +66561,11164,10509 +425360,11197,11862 +375447,10414,9999 +366707,12507,9704 +265564,9730,5695 +250418,15705,5092 +345687,5922,8803 +19150,2413,3355 +527511,1336,15905 +205541,12503,3345 +650693,3642,21094 +24710,19426,3951 +201615,16295,3190 +366991,13804,9615 +407282,11112,11218 +458147,6737,13229 +500177,18603,14780 +603515,1205,19168 +221742,13579,3986 +465349,10515,13464 +103878,3861,16041 +532811,8731,16127 +641292,2986,20778 +145475,19432,999 +195650,3383,3006 +380069,8668,10199 +412256,14604,11379 +163543,19264,1725 +270074,9985,5846 +53054,2746,8376 +210959,19495,3561 +632007,16722,20334 +131854,19915,20260 +654598,19836,21240 +104976,3211,16127 +282787,2006,6322 +156642,18026,1399 +617840,8352,19752 +501510,11861,14863 +631763,14813,20330 +79145,5737,12375 +205217,8821,3376 +68712,8060,10754 +625127,13304,20050 +31254,11953,5098 +213442,572,3753 +356957,3567,9263 +109392,19964,16786 +394731,19504,10710 +401625,229,11063 +207684,9620,3497 +443733,18937,12618 +406372,2361,11164 +507862,7110,15083 +319383,5073,7702 +92025,3764,14324 +448396,20005,12766 +619150,19807,19731 +368096,3116,9784 +257444,18509,5334 +211906,8633,3664 +302240,11510,7059 +223545,14022,4050 +84966,4219,13176 +449285,8997,12915 +89387,18945,13846 +159337,1505,1658 +633705,14285,20377 +123385,17143,18864 +650990,6616,21091 +380406,11327,10184 +201,6129,919 +261129,10648,5448 +360056,11710,9371 +422390,3724,11825 +468392,17769,13552 +306568,11158,7195 +628689,5741,20213 +154579,19631,1358 +614937,1676,19662 +397520,3413,10835 +97971,4358,15119 +245132,8499,4913 +447558,12731,12841 +188095,16486,2685 +406175,805,11217 +617292,3114,19715 +614275,16709,19515 +275914,1422,6077 +515680,17080,15423 +219366,12692,3917 +210560,14343,3529 +322554,15364,7783 +113746,12787,17436 +197287,16923,3076 +436096,9847,12305 +17613,16331,3082 +306603,11425,7175 +575047,8546,17977 +323090,18827,7823 +71572,16339,11137 +543715,12186,16665 +497053,11815,14687 +227486,11537,4226 +458685,11662,13290 +468441,18090,13611 +632198,18433,20269 +578266,17422,18001 +401357,18380,10950 +463329,13446,13422 +645458,18922,20851 +489476,4473,14489 +574682,5002,17943 +46024,1188,7374 +23330,14076,3905 +496568,6985,14702 +337873,16580,8415 +112923,19222,17273 +341965,12901,8590 +556939,8018,17128 +370124,1120,9857 +521936,10119,15616 +315038,7647,7544 +87767,12254,13685 +122549,3034,18937 +106989,18972,16338 +64079,9294,10187 +247443,9080,4990 +153216,8031,1315 +83199,15169,12834 +502465,19653,14865 +495061,13336,14597 +573339,14882,17829 +287929,6579,6512 +613592,11061,19580 +415948,9778,11486 +456591,13475,13164 +632350,19925,20326 +481988,18030,14117 +97918,3228,15112 +347944,7416,8954 +209132,2411,3565 +65489,12380,10299 +479971,20021,14018 +118653,17643,18202 +244087,19086,4810 +7110,34,1966 +226064,18639,4140 +602269,11809,19031 +638774,18197,20573 +171913,13046,2085 +78346,12455,12205 +614011,15516,19534 +618689,16040,19771 +489436,4168,14490 +208961,1528,3597 +635278,8835,20456 +647448,16807,20993 +540814,5949,16501 +68355,1146,10694 +206223,17444,3397 +610198,83,19440 +379399,2723,10201 +57542,18330,9016 +602329,12023,19046 +285346,2821,6407 +641688,5989,20802 +531055,13779,16049 +480852,9693,14136 +422020,1138,11757 +440930,13026,12517 +243992,18508,4860 +252730,15948,5116 +258140,3518,5372 +186222,19788,2607 +263740,13256,5596 +268317,14067,5696 +226859,4935,4182 +589562,16787,18498 +2621,4966,1199 +178212,10610,2329 +362164,11271,9421 +86859,16524,13395 +415902,8702,11545 +121916,12519,18634 +437333,1963,12426 +246215,18115,4918 +380458,11915,10170 +527826,4152,15913 +247854,11960,4958 +186579,4185,2644 +35123,16830,5623 +238812,12384,4693 +570783,11487,17777 +134965,14871,20597 +128794,7945,19878 +108729,9891,16674 +413417,5451,11434 +162256,7772,1715 +498387,4106,14764 +411289,5773,11346 +67276,3259,10614 +525274,1135,15840 +217181,12917,3810 +224383,4438,4107 +3629,1056,1522 +554140,3680,17041 +656547,13227,21295 +626311,4375,20097 +287,7458,895 +36777,4995,5884 +614705,45,19656 +647095,13997,20948 +420130,5097,11730 +359661,7800,9367 +236611,15184,4598 +276994,10532,6076 +620257,10313,19782 +170145,18121,1978 +180662,11366,2430 +124675,19011,19156 +361272,2823,9493 +239611,19156,4672 +641979,7444,20760 +104792,19304,16025 +22677,2301,3902 +434400,14006,12266 +119989,19302,18363 +103983,5948,16040 +344312,12341,8751 +542482,20003,16575 +483785,14311,14176 +117856,3683,18196 +169988,16859,2003 +207973,11819,3474 +188180,17470,2725 +303080,1491,7079 +466501,621,13547 +644625,13259,20867 +648102,1323,21014 +276713,8592,6107 +407728,14813,11148 +207165,5153,3498 +18333,8680,3323 +227468,11361,4211 +466111,16499,13495 +440196,7089,12541 +428528,18318,11945 +324585,12440,7890 +129226,15832,19790 +102281,16950,15507 +376355,18008,10006 +422778,6623,11815 +588284,6153,18485 +418493,11114,11647 +412549,17311,11377 +572289,4930,17868 +27951,16779,4652 +91263,12668,14192 +268519,15316,5719 +203902,17244,3277 +503920,13566,14952 +390578,2688,10596 +193421,3538,2973 +81330,2784,12766 +52271,10291,8257 +243574,15617,4839 +309358,17851,7261 +279565,13126,6142 +453877,9452,13047 +135165,17732,20640 +421265,13791,11653 +373088,9701,9952 +65085,6059,10304 +305435,2853,7200 +335768,17657,8337 +171539,10843,2055 +257982,2203,5389 +230171,15318,4280 +490454,13156,14490 +100762,11630,15446 +460778,11297,13368 +320121,14601,7689 +50339,15130,7970 +375924,13747,10047 +213644,3123,3755 +59377,10012,9344 +354075,18326,9067 +539613,15642,16389 +204389,871,3417 +268937,259,5786 +315176,8826,7551 +616798,19241,19653 +383788,2002,10341 +466209,17440,13532 +359393,5700,9407 +183296,15070,2499 +86084,2933,13419 +177628,5579,2312 +296303,1885,6802 +97748,94,15047 +228429,63,4284 +177819,7736,2328 +183475,16276,2512 +628823,6858,20194 +110095,12846,16881 +54251,4044,8555 +489163,1868,14448 +525551,3546,15840 +361926,9155,9495 +365349,17614,9513 +548888,16610,16791 +87040,19089,13442 +344935,18506,8701 +485836,12855,14271 +137459,18078,20913 +59601,13460,9452 +17806,734,3273 +278167,1217,6161 +511623,942,15267 +416289,11658,11527 +631534,11681,20308 +641719,6179,20761 +451770,10045,12981 +129374,17977,19856 +28899,11816,4738 +202203,1828,3263 +267264,5052,5730 +60315,5298,9614 +565739,6466,17547 +76876,5255,12028 +240619,7831,4746 +574398,2890,17970 +38778,18486,6020 +290854,13806,6536 +620104,7258,19854 +104249,9768,15948 +354797,5190,9238 +117984,6528,18217 +433431,5144,12296 +123909,7428,19050 +549954,6171,16871 +257337,17461,5327 +239381,17941,4697 +435683,6076,12363 +243188,11050,4870 +647862,19921,20932 +599728,8086,18968 +427076,5245,11936 +179000,16298,2345 +276447,6031,6094 +124464,16317,19153 +510487,11089,15181 +610022,19168,19351 +481923,17662,14110 +332608,9920,8272 +200754,7792,3201 +649928,18158,21082 +243594,15662,4838 +396252,13500,10756 +282371,17751,6195 +510524,11690,15174 +468370,17501,13585 +420269,6278,11730 +524740,17483,15758 +549230,19240,16826 +515736,17601,15380 +1052,18844,874 +179492,285,2411 +258060,3105,5361 +290282,7488,6615 +506811,17975,15053 +391801,14445,10589 +47535,7258,7580 +520351,17259,15610 +286171,10270,6356 +145666,789,1056 +366271,8330,9622 +137349,16050,20919 +5187,8145,1611 +570853,12131,17742 +301472,6359,7062 +233983,10445,4500 +309948,2939,7340 +219178,11856,3912 +463213,12324,13437 +326878,13451,8000 +270195,10673,5786 +188602,1309,2743 +346861,14311,8794 +149305,12666,1114 +186293,1020,2685 +455610,4659,13143 +219096,11358,3862 +79841,17772,12357 +597305,7227,18910 +70119,12654,10992 +192932,18821,2860 +425322,10818,11900 +58912,1345,9336 +55687,8572,8748 +65736,16728,10360 +421490,15640,11724 +207077,4177,3436 +363614,3601,9554 +66694,13703,10384 +148209,4026,1148 +379849,7018,10236 +31977,3443,5230 +570325,6482,17703 +592229,1622,18670 +509354,947,15241 +644080,7121,20893 +264003,15881,5611 +424161,19779,11783 +200621,6693,3179 +560373,18242,17222 +551535,20089,16872 +96759,3033,15008 +355772,13254,9219 +386145,3078,10454 +293672,18746,6635 +532211,3383,16176 +129717,5850,20106 +73903,16548,11412 +398253,10423,10826 +317206,6658,7614 +395472,6542,10748 +190763,19748,2799 +537374,14701,16290 +478270,5330,14015 +576482,2151,17996 +248020,14694,5023 +627261,11823,20113 +592659,5458,18697 +28372,1654,4740 +292623,8636,6698 +477580,18113,13897 +235884,7549,4555 +481611,15642,14155 +113705,12151,17440 +315074,7861,7539 +263284,9653,5609 +395452,6167,10759 +650668,3487,21107 +642354,12842,20800 +85086,6769,13317 +46594,11216,7294 +643904,6115,20875 +417694,3827,11638 +439125,18211,12455 +651502,13634,21115 +64361,15149,10187 +268333,14168,5743 +605820,2523,19239 +59299,8783,9418 +72343,9440,11341 +450920,2686,12972 +184677,7256,2606 +228741,2282,4342 +69827,6861,10909 +339998,15695,8519 +566555,14104,17502 +33440,8148,5410 +350076,4467,8960 +361603,6038,9454 +15230,17295,2810 +189531,9987,2730 +97958,4143,15152 +46402,8159,7288 +45075,4547,7123 +347549,1956,8930 +515541,15998,15402 +241399,16152,4761 +348845,13141,8949 +362203,11466,9483 +489663,6671,14445 +131170,10215,20182 +41685,6618,6648 +252496,13766,5163 +198579,8152,3158 +65432,11508,10257 +477070,15060,13924 +501036,7014,14865 +249395,7026,5105 +357595,9160,9261 +360179,12345,9398 +393392,8976,10668 +253815,6318,5218 +461128,13525,13372 +175078,1945,2215 +224980,8379,4130 +537521,16010,16347 +575193,10230,17987 +231760,10071,4433 +421674,17590,11659 +68107,17307,10590 +173654,10148,2154 +307911,5360,7288 +140777,11358,21269 +213294,19772,3627 +609912,17781,19380 +250144,12974,5050 +180379,9375,2441 +21356,314,3708 +15748,5632,2959 +263137,8126,5553 +496911,11064,14660 +370531,5401,9855 +474704,13174,13876 +362007,9840,9480 +223940,19490,4065 +406391,2467,11192 +456631,13653,13123 +374310,18895,9925 +270565,13456,5790 +476882,13173,13943 +49405,18655,7725 +622323,7906,19954 +467177,5276,13622 +467642,11031,13555 +33646,11354,5448 +2893,8841,1321 +33319,6534,5425 +151862,16509,1227 +641994,8237,20708 +261580,14115,5489 +112500,11868,17242 +260610,6236,5441 +409258,8292,11290 +151425,11437,1264 +222783,4969,4042 +575403,12455,17961 +47890,12878,7467 +52566,14815,8310 +360877,18192,9372 +546596,16771,16754 +67425,6230,10554 +77175,11042,12109 +399929,6032,10895 +169113,9640,2028 +481302,12869,14096 +203252,10280,3305 +102120,13750,15601 +554720,8385,17060 +458717,12271,13264 +362627,15263,9496 +246395,19308,4907 +452898,19714,12964 +580721,19284,18142 +55627,7896,8734 +207693,9681,3454 +27042,19917,4391 +430437,15189,12054 +326530,8940,8013 +426850,3014,11958 +505056,2525,15055 +42438,24,6851 +301002,3064,7006 +507796,6819,15129 +566616,15267,17483 +595479,10184,18783 +628019,18045,20083 +385123,14080,10365 +46902,16891,7457 +239656,19723,4686 +502248,17401,14858 +247522,9520,4956 +181175,16547,2434 +627980,17960,20134 +507564,5375,15113 +581743,8768,18200 +447174,9744,12808 +632121,18003,20271 +207346,6908,3475 +611447,12358,19417 +483542,12935,14194 +612192,17704,19439 +202660,5817,3298 +598646,17755,18836 +184764,7633,2626 +623744,20112,19906 +557488,12842,17115 +642666,14937,20755 +376666,19777,9976 +516998,7241,15472 +158581,14989,1513 +328670,8004,8105 +246921,4263,5000 +433999,10366,12244 +408550,1151,11291 +143152,19454,906 +313365,13424,7450 +57437,17159,8986 +239256,16874,4687 +300157,14814,6894 +366394,9361,9671 +260145,1314,5502 +571272,15727,17769 +604535,10930,19142 +490188,11649,14469 +17844,1098,3301 +10553,18810,2212 +475242,17587,13861 +299062,5068,6940 +76057,11784,11804 +636676,536,20560 +394550,18501,10692 +472664,14535,13764 +297738,14593,6876 +39371,8408,6234 +480272,1933,14106 +491950,6951,14530 +46145,3922,7318 +582481,14181,18166 +150146,508,1268 +510051,6478,15228 +240721,8729,4752 +75418,78,11775 +8421,2568,2041 +334208,4642,8331 +620269,10346,19873 +321514,3777,7783 +90788,2534,14048 +209114,2328,3515 +521458,6704,15655 +111564,16606,17016 +89992,10260,13864 +381509,2080,10256 +576190,18695,17928 +237636,1929,4698 +378648,17074,10148 +449501,10804,12924 +249920,10860,5086 +380765,15449,10209 +240502,6317,4739 +43056,9808,6785 +545043,3420,16719 +188431,19074,2683 +442611,10185,12592 +414238,13432,11440 +447613,12958,12845 +141252,7094,903 +455317,1304,13175 +130402,15680,20054 +89890,8795,13981 +268978,614,5837 +201970,18854,3245 +525584,3818,15876 +227208,8234,4267 +477164,15592,13944 +510073,6553,15180 +136480,533,20922 +293043,14193,6672 +134382,5578,20670 +571057,13673,17759 +224481,4900,4127 +289315,280,6614 +656567,13336,21286 +571970,1553,17881 +435060,1893,12332 +522080,12834,15663 +549081,17940,16781 +6694,13884,1691 +445495,15436,12717 +19371,7757,3466 +648117,1361,21034 +373545,13398,9902 +595795,13062,18732 +460777,11081,13371 +380679,14441,10184 +321540,4214,7774 +67108,106,10651 +38445,12359,6113 +360553,15605,9391 +100783,12101,15423 +440365,9106,12552 +182074,3976,2540 +195664,3455,3072 +190647,19000,2787 +443539,16931,12645 +548886,16606,16786 +14629,6836,2821 +531351,15649,16084 +252668,15706,5152 +536359,4592,16336 +264127,17066,5532 +655142,1819,21401 +352398,4564,9069 +21097,16217,3507 +318730,380,7688 +2137,15631,1015 +472863,16622,13742 +28847,10928,4784 +511383,18732,15171 +232813,19168,4364 +299305,6876,6889 +501263,9217,14875 +468089,14758,13553 +361050,856,9421 +451141,5129,13009 +624043,5392,20074 +625651,17415,20069 +296611,3636,6829 +4514,16164,1437 +623685,19280,19981 +653664,13196,21194 +23265,12904,3943 +111590,16803,17081 +117472,17349,18067 +62165,16828,9750 +47849,12420,7503 +248818,1098,5108 +601372,2655,19070 +310430,7292,7405 +597100,5734,18906 +315636,12764,7590 +505437,6501,15025 +364441,11404,9506 +578124,16199,18062 +594722,3493,18802 +310833,10688,7381 +155279,5547,1421 +547716,6251,16842 +570272,6058,17733 +351516,16454,9059 +383643,1073,10382 +103147,12118,15714 +126582,11185,19457 +43491,18329,6773 +392724,1864,10633 +116187,16038,17839 +543409,9371,16603 +222212,18602,3956 +442010,3634,12620 +331850,2166,8281 +398149,9683,10807 +422155,2559,11845 +275507,18210,5956 +626617,7155,20083 +437825,6093,12397 +456412,11825,13159 +74028,17908,11395 +72584,14117,11282 +367391,16947,9628 +392331,18558,10561 +361953,9359,9438 +268134,11430,5722 +462018,340,13419 +459279,16890,13199 +82103,16995,12692 +448569,1931,12932 +325769,1897,7942 +445973,19049,12694 +473830,6974,13823 +63327,17423,9860 +234380,15015,4473 +303808,6940,7132 +218663,6078,3910 +541882,15861,16531 +336005,18965,8377 +639813,10366,20617 +460660,9714,13364 +529265,17168,15962 +34534,6903,5642 +174115,12830,2130 +222297,19220,4025 +222264,19022,3949 +497382,14153,14717 +640696,16291,20695 +249438,7424,5100 +171638,11572,2111 +645232,17268,20830 +14730,9699,2778 +381081,18499,10171 +407016,9182,11159 +133380,8842,20476 +231362,5846,4381 +807,15876,893 +241401,16156,4752 +134068,20000,20485 +607237,14502,19273 +430687,17422,12091 +319203,4166,7705 +483141,9827,14234 +546548,16625,16759 +117565,18579,18011 +359124,3401,9390 +654744,171,21433 +489477,4497,14470 +393367,8412,10697 +480540,5040,14088 +141757,11416,849 +9103,13943,2080 +465128,8682,13493 +93692,11953,14419 +573068,12451,17817 +40249,2538,6364 +577735,13847,18008 +522361,16537,15667 +31091,9646,5009 +502778,2332,14932 +357982,12371,9278 +156602,17843,1457 +602154,10288,19081 +144594,10224,981 +529331,18268,15991 +514967,10532,15384 +128556,5202,19837 +131363,12214,20200 +439089,17332,12420 +477373,16892,13958 +256198,7508,5324 +386842,9166,10462 +116855,7604,18031 +250174,13559,5078 +110023,11791,16817 +559707,11848,17224 +123258,14950,18902 +282738,1573,6297 +534891,8851,16273 +242507,4415,4802 +234388,15065,4467 +552807,11924,16955 +565418,3049,17565 +642861,16322,20806 +118780,19056,18127 +444441,5392,12661 +170877,5806,2051 +360170,12314,9407 +188437,19085,2686 +273513,453,5994 +34233,1262,5578 +586150,8053,18447 +146853,10709,1040 +115178,18284,17647 +604276,8754,19191 +115582,5277,17892 +460316,6738,13337 +29477,533,4878 +486794,927,14412 +19285,5863,3442 +123614,1126,19008 +545177,4568,16681 +305877,6223,7221 +168134,19844,1956 +552335,7630,16945 +36868,6687,5889 +243408,13628,4855 +466947,3914,13595 +570798,11660,17766 +552558,9809,16998 +551792,2577,16955 +102171,14773,15502 +421984,1004,11792 +418376,10182,11645 +178437,12419,2350 +139513,13438,21182 +270638,14445,5815 +5522,13475,1608 +118723,18413,18160 +358310,15224,9260 +131936,2125,20414 +245274,9527,4948 +121910,12205,18716 +478095,3845,14009 +601760,7374,19026 +205811,14697,3382 +405070,11824,11110 +175672,8533,2281 +641334,3139,20725 +475275,18262,13796 +543066,6018,16663 +114686,10222,17727 +358896,2051,9365 +542935,4933,16657 +243522,14948,4812 +123419,17577,18948 +38242,9481,6062 +468107,14814,13570 +66863,16564,10535 +451482,8584,12977 +428135,15067,11940 +404783,10011,11107 +175469,6842,2273 +187140,8694,2650 +135202,18179,20638 +419828,1937,11672 +399894,5807,10901 +352072,2203,9074 +70743,1561,11031 +71982,2041,11301 +327428,17427,7969 +14364,2749,2885 +442600,10125,12651 +350451,7895,9020 +306536,10975,7158 +598389,15785,18860 +416536,13721,11544 +468835,1192,13694 +196149,7239,3054 +109115,16519,16698 +69994,9892,10961 +283295,6703,6317 +83358,17824,12966 +231921,11629,4373 +359416,5984,9342 +162936,13757,1721 +311032,11743,7408 +246170,17438,4945 +149099,11159,1179 +640677,16221,20634 +583533,4755,18326 +92023,3757,14306 +324133,7878,7920 +33094,1750,5317 +505897,10518,15055 +339192,8857,8540 +24931,3114,4110 +256168,7393,5303 +404510,6666,11091 +170040,17128,2035 +307372,19281,7220 +483684,13618,14232 +177228,716,2337 +500168,18576,14773 +345376,2879,8833 +231836,11426,4414 +82338,19861,12807 +24535,15818,3977 +592535,4368,18662 +584382,12132,18319 +554887,10059,17019 +143835,5112,1000 +241077,13233,4729 +536699,8240,16312 +307362,19035,7174 +472148,10561,13767 +612266,19207,19405 +154110,15053,1371 +155437,6969,1415 +539467,14598,16457 +336146,467,8486 +394121,15156,10648 +76529,18976,11860 +467433,8256,13602 +193266,2542,2912 +172920,2445,2159 +435095,2219,12346 +595959,14603,18786 +86745,13886,13371 +533642,16044,16172 +469922,11773,13660 +69113,14918,10830 +361606,6050,9484 +616892,19992,19630 +23309,13500,3944 +105074,4820,16083 +194316,10366,2955 +203784,16101,3317 +411856,10928,11366 +362592,15073,9460 +132162,6545,20417 +605660,788,19245 +514707,8267,15375 +428483,18066,11947 +74882,12173,11729 +383033,15196,10277 +350353,7282,9012 +479395,15537,14010 +41947,13278,6659 +605186,16873,19140 +541378,11043,16535 +258044,2930,5369 +71146,9880,11154 +140907,14397,21273 +284402,14784,6296 +321105,1376,7763 +23482,16554,3910 +650005,18607,21020 +73622,11728,11539 +180443,9705,2443 +234645,16688,4508 +87951,14334,13653 +123426,17676,18984 +583941,8023,18257 +464211,70,13463 +584314,11560,18270 +593985,16091,18715 +562018,12890,17274 +225788,16005,4147 +358831,1573,9343 +187762,14268,2694 +106382,6306,16275 +202869,7361,3280 +30574,19569,4827 +196326,8027,3060 +439481,1636,12549 +89078,12853,13785 +504914,866,15038 +212412,11562,3599 +303037,1218,7100 +323717,3386,7843 +437517,3295,12398 +390473,1684,10601 +417312,19645,11490 +145710,1183,1060 +395408,5999,10779 +14486,4195,2758 +163438,18213,1734 +246697,2096,4991 +278792,5937,6165 +25524,14461,4187 +349052,16647,8946 +412675,18632,11361 +52576,14998,8250 +539301,11641,16468 +616695,18166,19658 +654133,16271,21226 +69736,4400,10999 +503604,10944,14968 +407303,11156,11182 +482738,5104,14225 +441266,16721,12526 +7054,19226,1706 +607417,16161,19288 +518318,106,15588 +359789,9286,9345 +228375,19289,4269 +44070,6805,6905 +201206,12380,3196 +114198,1165,17661 +226257,427,4204 +174293,14409,2148 +542361,18543,16505 +517333,10476,15474 +646615,9130,20990 +218737,7538,3943 +21152,17339,3608 +183033,12099,2546 +479584,16852,13993 +271332,1332,5865 +123903,7322,19119 +8452,2911,2056 +310365,6816,7377 +475626,1586,13922 +33119,2179,5454 +553115,13790,16967 +133151,4820,20516 +87581,8232,13578 +34907,12975,5523 +153890,12684,1325 +250301,14297,5064 +370584,5758,9858 +583304,2516,18346 +630901,4551,20307 +622844,11498,19937 +504840,480,15052 +507349,3155,15133 +188348,18832,2725 +606409,8235,19226 +384209,5842,10355 +312868,9635,7430 +266349,16099,5691 +135817,9478,20703 +303739,6265,7127 +570389,7564,17723 +407119,10069,11153 +174521,16414,2150 +537438,15362,16380 +501736,13661,14924 +209967,9292,3537 +82890,10311,12999 +403633,18491,11053 +24480,14971,4077 +9599,2612,2126 +218181,2124,3927 +141464,9030,939 +384763,10009,10344 +258780,8244,5390 +234742,17360,4522 +24460,14532,3967 +592972,8170,18682 +27484,8898,4599 +297425,10526,6863 +242720,7202,4855 +140878,13832,21286 +400711,13808,10905 +524342,13110,15762 +389164,10809,10493 +48901,10918,7736 +61189,9,9726 +475231,17530,13840 +641821,6741,20751 +93559,10403,14480 +81719,10396,12793 +186204,19687,2548 +590770,9029,18543 +532348,4180,16163 +314474,3706,7546 +61293,1255,9710 +516981,7139,15462 +66629,12310,10462 +32278,8024,5199 +441663,363,12635 +222445,905,4083 +374465,19978,9923 +300736,1138,7053 +348589,12132,8947 +202506,4268,3274 +213925,5583,3732 +599098,2902,19018 +321188,1902,7764 +179506,663,2432 +163870,1545,1839 +302413,14504,6979 +54825,15046,8541 +515629,16767,15375 +126748,14669,19554 +302398,14463,7006 +255562,1566,5299 +60259,3679,9615 +576489,2172,17997 +251927,8528,5118 +117749,2133,18140 +442724,10698,12640 +376909,1600,10105 +512636,10572,15331 +1525,6605,1081 +362238,11579,9493 +57803,2471,9180 +50875,2157,8138 +192447,15897,2903 +75298,18979,11694 +20280,2441,3573 +9910,8405,2174 +362625,15262,9489 +209456,5388,3536 +56410,19442,8760 +62865,10542,9904 +354121,19728,9072 +338457,1125,8563 +162405,9306,1709 +287369,1962,6476 +512417,7931,15288 +15370,19236,2801 +6655,12827,1821 +542888,4536,16601 +355841,13574,9240 +618906,18148,19714 +148223,4231,1176 +284734,18602,6319 +398973,16199,10811 +410010,15366,11284 +607112,13379,19265 +6506,10159,1721 +234297,14224,4481 +50204,13022,7997 +225761,15583,4102 +497033,11695,14695 +278604,3705,6147 +345417,3282,8810 +125934,19879,19298 +357839,11478,9309 +228440,126,4353 +157873,9040,1494 +76073,12189,11754 +115567,4902,17895 +83092,13712,12952 +347649,2875,8892 +360615,15923,9400 +60339,5950,9555 +460983,12613,13371 +618064,11047,19703 +27613,10581,4596 +611639,14549,19486 +425976,16822,11930 +388284,2162,10504 +242781,7571,4816 +570573,9316,17787 +564520,15383,17405 +541962,16224,16514 +12636,13255,2512 +290077,6193,6585 +170620,2608,2051 +158463,13919,1506 +98021,5478,15053 +215673,540,3823 +431147,2972,12144 +654397,17834,21225 +608802,8901,19393 +229702,10450,4346 +28798,9985,4699 +301071,3320,6989 +487115,4749,14345 +337103,9067,8439 +80515,10181,12610 +69849,7282,10963 +530337,6668,15996 +255992,5914,5285 +467788,12896,13596 +204906,6075,3343 +208869,772,3551 +2677,5599,1346 +591999,19102,18593 +142398,16275,827 +469410,6524,13684 +28668,7780,4729 +289737,3494,6563 +652357,19842,21121 +143005,18997,835 +584902,15970,18280 +237011,17468,4628 +592549,4859,18724 +490907,17574,14471 +568989,16158,17669 +622712,10958,19979 +445633,16078,12713 +198526,7980,3137 +244179,141,4931 +175539,7548,2278 +600247,12808,18995 +592065,19800,18589 +96671,1539,14969 +25630,16228,4120 +393126,5840,10664 +528052,6426,15916 +291182,16285,6538 +417598,2922,11642 +652618,1473,21177 +40750,10306,6531 +367112,14741,9666 +156278,13879,1397 +138441,14245,21017 +504795,208,15010 +638841,19221,20539 +388680,6373,10520 +69635,2682,10968 +90323,15613,14008 +458641,10922,13217 +613218,7553,19564 +343781,8887,8710 +633738,14971,20353 +480866,9755,14087 +511482,19768,15189 +251849,8204,5131 +228473,478,4279 +584609,13444,18287 +133203,5604,20479 +550326,10101,16886 +267457,7071,5721 +14969,13635,2798 +186570,4098,2659 +35878,9775,5775 +498486,4744,14819 +434356,13367,12233 +105767,16513,16111 +534987,9796,16223 +312002,540,7450 +313247,12664,7510 +191917,10952,2899 +315763,14542,7585 +394871,917,10719 +264904,3987,5687 +202489,4133,3324 +618365,13138,19690 +257927,1746,5414 +356401,19818,9157 +466507,649,13566 +409485,10147,11278 +573210,13053,17867 +551731,1994,16946 +492032,8145,14554 +603059,17743,19108 +45867,18361,7221 +535439,13984,16243 +501092,7334,14915 +140119,1084,21360 +364085,8409,9520 +478756,10174,14045 +375748,12205,9972 +2133,15521,1083 +46130,3215,7312 +460655,9708,13320 +231145,4111,4369 +583916,7965,18344 +397154,639,10851 +535307,13054,16222 +345759,6953,8807 +163228,16151,1742 +494535,9716,14579 +428702,19787,12004 +218101,1746,3886 +475516,862,13899 +276859,9597,6110 +577324,9895,18047 +447015,8591,12803 +333044,13335,8271 +305096,19146,7078 +278803,5968,6175 +650446,1663,21160 +260947,9074,5474 +275208,15616,5951 +121750,10182,18763 +194391,11266,2991 +279791,14588,6164 +172860,2205,2192 +22068,12571,3705 +98049,6182,15100 +498019,277,14818 +523039,1449,15726 +310042,4124,7422 +163796,1152,1838 +31935,2982,5238 +244693,4100,4940 +507116,574,15102 +613509,10304,19506 +161841,3849,1715 +113044,1171,17365 +638707,17752,20594 +482228,19951,14135 +25433,12814,4093 +448843,4645,12886 +524742,17488,15759 +148963,10016,1156 +163964,2038,1866 +521589,7274,15686 +644734,13768,20861 +611642,14567,19445 +271876,5965,5936 +249489,8187,5086 +403948,1098,11138 +159096,19668,1544 +367791,651,9714 +44976,2916,7191 +164516,8530,1834 +75830,8274,11920 +637563,8875,20594 +580481,17880,18084 +102797,4703,15678 +201593,16187,3238 +54526,9407,8640 +212501,12257,3613 +194142,8485,2993 +14587,5704,2812 +454594,14599,13085 +401870,2158,11043 +129554,2855,19989 +427006,4921,11960 +299124,5427,6966 +398576,12872,10807 +417761,4578,11568 +498262,2894,14842 +162754,11698,1725 +1498,6078,1116 +348289,9371,8877 +602564,14322,19039 +251960,8805,5119 +225694,15007,4134 +189919,13292,2767 +449629,11674,12873 +240835,9459,4714 +554150,3743,17022 +32875,18442,5269 +418307,9766,11593 +377421,5508,10144 +155053,4022,1454 +540052,18074,16457 +328835,10268,8104 +197543,19363,3019 +102663,2759,15745 +42663,3456,6793 +142357,16114,844 +525244,1044,15805 +75701,5470,11867 +270089,10046,5822 +180134,7375,2451 +276559,7276,6084 +635954,15318,20477 +143347,686,976 +423480,13505,11792 +410178,16521,11289 +492285,10467,14555 +403314,15472,11033 +487521,7699,14384 +102373,18264,15612 +124067,9663,19106 +66413,8925,10443 +601,12774,1000 +542881,4503,16665 +176003,10796,2283 +506678,17222,15051 +61765,10874,9785 +198473,7766,3114 +401505,19662,10974 +555194,12585,17088 +10619,19427,2232 +39625,12417,6207 +328600,7768,8052 +484659,1985,14289 +74074,18638,11546 +14473,3822,2773 +319209,4208,7739 +31507,16443,5138 +14090,18144,2624 +454039,10136,13085 +447625,13366,12804 +280998,5715,6250 +311913,2,7457 +175047,1818,2260 +156768,19301,1421 +336524,3287,8443 +552737,10827,16967 +356599,1074,9249 +556494,4440,17170 +306109,7899,7226 +410552,19769,11242 +297950,16238,6865 +468435,18065,13609 +467551,10087,13579 +526756,14506,15857 +237301,19008,4565 +521938,10180,15630 +511084,16474,15218 +327289,16183,8029 +575654,15308,17957 +323955,5902,7875 +190890,1556,2882 +276478,6526,6097 +598486,16585,18894 +50923,2571,8176 +505036,1794,15014 +558561,1469,17223 +82922,10845,12880 +193153,1372,2935 +639352,5069,20619 +466949,3918,13591 +643370,19934,20780 +405514,15417,11073 +316764,2653,7662 +358195,14277,9285 +279158,8989,6183 +169583,12771,1988 +541711,15152,16495 +38112,7122,6024 +237498,559,4671 +151078,8893,1252 +172866,2317,2149 +138658,17635,20968 +462655,5680,13411 +497911,19042,14730 +296744,4396,6800 +632722,4450,20356 +586632,12691,18433 +101754,6348,15540 +551657,1589,16931 +122311,18873,18664 +278544,3263,6164 +10102,11018,2213 +366044,6140,9699 +454506,13737,13030 +405522,15431,11111 +50752,894,8045 +128060,16343,19579 +541803,15686,16484 +497109,12109,14688 +405445,14906,11115 +484440,19497,14174 +133443,9874,20528 +450661,19779,12931 +356658,1581,9303 +548447,12518,16807 +501598,12579,14851 +403204,14763,11023 +66924,17218,10383 +355385,11139,9182 +430984,34,12137 +131323,11887,20223 +580867,807,18216 +104368,13121,15912 +381641,3688,10323 +31324,13610,5110 +524008,9314,15796 +53337,8626,8511 +380758,15413,10194 +242011,475,4799 +58909,1284,9333 +50363,15530,7848 +44855,1056,7244 +172596,19675,2059 +495469,18262,14594 +576858,5760,18068 +304747,15402,7125 +117687,1060,18216 +313794,17475,7499 +584263,10864,18298 +324861,15436,7917 +480300,2132,14124 +276799,9139,6029 +428397,17692,11994 +470924,19788,13677 +380302,10261,10203 +13142,1788,2630 +131206,10614,20196 +185560,14708,2574 +510374,9927,15187 +203523,12915,3263 +215933,2344,3788 +3386,17833,1310 +14521,4678,2808 +278098,761,6176 +121571,6719,18635 +208292,15087,3500 +202536,4882,3283 +6542,10839,1793 +326645,10285,8001 +278491,3067,6129 +185367,12174,2630 +52579,15337,8346 +321473,3608,7794 +382437,9670,10295 +541783,15608,16520 +179469,19947,2333 +311526,17594,7351 +495217,15422,14586 +465544,12410,13530 +361642,6173,9467 +445200,11955,12728 +176431,14036,2242 +263822,14107,5578 +200585,6332,3220 +376862,1288,10160 +151216,10101,1210 +164589,8852,1839 +205928,15818,3351 +212805,15460,3610 +142304,15895,898 +387728,16904,10465 +158422,13514,1541 +107250,4331,16585 +619355,2006,19790 +182358,7191,2498 +281491,9718,6223 +648503,4568,21012 +328774,9314,8072 +229864,11706,4343 +96070,12589,14815 +264338,19020,5534 +287670,3497,6454 +259908,19768,5400 +624445,7856,20015 +450831,2063,12987 +544883,1919,16683 +325059,16934,7920 +176049,11304,2223 +565645,5777,17542 +555112,11208,17028 +407856,15777,11142 +243001,9233,4839 +415450,3486,11561 +421363,14365,11731 +33386,7502,5403 +337523,13136,8434 +600950,18050,18933 +524081,9990,15717 +280274,32,6252 +342145,15037,8658 +447870,16781,12797 +248590,18710,5013 +236951,17119,4576 +594684,3218,18783 +129927,8733,20070 +12176,7435,2478 +335892,18185,8378 +158960,19061,1550 +478863,10844,14072 +579677,11628,18104 +341548,9556,8633 +176574,15156,2272 +271417,2517,5911 +181622,19321,2381 +446738,5723,12756 +443226,15304,12605 +263548,11400,5601 +292351,6082,6625 +403196,14725,11062 +538087,1181,16461 +241267,15018,4728 +35409,1513,5729 +457839,4009,13273 +194277,10192,2991 +147109,13384,1041 +462750,7353,13380 +218074,1428,3901 +342121,14847,8593 +260088,949,5508 +506937,19116,15044 +649218,12713,21051 +544081,15326,16612 +118829,19971,18118 +538568,5969,16472 +550612,12483,16922 +269289,2840,5805 +172186,16744,2055 +368413,6389,9788 +233059,1134,4462 +607570,17594,19238 +49551,815,7931 +5250,9339,1614 +497925,19126,14705 +516009,19292,15346 +35010,14748,5544 +593272,11082,18694 +268117,11232,5767 +98869,19092,15100 +47546,7289,7518 +316022,16837,7597 +160119,10059,1620 +475438,19696,13827 +159536,3772,1620 +486832,1214,14376 +171695,11886,2103 +235067,19106,4504 +552767,11280,16946 +638301,15132,20586 +530219,5893,16008 +303309,3106,7080 +171439,10204,2104 +400377,10699,10939 +285861,8442,6429 +154578,19564,1351 +54304,5221,8574 +5962,773,1813 +11702,18056,2336 +302779,17481,7031 +414476,14877,11477 +114502,6676,17726 +205738,14053,3425 +616856,19758,19685 +419798,1851,11660 +476767,12179,13971 +341120,6108,8586 +605103,16268,19140 +638330,15275,20555 +205153,8343,3420 +521969,10603,15617 +426738,2212,11949 +240893,10232,4715 +141721,11280,883 +614984,2039,19613 +457611,1539,13245 +642175,10506,20740 +2809,7945,1329 +188154,17007,2668 +219698,16124,3871 +470561,16904,13689 +570513,8697,17754 +540010,18009,16442 +106363,5985,16358 +466531,698,13581 +556465,4211,17159 +600083,11130,19015 +100035,19209,15318 +143699,3812,942 +544169,16068,16584 +319578,8034,7728 +486302,16415,14309 +588633,9762,18497 +253908,7240,5258 +172121,15901,2088 +373027,9239,9930 +346267,10286,8856 +176159,12059,2216 +488420,15896,14413 +644000,6691,20818 +251481,5885,5162 +241673,18022,4736 +299262,6465,6934 +526115,8637,15890 +252974,17489,5152 +578737,2078,18153 +428987,2908,12106 +130936,5748,20160 +218472,4055,3870 +194660,14366,2961 +271404,2362,5895 +369410,15337,9750 +115648,7470,17915 +560230,16123,17232 +27735,13530,4583 +6174,4079,1830 +51499,15608,8100 +508759,16555,15132 +515021,11021,15418 +322209,12438,7833 +93531,9477,14431 +602668,14735,19059 +622618,10551,19924 +545238,5052,16750 +515718,17531,15406 +377290,4972,10129 +68414,2303,10833 +398305,11362,10859 +352412,4621,9127 +646152,4255,20911 +66147,4238,10483 +30631,562,5098 +598876,255,19007 +632228,18861,20329 +443401,16077,12652 +411229,5139,11363 +136190,16245,20774 +526319,9747,15864 +622664,10712,19957 +426103,17482,11866 +304715,15138,7109 +306696,12086,7176 +369102,12569,9709 +530241,6204,16091 +352895,8525,9102 +13406,7277,2662 +564274,12668,17358 +509273,20070,15101 +134519,8300,20608 +408811,3138,11254 +647190,14751,20933 +617405,3963,19761 +507857,7102,15110 +431576,7497,12202 +613890,14495,19587 +323449,1883,7876 +164427,7446,1850 +408072,17267,11223 +611352,11681,19413 +75068,14822,11711 +515845,18133,15369 +415787,7458,11559 +457999,5161,13215 +419323,18212,11581 +637513,8635,20599 +462296,3195,13427 +124726,19504,19046 +502858,3323,14993 +24595,17128,4023 +11322,12147,2404 +188027,15834,2686 +109853,8856,16859 +478897,11528,14010 +280123,18181,6116 +41711,7264,6614 +180539,10498,2400 +342129,14865,8640 +444598,6110,12704 +619716,4849,19870 +648823,7569,21065 +504279,16250,14971 +339758,13060,8569 +332453,8694,8247 +342952,520,8680 +28185,19374,4544 +536707,8262,16349 +255337,18607,5250 +623975,4526,20053 +586907,14176,18361 +557393,12476,17137 +134941,14540,20615 +64981,3856,10280 +200729,7556,3237 +396758,17957,10798 +441540,19795,12571 +275938,1489,6104 +598714,18323,18874 +139405,10918,21206 +45028,3371,7180 +400769,13998,10953 +528574,10962,15947 +614996,2151,19648 +18463,10939,3239 +533858,16816,16167 +230374,16541,4319 +37489,17228,5909 +123423,17604,18814 +251870,8271,5146 +216568,8641,3827 +489839,8120,14432 +319458,6494,7691 +52228,9669,8278 +319327,4558,7705 +239010,13978,4710 +223397,12638,4047 +331556,19692,8156 +600245,12748,19006 +129394,18236,19914 +101155,18083,15362 +457195,18456,13159 +371212,11268,9849 +156719,18726,1401 +629329,10996,20209 +412142,13668,11305 +36437,19163,5812 +262103,19147,5472 +201952,18773,3195 +501221,9133,14907 +228423,48,4324 +97548,16784,14971 +260926,8834,5466 +632905,5659,20352 +496022,2505,14695 +186221,19783,2569 +607965,1979,19354 +582081,11693,18214 +400905,14752,10970 +403856,80,11124 +480885,9835,14116 +85800,18177,13322 +465660,13118,13522 +642579,13954,20759 +245498,11072,4945 +432082,12392,12184 +599495,6767,18939 +20261,2252,3579 +575883,16780,17942 +76937,6188,11988 +208653,18112,3476 +145071,14751,1003 +601471,4442,19101 +90503,17800,13994 +469112,3338,13626 +128928,10956,19803 +486715,19813,14267 +446592,4529,12796 +203221,10161,3340 +54809,14693,8599 +103330,14864,15738 +421850,19490,11679 +348557,11949,8859 +504003,14368,14932 +466469,353,13595 +565548,5334,17507 +236638,15362,4600 +123339,16441,18882 +145084,15128,964 +311070,12116,7380 +564931,18961,17364 +485261,7005,14310 +284181,12982,6302 +153515,9826,1317 +315666,12971,7544 +155208,4891,1453 +223829,18707,4035 +392436,19252,10616 +432849,19558,12191 +43381,16748,6797 +155573,8243,1484 +307992,5746,7277 +15234,17431,2864 +616883,19887,19632 +419351,18281,11643 +174355,15503,2173 +225126,9398,4155 +443158,14438,12624 +545053,3455,16716 +144676,10842,1010 +429392,5903,12031 +588842,11591,18528 +575002,8443,17942 +559261,7997,17226 +653497,11051,21224 +163502,18853,1764 +652376,19894,21153 +520542,19000,15558 +72290,8163,11256 +409786,13741,11262 +148403,5720,1108 +395872,10186,10768 +562910,359,17397 +558318,95,17184 +559302,8430,17235 +293097,14474,6635 +524006,9268,15764 +357033,3992,9296 +617869,8463,19718 +220805,4796,4001 +310600,8943,7340 +137502,18555,20926 +472517,12882,13739 +441799,1940,12611 +158681,16541,1544 +603145,18420,19108 +450094,15217,12917 +86914,17386,13506 +68304,393,10848 +600970,18210,19003 +372813,5886,9913 +633413,10671,20418 +429151,4614,12100 +285152,1676,6381 +33796,14958,5405 +627386,12952,20164 +41910,12218,6667 +331181,14969,8206 +200125,2874,3202 +401698,898,11019 +297331,9871,6832 +455163,19875,13040 +423399,12780,11832 +27689,11961,4493 +139983,19921,21115 +637937,12462,20557 +503220,6948,14937 +191046,2819,2853 +43620,19917,6727 +594433,705,18759 +182535,8396,2494 +400208,8609,10924 +598369,15704,18830 +226310,761,4272 +461870,19334,13340 +418143,7873,11571 +73262,4771,11521 +217941,732,3944 +467437,8275,13620 +258816,8376,5376 +344786,16997,8751 +482184,19585,14139 +8207,19000,1965 +537289,13857,16345 +596285,16527,18815 +52894,19676,8235 +53265,7063,8414 +63729,3158,10090 +613836,13454,19542 +170635,2637,2114 +297411,10351,6836 +331938,2477,8224 +604712,12703,19197 +209710,6983,3529 +211512,5282,3657 +131461,14420,20275 +501226,9138,14870 +393304,7708,10642 +57527,18241,8955 +628442,2052,20244 +168248,1373,2008 +105690,16036,16199 +165298,14829,1874 +403083,14164,10991 +323177,19915,7756 +168371,2386,2007 +13273,4813,2611 +177173,19835,2292 +307663,2910,7323 +585033,16815,18347 +308291,7967,7303 +256337,8340,5309 +83590,1150,13049 +200474,5025,3214 +315633,12759,7541 +603905,5559,19184 +296571,3453,6858 +379120,1118,10227 +302285,12478,7039 +314228,416,7545 +37897,3051,6154 +229483,7728,4321 +625126,13301,20008 +164852,11059,1800 +547608,5777,16795 +449591,11153,12933 +451668,9444,12939 +547768,6863,16829 +224578,5339,4119 +611753,15431,19477 +84737,20033,13004 +550161,8313,16871 +597428,7988,18826 +303937,7918,7145 +362974,17013,9424 +327908,1178,8127 +514460,5959,15404 +550875,15129,16889 +376108,16298,9970 +441732,787,12615 +413021,1304,11418 +166830,8744,1946 +309945,2925,7388 +9230,15981,1989 +524561,14890,15750 +605725,2011,19253 +507871,7253,15084 +299524,8668,6907 +586802,13384,18443 +587831,1241,18506 +638766,18102,20542 +548706,15485,16772 +528216,7562,15911 +645695,451,20917 +504423,17299,14945 +409288,8394,11253 +437256,1359,12474 +239492,18483,4660 +345707,6073,8833 +518210,18855,15483 +288723,13541,6497 +193294,2784,3001 +486024,13869,14309 +229762,10797,4288 +453466,4748,13047 +120186,2478,18547 +249363,6836,5054 +327953,1407,8082 +530655,9672,16002 +368878,10485,9776 +63165,15124,9874 +432861,19633,12148 +302612,15970,6977 +225461,13482,4155 +11762,18788,2412 +490472,13254,14434 +139514,13440,21193 +243322,12198,4834 +2926,9496,1244 +542384,18702,16531 +268359,14417,5715 +183806,18917,2537 +645146,16818,20890 +595777,12953,18801 +555316,13549,17086 +288892,15299,6509 +229488,7737,4296 +589119,13675,18468 +499568,13568,14820 +568331,10076,17633 +581238,4057,18195 +612098,17152,19439 +107878,16236,16537 +614765,360,19666 +214888,13705,3694 +637386,8034,20578 +101647,5096,15658 +367424,16997,9698 +639796,10282,20646 +505970,10904,15044 +620200,8406,19787 +497976,19811,14674 +582341,13597,18169 +286347,11933,6430 +222724,4347,4037 +152350,19897,1216 +276115,3112,6066 +577245,9309,18065 +318784,600,7691 +252669,15711,5178 +107585,10592,16599 +581969,10591,18189 +629962,15613,20213 +516683,4925,15516 +582932,18293,18176 +487303,5821,14373 +425953,16579,11906 +398261,10494,10849 +628206,19673,20149 +118030,7391,18160 +552781,11390,16963 +40034,19693,6292 +327929,1313,8062 +360308,13569,9381 +33071,1266,5410 +262958,6197,5532 +206292,17704,3348 +598057,13463,18888 +265117,5409,5682 +563345,4464,17379 +612727,2640,19586 +359873,9781,9389 +209641,6430,3550 +564607,16043,17416 +639530,6943,20673 +164214,5805,1817 +63859,5234,10124 +275875,1161,6031 +185271,11258,2637 +304364,11046,7108 +530477,8420,16002 +528794,13632,15977 +354399,2328,9219 +480330,2436,14157 +337561,13483,8428 +294162,3134,6772 +109611,4338,16946 +236628,15299,4598 +651209,8628,21104 +566172,11266,17553 +638778,18310,20522 +106517,9735,16309 +97119,10276,14998 +104022,6536,15960 +470572,16947,13651 +113689,11905,17296 +291581,77,6677 +2759,6810,1194 +363919,6345,9577 +542926,4858,16646 +642297,12412,20788 +552241,6201,16940 +558074,18286,17091 +654431,17980,21221 +599247,5196,18930 +340400,18408,8553 +260787,8096,5523 +106704,14370,16419 +582945,18311,18214 +490778,16532,14445 +583435,3856,18289 +144823,12169,1024 +496995,11605,14666 +237514,1140,4649 +650515,2488,21145 +611024,9532,19443 +648600,5656,21052 +211497,5223,3613 +84190,11216,13062 +507197,1076,15118 +626165,3371,20080 +94155,19428,14478 +139765,17054,21194 +153502,9801,1317 +217125,12486,3850 +625498,15878,19993 +251802,7963,5169 +99285,6937,15320 +176517,14555,2246 +502534,257,14941 +598413,15934,18845 +362105,10445,9423 +384996,12880,10339 +122766,7140,18809 +193304,2889,2964 +145951,3408,1027 +58383,12562,9177 +467699,12217,13548 +261419,12132,5466 +49393,18598,7729 +55276,134,8821 +200811,8136,3216 +453946,9655,13042 +600361,14073,19015 +149242,11891,1130 +420904,11003,11686 +329328,14946,8046 +118666,17814,18156 +183152,13210,2495 +638143,13625,20575 +588350,6862,18465 +413992,10936,11450 +327838,933,8094 +352830,8336,9150 +187941,15266,2653 +341238,7546,8658 +229637,9139,4309 +172934,2520,2191 +585046,17108,18350 +213142,19215,3668 +401866,2145,11056 +391845,14657,10604 +646973,13401,20963 +549591,3403,16868 +583083,20062,18199 +336681,4982,8413 +481343,13163,14133 +649597,15811,21067 +43035,9574,6768 +493205,17788,14576 +572537,7670,17807 +275911,1397,6105 +452950,96,13065 +632512,2486,20361 +517673,14544,15439 +118105,8858,18171 +502838,2973,14941 +336214,706,8420 +526755,14506,15849 +242998,9189,4864 +511363,18464,15185 +601278,2043,19110 +218267,2624,3884 +394114,15094,10709 +503524,10517,14955 +70900,3690,11089 +33157,3201,5323 +451313,7105,13001 +607107,13366,19261 +104840,234,16249 +188877,3846,2754 +271947,6667,5905 +352012,1544,9086 +123195,14227,18815 +319210,4209,7695 +399409,414,10883 +286631,14514,6386 +500465,2124,14921 +228262,18673,4208 +262762,4656,5573 +446715,5225,12815 +259639,17366,5396 +641584,4236,20705 +74389,3890,11566 +156788,19539,1456 +167259,11833,1909 +544732,20082,16646 +248105,15564,4996 +423593,14517,11757 +265862,11982,5637 +626094,1167,20169 +445214,11974,12724 +226595,2359,4263 +565440,3237,17547 +280073,17632,6124 +365860,3611,9627 +85969,620,13360 +10465,17323,2194 +409808,13859,11231 +506643,17075,15032 +404177,3332,11095 +518075,17948,15501 +506476,15793,15036 +101887,7676,15646 +184888,8801,2638 +483144,9901,14164 +92543,12428,14247 +435918,8141,12321 +553205,14256,17002 +61138,19011,9589 +14973,13774,2825 +648686,6218,21045 +155463,7335,1442 +13746,12704,2670 +348399,10609,8948 +467707,12275,13598 +191139,3460,2858 +560570,19956,17207 +54234,3875,8557 +16986,6074,3115 +643013,17116,20714 +626069,657,20083 +408759,2666,11277 +29535,1642,4911 +592708,5783,18689 +370809,7548,9830 +647358,16454,20928 +307541,1608,7324 +102613,1759,15822 +21754,6674,3755 +150422,3412,1211 +449677,12053,12905 +268014,10650,5772 +498909,8832,14788 +491405,1652,14535 +572428,6416,17891 +494161,5060,14643 +646655,9929,20936 +602687,14821,19044 +68280,20006,10658 +301006,3105,7059 +260741,7772,5509 +297033,7218,6875 +416692,14635,11483 +346995,16343,8837 +523894,8691,15801 +32832,17677,5272 +338917,5652,8500 +294409,4100,6744 +603846,3672,19210 +494761,11524,14631 +213729,3922,3727 +543,11669,884 +237465,260,4698 +372584,3246,9881 +404724,9238,11124 +224461,4862,4166 +52168,8726,8285 +196677,10529,3052 +266244,15367,5632 +180904,13660,2454 +132705,16869,20349 +445417,14489,12671 +325057,16931,7887 +144122,6606,1023 +447226,10337,12772 +468179,16061,13569 +305287,1353,7175 +16791,3390,3154 +418167,8307,11618 +614293,16800,19529 +550154,8261,16916 +576427,1450,18055 +577552,12479,18041 +574326,2232,17933 +552051,4632,16949 +249206,5076,5100 +429933,11399,12108 +507587,5546,15091 +125705,16179,19327 +325172,17501,7886 +646702,10537,20986 +446692,5099,12817 +392873,2949,10669 +171970,14086,2080 +346281,10582,8854 +144259,7823,1016 +351054,12167,9029 +544919,2165,16763 +210392,12495,3572 +436616,16560,12379 +289580,2347,6559 +207480,8307,3430 +222025,16478,4028 +303162,2235,7141 +41109,17401,6474 +138487,15291,21058 +357945,12077,9303 +10738,2032,2347 +302457,14636,7037 +244905,6722,4897 +292326,5941,6667 +5703,16679,1527 +647362,16469,20920 +266815,1065,5755 +628762,6613,20201 +365022,15866,9570 +647434,16747,20945 +126509,10798,19427 +63575,604,10150 +286202,11080,6389 +164593,8860,1862 +86446,9965,13492 +299426,8002,6928 +362386,13327,9440 +118743,18688,18091 +242136,1442,4868 +116067,14763,17849 +9666,3737,2173 +87514,6974,13627 +153198,7914,1384 +442614,10190,12574 +406432,2912,11153 +447964,17499,12805 +51225,10254,8098 +415698,6549,11517 +405567,15871,11093 +154090,14957,1343 +595648,12129,18816 +61722,9439,9712 +371101,10206,9825 +141035,17880,21243 +414103,11822,11395 +234531,16257,4505 +515751,17783,15361 +584108,9765,18324 +589605,17068,18478 +117834,3075,18147 +498622,5496,14754 +545183,4592,16736 +173747,10853,2192 +594236,18968,18706 +115734,8342,17881 +249484,8071,5083 +561098,5004,17289 +252876,16525,5139 +254619,11893,5201 +340023,16004,8512 +403477,17180,11016 +631130,7310,20291 +542465,19466,16542 +8830,9157,2021 +115548,4651,17845 +284805,24,6395 +154005,13943,1359 +351708,17913,8961 +160790,15714,1607 +100670,10208,15353 +415633,5723,11499 +542544,1111,16627 +404963,11159,11089 +538104,1227,16448 +358988,2683,9383 +422342,3604,11762 +596570,19706,18754 +430381,14828,12094 +631095,6733,20283 +394984,2218,10723 +490076,10417,14436 +157361,3800,1545 +492288,10476,14540 +180824,12847,2424 +321365,2833,7771 +581852,9820,18180 +346114,9055,8779 +537550,16061,16377 +632766,4651,20402 +54730,12867,8561 +181662,19594,2428 +16649,1337,3174 +382826,13213,10257 +541650,14583,16529 +104370,13134,15898 +520504,18759,15596 +30538,18985,4925 +509179,19141,15146 +268717,17865,5733 +169825,14964,2036 +410000,15294,11289 +278931,7138,6145 +147765,19622,1032 +404203,3479,11064 +72091,3355,11298 +297711,13730,6848 +402775,11674,11002 +149076,10769,1116 +461039,13007,13370 +27233,3040,4604 +179415,19668,2325 +280129,18233,6156 +597913,11743,18922 +367085,14587,9631 +644465,11575,20893 +425805,15161,11933 +126859,16269,19506 +318257,17079,7636 +374291,18780,9956 +384836,10865,10364 +606729,10661,19230 +90291,15072,13863 +533445,13903,16196 +567502,1773,17615 +316004,16772,7569 +513310,16912,15274 +213110,18374,3619 +222319,19282,4017 +139002,2854,21173 +158188,10759,1567 +269160,1779,5813 +118719,18344,18087 +535048,10731,16243 +386933,9699,10473 +226532,2172,4227 +149938,18664,1117 +73720,13701,11525 +396282,13812,10768 +341052,5455,8594 +389061,9995,10525 +582024,11445,18172 +644820,14366,20905 +631208,8089,20275 +218601,5501,3936 +477376,16906,13957 +412992,1203,11429 +167165,11548,1917 +21013,14332,3528 +355455,11835,9170 +241652,17895,4738 +650511,2477,21144 +624635,9952,20039 +52903,19742,8236 +269607,5503,5838 +612485,206,19576 +209817,7864,3552 +215708,665,3812 +371746,15966,9858 +282571,264,6308 +531821,19280,16043 +301369,5492,7064 +59123,4841,9383 +485888,13206,14292 +583873,7395,18303 +450498,19097,12886 +238478,9779,4707 +447022,8731,12799 +552775,11320,16964 +637073,4458,20566 +340272,17623,8517 +562212,14377,17262 +178556,13638,2307 +485202,6716,14294 +161562,963,1743 +406501,3202,11143 +521551,7051,15659 +245316,9780,4875 +555771,17741,17029 +328374,4751,8114 +512022,5378,15333 +542548,1117,16632 +584311,11558,18287 +535709,16526,16274 +419442,18855,11569 +605515,19240,19136 +212174,10322,3638 +462298,3200,13442 +78296,11762,12242 +184637,7190,2598 +522675,18634,15683 +430747,17739,12078 +560115,15237,17235 +218359,3337,3935 +587634,173,18507 +625690,17651,19996 +532530,5775,16111 +298551,1462,6917 +321917,8218,7780 +210508,13822,3533 +69851,7296,10855 +66089,3106,10498 +24242,9389,4015 +318766,525,7687 +239045,14830,4686 +247919,13535,5026 +58139,7735,9152 +75513,2490,11822 +391310,10178,10583 +609836,17208,19307 +567637,3308,17677 +529532,19701,15919 +477047,14846,13898 +270516,12799,5848 +14745,10060,2780 +160280,10924,1676 +159966,8118,1583 +363250,346,9602 +277761,17462,6082 +259521,16345,5439 +472423,12310,13747 +326665,11084,7955 +306605,11447,7233 +582754,16633,18246 +614238,16622,19575 +607595,17770,19233 +273491,401,5960 +231235,5137,4412 +189069,5373,2790 +588870,11688,18518 +568343,10154,17591 +276257,4527,6086 +120450,8000,18510 +222956,7450,4066 +506640,17068,15068 +188810,3598,2763 +289117,17381,6489 +437954,7062,12414 +232373,15629,4407 +502152,16813,14909 +325603,962,8019 +521094,4033,15679 +33034,841,5472 +545267,5382,16734 +353116,9202,9152 +393274,7430,10648 +16528,18281,3014 +534716,6167,16233 +402811,11791,10983 +358577,18680,9252 +281775,12289,6256 +206115,16969,3384 +329241,13818,8094 +500393,1186,14877 +281082,6573,6269 +266514,18148,5632 +165695,19034,1822 +282548,168,6338 +184024,638,2628 +370589,5809,9806 +565403,2732,17530 +66099,3193,10465 +258665,7909,5428 +575563,14828,17918 +248348,17177,5001 +26755,15405,4354 +244072,19020,4820 +374759,2237,10014 +560434,18858,17213 +90874,4570,14189 +97976,4396,15075 +56074,14948,8890 +163310,17142,1708 +44170,8182,6923 +198744,9157,3138 +336220,731,8448 +237459,235,4649 +57890,3664,9199 +88795,8668,13739 +138027,7068,21072 +325981,4295,8009 +425576,12959,11920 +477554,17755,13924 +478744,10125,14051 +442009,3633,12655 +358453,16288,9309 +41437,2751,6643 +246074,17058,4931 +447657,13703,12784 +416594,13978,11517 +471270,3126,13760 +285429,3132,6360 +455513,3633,13159 +524230,12636,15743 +432638,17360,12209 +350615,8915,9021 +118089,8177,18179 +348711,12728,8941 +1482,5864,1103 +398793,14732,10875 +178362,11928,2339 +116729,4610,18079 +297983,16413,6850 +449160,8509,12904 +442260,5670,12623 +601074,19063,19025 +253735,5288,5248 +576053,18042,17974 +36497,19950,5708 +10084,10909,2254 +367632,18612,9659 +487660,8318,14416 +206959,2874,3490 +38404,11079,6068 +560238,16163,17217 +640218,13324,20687 +559138,6867,17213 +243262,11673,4853 +173493,8730,2149 +254513,11085,5262 +520635,880,15623 +512247,6901,15270 +563731,8240,17420 +503887,13065,15004 +599795,9146,18939 +107139,2023,16559 +593714,14909,18714 +72122,3837,11269 +587554,18784,18418 +143658,3549,959 +513718,19713,15258 +441679,424,12654 +354166,198,9235 +100634,9438,15406 +262346,1085,5566 +118983,2773,18318 +304002,8240,7078 +386264,4318,10424 +401329,18318,10892 +288137,8244,6450 +569627,1214,17716 +505569,7278,15068 +551411,18968,16911 +520275,16836,15561 +531037,13617,16016 +43046,9669,6849 +535871,138,16361 +479562,16774,14029 +147384,15259,1062 +1042,18797,845 +501686,13400,14877 +394539,18487,10687 +267355,5441,5755 +568940,15728,17594 +468144,15214,13548 +548835,16374,16812 +588586,9094,18475 +147234,14134,1077 +182756,9489,2530 +215145,17035,3697 +37755,1047,6078 +250422,15714,5081 +297276,9380,6794 +43231,13733,6874 +568301,9671,17591 +336383,2067,8477 +27889,16379,4542 +236454,12575,4590 +29546,1676,4869 +474849,14624,13815 +390380,938,10601 +493961,3633,14652 +174540,16681,2144 +379521,4179,10167 +532069,2535,16174 +89692,4693,13897 +416701,14750,11563 +40995,15506,6502 +152837,4167,1353 +203953,17548,3263 +40902,13590,6535 +453133,2513,13036 +48351,167,7748 +596003,14788,18784 +463491,14305,13403 +516187,762,15489 +151895,16940,1283 +462846,8803,13399 +39712,13626,6256 +134411,6379,20546 +360756,17617,9392 +638041,12942,20577 +228695,1639,4332 +520711,1332,15666 +420928,11086,11680 +636741,2325,20522 +410615,21,11323 +136215,16438,20706 +89794,7192,13987 +452940,59,13042 +49307,17584,7719 +97245,12279,14940 +561491,7939,17332 +636992,3998,20594 +20424,4272,3584 +27102,521,4563 +118426,13787,18151 +380838,15906,10238 +570526,8746,17703 +407253,10989,11167 +56957,9388,8962 +474687,13057,13889 +459285,16979,13265 +77531,16168,12104 +489877,8383,14438 +140746,10930,21267 +241997,420,4821 +202556,4975,3330 +301456,6114,7053 +574531,3984,17939 +187341,10267,2721 +595925,14254,18777 +381209,19531,10194 +197540,19304,3059 +108536,6308,16752 +229180,5258,4355 +590604,7895,18621 +43073,10063,6763 +352930,8590,9064 +321496,3694,7770 +637853,11920,20563 +259325,13402,5424 +273416,19771,5862 +656672,14529,21265 +645636,20085,20862 +162949,13868,1754 +8344,1339,2043 +469614,8165,13671 +43262,14658,6772 +344355,12507,8696 +508064,9348,15099 +477516,17598,13920 +565860,8156,17478 +339465,10409,8569 +51514,15741,8100 +444603,6137,12681 +451595,9161,12981 +447974,17577,12753 +277296,13111,6063 +487220,5348,14340 +50694,19942,7943 +444230,3628,12710 +41200,19148,6425 +236662,15549,4603 +526543,12418,15803 +312351,4816,7518 +267028,3327,5701 +210701,16218,3558 +406753,5880,11206 +213003,17698,3660 +167387,12849,1922 +205046,7699,3348 +349625,20007,8921 +326773,12234,7969 +342178,15131,8658 +160969,17208,1608 +144973,14116,957 +525207,793,15872 +208367,16027,3475 +504631,18565,15001 +402082,4491,10986 +110733,2823,17072 +263952,15390,5554 +581374,5493,18200 +565109,7,17510 +584715,14228,18279 +609257,12284,19361 +264554,1303,5622 +425022,8636,11893 +156094,12450,1464 +215523,19574,3731 +475600,1539,13937 +98516,13630,15095 +582275,12903,18190 +312827,8999,7461 +326464,8405,7980 +284930,680,6408 +615148,2972,19646 +492870,14405,14544 +291010,15269,6541 +511243,17453,15168 +584610,13446,18304 +378980,19866,10072 +609089,11064,19378 +644995,15661,20812 +87929,14004,13578 +620669,13213,19800 +327316,16341,7950 +152442,433,1318 +97861,1709,15092 +212348,11122,3621 +534953,9138,16221 +550591,12362,16874 +637704,10138,20529 +555363,14056,17011 +274229,6665,5979 +656238,8855,21362 +255849,4695,5345 +457417,19673,13153 +241153,13579,4780 +170914,5905,2078 +363629,3942,9554 +519575,8939,15540 +615674,7870,19601 +365930,5225,9651 +402546,9646,11021 +431612,8141,12171 +34043,18653,5366 +256995,14812,5345 +592307,2300,18684 +30032,9795,4862 +440916,12980,12492 +65214,7865,10303 +18813,17530,3344 +259826,19095,5431 +510754,13659,15217 +449597,11202,12854 +654352,17382,21252 +389716,15296,10524 +80812,15277,12600 +310355,6432,7357 +463574,15476,13414 +312498,5855,7432 +365543,1099,9697 +16912,4937,3103 +266241,15359,5643 +655092,1692,21413 +492394,11412,14542 +9117,14363,2036 +289020,16470,6502 +353853,15727,9076 +473195,20049,13738 +550529,11968,16910 +243586,15639,4804 +602116,9925,19032 +255914,5176,5355 +128811,8176,19936 +396618,17066,10735 +577048,7745,18011 +522196,13947,15694 +231687,9602,4404 +331803,2075,8300 +242883,8329,4857 +60804,14944,9496 +169630,12937,1979 +646246,5643,20938 +88741,7834,13760 +321020,791,7753 +381048,17830,10208 +135151,17371,20608 +249355,6803,5061 +116114,15187,17811 +645688,361,20949 +336147,467,8473 +599334,5814,18962 +395584,7773,10759 +418060,7383,11570 +239862,1273,4780 +544595,18874,16619 +313135,11767,7432 +466900,3441,13582 +32642,15074,5277 +280017,17085,6170 +389447,12916,10509 +295015,10011,6748 +91913,1691,14283 +52465,12748,8329 +446304,1538,12834 +591656,15961,18552 +113205,4405,17409 +483236,10750,14176 +194332,10446,3001 +550225,8944,16890 +50156,12006,7919 +638901,203,20696 +361783,7712,9452 +401706,915,10996 +597083,5637,18905 +77665,18277,11969 +288573,12694,6452 +427093,5311,11982 +249302,6215,5062 +289198,18135,6447 +227200,8187,4205 +21611,4497,3682 +351762,18399,9034 +432435,15327,12133 +540900,7151,16564 +336763,5646,8467 +545100,3958,16685 +125808,17790,19225 +582530,14756,18192 +141662,10723,860 +185017,9662,2553 +130074,10947,19955 +349032,16339,8862 +492702,13146,14573 +85898,19522,13308 +122679,6006,18836 +640660,16163,20636 +284517,16098,6298 +575428,12788,17933 +616508,16428,19648 +60603,11579,9486 +303045,1257,7120 +511078,16462,15222 +381265,85,10283 +454393,13088,13031 +148149,3477,1189 +570252,6001,17705 +35277,19858,5652 +454111,10589,13069 +210443,13035,3549 +327367,16979,7980 +136595,3830,20928 +597060,5374,18901 +129758,6594,19988 +41291,884,6639 +12390,9722,2495 +58976,2332,9336 +537970,19427,16346 +255798,3599,5359 +444828,9499,12685 +89337,17904,13770 +161887,4568,1717 +521819,9654,15691 +621651,3076,19901 +62359,19605,9682 +358331,15288,9252 +348868,13395,8877 +393479,9399,10640 +541343,10750,16486 +640543,15795,20665 +306595,11374,7157 +186166,19468,2615 +230066,14241,4281 +363526,2922,9605 +416360,11943,11517 +70468,17290,10990 +479062,12904,14043 +6757,14574,1756 +576245,19683,17941 +556892,7557,17151 +89668,4637,13882 +811,15891,1012 +156968,325,1507 +6803,15159,1789 +138114,8494,20978 +117954,5978,18089 +75309,19032,11682 +325076,16998,7874 +218641,5678,3920 +173745,10850,2180 +556744,6491,17171 +143300,19864,791 +536190,2926,16383 +68873,11361,10733 +328877,10578,8080 +160854,16449,1665 +378585,16588,10162 +535498,15068,16237 +647947,163,21010 +516045,37,15491 +568736,12782,17604 +233763,8778,4452 +634755,4401,20499 +396220,13159,10777 +138625,17130,21080 +88716,7449,13708 +507688,6256,15146 +387023,10464,10471 +170894,5856,2080 +34988,14514,5649 +572300,4962,17898 +143904,5309,965 +5692,16556,1571 +590451,5411,18634 +6934,17208,1715 +470422,16095,13688 +85123,7437,13171 +523494,5178,15759 +655552,4627,21358 +350664,9257,8972 +268853,19529,5748 +261056,9992,5445 +184020,625,2615 +492461,11655,14504 +403889,207,11086 +365729,2700,9681 +233542,6087,4450 +7486,6452,1852 +620901,14765,19801 +524840,18157,15746 +522271,14553,15628 +210393,12512,3544 +509715,4263,15181 +281667,11374,6258 +37359,14817,5950 +489988,9463,14451 +258285,4920,5435 +15323,18795,2778 +103702,908,15922 +353319,11843,9087 +289847,4142,6559 +115030,16548,17521 +167849,18425,1917 +391187,9088,10608 +429581,8642,12090 +616643,17336,19661 +97719,19603,14948 +494686,10957,14600 +411219,5104,11372 +231626,9036,4443 +90315,15568,13980 +48333,54,7688 +448346,19743,12806 +435102,2236,12390 +372775,5714,9951 +567632,3277,17589 +436178,10606,12311 +529011,15555,15993 +162780,11845,1763 +377304,5008,10120 +245646,13510,4926 +542448,19393,16562 +267966,10387,5721 +289471,1386,6608 +57439,17233,9083 +485016,5122,14330 +125354,10961,19182 +537933,18360,16372 +219384,12876,3859 +435835,7372,12341 +25411,12217,4102 +201962,18794,3221 +543399,9192,16648 +567939,6064,17599 +490593,13807,14460 +128677,6604,19879 +245663,13604,4880 +500012,17101,14782 +437154,317,12426 +495649,19500,14620 +159605,5237,1585 +530882,12159,16004 +295363,14278,6746 +78561,15350,12274 +17996,3518,3291 +442227,5431,12599 +209856,8218,3535 +86448,9977,13386 +454468,13551,13100 +471697,7007,13762 +615870,11059,19614 +501265,9224,14853 +115493,3593,17835 +165541,17221,1877 +225423,13106,4176 +463612,15633,13428 +618007,10538,19763 +638963,2139,20681 +451944,11631,12996 +134300,4337,20612 +84137,10654,13054 +65486,12337,10278 +123141,13527,18950 +16862,4585,3193 +297813,15291,6871 +49294,17414,7765 +98577,15297,15071 +99373,8766,15229 +322636,15772,7777 +259317,13254,5418 +461720,18480,13365 +100369,4618,15357 +378674,17240,10141 +159191,321,1599 +584388,12155,18347 +231213,4884,4379 +199490,16860,3140 +54940,16771,8563 +474125,8901,13843 +191871,10426,2846 +261221,11377,5519 +152090,18320,1208 +485145,6015,14300 +605097,16250,19181 +552845,12079,16948 +250072,12009,5059 +502689,1400,14985 +451610,9237,13006 +504217,15675,14987 +647707,18536,20954 +648144,1457,21021 +435795,6825,12366 +149667,15643,1135 +102229,16137,15637 +87185,1403,13526 +356249,18067,9213 +308493,9076,7284 +596559,19581,18817 +281989,14520,6249 +297577,11760,6858 +175996,10763,2277 +46664,12061,7457 +260050,830,5469 +384053,4389,10376 +460134,4098,13318 +624641,9964,20067 +136865,7975,20847 +445693,16510,12707 +461127,13525,13345 +223860,19191,4043 +259117,11052,5364 +560890,2497,17283 +87280,3013,13584 +136021,13347,20779 +326598,9249,7981 +389133,10551,10547 +359790,9289,9375 +396911,19193,10769 +579978,13839,18119 +426081,17356,11881 +139645,15495,21108 +65831,18493,10303 +136811,7090,20874 +20641,7911,3636 +24878,1978,4151 +496000,2365,14700 +562229,14447,17273 +515846,18135,15413 +553326,16089,16933 +481440,14046,14084 +237988,5066,4669 +419740,1131,11673 +346292,10608,8792 +303121,2051,7069 +540373,1976,16538 +388333,2592,10517 +512144,5681,15268 +633338,9914,20414 +53609,13173,8404 +505055,2524,15048 +475563,1285,13937 +542326,18428,16561 +376976,1813,10158 +539914,17736,16402 +270859,16412,5814 +159940,7876,1680 +45258,7806,7168 +325527,500,7936 +540983,8005,16552 +31931,2963,5219 +24851,1769,4107 +191059,2850,2869 +618745,16856,19759 +368929,10950,9778 +322701,16498,7804 +630095,16467,20204 +117879,3982,18105 +646189,4687,20965 +92016,3519,14333 +530760,10824,16094 +156202,13458,1395 +5636,15217,1636 +216242,4964,3797 +403884,185,11065 +129839,7352,19989 +85640,16242,13180 +643864,4986,20816 +416623,14313,11483 +399876,4922,10930 +83215,15214,12971 +230768,463,4445 +84900,3199,13239 +1978,13374,1123 +575655,15313,17959 +564886,18713,17419 +443234,15320,12634 +122942,10001,18900 +349233,18291,8896 +247252,7200,4985 +633161,7951,20351 +98979,1111,15156 +437265,1397,12472 +512809,12468,15331 +612579,1283,19509 +235206,401,4568 +229994,13053,4292 +580262,15834,18088 +140823,12639,21240 +230979,2707,4406 +220894,5496,3996 +351693,17841,8995 +749,15163,915 +56092,15222,8774 +586050,6912,18403 +337501,12976,8453 +549126,18298,16780 +485942,13532,14276 +613768,12858,19519 +645581,19486,20836 +541437,11821,16575 +358481,16824,9279 +313436,13610,7452 +640133,12931,20649 +189583,10380,2813 +333488,17831,8303 +503449,9717,14971 +551228,17495,16866 +92518,12130,14369 +117519,18006,18061 +138042,7289,21003 +284189,12996,6300 +64881,1662,10315 +564363,13304,17377 +315130,8293,7583 +400764,13978,10893 +377581,7216,10142 +352780,7756,9134 +535277,12910,16286 +535754,16792,16207 +494077,4183,14653 +512514,8820,15329 +362403,13419,9462 +600157,11844,18981 +385936,1298,10416 +181921,1960,2483 +95089,15125,14640 +170867,5679,2089 +630815,4145,20314 +455552,3761,13196 +367804,716,9747 +389162,10808,10519 +386797,8738,10490 +250433,15829,5068 +361737,7373,9425 +140453,5914,21370 +276707,8311,6110 +127687,10533,19716 +570992,12719,17700 +134551,8711,20589 +493455,19869,14557 +206206,17334,3346 +360078,11799,9383 +417789,4747,11622 +93561,10406,14405 +613553,10975,19574 +126354,8360,19556 +75820,8151,11907 +568610,12251,17585 +146758,9625,1034 +348764,12895,8925 +146798,10240,1071 +328992,11477,8132 +122770,7280,18928 +173142,5501,2165 +28813,10232,4715 +324214,8309,7883 +293745,19195,6696 +646841,11661,20911 +268883,19707,5743 +411338,6502,11317 +337740,15396,8427 +180012,5449,2453 +542098,17275,16543 +239465,18399,4637 +654099,16130,21213 +115479,3238,17859 +611510,12875,19490 +467934,13611,13616 +618860,17973,19748 +550874,15127,16864 +23168,11419,3874 +447521,12387,12754 +163758,924,1869 +25528,14547,4253 +361008,607,9451 +140648,8955,21354 +67458,6594,10619 +617567,5413,19714 +478819,10503,14038 +78278,11553,12163 +326736,12027,7953 +307613,2366,7279 +493927,3543,14609 +252529,13953,5148 +205894,15638,3353 +158773,17158,1544 +4729,19712,1499 +606592,10193,19220 +445458,15281,12664 +497916,19064,14713 +563256,4066,17412 +371857,16900,9853 +216066,3636,3783 +222197,18567,3967 +514589,6969,15390 +443035,12976,12645 +187196,9055,2688 +300035,13598,6918 +594656,3100,18755 +479325,14821,14063 +115012,15841,17627 +501140,7613,14902 +3228,14829,1307 +271300,756,5921 +266524,18230,5688 +474497,11771,13801 +632282,19650,20304 +409699,12459,11243 +97518,16315,14980 +28096,18569,4628 +84102,10245,13065 +427356,8652,11973 +413942,10725,11464 +440388,9184,12484 +20758,10037,3537 +305779,5594,7220 +72331,9332,11314 +173893,11794,2137 +401649,551,11013 +91427,15082,14125 +652295,19286,21104 +457562,1244,13198 +543367,9048,16612 +173017,3055,2186 +30250,14505,4870 +108256,1014,16665 +349691,1538,9046 +586344,9839,18404 +1809,10240,1056 +248520,18463,4976 +199921,1401,3207 +331686,862,8215 +397721,5360,10801 +95489,2379,14728 +367865,1100,9768 +119630,14034,18296 +182346,6715,2528 +452189,13636,12966 +276804,9151,6052 +247067,6138,4989 +607033,12915,19216 +87978,15026,13524 +49885,5466,7923 +484093,16669,14167 +582463,13995,18165 +56466,402,9085 +200376,4755,3233 +573627,16762,17819 +258225,4721,5417 +93116,2544,14487 +555253,12883,17034 +99303,7178,15315 +526166,8800,15869 +480745,8466,14162 +41016,16052,6384 +168899,7915,2041 +313486,14401,7460 +312397,5054,7435 +182202,5434,2491 +567167,18934,17481 +26175,4940,4314 +299471,8368,6946 +375370,9489,10018 +443006,12941,12644 +416558,13832,11552 +584985,16367,18258 +180306,8709,2387 +20767,10129,3630 +406737,5184,11145 +137391,16813,20892 +356359,19314,9199 +527093,18514,15864 +174624,17519,2146 +643558,2803,20892 +270557,13419,5811 +207634,9409,3497 +437757,5346,12470 +334471,6962,8353 +281231,7469,6210 +43900,3727,6937 +454802,17579,13055 +212432,11744,3679 +190268,16793,2813 +471742,7233,13725 +187231,9209,2721 +634071,17338,20352 +410337,18065,11226 +385427,16923,10354 +540698,4768,16492 +523385,4597,15794 +176708,16022,2241 +31934,2968,5204 +653836,14544,21219 +397007,19800,10780 +419252,17495,11573 +52538,14160,8334 +31816,433,5229 +289596,2531,6572 +212954,17127,3640 +207540,8541,3467 +575269,10835,17934 +563323,4405,17409 +80445,9035,12618 +328144,2326,8072 +103679,732,15968 +86732,13847,13360 +129915,8430,20073 +367050,14439,9619 +71391,14332,11173 +491322,832,14578 +611599,14076,19460 +546620,17185,16724 +24503,15497,3974 +539727,16629,16402 +6158,3849,1706 +487615,8126,14366 +505521,7065,15067 +564055,10700,17366 +416707,14794,11502 +352505,5138,9080 +638847,19251,20516 +150930,8022,1227 +515596,16508,15418 +221538,12274,3973 +249793,9961,5093 +288316,9781,6488 +396319,14066,10755 +250221,13784,5092 +238883,12752,4687 +583173,1165,18355 +481780,16867,14116 +257922,1739,5433 +99924,17762,15157 +343299,5347,8707 +436344,12604,12349 +583404,3679,18269 +61710,9178,9811 +236751,16204,4620 +221875,15042,3998 +67895,14573,10574 +501364,10902,14925 +51637,18445,8187 +22005,11689,3761 +294368,3822,6765 +162387,8921,1744 +429816,10427,12106 +472280,11123,13749 +594477,1082,18731 +644177,8726,20863 +18402,10213,3216 +541795,15659,16528 +84430,15562,13078 +572304,4968,17863 +451194,6133,13000 +398845,15019,10850 +557827,15637,17148 +324622,12603,7869 +409801,13798,11274 +542698,2654,16622 +320019,13435,7712 +224731,6104,4109 +195291,182,3017 +246444,240,4988 +507338,2889,15135 +300730,1027,7011 +234010,10661,4472 +139988,19964,21143 +487905,11216,14398 +392009,15831,10593 +638736,18021,20539 +353127,9241,9073 +140130,1383,21228 +114156,94,17566 +290338,8292,6588 +627066,11083,20162 +196940,12970,3055 +107142,2047,16527 +368467,6923,9744 +199870,1226,3200 +122552,3074,18968 +269240,2416,5807 +479545,16730,14077 +633199,8435,20357 +441269,16729,12571 +632242,19316,20344 +61653,7970,9736 +261761,16224,5447 +17410,13021,3097 +240596,7740,4718 +650847,5042,21156 +565521,4504,17539 +593618,14163,18708 +581971,10615,18175 +27147,1431,4584 +523410,4686,15753 +318163,16501,7646 +387453,14577,10440 +216180,4242,3809 +103290,14009,15785 +218280,2664,3880 +459277,16760,13201 +617463,4627,19759 +100011,18939,15297 +83515,19509,12932 +226058,18604,4096 +257626,19794,5293 +353638,13332,9134 +192036,12797,2827 +368300,5757,9781 +174180,13216,2187 +301371,5492,7032 +484588,1273,14326 +555321,13578,17088 +385988,1616,10437 +174895,19687,2132 +538781,8307,16394 +606911,11992,19255 +634701,4006,20470 +201965,18801,3242 +448612,2113,12860 +586269,9027,18451 +68250,19267,10619 +101529,2700,15538 +292605,8589,6619 +34317,2951,5507 +88602,5650,13760 +242606,5980,4866 +499369,12442,14840 +326585,9193,8021 +214376,9211,3736 +367352,16520,9661 +512952,13852,15329 +245572,12407,4917 +647768,18922,20951 +244838,6260,4933 +211429,3673,3641 +556233,1477,17132 +111711,18931,17022 +184297,4214,2587 +478,10781,1005 +378667,17219,10124 +139924,18783,21083 +461916,19570,13334 +26107,3733,4303 +390269,93,10581 +601950,8784,19081 +427634,11105,11944 +315522,11985,7564 +544150,15943,16676 +481792,16935,14130 +469966,12272,13661 +24695,19235,4042 +611296,11170,19467 +509053,18336,15090 +262911,5641,5613 +358044,12814,9264 +354595,3531,9227 +281212,7387,6194 +111004,7350,17096 +398847,15033,10823 +116769,5716,18006 +34618,8414,5569 +207972,11816,3469 +431072,2422,12184 +63117,14600,9834 +286893,18103,6377 +593465,12848,18697 +485842,12908,14276 +247051,5899,5021 +168553,4662,1976 +312362,4895,7513 +550796,13779,16844 +99795,16724,15328 +635665,12719,20460 +252310,11033,5178 +571488,17053,17718 +420347,6473,11703 +6237,5296,1759 +419182,17061,11579 +508498,13481,15089 +37133,10916,5859 +328972,11396,8122 +206935,2803,3465 +486222,16089,14271 +263302,9780,5536 +359144,3523,9342 +136986,10034,20811 +279341,10577,6148 +192393,15569,2881 +548887,16606,16769 +555656,16773,17066 +291775,1616,6663 +9171,15000,2017 +238660,11279,4662 +605244,17556,19173 +35176,17840,5551 +631058,6084,20302 +555798,18182,17075 +336037,19470,8318 +81792,11378,12813 +611915,16216,19453 +89241,16310,13812 +56161,16677,8826 +121574,6772,18738 +649946,18195,21040 +579586,10464,18134 +461049,13039,13363 +251523,6154,5186 +62473,1423,9922 +220348,1686,4017 +635711,13024,20478 +222629,2684,4035 +423225,11257,11776 +335946,18551,8375 +527206,19319,15843 +227107,7330,4263 +34176,751,5547 +607262,14569,19227 +375835,12869,10021 +418253,8769,11578 +71026,6949,11151 +291781,1716,6651 +105,4194,942 +101853,7138,15659 +223631,15728,4049 +75043,14522,11718 +580778,19832,18118 +219646,15611,3920 +102397,18458,15644 +411687,9510,11332 +494457,8951,14641 +623880,3378,20030 +93991,16808,14462 +625912,19225,19995 +465478,11929,13537 +35795,8826,5725 +294196,3195,6748 +447310,10737,12787 +50281,13826,7989 +208482,17059,3440 +526299,9510,15810 +104456,14802,15976 +67668,10534,10561 +366527,10976,9626 +193652,5436,2978 +94892,12084,14648 +116017,13224,17890 +505433,6472,15076 +96524,18965,14720 +535333,13205,16253 +112095,5136,17218 +16484,17343,3006 +444863,9665,12748 +647459,16828,20995 +390285,135,10618 +382748,12337,10278 +356976,3616,9248 +177114,19408,2214 +365738,2719,9694 +50821,1534,8122 +417049,18202,11530 +455209,317,13181 +203944,17510,3276 +310560,8693,7340 +49399,18612,7709 +529861,3354,16039 +513006,14409,15300 +54806,14667,8586 +131392,13178,20255 +358004,12547,9301 +74864,11965,11708 +610134,19920,19326 +568386,10233,17629 +639113,3217,20615 +199914,1392,3192 +288794,13848,6444 +347839,5668,8873 +338939,5753,8536 +223749,17558,4037 +433649,6687,12283 +299312,6892,6933 +331641,502,8282 +42084,15156,6611 +55837,10854,8761 +529285,17234,15925 +420192,5715,11743 +266617,19812,5693 +157397,4012,1495 +346200,9637,8798 +438557,12481,12454 +241613,17331,4730 +216067,3637,3816 +552420,8242,16937 +410280,17276,11275 +319354,4798,7747 +600778,16846,19006 +557576,13527,17125 +535733,16669,16264 +34087,19144,5452 +461965,51,13399 +165574,18109,1811 +85001,5061,13308 +539375,12259,16421 +428091,13984,11992 +87874,13483,13538 +459123,14562,13263 +135290,459,20755 +633789,15310,20423 +565095,20034,17418 +405442,14890,11127 +498992,9233,14753 +173248,6860,2189 +587301,16601,18437 +89666,4631,13898 +490527,13507,14496 +126209,5711,19392 +124041,9372,19137 +373872,16014,9890 +230837,1039,4401 +301187,3991,6985 +142390,16254,887 +621680,3377,19932 +173742,10846,2197 +268967,444,5782 +248104,15558,5000 +147167,13956,1045 +58038,6256,9160 +150914,7544,1252 +7258,3336,1961 +319773,11015,7751 +82088,16777,12758 +19036,1037,3426 +108165,18962,16541 +81515,6126,12790 +167628,16050,1966 +223704,16958,4055 +530779,10977,16050 +1438,5208,1172 +562849,25,17413 +633576,12309,20353 +323181,5,7872 +408123,18121,11173 +416134,10672,11546 +544371,17235,16630 +298868,3492,6969 +340138,16925,8530 +421279,13886,11732 +218105,1772,3881 +634601,3128,20453 +550041,6928,16898 +228317,19055,4272 +149840,17455,1179 +127496,6428,19633 +340663,430,8604 +66194,5444,10463 +203002,8146,3296 +77365,13589,11966 +605566,19549,19193 +111600,16969,17046 +230251,16071,4346 +190161,16009,2820 +442039,4007,12587 +16853,4483,3173 +53817,16887,8444 +63292,16938,9852 +198256,5577,3103 +565051,19831,17356 +575468,13268,17977 +565986,9351,17517 +430966,19622,12112 +401499,19641,10892 +467894,13335,13593 +200386,4783,3191 +415955,9834,11543 +332193,5818,8261 +162154,6437,1729 +248673,19272,4967 +492189,9444,14539 +30239,14022,4821 +159731,5913,1622 +369465,15748,9734 +582044,11522,18190 +241085,13312,4782 +343003,918,8696 +627348,12372,20168 +162061,5959,1731 +155178,4739,1473 +504496,17710,14972 +646229,4895,20960 +56301,18567,8771 +454533,13986,13045 +268898,19762,5742 +131108,8602,20243 +318298,17526,7633 +5952,719,1813 +535643,16101,16272 +46348,7342,7428 +238652,11244,4640 +134018,19250,20477 +561504,8016,17264 +13837,14301,2616 +19218,4100,3477 +641500,3816,20792 +110312,16652,16936 +305246,1205,7178 +144581,9637,958 +127730,11081,19620 +245571,12230,4875 +324322,9107,7879 +168517,4442,1990 +627472,13565,20136 +339625,11452,8520 +140254,2757,21367 +164518,8574,1798 +15363,19145,2810 +357060,4156,9256 +474780,14316,13825 +629971,15649,20238 +15888,7721,3030 +287239,1077,6447 +37160,11128,5904 +443863,20064,12580 +130039,10624,20101 +37759,1083,6150 +233349,4558,4524 +188704,2697,2743 +592305,2299,18715 +637031,4274,20554 +358777,790,9405 +478420,7029,14031 +325620,1072,7952 +585197,18460,18295 +84355,14165,13108 +212140,10073,3675 +223661,16137,4074 +16124,11909,2936 +242968,9070,4822 +585129,17703,18345 +328003,1632,8123 +500479,2210,14844 +163373,18036,1695 +412859,19989,11358 +462265,3041,13431 +333082,13753,8283 +115117,17411,17528 +417521,2043,11641 +441496,18980,12498 +218095,1499,3918 +544244,16543,16614 +613475,9688,19508 +258532,7207,5433 +160661,14605,1631 +265676,10657,5628 +284665,18127,6290 +384081,4491,10382 +93333,6121,14425 +635633,12407,20505 +611637,14543,19443 +371277,11957,9807 +198428,7452,3125 +460026,3371,13318 +381903,5874,10267 +522314,15604,15639 +273157,17300,5936 +583071,20009,18166 +477012,14731,13961 +294937,9373,6722 +229499,7778,4287 +481936,17683,14121 +470206,13749,13661 +273971,4616,5995 +374909,3844,9964 +253801,6059,5248 +179370,19500,2333 +502054,15609,14903 +337807,16050,8420 +293463,17336,6678 +356146,16464,9235 +211659,6012,3681 +277362,13351,6101 +269493,4866,5832 +67635,9885,10614 +242467,4180,4801 +624299,6993,20077 +469398,6390,13626 +578096,16012,18052 +342953,537,8667 +388568,5145,10504 +510762,13675,15250 +576078,18244,17908 +461398,15634,13354 +394303,16584,10688 +24636,17758,4023 +427160,6077,11961 +87431,5244,13585 +266431,17064,5626 +119694,15327,18390 +138912,1293,21086 +91376,14263,14154 +438666,12852,12450 +449564,11029,12903 +628064,18313,20129 +94423,3676,14561 +173680,10280,2208 +105013,3723,16228 +471010,783,13779 +486366,16613,14269 +377555,6978,10137 +353135,9278,9068 +212355,11191,3658 +474372,10619,13892 +288808,13989,6506 +381658,3774,10264 +64987,3909,10302 +267578,8284,5759 +73327,5541,11504 +250309,14802,5082 +604362,9582,19173 +373630,14104,9914 +585993,6696,18369 +569119,17014,17596 +145787,1715,1025 +72707,16357,11253 +387242,12345,10484 +606475,8733,19213 +9407,18791,2084 +523873,8457,15734 +555650,16753,17058 +554969,10411,17015 +301249,4634,7047 +388311,2484,10493 +620711,13637,19815 +356005,15234,9212 +475635,1596,13940 +29579,2277,4883 +532671,6970,16109 +329765,18744,8048 +330616,8068,8185 +293222,15392,6703 +551085,16792,16924 +511523,20070,15174 +97559,17017,14964 +536298,4140,16350 +379135,1159,10181 +627585,14568,20153 +199852,1100,3179 +561697,9849,17307 +113249,5075,17306 +32379,9489,5196 +572108,2908,17848 +633959,16603,20385 +262962,6237,5541 +251945,8686,5172 +177391,2303,2362 +79301,8280,12364 +340743,911,8631 +453162,2724,13059 +189275,7250,2789 +74895,12431,11654 +169003,8411,1994 +127339,3293,19725 +262945,5818,5597 +468051,14311,13562 +394226,16053,10656 +42744,4368,6818 +81035,17797,12642 +304788,15654,7077 +193747,5728,2970 +388473,4242,10490 +557266,10634,17092 +440988,13918,12543 +42353,18752,6663 +331509,19133,8132 +437334,1964,12403 +95728,6860,14847 +648470,4448,21007 +285748,7010,6432 +165600,18167,1814 +613011,5780,19509 +259578,16718,5394 +119231,7005,18264 +131513,14869,20212 +451622,9277,12982 +510843,14382,15203 +148220,4061,1156 +235773,5951,4583 +396049,12072,10775 +611883,16072,19483 +217959,836,3916 +51290,11521,8102 +11778,19131,2297 +55583,7483,8832 +407038,9346,11146 +258463,6530,5410 +530822,11218,15998 +303893,7605,7096 +512149,5714,15333 +16108,11312,2979 +369592,16817,9739 +90662,383,14065 +214630,11761,3706 +587883,1501,18453 +232514,16384,4450 +322813,17159,7769 +405262,14040,11066 +17860,1515,3284 +508267,11206,15095 +496179,3808,14661 +166445,5918,1888 +140038,228,21276 +242873,8211,4860 +595346,9305,18807 +222653,3063,4072 +423572,13952,11802 +633762,15112,20357 +221950,15586,3976 +569674,1607,17778 +53598,13115,8375 +203993,17747,3306 +471280,3185,13778 +393305,7712,10651 +389777,15839,10529 +2310,19136,1099 +84550,17880,13059 +31696,18498,4998 +132373,11154,20385 +264378,19898,5597 +643692,3726,20825 +45246,7610,7107 +548442,12453,16833 +102972,8308,15849 +134120,1230,20641 +3858,4913,1417 +475261,18203,13814 +633253,9156,20373 +404326,4278,11110 +648445,4199,21015 +55454,4792,8827 +398925,16023,10862 +381556,2388,10277 +157713,7008,1569 +112968,31,17443 +119322,9076,18406 +330860,11528,8205 +394857,823,10742 +35611,4976,5715 +618146,11568,19704 +33931,17346,5418 +7609,9169,1931 +387808,17744,10423 +425063,8867,11880 +438696,12918,12451 +201418,14733,3193 +189142,5994,2737 +494638,10689,14655 +341961,12862,8593 +173972,12210,2209 +595698,12474,18780 +629943,15348,20226 +69824,6819,10864 +176076,11432,2279 +367523,17427,9670 +544854,1511,16759 +313771,17410,7448 +360467,14962,9406 +292671,9169,6646 +595737,12720,18811 +243826,17061,4870 +644621,13193,20816 +605689,984,19264 +131374,12344,20141 +612396,19909,19490 +80114,2132,12582 +295733,17277,6712 +628740,6536,20185 +594792,4011,18731 +393742,11868,10654 +284945,731,6396 +639413,6092,20665 +93774,12712,14506 +325460,126,7944 +214130,6688,3762 +224147,1490,4147 +340923,3746,8633 +6784,14893,1695 +270822,16151,5839 +331554,19676,8180 +561061,4446,17332 +144089,6307,964 +478049,3625,14068 +602800,15777,19052 +285468,3960,6421 +556720,6109,17091 +135239,18968,20566 +629010,8191,20201 +294920,9280,6711 +576642,3714,18062 +625749,17845,20023 +263082,7925,5549 +416878,16611,11487 +470728,18688,13639 +334604,7943,8400 +69444,19813,10805 +467595,10705,13616 +393317,7777,10713 +69397,19302,10819 +332774,11130,8258 +533213,12885,16156 +371987,17637,9834 +474124,8901,13857 +633553,12221,20361 +208788,19530,3442 +391210,9358,10593 +459735,153,13313 +468075,14589,13592 +166828,8734,1939 +532629,6726,16193 +115614,6014,17732 +129963,9529,20074 +388338,2677,10559 +628821,6824,20205 +595525,10702,18784 +395424,6076,10749 +78011,5980,12255 +421757,18973,11676 +254759,13235,5273 +568997,16205,17579 +288863,14957,6492 +111209,10313,17060 +544456,17768,16624 +511444,19198,15163 +142967,18899,869 +361546,5353,9490 +80317,5584,12633 +446859,7462,12751 +636409,18837,20462 +478926,11771,14059 +589754,19121,18535 +415868,7947,11502 +405812,18179,11137 +154876,2340,1409 +621785,4656,19892 +122052,14913,18632 +27210,2611,4531 +562853,81,17404 +143779,4441,950 +337824,16119,8436 +437049,19452,12384 +637505,8577,20570 +240380,5535,4717 +641434,3504,20734 +192051,13005,2863 +468053,14321,13555 +511199,17123,15176 +227891,15366,4198 +74224,113,11596 +425196,10099,11903 +9038,12620,2099 +388534,4499,10504 +343570,7618,8698 +41634,5724,6614 +188848,3758,2737 +177345,2032,2347 +625118,13270,20018 +225279,11549,4139 +117802,2784,18088 +98001,4634,15020 +73989,17501,11384 +420342,6458,11657 +412241,14112,11335 +136162,15946,20700 +126039,1736,19467 +640811,16981,20649 +365443,19638,9573 +397228,1152,10817 +528026,6336,15986 +19275,5669,3484 +238270,7738,4664 +230485,18522,4313 +573154,12905,17874 +548499,13192,16841 +653629,12857,21193 +71860,257,11277 +431260,4329,12198 +575101,9051,17944 +407782,15377,11147 +337745,15421,8423 +64171,10950,10029 +368083,2804,9723 +109323,18751,16703 +391136,8985,10603 +24850,1764,4126 +242648,6260,4838 +582887,17911,18204 +245483,11027,4875 +132708,16886,20406 +53838,16986,8511 +498807,7143,14793 +610063,19658,19352 +19692,12541,3365 +406435,2924,11207 +194900,16535,2991 +591049,11363,18554 +253160,19118,5174 +142688,17676,796 +275,7276,1005 +46896,16275,7336 +161666,1577,1780 +521568,7160,15678 +478553,9008,13992 +45451,11001,7246 +211239,2072,3676 +208454,16871,3497 +3017,10610,1299 +88739,7819,13826 +347848,5890,8867 +239106,15957,4669 +250231,13820,5067 +89969,10064,13993 +540319,1426,16503 +534321,1724,16264 +165014,11745,1791 +451167,5201,12943 +185646,15131,2618 +473339,1494,13887 +484924,4412,14321 +149910,18585,1126 +316657,2270,7658 +512513,8811,15268 +4920,3073,1645 +609648,15195,19338 +77011,8274,12091 +206307,17864,3403 +535539,15560,16281 +409218,7617,11285 +492132,8958,14533 +278701,4655,6156 +345589,4804,8810 +358704,336,9383 +429238,5127,12042 +472507,12830,13750 +627074,11103,20106 +178821,15086,2336 +631173,7931,20346 +174248,13950,2125 +360608,15878,9402 +279892,15332,6179 +204304,19939,3275 +551229,17502,16902 +121743,10019,18751 +171540,10847,2100 +155951,10690,1404 +414172,12572,11440 +226914,5683,4244 +603781,3161,19120 +16154,12249,2935 +452948,82,13030 +63608,1225,10042 +330667,8865,8143 +337793,15900,8459 +281758,12243,6204 +453764,8402,13068 +413311,4529,11442 +550921,15612,16908 +450444,18790,12866 +91223,11893,14178 +478363,6170,14046 +80667,12525,12583 +63186,15754,9895 +542297,18002,16500 +131360,12195,20285 +585832,5749,18429 +470624,17501,13712 +429311,5514,12053 +357525,8885,9311 +566270,12015,17473 +218289,2705,3931 +258877,8901,5373 +327429,17427,7950 +338820,4714,8563 +420879,10922,11672 +364060,8178,9519 +142473,16635,841 +401540,19852,10894 +9315,17238,2057 +390432,1546,10608 +601293,2188,19036 +190329,17058,2780 +338551,1933,8550 +420778,10187,11671 +126334,7919,19530 +647643,18198,20948 +452964,371,13057 +167677,16677,1900 +338966,5884,8498 +529225,16920,15942 +194457,11617,2914 +542304,18088,16506 +255346,18619,5233 +14818,10966,2781 +530737,9823,15997 +460635,9657,13325 +258336,5354,5377 +132342,10251,20311 +129303,16821,19817 +465575,12662,13526 +43432,17507,6898 +503116,6232,14982 +69176,16144,10705 +204937,6357,3382 +438543,12435,12481 +197943,3533,3125 +398309,11379,10868 +394468,17627,10682 +217374,15127,3829 +108971,13317,16640 +338143,17877,8481 +401044,15548,10974 +485519,10173,14281 +336799,5874,8461 +180482,9974,2400 +320227,15623,7751 +571929,1242,17901 +404855,10727,11128 +579831,12677,18098 +540158,18679,16440 +588138,4709,18503 +560723,1175,17273 +42143,15946,6601 +29623,3044,4902 +567189,19504,17470 +60649,12556,9633 +165640,18584,1864 +525913,6874,15806 +536479,5739,16344 +523956,9027,15764 +71599,17227,11052 +618172,11903,19761 +166071,1850,1968 +586448,11279,18417 +186337,1158,2691 +69653,3045,10987 +505792,9554,15071 +544568,18744,16592 +480226,1749,14096 +554715,8317,17010 diff --git a/modules/sanger/postcode/tests/merfish_peak_profile_sample.npy b/modules/sanger/postcode/tests/merfish_peak_profile_sample.npy new file mode 100644 index 00000000000..4ba603ec98d Binary files /dev/null and b/modules/sanger/postcode/tests/merfish_peak_profile_sample.npy differ diff --git a/modules/sanger/postcode/tests/merfish_readouts.csv b/modules/sanger/postcode/tests/merfish_readouts.csv new file mode 100644 index 00000000000..d0990e0741b --- /dev/null +++ b/modules/sanger/postcode/tests/merfish_readouts.csv @@ -0,0 +1,10 @@ +AF_488 channel,Cy3 channel,Cy5 Channel +Readout 2,Readout 1,Readout 3 +Readout 5,Readout 4,Readout 6 +Readout 7,Readout 8,Readout 9 +Readout 11,Readout 12,Readout 10 +Readout 14,Readout 15,Readout 13 +Readout 8,Readout 16,Readout 15 +Anchor1,Anchor2,Nothing +Nothing,Segmentation,Nothing +Readout 8,Readout 9,Nothing \ No newline at end of file diff --git a/modules/sanger/postcode/tests/nextflow.config b/modules/sanger/postcode/tests/nextflow.config new file mode 100644 index 00000000000..b579c243b44 --- /dev/null +++ b/modules/sanger/postcode/tests/nextflow.config @@ -0,0 +1,7 @@ +nextflow.enable.moduleBinaries = true + +docker.enabled = true + +//params.modules_testdata_base_path = "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/" +params.modules_testdata_base_path = "/lustre/scratch126/cellgen/cellgeni/tl10/modules/modules/sanger/postcode/tests/" +process.ext.args = params.module_args \ No newline at end of file diff --git a/modules/sanger/postcode/tests/tags.yml b/modules/sanger/postcode/tests/tags.yml deleted file mode 100644 index 6836274f037..00000000000 --- a/modules/sanger/postcode/tests/tags.yml +++ /dev/null @@ -1,2 +0,0 @@ -postcode: - - "modules/sanger/postcode/**" diff --git a/modules/sanger/tiledstardist/main.nf b/modules/sanger/tiledstardist/main.nf deleted file mode 100644 index 0c565c2cab7..00000000000 --- a/modules/sanger/tiledstardist/main.nf +++ /dev/null @@ -1,46 +0,0 @@ -process STARDIST { - tag "${meta.id}" - debug params.debug - cache true - - label "gpu" - label "medium_mem" - - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - "quay.io/bioinfotongli/tiled_stardist:${container_version}": - "quay.io/bioinfotongli/tiled_stardist:${container_version}"}" - containerOptions = { - workflow.containerEngine == "singularity" ? "--cleanenv --nv -B ${params.stardist_model_dir}:/stardist_models": - ( workflow.containerEngine == "docker" ? "--gpus all -v ${params.stardist_model_dir}:/stardist_models": null ) - } - - publishDir params.out_dir + "/naive_stardist_segmentation" - - input: - tuple val(meta), val(x_min), val(y_min), val(x_max), val(y_max), path(image), val(cell_diameter) - - output: - tuple val(meta), val(cell_diameter), path("${stem}/${stem}_cp_outlines.wkt"), emit: wkts - tuple val(meta), val(cell_diameter), path("${stem}/${stem}*png"), emit: cp_plots, optional: true - path "versions.yml" , emit: versions - - script: - stem = "${meta.id}-${x_min}_${y_min}_${x_max}_${y_max}-diam_${cell_diameter}" - def args = task.ext.args ?: '' - """ - export NUMBA_CACHE_DIR=/tmp/numba_cache - /opt/conda/bin/python /scripts/stardist_seg.py run \ - --image ${image} \ - --x_min ${x_min} \ - --y_min ${y_min} \ - --x_max ${x_max} \ - --y_max ${y_max} \ - --out_dir "${stem}" \ - ${args} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - : \$(echo \$(/scripts/stardist_seg.py version 2>&1) | sed 's/^.*stardist_seg.py //; s/Using.*\$//' )) - END_VERSIONS - """ -} \ No newline at end of file diff --git a/modules/sanger/tiledstardist/meta.yml b/modules/sanger/tiledstardist/meta.yml deleted file mode 100644 index 3a2eba5cf99..00000000000 --- a/modules/sanger/tiledstardist/meta.yml +++ /dev/null @@ -1,50 +0,0 @@ ---- -# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/modules/yaml-schema.json -name: "bioinfotongli_tiledstardist" -description: "A wrapper of Stardist: star-convex object detection for 2D and 3D images" -keywords: - - segmentation - - imaging - - image_analysis - - deep-learning -tools: - - "bioinfotongli": - description: "Python implementation of star-convex object detection for 2D and 3D images" - homepage: "https://github.com/stardist/stardist/tree/main" - tool_dev_url: "https://github.com/stardist/stardist/tree/main" - doi: "" - licence: "BSD-3-Clause" - -input: - # Only when we have meta - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'test', channels:[1,2] ]` - - - imgs: - type: file - description: raw images for segmentation - pattern: "*.{tif,ome.tif,ome.tiff}" - -output: - #Only when we have meta - - meta: - type: map - description: | - Groovy Map containing sample information - e.g. `[ id:'test', channels:[0,1] ]` - - - versions: - type: file - description: File containing software versions - pattern: "versions.yml" - - - segmentation: - type: file - description: folder contains segmentation information - pattern: "*" - -authors: - - "@BioinfoTongLI" diff --git a/modules/sanger/tiledstardist/tests/main.nf.test b/modules/sanger/tiledstardist/tests/main.nf.test deleted file mode 100644 index 411a8ff398f..00000000000 --- a/modules/sanger/tiledstardist/tests/main.nf.test +++ /dev/null @@ -1,73 +0,0 @@ -// TODO nf-core: Once you have added the required tests, please run the following command to build this file: -// nf-core modules test tiledstardist -nextflow_process { - - name "Test Process TILEDSTARDIST" - script "../main.nf" - process "TILEDSTARDIST" - - tag "modules" - tag "modules_sanger" - tag "tiledstardist" - - // TODO nf-core: Change the test name preferably indicating the test-data and file-format used - test("sarscov2 - bam") { - - // TODO nf-core: If you are created a test for a chained module - // (the module requires running more than one process to generate the required output) - // add the 'setup' method here. - // You can find more information about how to use a 'setup' method in the docs (https://nf-co.re/docs/contributing/modules#steps-for-creating-nf-test-for-chained-modules). - - when { - process { - """ - // TODO nf-core: define inputs of the process here. Example: - - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - //TODO nf-core: Add all required assertions to verify the test output. - // See https://nf-co.re/docs/contributing/tutorials/nf-test_assertions for more information and examples. - ) - } - - } - - // TODO nf-core: Change the test name preferably indicating the test-data and file-format used but keep the " - stub" suffix. - test("sarscov2 - bam - stub") { - - options "-stub" - - when { - process { - """ - // TODO nf-core: define inputs of the process here. Example: - - input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), - ] - """ - } - } - - then { - assertAll( - { assert process.success }, - { assert snapshot(process.out).match() } - //TODO nf-core: Add all required assertions to verify the test output. - ) - } - - } - -} diff --git a/subworkflows/sanger/parallelspatialdataquery/main.nf b/subworkflows/sanger/parallelspatialdataquery/main.nf new file mode 100644 index 00000000000..33ff47bd091 --- /dev/null +++ b/subworkflows/sanger/parallelspatialdataquery/main.nf @@ -0,0 +1,105 @@ +container_version = "0.2.2" + +params.spatialdatas = [ + [["id":"sdata1"], "spatialdata1"], + [["id":"sdata2"], "spatialdata2"], +] +params.debug=false + + +process GENERATE_POLYGON_INDEXES { + tag "${meta.id}" + debug params.debug + + label "medium_mem" + + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + "quay.io/bioinfotongli/spatialdata:${container_version}": + "quay.io/bioinfotongli/spatialdata:${container_version}"}" + + publishDir params.out_dir + "/spatialdata_polygon_indexes" + + input: + tuple val(meta), path(sdata) + + output: + tuple val(meta), path("${meta.id}/*.json"), emit: polygon_indexes + path "versions.yml" , emit: versions + + script: + def args = task.ext.args ?: '' + """ + /opt/conda/bin/python /scripts/partition_polygons.py run \ + --sdata ${sdata} \ + --out_name ${meta.id} \ + ${args} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + : \$(echo \$(/scripts/partition_polygons.py version 2>&1) | sed 's/^.*partition_polygons.py //; s/Using.*\$//' )) + END_VERSIONS + """ +} + + +process CROP_SPATIALDATA { + tag "${meta.id}" + debug params.debug + + label "medium_mem" + + container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? + "quay.io/bioinfotongli/spatialdata:${container_version}": + "quay.io/bioinfotongli/spatialdata:${container_version}"}" + + publishDir params.out_dir + "/cropped_spatialdata" + + input: + tuple val(meta), path(sdata), path(index_json) + + output: + tuple val(meta), path("${meta.id}/*.sdata"), emit: cropped_sdatas + path "versions.yml" , emit: versions + + script: + def args = task.ext.args ?: '' + """ + /opt/conda/bin/python /scripts/crop.py run \ + --sdata ${sdata} \ + --index_json ${index_json} \ + --out_name ${meta.id} \ + ${args} + + cat <<-END_VERSIONS > versions.yml + "${task.process}": + : \$(echo \$(/scripts/crop.py version 2>&1) | sed 's/^.*crop.py //; s/Using.*\$//' )) + END_VERSIONS + """ +} + + +workflow PARALLELSPATIALDATAQUERY { + take: + spatialdatas + + main: + ch_versions = Channel.empty() + GENERATE_POLYGON_INDEXES(spatialdatas) + ch_versions = ch_versions.mix(GENERATE_POLYGON_INDEXES.out.versions.first()) + + for_cropping = spatialdatas.combine(GENERATE_POLYGON_INDEXES.out.polygon_indexes, by:0) + .flatMap { meta, zarr, jsons -> + if (jsons instanceof List) { + jsons.collect { json -> [meta, zarr, json] } + } else { + [[meta, zarr, jsons]] + } + } + + CROP_SPATIALDATA(for_cropping) + ch_versions = ch_versions.mix(CROP_SPATIALDATA.out.versions.first()) + + emit: + crops = CROP_SPATIALDATA.out.cropped_sdatas // channel: [ val(meta), [ crops ] ] + versions = ch_versions // channel: [ versions.yml ] +} \ No newline at end of file diff --git a/subworkflows/sanger/parallelspatialdataquery/meta.yml b/subworkflows/sanger/parallelspatialdataquery/meta.yml new file mode 100644 index 00000000000..0cb12625eb2 --- /dev/null +++ b/subworkflows/sanger/parallelspatialdataquery/meta.yml @@ -0,0 +1,32 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/nf-core/modules/master/subworkflows/yaml-schema.json +name: "parallelspatialdataquery" +description: "This subworkflow is used to query spatial data in parallel in multiple processes" +keywords: + - spatial genomics + - spatial transcriptomics + - spatial data format + +input: + - spatialdata: + type: file + description: | + Structure: [ val(meta), path(spatialdata) ] + pattern: "*.{zarr/sdata}" + +output: + - spatialdata_subset: + type: file + description: | + Structure: [ val(meta), path(spatialdata_subset) ] + pattern: "*.{sdata/zarr}" + + - versions: + type: file + description: | + File containing software versions + Structure: [ path(versions.yml) ] + pattern: "versions.yml" +authors: + - "@BioinfoTongLI" +maintainers: + - "@BioinfoTongLI" diff --git a/subworkflows/sanger/parallelspatialdataquery/tests/main.nf.test b/subworkflows/sanger/parallelspatialdataquery/tests/main.nf.test new file mode 100644 index 00000000000..541f9d8a1f9 --- /dev/null +++ b/subworkflows/sanger/parallelspatialdataquery/tests/main.nf.test @@ -0,0 +1,45 @@ +// TODO nf-core: Once you have added the required tests, please run the following command to build this file: +// nf-core subworkflows test parallelspatialdataquery +nextflow_workflow { + + name "Test Subworkflow PARALLELSPATIALDATAQUERY" + script "../main.nf" + workflow "PARALLELSPATIALDATAQUERY" + + tag "subworkflows" + tag "subworkflows_sanger" + tag "subworkflows/parallelspatialdataquery" + // TODO nf-core: Add tags for all modules used within this subworkflow. Example: + tag "samtools" + tag "samtools/sort" + tag "samtools/index" + + + // TODO nf-core: Change the test name preferably indicating the test-data and file-format used + test("sarscov2 - bam - single_end") { + + when { + workflow { + """ + // TODO nf-core: define inputs of the workflow here. Example: + input[0] = [ + [ id:'test', single_end:false ], // meta map + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + ] + input[1] = [ + [ id:'genome' ], + file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + ] + """ + } + } + + then { + assertAll( + { assert workflow.success}, + { assert snapshot(workflow.out).match()} + //TODO nf-core: Add all required assertions to verify the test output. + ) + } + } +} diff --git a/subworkflows/sanger/tiled_segmentation/main.nf b/subworkflows/sanger/tiled_segmentation/main.nf index 92878f85dda..975ee9b8c99 100644 --- a/subworkflows/sanger/tiled_segmentation/main.nf +++ b/subworkflows/sanger/tiled_segmentation/main.nf @@ -1,53 +1,10 @@ include { BIOINFOTONGLI_CELLPOSE as CELLPOSE } from '../../../modules/sanger/bioinfotongli/cellpose/main' +include { BIOINFOTONGLI_STARDIST as STARDIST} from '../../../modules/sanger/bioinfotongli/stardist/main' +include { BIOINFOTONGLI_INSTANSEG as INSTANSEG} from '../../../modules/sanger/bioinfotongli/instanseg/main' +include { BIOINFOTONGLI_DEEPCELL as DEEPCELL} from '../../../modules/sanger/bioinfotongli/deepcell/main' +include { MERGEOUTLINES} from '../../../modules/sanger/mergeoutlines/main' include { BIOINFOTONGLI_GENERATETILES as GENERATE_TILE_COORDS } from '../../../modules/sanger/bioinfotongli/generatetiles/main' -params.images = [ - [["id":"test1"], "file1"], - [["id":"test2"], "file2"], -] -params.cell_diameters = [30, 40] -params.cellpose_model_dir = "/lustre/scratch126/cellgen/cellgeni/tl10/cellpose_models" -params.debug=false - -container_version = "0.1.0" - - -process MERGE_OUTLINES { - tag "${meta.id}" - debug params.debug - - label "medium_mem" - - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - "quay.io/bioinfotongli/tiled_cellpose:${container_version}": - "quay.io/bioinfotongli/tiled_cellpose:${container_version}"}" - - publishDir params.out_dir + "/cellpose_segmentation_merged_wkt" - - input: - tuple val(meta), val(cell_diameter), path(wkts) - - output: - tuple val(meta), val(cell_diameter), path("${stem}_merged.wkt"), emit: merged_wkt - tuple val(meta), val(cell_diameter), path("${stem}_merged.geojson"), emit: merged_geojson - path "versions.yml" , emit: versions - - script: - stem = "${meta.id}_diam-${cell_diameter}" - def args = task.ext.args ?: '' - """ - /opt/conda/bin/python /scripts/merge_wkts.py run \ - --sample_id "${stem}" \ - ${wkts} \ - ${args} - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - : \$(echo \$(/scripts/merge_wkts.py version 2>&1) | sed 's/^.*merge_wkts.py //; s/Using.*\$//' )) - END_VERSIONS - """ -} - workflow TILED_SEGMENTATION { take: @@ -56,28 +13,37 @@ workflow TILED_SEGMENTATION { main: ch_versions = Channel.empty() - GENERATE_TILE_COORDS(images) + ch_images = Channel.of(images) + GENERATE_TILE_COORDS(ch_images) ch_versions = ch_versions.mix(GENERATE_TILE_COORDS.out.versions.first()) images_tiles = GENERATE_TILE_COORDS.out.tile_coords.splitCsv(header:true, sep:",").map{ meta, coords -> [meta, coords.X_MIN, coords.Y_MIN, coords.X_MAX, coords.Y_MAX] } - + tiles_and_images = images_tiles.combine(ch_images, by:0) if (method == "CELLPOSE") { - CELLPOSE(images_tiles.combine(images, by:0).combine(channel.from(params.cell_diameters))) - wkts = CELLPOSE.out.wkts.groupTuple(by:[0,1]) + CELLPOSE(tiles_and_images.combine(channel.from(params.cell_diameters))) + wkts = CELLPOSE.out.wkts.groupTuple(by:0) ch_versions = ch_versions.mix(CELLPOSE.out.versions.first()) } else if (method == "STARDIST") { - STARDIST(images_tiles) - wkts = STARDIST.out.wkts.groupTuple(by:[0,1]) + STARDIST(tiles_and_images) + wkts = STARDIST.out.wkts.groupTuple(by:0) ch_versions = ch_versions.mix(STARDIST.out.versions.first()) + } else if (method == "INSTANSEG") { + INSTANSEG(tiles_and_images) + wkts = INSTANSEG.out.wkts.groupTuple(by:0) + ch_versions = ch_versions.mix(INSTANSEG.out.versions.first()) + } else if (method == "DEEPCELL") { + DEEPCELL(tiles_and_images) + wkts = DEEPCELL.out.wkts.groupTuple(by:0) + ch_versions = ch_versions.mix(DEEPCELL.out.versions.first()) } else { - error "Invalid segmentation method: ${method}" + error "Invalid segmentation method: ${method}. Expected one of: CELLPOSE, STARDIST, INSTANSEG, DEEPCELL" } - MERGE_OUTLINES(wkts) - ch_versions = ch_versions.mix(MERGE_OUTLINES.out.versions.first()) + MERGEOUTLINES(wkts) + ch_versions = ch_versions.mix(MERGEOUTLINES.out.versions.first()) emit: - wkt = MERGE_OUTLINES.out.merged_wkt // channel: [ val(meta), [ wkt ] ] + wkt = MERGEOUTLINES.out.multipoly_geojsons // channel: [ val(meta), [ geojson ] ] versions = ch_versions // channel: [ versions.yml ] } \ No newline at end of file diff --git a/subworkflows/sanger/tiled_segmentation/meta.yml b/subworkflows/sanger/tiled_segmentation/meta.yml index ae0f7c12088..01491cf2925 100644 --- a/subworkflows/sanger/tiled_segmentation/meta.yml +++ b/subworkflows/sanger/tiled_segmentation/meta.yml @@ -7,15 +7,25 @@ keywords: - instance segmentation - deep-learning - large-scale image processing -components: - - + input: + - meta: + type: map + description: | + Groovy Map containing sample information + e.g. `[ id:'test' ]` - images: - type: file + type: file + description: | + The input channel containing the image files + Structure: [ val(meta), path(image) ] + pattern: "*.ome.{tif/tiff}" + - method: + type: string description: | - The input channel containing the image files - Structure: [ val(meta), path(image) ] - pattern: "*.ome.{tif/tiff}" + The method to use for segmentation + Options: [ 'cellpose', 'stardist', 'instanseg' ] + output: - wkt: type: file diff --git a/subworkflows/sanger/tiled_segmentation/tests/main.nf.test b/subworkflows/sanger/tiled_segmentation/tests/main.nf.test index 568e722416e..e986f341373 100644 --- a/subworkflows/sanger/tiled_segmentation/tests/main.nf.test +++ b/subworkflows/sanger/tiled_segmentation/tests/main.nf.test @@ -1,45 +1,107 @@ -// TODO nf-core: Once you have added the required tests, please run the following command to build this file: -// nf-core subworkflows test tiled_segmentation nextflow_workflow { name "Test Subworkflow TILED_SEGMENTATION" script "../main.nf" + config "./nextflow.config" workflow "TILED_SEGMENTATION" tag "subworkflows" tag "subworkflows_sanger" tag "subworkflows/tiled_segmentation" - // TODO nf-core: Add tags for all modules used within this subworkflow. Example: - tag "samtools" - tag "samtools/sort" - tag "samtools/index" + test("nuclear - tif - cellpose") { - // TODO nf-core: Change the test name preferably indicating the test-data and file-format used - test("sarscov2 - bam - single_end") { + when { + params { + cell_diameters = 30 + } + workflow { + """ + input[0] = [ + [ id:'test'], // meta map + file(params.modules_testdata_base_path + 'imaging/segmentation/nuclear_image.tif', checkIfExists: true), + ] + input[1] = 'CELLPOSE' + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + + } + + test("nuclear - tif - stardist") { + + when { + workflow { + """ + input[0] = [ + [ id:'test'], // meta map + file(params.modules_testdata_base_path + 'imaging/segmentation/nuclear_image.tif', checkIfExists: true), + ] + input[1] = 'STARDIST' + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + + } + + test("nuclear - tif - instanseg") { when { workflow { """ - // TODO nf-core: define inputs of the workflow here. Example: input[0] = [ - [ id:'test', single_end:false ], // meta map - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + [ id:'test'], // meta map + file(params.modules_testdata_base_path + 'imaging/segmentation/nuclear_image.tif', checkIfExists: true), ] - input[1] = [ - [ id:'genome' ], - file(params.modules_testdata_base_path + 'genomics/sarscov2/illumina/bam/test.paired_end.sorted.bam', checkIfExists: true), + input[1] = 'INSTANSEG' + """ + } + } + + then { + assertAll( + { assert workflow.success }, + { assert snapshot(workflow.out).match() } + ) + } + + } + + test("nuclear - tif - deepcell") { + + when { + workflow { + """ + input[0] = [ + [ id:'test'], // meta map + file(params.modules_testdata_base_path + 'imaging/segmentation/nuclear_image.tif', checkIfExists: true), ] + input[1] = 'DEEPCELL' """ } } then { assertAll( - { assert workflow.success}, - { assert snapshot(workflow.out).match()} - //TODO nf-core: Add all required assertions to verify the test output. + { assert workflow.success }, + { assert snapshot(workflow.out).match() } ) } + } + } diff --git a/subworkflows/sanger/tiled_segmentation/tests/main.nf.test.snap b/subworkflows/sanger/tiled_segmentation/tests/main.nf.test.snap new file mode 100644 index 00000000000..6cc214da33e --- /dev/null +++ b/subworkflows/sanger/tiled_segmentation/tests/main.nf.test.snap @@ -0,0 +1,150 @@ +{ + "nuclear - tif - instanseg": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_merged.geojson:md5,9fe55ab05e13024faee6daa2ddcf8e6d" + ] + ], + "1": [ + "versions.yml:md5,1d6e2b331dc05b3496a477c7e8adbeee", + "versions.yml:md5,4ca6951145ae8e8a22f95081060586e9", + "versions.yml:md5,74ae9680e8565f16244a79acbe2ef1e4" + ], + "versions": [ + "versions.yml:md5,1d6e2b331dc05b3496a477c7e8adbeee", + "versions.yml:md5,4ca6951145ae8e8a22f95081060586e9", + "versions.yml:md5,74ae9680e8565f16244a79acbe2ef1e4" + ], + "wkt": [ + [ + { + "id": "test" + }, + "test_merged.geojson:md5,9fe55ab05e13024faee6daa2ddcf8e6d" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.04.4" + }, + "timestamp": "2025-03-18T22:25:28.496236908" + }, + "nuclear - tif - cellpose": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_merged.geojson:md5,0d1072acebefc19c48bbcdb17ac57d5f" + ] + ], + "1": [ + "versions.yml:md5,1d6e2b331dc05b3496a477c7e8adbeee", + "versions.yml:md5,4ca6951145ae8e8a22f95081060586e9", + "versions.yml:md5,7e24ffbd0425ebf6bf537e55ac367001" + ], + "versions": [ + "versions.yml:md5,1d6e2b331dc05b3496a477c7e8adbeee", + "versions.yml:md5,4ca6951145ae8e8a22f95081060586e9", + "versions.yml:md5,7e24ffbd0425ebf6bf537e55ac367001" + ], + "wkt": [ + [ + { + "id": "test" + }, + "test_merged.geojson:md5,0d1072acebefc19c48bbcdb17ac57d5f" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.04.4" + }, + "timestamp": "2025-03-18T22:24:29.505111421" + }, + "nuclear - tif - deepcell": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_merged.geojson:md5,a3f7237d662627863a30cff6128b989c" + ] + ], + "1": [ + "versions.yml:md5,1d6e2b331dc05b3496a477c7e8adbeee", + "versions.yml:md5,4ca6951145ae8e8a22f95081060586e9", + "versions.yml:md5,e693a7e9c66cd7a37d9829cae2fc3648" + ], + "versions": [ + "versions.yml:md5,1d6e2b331dc05b3496a477c7e8adbeee", + "versions.yml:md5,4ca6951145ae8e8a22f95081060586e9", + "versions.yml:md5,e693a7e9c66cd7a37d9829cae2fc3648" + ], + "wkt": [ + [ + { + "id": "test" + }, + "test_merged.geojson:md5,a3f7237d662627863a30cff6128b989c" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.04.4" + }, + "timestamp": "2025-03-18T22:26:52.113552786" + }, + "nuclear - tif - stardist": { + "content": [ + { + "0": [ + [ + { + "id": "test" + }, + "test_merged.geojson:md5,590cf1b456fbae16631254f0f79121fc" + ] + ], + "1": [ + "versions.yml:md5,1d6e2b331dc05b3496a477c7e8adbeee", + "versions.yml:md5,4ca6951145ae8e8a22f95081060586e9", + "versions.yml:md5,e3945a4be7e4f9daa0ab9c717a9cce10" + ], + "versions": [ + "versions.yml:md5,1d6e2b331dc05b3496a477c7e8adbeee", + "versions.yml:md5,4ca6951145ae8e8a22f95081060586e9", + "versions.yml:md5,e3945a4be7e4f9daa0ab9c717a9cce10" + ], + "wkt": [ + [ + { + "id": "test" + }, + "test_merged.geojson:md5,590cf1b456fbae16631254f0f79121fc" + ] + ] + } + ], + "meta": { + "nf-test": "0.9.2", + "nextflow": "24.04.4" + }, + "timestamp": "2025-03-18T22:24:58.557258383" + } +} \ No newline at end of file diff --git a/subworkflows/sanger/tiled_segmentation/tests/nextflow.config b/subworkflows/sanger/tiled_segmentation/tests/nextflow.config new file mode 100644 index 00000000000..a0579a4aba5 --- /dev/null +++ b/subworkflows/sanger/tiled_segmentation/tests/nextflow.config @@ -0,0 +1,5 @@ +nextflow.enable.moduleBinaries = true + +docker.enabled = true + +params.modules_testdata_base_path = "https://raw.githubusercontent.com/nf-core/test-datasets/refs/heads/modules/data/" \ No newline at end of file diff --git a/subworkflows/sanger/tiled_spotiflow/main.nf b/subworkflows/sanger/tiled_spotiflow/main.nf index 04163b3896c..5f6399f9fa9 100644 --- a/subworkflows/sanger/tiled_spotiflow/main.nf +++ b/subworkflows/sanger/tiled_spotiflow/main.nf @@ -1,80 +1,8 @@ #!/usr/bin/env/ nextflow include { BIOINFOTONGLI_GENERATETILES as GENERATE_TILE_COORDS } from '../../../modules/sanger/bioinfotongli/generatetiles/main' -include { BIOINFOTONGLI_TILEDSPOTIFLOW } from '../../../modules/sanger/bioinfotongli/tiledspotiflow/main' - -container_version = "0.1.0" - -params.debug=false -params.chs_to_call_peaks = [2] - - -process Spotiflow_merge_tiled_peaks { - debug params.debug - tag "${meta.id}" - - label "process_medium" - - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - "quay.io/bioinfotongli/tiled_spotiflow:${container_version}": - "quay.io/bioinfotongli/tiled_spotiflow:${container_version}"}" - publishDir params.out_dir + "/spotiflow_peaks" - - input: - tuple val(meta), val(ch_ind), path(csvs) - - output: - tuple val(meta), path("${meta.id}_merged_peaks_ch_${ch_ind}.wkt"), emit: merged_peaks - path "versions.yml" , emit: versions - - script: - def args = task.ext.args ?: '' - """ - /opt/conda/bin/python /scripts/Spotiflow_post_process.py run \ - ${csvs} \ - --ch_ind ${ch_ind} \ - --prefix "${meta.id}" \ - ${args} \ - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - : \$(echo \$(Spotiflow_post_process.py version 2>&1) | sed 's/^.*Spotiflow_post_process.py //; s/Using.*\$//' )) - END_VERSIONS - """ -} - - -process Spotiflow_merge_channels { - debug params.debug - tag "${meta.id}" - - label "process_medium" - - container "${ workflow.containerEngine == 'singularity' && !task.ext.singularity_pull_docker_container ? - "quay.io/bioinfotongli/tiled_spotiflow:${container_version}": - "quay.io/bioinfotongli/tiled_spotiflow:${container_version}"}" - publishDir params.out_dir + "/spotiflow_peaks" - - input: - tuple val(meta), path(wkts) - - output: - tuple val(meta), path("${meta.id}/peaks.csv"), emit: merged_channels - path "versions.yml" , emit: versions - - script: - def args = task.ext.args ?: '' - """ - /opt/conda/bin/python /scripts/merge_wkts.py run \ - --prefix "${meta.id}" \ - ${wkts} \ - ${args} \ - - cat <<-END_VERSIONS > versions.yml - "${task.process}": - : \$(echo \$(merge_wkts.py version 2>&1) | sed 's/^.*merge_wkts.py //; s/Using.*\$//' )) - END_VERSIONS - """ -} +include { BIOINFOTONGLI_TILEDSPOTIFLOW as SPOTIFLOW} from '../../../modules/sanger/bioinfotongli/tiledspotiflow/main' +include { BIOINFOTONGLI_MERGEPEAKS as MERGEPEAKS} from '../../../modules/sanger/bioinfotongli/mergepeaks/main' +include { BIOINFOTONGLI_CONCATENATEWKTS as CONCATENATEWKTS} from '../../../modules/sanger/bioinfotongli/concatenatewkts/main' workflow TILED_SPOTIFLOW { @@ -89,16 +17,16 @@ workflow TILED_SPOTIFLOW { [meta, coords.X_MIN, coords.Y_MIN, coords.X_MAX, coords.Y_MAX] } - BIOINFOTONGLI_TILEDSPOTIFLOW(images_tiles.combine(images, by:0).combine(chs_to_call_peaks)) - ch_versions = ch_versions.mix(BIOINFOTONGLI_TILEDSPOTIFLOW.out.versions.first()) + SPOTIFLOW(images_tiles.combine(images, by:0).combine(chs_to_call_peaks)) + ch_versions = ch_versions.mix(SPOTIFLOW.out.versions.first()) - Spotiflow_merge_tiled_peaks(BIOINFOTONGLI_TILEDSPOTIFLOW.out.peaks.groupTuple(by:[0,1])) - ch_versions = ch_versions.mix(Spotiflow_merge_tiled_peaks.out.versions.first()) + MERGEPEAKS(SPOTIFLOW.out.peaks.groupTuple(by:[0, 1])) + ch_versions = ch_versions.mix(MERGEPEAKS.out.versions.first()) - Spotiflow_merge_channels(Spotiflow_merge_tiled_peaks.out.merged_peaks.groupTuple()) - ch_versions = ch_versions.mix(Spotiflow_merge_channels.out.versions.first()) + CONCATENATEWKTS(MERGEPEAKS.out.merged_peaks.groupTuple(by:0)) + ch_versions = ch_versions.mix(CONCATENATEWKTS.out.versions.first()) emit: - spots_csv = Spotiflow_merge_channels.out.merged_channels + spots_csv = CONCATENATEWKTS.out.concatenated_peaks versions = ch_versions } \ No newline at end of file