diff --git a/README.md b/README.md index 6867fd482c9f3cd626d4a78ffb23c9c4ec0583b0..87ac9605fc35ee835e74e5dd9529fa46c4e1053d 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,30 @@ --- -title: Counterfactual Demo -emoji: 🐢 -colorFrom: red -colorTo: indigo +title: Counterfactuals +emoji: 🌖 +colorFrom: purple +colorTo: green sdk: gradio -sdk_version: 4.14.0 +sdk_version: 3.27.0 app_file: app.py pinned: false +license: mit +duplicated_from: fabio-deep/counterfactuals --- -Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference +Code for the **ICML 2023** paper: + +[**High Fidelity Image Counterfactuals with Probabilistic Causal Models**](https://arxiv.org/abs/2306.15764) + +Fabio De Sousa Ribeiro1, Tian Xia1, Miguel Monteiro1, Nick Pawlowski2, Ben Glocker1\ +1Imperial College London, 2Microsoft Research Cambridge, UK + +``` +@misc{ribeiro2023high, + title={High Fidelity Image Counterfactuals with Probabilistic Causal Models}, + author={Fabio De Sousa Ribeiro and Tian Xia and Miguel Monteiro and Nick Pawlowski and Ben Glocker}, + year={2023}, + eprint={2306.15764}, + archivePrefix={arXiv}, + primaryClass={cs.LG} +} +``` \ No newline at end of file diff --git a/app.py b/app.py new file mode 100644 index 0000000000000000000000000000000000000000..67539f0c89bbc7b59718b4983b691850b3731f41 --- /dev/null +++ b/app.py @@ -0,0 +1,632 @@ +import torch +import numpy as np +import gradio as gr +import matplotlib.pylab as plt +import torch.nn.functional as F + +from vae import HVAE +from datasets import morphomnist, ukbb, mimic, get_attr_max_min +from pgm.flow_pgm import MorphoMNISTPGM, FlowPGM, ChestPGM +from app_utils import ( + mnist_graph, + brain_graph, + chest_graph, + vae_preprocess, + normalize, + preprocess_brain, + get_fig_arr, + postprocess, + MidpointNormalize, +) + +DATA, MODELS = {}, {} +for k in ["Morpho-MNIST", "Brain MRI", "Chest X-ray"]: + DATA[k], MODELS[k] = {}, {} + +# mnist +DIGITS = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] +# brain +MRISEQ_CAT = ["T1", "T2-FLAIR"] # 0,1 +SEX_CAT = ["female", "male"] # 0,1 +HEIGHT, WIDTH = 270, 270 +# chest +SEX_CAT_CHEST = ["male", "female"] # 0,1 +RACE_CAT = ["white", "asian", "black"] # 0,1,2 +FIND_CAT = ["no disease", "pleural effusion"] +DEVICE = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") + + +class Hparams: + def update(self, dict): + for k, v in dict.items(): + setattr(self, k, v) + + +def get_paths(dataset_id): + if "MNIST" in dataset_id: + data_path = "./data/morphomnist" + pgm_path = "./checkpoints/t_i_d/sup_pgm/checkpoint.pt" + vae_path = "./checkpoints/t_i_d/dgauss_cond_big_beta1_dropexo/checkpoint.pt" + elif "Brain" in dataset_id: + data_path = "./data/ukbb_subset" + pgm_path = "./checkpoints/m_b_v_s/sup_pgm/checkpoint.pt" + vae_path = "./checkpoints/m_b_v_s/ukbb192_beta5_dgauss_b33/checkpoint.pt" + elif "Chest" in dataset_id: + data_path = "./data/mimic_subset" + pgm_path = "./checkpoints/a_r_s_f/sup_pgm_mimic/checkpoint.pt" + vae_path = [ + "./checkpoints/a_r_s_f/mimic_beta9_gelu_dgauss_1_lr3/checkpoint.pt", # base vae + "./checkpoints/a_r_s_f/mimic_dscm_lr_1e5_lagrange_lr_1_damping_10/6500_checkpoint.pt", # cf trained DSCM + ] + return data_path, vae_path, pgm_path + + +def load_pgm(dataset_id, pgm_path): + checkpoint = torch.load(pgm_path, map_location=DEVICE) + args = Hparams() + args.update(checkpoint["hparams"]) + args.device = DEVICE + if "MNIST" in dataset_id: + pgm = MorphoMNISTPGM(args).to(args.device) + elif "Brain" in dataset_id: + pgm = FlowPGM(args).to(args.device) + elif "Chest" in dataset_id: + pgm = ChestPGM(args).to(args.device) + pgm.load_state_dict(checkpoint["ema_model_state_dict"]) + MODELS[dataset_id]["pgm"] = pgm + MODELS[dataset_id]["pgm_args"] = args + + +def load_vae(dataset_id, vae_path): + if "Chest" in dataset_id: + vae_path, dscm_path = vae_path[0], vae_path[1] + checkpoint = torch.load(vae_path, map_location=DEVICE) + args = Hparams() + args.update(checkpoint["hparams"]) + # backwards compatibility hack + if not hasattr(args, "vae"): + args.vae = "hierarchical" + if not hasattr(args, "cond_prior"): + args.cond_prior = False + if hasattr(args, "free_bits"): + args.kl_free_bits = args.free_bits + args.device = DEVICE + vae = HVAE(args).to(args.device) + + if "Chest" in dataset_id: + dscm_ckpt = torch.load(dscm_path, map_location=DEVICE) + vae.load_state_dict( + { + k[4:]: v + for k, v in dscm_ckpt["ema_model_state_dict"].items() + if "vae." in k + } + ) + else: + vae.load_state_dict(checkpoint["ema_model_state_dict"]) + MODELS[dataset_id]["vae"] = vae + MODELS[dataset_id]["vae_args"] = args + + +def get_dataloader(dataset_id, data_path): + MODELS[dataset_id]["pgm_args"].data_dir = data_path + args = MODELS[dataset_id]["pgm_args"] + if "MNIST" in dataset_id: + datasets = morphomnist(args) + elif "Brain" in dataset_id: + datasets = ukbb(args) + elif "Chest" in dataset_id: + datasets = mimic(args) + DATA[dataset_id]["test"] = torch.utils.data.DataLoader( + datasets["test"], shuffle=False, batch_size=args.bs, num_workers=4 + ) + + +def load_dataset(dataset_id): + data_path, _, pgm_path = get_paths(dataset_id) + checkpoint = torch.load(pgm_path, map_location=DEVICE) + args = Hparams() + args.update(checkpoint["hparams"]) + args.device = DEVICE + MODELS[dataset_id]["pgm_args"] = args + get_dataloader(dataset_id, data_path) + + +def load_model(dataset_id): + _, vae_path, pgm_path = get_paths(dataset_id) + load_pgm(dataset_id, pgm_path) + load_vae(dataset_id, vae_path) + + +@torch.no_grad() +def counterfactual_inference(dataset_id, obs, do_pa): + pa = {k: v.clone() for k, v in obs.items() if k != "x"} + cf_pa = MODELS[dataset_id]["pgm"].counterfactual( + obs=pa, intervention=do_pa, num_particles=1 + ) + args, vae = MODELS[dataset_id]["vae_args"], MODELS[dataset_id]["vae"] + _pa = vae_preprocess(args, {k: v.clone() for k, v in pa.items()}) + _cf_pa = vae_preprocess(args, {k: v.clone() for k, v in cf_pa.items()}) + z_t = 0.1 if "mnist" in args.hps else 1.0 + z = vae.abduct(x=obs["x"], parents=_pa, t=z_t) + if vae.cond_prior: + z = [z[j]["z"] for j in range(len(z))] + px_loc, px_scale = vae.forward_latents(latents=z, parents=_pa) + cf_loc, cf_scale = vae.forward_latents(latents=z, parents=_cf_pa) + u = (obs["x"] - px_loc) / px_scale.clamp(min=1e-12) + u_t = 0.1 if "mnist" in args.hps else 1.0 # cf sampling temp + cf_scale = cf_scale * u_t + cf_x = torch.clamp(cf_loc + cf_scale * u, min=-1, max=1) + return {"cf_x": cf_x, "rec_x": px_loc, "cf_pa": cf_pa} + + +def get_obs_item(dataset_id, idx=None): + if idx is None: + n_test = len(DATA[dataset_id]["test"].dataset) + idx = torch.randperm(n_test)[0] + idx = int(idx) + return idx, DATA[dataset_id]["test"].dataset.__getitem__(idx) + + +def get_mnist_obs(idx=None): + dataset_id = "Morpho-MNIST" + if not DATA[dataset_id]: + load_dataset(dataset_id) + idx, obs = get_obs_item(dataset_id, idx) + x = get_fig_arr(obs["x"].clone().squeeze().numpy()) + t = (obs["thickness"].clone() + 1) / 2 * (6.255515 - 0.87598526) + 0.87598526 + i = (obs["intensity"].clone() + 1) / 2 * (254.90317 - 66.601204) + 66.601204 + y = DIGITS[obs["digit"].clone().argmax(-1)] + return (idx, x, float(np.round(t, 2)), float(np.round(i, 2)), y) + + +def get_brain_obs(idx=None): + dataset_id = "Brain MRI" + if not DATA[dataset_id]: + load_dataset(dataset_id) + idx, obs = get_obs_item(dataset_id, idx) + x = get_fig_arr(obs["x"].clone().squeeze().numpy()) + m = MRISEQ_CAT[int(obs["mri_seq"].clone().item())] + s = SEX_CAT[int(obs["sex"].clone().item())] + a = obs["age"].clone().item() + b = obs["brain_volume"].clone().item() / 1000 # in ml + v = obs["ventricle_volume"].clone().item() / 1000 # in ml + return (idx, x, m, s, a, float(np.round(b, 2)), float(np.round(v, 2))) + + +def get_chest_obs(idx=None): + dataset_id = "Chest X-ray" + if not DATA[dataset_id]: + load_dataset(dataset_id) + idx, obs = get_obs_item(dataset_id, idx) + x = get_fig_arr(postprocess(obs["x"].clone())) + s = SEX_CAT_CHEST[int(obs["sex"].clone().squeeze().numpy())] + f = FIND_CAT[int(obs["finding"].clone().squeeze().numpy())] + r = RACE_CAT[obs["race"].clone().squeeze().numpy().argmax(-1)] + a = (obs["age"].clone().squeeze().numpy() + 1) * 50 + return (idx, x, r, s, f, float(np.round(a, 1))) + + +def infer_mnist_cf(*args): + dataset_id = "Morpho-MNIST" + idx, _, t, i, y, do_t, do_i, do_y = args + n_particles = 32 + # preprocess + obs = DATA[dataset_id]["test"].dataset.__getitem__(int(idx)) + obs["x"] = (obs["x"] - 127.5) / 127.5 + for k, v in obs.items(): + obs[k] = v.view(1, 1) if len(v.shape) < 1 else v.unsqueeze(0) + obs[k] = obs[k].to(MODELS[dataset_id]["vae_args"].device).float() + if n_particles > 1: + ndims = (1,) * 3 if k == "x" else (1,) + obs[k] = obs[k].repeat(n_particles, *ndims) + # intervention(s) + do_pa = {} + if do_t: + do_pa["thickness"] = torch.tensor( + normalize(t, x_max=6.255515, x_min=0.87598526) + ).view(1, 1) + if do_i: + do_pa["intensity"] = torch.tensor( + normalize(i, x_max=254.90317, x_min=66.601204) + ).view(1, 1) + if do_y: + do_pa["digit"] = F.one_hot(torch.tensor(DIGITS.index(y)), num_classes=10).view( + 1, 10 + ) + + for k, v in do_pa.items(): + do_pa[k] = ( + v.to(MODELS[dataset_id]["vae_args"].device).float().repeat(n_particles, 1) + ) + # infer counterfactual + out = counterfactual_inference(dataset_id, obs, do_pa) + # avg cf particles + cf_x = out["cf_x"].mean(0) + cf_x_std = out["cf_x"].std(0) + rec_x = out["rec_x"].mean(0) + cf_t = out["cf_pa"]["thickness"].mean(0) + cf_i = out["cf_pa"]["intensity"].mean(0) + cf_y = out["cf_pa"]["digit"].mean(0) + # post process + cf_x = postprocess(cf_x) + cf_x_std = cf_x_std.squeeze().detach().cpu().numpy() + rec_x = postprocess(rec_x) + cf_t = np.round((cf_t.item() + 1) / 2 * (6.255515 - 0.87598526) + 0.87598526, 2) + cf_i = np.round((cf_i.item() + 1) / 2 * (254.90317 - 66.601204) + 66.601204, 2) + cf_y = DIGITS[cf_y.argmax(-1)] + # plots + # plt.close('all') + effect = cf_x - rec_x + effect = get_fig_arr( + effect, cmap="RdBu_r", norm=MidpointNormalize(vmin=-255, midpoint=0, vmax=255) + ) + cf_x = get_fig_arr(cf_x) + cf_x_std = get_fig_arr(cf_x_std, cmap="jet") + return (cf_x, cf_x_std, effect, cf_t, cf_i, cf_y) + + +def infer_brain_cf(*args): + dataset_id = "Brain MRI" + idx, _, m, s, a, b, v = args[:7] + do_m, do_s, do_a, do_b, do_v = args[7:] + n_particles = 16 + # preprocessing + obs = DATA[dataset_id]["test"].dataset.__getitem__(int(idx)) + obs = preprocess_brain(MODELS[dataset_id]["vae_args"], obs) + for k, _v in obs.items(): + if n_particles > 1: + ndims = (1,) * 3 if k == "x" else (1,) + obs[k] = _v.repeat(n_particles, *ndims) + # interventions(s) + do_pa = {} + if do_m: + do_pa["mri_seq"] = torch.tensor(MRISEQ_CAT.index(m)).view(1, 1) + if do_s: + do_pa["sex"] = torch.tensor(SEX_CAT.index(s)).view(1, 1) + if do_a: + do_pa["age"] = torch.tensor(a).view(1, 1) + if do_b: + do_pa["brain_volume"] = torch.tensor(b * 1000).view(1, 1) + if do_v: + do_pa["ventricle_volume"] = torch.tensor(v * 1000).view(1, 1) + # normalize continuous attributes + for k in ["age", "brain_volume", "ventricle_volume"]: + if k in do_pa.keys(): + k_max, k_min = get_attr_max_min(k) + do_pa[k] = (do_pa[k] - k_min) / (k_max - k_min) # [0,1] + do_pa[k] = 2 * do_pa[k] - 1 # [-1,1] + + for k, _v in do_pa.items(): + do_pa[k] = ( + _v.to(MODELS[dataset_id]["vae_args"].device).float().repeat(n_particles, 1) + ) + # infer counterfactual + out = counterfactual_inference(dataset_id, obs, do_pa) + # avg cf particles + cf_x = out["cf_x"].mean(0) + cf_x_std = out["cf_x"].std(0) + rec_x = out["rec_x"].mean(0) + cf_m = out["cf_pa"]["mri_seq"].mean(0) + cf_s = out["cf_pa"]["sex"].mean(0) + # post process + cf_x = postprocess(cf_x) + cf_x_std = cf_x_std.squeeze().detach().cpu().numpy() + rec_x = postprocess(rec_x) + cf_m = MRISEQ_CAT[int(cf_m.item())] + cf_s = SEX_CAT[int(cf_s.item())] + cf_ = {} + for k in ["age", "brain_volume", "ventricle_volume"]: # unnormalize + k_max, k_min = get_attr_max_min(k) + cf_[k] = (out["cf_pa"][k].mean(0).item() + 1) / 2 * (k_max - k_min) + k_min + # plots + # plt.close('all') + effect = cf_x - rec_x + effect = get_fig_arr( + effect, + cmap="RdBu_r", + norm=MidpointNormalize(vmin=effect.min(), midpoint=0, vmax=effect.max()), + ) + cf_x = get_fig_arr(cf_x) + cf_x_std = get_fig_arr(cf_x_std, cmap="jet") + return ( + cf_x, + cf_x_std, + effect, + cf_m, + cf_s, + np.round(cf_["age"], 1), + np.round(cf_["brain_volume"] / 1000, 2), + np.round(cf_["ventricle_volume"] / 1000, 2), + ) + + +def infer_chest_cf(*args): + dataset_id = "Chest X-ray" + idx, _, r, s, f, a = args[:6] + do_r, do_s, do_f, do_a = args[6:] + n_particles = 16 + # preprocessing + obs = DATA[dataset_id]["test"].dataset.__getitem__(int(idx)) + for k, v in obs.items(): + obs[k] = v.to(MODELS[dataset_id]["vae_args"].device).float() + if n_particles > 1: + ndims = (1,) * 3 if k == "x" else (1,) + obs[k] = obs[k].repeat(n_particles, *ndims) + # intervention(s) + do_pa = {} + with torch.no_grad(): + if do_s: + do_pa["sex"] = torch.tensor(SEX_CAT_CHEST.index(s)).view(1, 1) + if do_f: + do_pa["finding"] = torch.tensor(FIND_CAT.index(f)).view(1, 1) + if do_r: + do_pa["race"] = F.one_hot( + torch.tensor(RACE_CAT.index(r)), num_classes=3 + ).view(1, 3) + if do_a: + do_pa["age"] = torch.tensor(a / 100 * 2 - 1).view(1, 1) + for k, v in do_pa.items(): + do_pa[k] = ( + v.to(MODELS[dataset_id]["vae_args"].device).float().repeat(n_particles, 1) + ) + # infer counterfactual + out = counterfactual_inference(dataset_id, obs, do_pa) + # avg cf particles + cf_x = out["cf_x"].mean(0) + cf_x_std = out["cf_x"].std(0) + rec_x = out["rec_x"].mean(0) + cf_r = out["cf_pa"]["race"].mean(0) + cf_s = out["cf_pa"]["sex"].mean(0) + cf_f = out["cf_pa"]["finding"].mean(0) + cf_a = out["cf_pa"]["age"].mean(0) + # post process + cf_x = postprocess(cf_x) + cf_x_std = cf_x_std.squeeze().detach().cpu().numpy() + rec_x = postprocess(rec_x) + cf_r = RACE_CAT[cf_r.argmax(-1)] + cf_s = SEX_CAT_CHEST[int(cf_s.item())] + cf_f = FIND_CAT[int(cf_f.item())] + cf_a = (cf_a.item() + 1) * 50 + # plots + # plt.close('all') + effect = cf_x - rec_x + effect = get_fig_arr( + effect, + cmap="RdBu_r", + norm=MidpointNormalize(vmin=effect.min(), midpoint=0, vmax=effect.max()), + ) + cf_x = get_fig_arr(cf_x) + cf_x_std = get_fig_arr(cf_x_std, cmap="jet") + return (cf_x, cf_x_std, effect, cf_r, cf_s, cf_f, np.round(cf_a, 1)) + + +with gr.Blocks(theme=gr.themes.Default()) as demo: + with gr.Tabs(): + + with gr.TabItem("Brain MRI") as brain_tab: + brain_id = gr.Textbox(value=brain_tab.label, visible=False) + + with gr.Row().style(equal_height=True): + idx_brain = gr.Number(value=0, visible=False) + with gr.Column(scale=1, min_width=200): + x_brain = gr.Image(label="Observation", interactive=False).style( + height=HEIGHT + ) + with gr.Column(scale=1, min_width=200): + cf_x_brain = gr.Image( + label="Counterfactual", interactive=False + ).style(height=HEIGHT) + with gr.Column(scale=1, min_width=200): + cf_x_std_brain = gr.Image( + label="Counterfactual Uncertainty", interactive=False + ).style(height=HEIGHT) + with gr.Column(scale=1, min_width=200): + effect_brain = gr.Image( + label="Direct Causal Effect", interactive=False + ).style(height=HEIGHT) + with gr.Row(): + with gr.Column(scale=2.55): + gr.Markdown( + "**Intervention**" + # + 20 * " " + # + "[arXiv paper](https://arxiv.org/abs/2306.15764)   |   [GitHub code](https://github.com/biomedia-mira/causal-gen)" + # + "  |   Hint: try 90% zoom" + ) + with gr.Row(): + with gr.Column(min_width=200): + do_a = gr.Checkbox(label="do(age)", value=False) + a = gr.Slider( + label="\u00A0", + value=50, + minimum=44, + maximum=73, + step=1, + interactive=False, + ) + with gr.Column(min_width=200): + do_s = gr.Checkbox(label="do(sex)", value=False) + s = gr.Radio( + ["female", "male"], label="", interactive=False + ) + with gr.Row(): + with gr.Column(min_width=200): + do_b = gr.Checkbox(label="do(brain volume)", value=False) + b = gr.Slider( + label="\u00A0", + value=1000, + minimum=850, + maximum=1550, + step=20, + interactive=False, + ) + with gr.Column(min_width=200): + do_v = gr.Checkbox( + label="do(ventricle volume)", value=False + ) + v = gr.Slider( + label="\u00A0", + value=40, + minimum=10, + maximum=125, + step=2, + interactive=False, + ) + with gr.Row(): + new_brain = gr.Button("New Observation") + reset_brain = gr.Button("Reset", variant="stop") + submit_brain = gr.Button("Submit", variant="primary") + with gr.Column(scale=1): + # gr.Markdown("###  ") + causal_graph_brain = gr.Image( + label="Causal Graph", interactive=False + ).style(height=340) + + with gr.TabItem("Chest X-ray") as chest_tab: + chest_id = gr.Textbox(value=chest_tab.label, visible=False) + + with gr.Row().style(equal_height=True): + idx_chest = gr.Number(value=0, visible=False) + with gr.Column(scale=1, min_width=200): + x_chest = gr.Image(label="Observation", interactive=False).style( + height=HEIGHT + ) + with gr.Column(scale=1, min_width=200): + cf_x_chest = gr.Image( + label="Counterfactual", interactive=False + ).style(height=HEIGHT) + with gr.Column(scale=1, min_width=200): + cf_x_std_chest = gr.Image( + label="Counterfactual Uncertainty", interactive=False + ).style(height=HEIGHT) + with gr.Column(scale=1, min_width=200): + effect_chest = gr.Image( + label="Direct Causal Effect", interactive=False + ).style(height=HEIGHT) + + with gr.Row(): + with gr.Column(scale=2.55): + gr.Markdown( + "**Intervention**" + # + 20 * " " + # + "[arXiv paper](https://arxiv.org/abs/2306.15764)   |   [GitHub code](https://github.com/biomedia-mira/causal-gen)" + # + "  |   Hint: try 90% zoom" + ) + with gr.Row().style(equal_height=True): + with gr.Column(min_width=200): + do_a_chest = gr.Checkbox(label="do(age)", value=False) + a_chest = gr.Slider( + label="\u00A0", minimum=18, maximum=98, step=1 + ) + with gr.Column(min_width=200): + do_s_chest = gr.Checkbox(label="do(sex)", value=False) + s_chest = gr.Radio( + SEX_CAT_CHEST, label="", interactive=False + ) + + with gr.Row(): + with gr.Column(min_width=200): + do_r_chest = gr.Checkbox(label="do(race)", value=False) + r_chest = gr.Radio(RACE_CAT, label="", interactive=False) + with gr.Column(min_width=200): + do_f_chest = gr.Checkbox(label="do(disease)", value=False) + f_chest = gr.Radio(FIND_CAT, label="", interactive=False) + + with gr.Row(): + new_chest = gr.Button("New Observation") + reset_chest = gr.Button("Reset", variant="stop") + submit_chest = gr.Button("Submit", variant="primary") + with gr.Column(scale=1): + # gr.Markdown("###  ") + causal_graph_chest = gr.Image( + label="Causal Graph", interactive=False + ).style(height=345) + + # morphomnist + # do = [do_t, do_i, do_y] + # obs = [idx, x, t, i, y] + # cf_out = [cf_x, cf_x_std, effect] + + # brain + do_brain = [do_s, do_a, do_b, do_v] # intervention checkboxes + obs_brain = [idx_brain, x_brain, s, a, b, v] # observed image/attributes + cf_out_brain = [cf_x_brain, cf_x_std_brain, effect_brain] # counterfactual outputs + + # chest + do_chest = [do_r_chest, do_s_chest, do_f_chest, do_a_chest] + obs_chest = [idx_chest, x_chest, r_chest, s_chest, f_chest, a_chest] + cf_out_chest = [cf_x_chest, cf_x_std_chest, effect_chest] + + # on start: load new observations & causal graph + demo.load(fn=get_brain_obs, inputs=None, outputs=obs_brain) + demo.load(fn=get_chest_obs, inputs=None, outputs=obs_chest) + + demo.load(fn=brain_graph, inputs=do_brain, outputs=causal_graph_brain) + demo.load(fn=chest_graph, inputs=do_chest, outputs=causal_graph_chest) + + # on tab select: load models + brain_tab.select(fn=load_model, inputs=brain_id, outputs=None) + chest_tab.select(fn=load_model, inputs=chest_id, outputs=None) + + # "new" button: load new observations + new_chest.click(fn=get_chest_obs, inputs=None, outputs=obs_chest) + new_brain.click(fn=get_brain_obs, inputs=None, outputs=obs_brain) + + # "new" button: reset causal graphs + new_brain.click(fn=brain_graph, inputs=do_brain, outputs=causal_graph_brain) + new_chest.click(fn=chest_graph, inputs=do_chest, outputs=causal_graph_chest) + + # "new" button: reset cf output panels + for _k, _v in zip( + [new_brain, new_chest], [cf_out_brain, cf_out_chest] + ): + _k.click(fn=lambda: (gr.update(value=None),) * 3, inputs=None, outputs=_v) + + # "reset" button: reload current observations + reset_brain.click(fn=get_brain_obs, inputs=idx_brain, outputs=obs_brain) + reset_chest.click(fn=get_chest_obs, inputs=idx_chest, outputs=obs_chest) + + # "reset" button: deselect intervention checkboxes + reset_brain.click( + fn=lambda: (gr.update(value=False),) * len(do_brain), + inputs=None, + outputs=do_brain, + ) + reset_chest.click( + fn=lambda: (gr.update(value=False),) * len(do_chest), + inputs=None, + outputs=do_chest, + ) + + # "reset" button: reset cf output panels + for _k, _v in zip( + [reset_brain, reset_chest], [cf_out_brain, cf_out_chest] + ): + _k.click(fn=lambda: plt.close("all"), inputs=None, outputs=None) + _k.click(fn=lambda: (gr.update(value=None),) * 3, inputs=None, outputs=_v) + + # enable brain interventions when checkbox is selected & update graph + for _k, _v in zip(do_brain, [s, a, b, v]): + _k.change(fn=lambda x: gr.update(interactive=x), inputs=_k, outputs=_v) + _k.change(brain_graph, inputs=do_brain, outputs=causal_graph_brain) + + # enable chest interventions when checkbox is selected & update graph + for _k, _v in zip(do_chest, [r_chest, s_chest, f_chest, a_chest]): + _k.change(fn=lambda x: gr.update(interactive=x), inputs=_k, outputs=_v) + _k.change(chest_graph, inputs=do_chest, outputs=causal_graph_chest) + + # "submit" button: infer countefactuals + submit_brain.click( + fn=infer_brain_cf, + inputs=obs_brain + do_brain, + outputs=cf_out_brain + [s, a, b, v], + ) + submit_chest.click( + fn=infer_chest_cf, + inputs=obs_chest + do_chest, + outputs=cf_out_chest + [r_chest, s_chest, f_chest, a_chest], + ) + +if __name__ == "__main__": + demo.queue() + demo.launch() diff --git a/app_utils.py b/app_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..e423b8c2bc87c636005fbceb744ed3f1f3f2db74 --- /dev/null +++ b/app_utils.py @@ -0,0 +1,435 @@ +import torch +import numpy as np +import networkx as nx +import matplotlib.pyplot as plt + +from PIL import Image + +from matplotlib import rc, patches, colors + +rc("font", **{"family": "serif", "serif": ["Roman"]}) +rc("text", usetex=True) +rc("image", interpolation="none") +rc("text.latex", preamble=r"\usepackage{amsmath} \usepackage{amssymb}") + +from datasets import get_attr_max_min + +HAMMER = np.array(Image.open("./hammer.png").resize((35, 35))) / 255 + + +class MidpointNormalize(colors.Normalize): + def __init__(self, vmin=None, vmax=None, midpoint=None, clip=False): + self.midpoint = midpoint + colors.Normalize.__init__(self, vmin, vmax, clip) + + def __call__(self, value, clip=None): + v_ext = np.max([np.abs(self.vmin), np.abs(self.vmax)]) + x, y = [-v_ext, self.midpoint, v_ext], [0, 0.5, 1] + return np.ma.masked_array(np.interp(value, x, y)) + + +def postprocess(x): + return ((x + 1.0) * 127.5).squeeze().detach().cpu().numpy() + + +def mnist_graph(*args): + x, t, i, y = r"$\mathbf{x}$", r"$t$", r"$i$", r"$y$" + ut, ui, uy = r"$\mathbf{U}_t$", r"$\mathbf{U}_i$", r"$\mathbf{U}_y$" + zx, ex = r"$\mathbf{z}_{1:L}$", r"$\boldsymbol{\epsilon}$" + + G = nx.DiGraph() + G.add_edge(t, x) + G.add_edge(i, x) + G.add_edge(y, x) + G.add_edge(t, i) + G.add_edge(ut, t) + G.add_edge(ui, i) + G.add_edge(uy, y) + G.add_edge(zx, x) + G.add_edge(ex, x) + + pos = { + y: (0, 0), + uy: (-1, 0), + t: (0, 0.5), + ut: (0, 1), + x: (1, 0), + zx: (2, 0.375), + ex: (2, 0), + i: (1, 0.5), + ui: (1, 1), + } + + node_c = {} + for node in G: + node_c[node] = "lightgrey" if node in [x, t, i, y] else "white" + node_line_c = {k: "black" for k, _ in node_c.items()} + edge_c = {e: "black" for e in G.edges} + + if args[0]: # do_t + edge_c[(ut, t)] = "lightgrey" + # G.remove_edge(ut, t) + node_line_c[t] = "red" + if args[1]: # do_i + edge_c[(ui, i)] = "lightgrey" + edge_c[(t, i)] = "lightgrey" + # G.remove_edges_from([(ui, i), (t, i)]) + node_line_c[i] = "red" + if args[2]: # do_y + edge_c[(uy, y)] = "lightgrey" + # G.remove_edge(uy, y) + node_line_c[y] = "red" + + fs = 30 + options = { + "font_size": fs, + "node_size": 3000, + "node_color": list(node_c.values()), + "edgecolors": list(node_line_c.values()), + "edge_color": list(edge_c.values()), + "linewidths": 2, + "width": 2, + } + plt.close("all") + fig, ax = plt.subplots(1, 1, figsize=(6, 4.1)) # , constrained_layout=True) + # fig.patch.set_visible(False) + ax.margins(x=0.06, y=0.15, tight=False) + ax.axis("off") + nx.draw_networkx(G, pos, **options, arrowsize=25, arrowstyle="-|>", ax=ax) + # need to reuse x, y limits so that the graphs plot the same way before and after removing edges + x_lim = (-1.348, 2.348) + y_lim = (-0.215, 1.215) + ax.set_xlim(x_lim) + ax.set_ylim(y_lim) + rect = patches.FancyBboxPatch( + (1.75, -0.16), + 0.5, + 0.7, + boxstyle="round, pad=0.05, rounding_size=0", + linewidth=2, + edgecolor="black", + facecolor="none", + linestyle="-", + ) + ax.add_patch(rect) + ax.text(1.85, 0.65, r"$\mathbf{U}_{\mathbf{x}}$", fontsize=fs) + + if args[0]: # do_t + fig.figimage(HAMMER, 0.26 * fig.bbox.xmax, 0.525 * fig.bbox.ymax, zorder=10) + if args[1]: # do_i + fig.figimage(HAMMER, 0.5175 * fig.bbox.xmax, 0.525 * fig.bbox.ymax, zorder=11) + if args[2]: # do_y + fig.figimage(HAMMER, 0.26 * fig.bbox.xmax, 0.2 * fig.bbox.ymax, zorder=12) + + fig.tight_layout() + fig.canvas.draw() + return np.array(fig.canvas.renderer.buffer_rgba()) + + +def brain_graph(*args): + x, m, s, a, b, v = r"$\mathbf{x}$", r"$m$", r"$s$", r"$a$", r"$b$", r"$v$" + um, us, ua, ub, uv = ( + r"$\mathbf{U}_m$", + r"$\mathbf{U}_s$", + r"$\mathbf{U}_a$", + r"$\mathbf{U}_b$", + r"$\mathbf{U}_v$", + ) + zx, ex = r"$\mathbf{z}_{1:L}$", r"$\boldsymbol{\epsilon}$" + + G = nx.DiGraph() + G.add_edge(m, x) + G.add_edge(s, x) + G.add_edge(b, x) + G.add_edge(v, x) + G.add_edge(zx, x) + G.add_edge(ex, x) + G.add_edge(a, b) + G.add_edge(a, v) + G.add_edge(s, b) + G.add_edge(um, m) + G.add_edge(us, s) + G.add_edge(ua, a) + G.add_edge(ub, b) + G.add_edge(uv, v) + + pos = { + x: (0, 0), + zx: (-0.25, -1), + ex: (0.25, -1), + a: (0, 1), + ua: (0, 2), + s: (1, 0), + us: (1, -1), + b: (1, 1), + ub: (1, 2), + m: (-1, 0), + um: (-1, -1), + v: (-1, 1), + uv: (-1, 2), + } + + node_c = {} + for node in G: + node_c[node] = "lightgrey" if node in [x, m, s, a, b, v] else "white" + node_line_c = {k: "black" for k, _ in node_c.items()} + edge_c = {e: "black" for e in G.edges} + + if args[0]: # do_m + # G.remove_edge(um, m) + edge_c[(um, m)] = "lightgrey" + node_line_c[m] = "red" + if args[1]: # do_s + # G.remove_edge(us, s) + edge_c[(us, s)] = "lightgrey" + node_line_c[s] = "red" + if args[2]: # do_a + # G.remove_edge(ua, a) + edge_c[(ua, a)] = "lightgrey" + node_line_c[a] = "red" + if args[3]: # do_b + # G.remove_edges_from([(ub, b), (s, b), (a, b)]) + edge_c[(ub, b)] = "lightgrey" + edge_c[(s, b)] = "lightgrey" + edge_c[(a, b)] = "lightgrey" + node_line_c[b] = "red" + if args[4]: # do_v + # G.remove_edges_from([(uv, v), (a, v), (b, v)]) + edge_c[(uv, v)] = "lightgrey" + edge_c[(a, v)] = "lightgrey" + edge_c[(b, v)] = "lightgrey" + node_line_c[v] = "red" + + fs = 30 + options = { + "font_size": fs, + "node_size": 3000, + "node_color": list(node_c.values()), + "edgecolors": list(node_line_c.values()), + "edge_color": list(edge_c.values()), + "linewidths": 2, + "width": 2, + } + + plt.close("all") + fig, ax = plt.subplots(1, 1, figsize=(5, 5)) # , constrained_layout=True) + # fig.patch.set_visible(False) + ax.margins(x=0.1, y=0.08, tight=False) + ax.axis("off") + nx.draw_networkx(G, pos, **options, arrowsize=25, arrowstyle="-|>", ax=ax) + # need to reuse x, y limits so that the graphs plot the same way before and after removing edges + x_lim = (-1.32, 1.32) + y_lim = (-1.414, 2.414) + ax.set_xlim(x_lim) + ax.set_ylim(y_lim) + rect = patches.FancyBboxPatch( + (-0.5, -1.325), + 1, + 0.65, + boxstyle="round, pad=0.05, rounding_size=0", + linewidth=2, + edgecolor="black", + facecolor="none", + linestyle="-", + ) + ax.add_patch(rect) + # ax.text(1.85, 0.65, r"$\mathbf{U}_{\mathbf{x}}$", fontsize=fs) + + if args[0]: # do_m + fig.figimage(HAMMER, 0.0075 * fig.bbox.xmax, 0.395 * fig.bbox.ymax, zorder=10) + if args[1]: # do_s + fig.figimage(HAMMER, 0.72 * fig.bbox.xmax, 0.395 * fig.bbox.ymax, zorder=11) + if args[2]: # do_a + fig.figimage(HAMMER, 0.363 * fig.bbox.xmax, 0.64 * fig.bbox.ymax, zorder=12) + if args[3]: # do_b + fig.figimage(HAMMER, 0.72 * fig.bbox.xmax, 0.64 * fig.bbox.ymax, zorder=13) + if args[4]: # do_v + fig.figimage(HAMMER, 0.0075 * fig.bbox.xmax, 0.64 * fig.bbox.ymax, zorder=14) + else: # b -> v + a3 = patches.FancyArrowPatch( + (0.86, 1.21), + (-0.86, 1.21), + connectionstyle="arc3,rad=.3", + linewidth=2, + arrowstyle="simple, head_width=10, head_length=10", + color="k", + ) + ax.add_patch(a3) + # print(ax.get_xlim()) + # print(ax.get_ylim()) + fig.tight_layout() + fig.canvas.draw() + return np.array(fig.canvas.renderer.buffer_rgba()) + + +def chest_graph(*args): + x, a, d, r, s = r"$\mathbf{x}$", r"$a$", r"$d$", r"$r$", r"$s$" + ua, ud, ur, us = ( + r"$\mathbf{U}_a$", + r"$\mathbf{U}_d$", + r"$\mathbf{U}_r$", + r"$\mathbf{U}_s$", + ) + zx, ex = r"$\mathbf{z}_{1:L}$", r"$\boldsymbol{\epsilon}$" + + G = nx.DiGraph() + G.add_edge(ua, a) + G.add_edge(ud, d) + G.add_edge(ur, r) + G.add_edge(us, s) + G.add_edge(a, d) + G.add_edge(d, x) + G.add_edge(r, x) + G.add_edge(s, x) + G.add_edge(ex, x) + G.add_edge(zx, x) + G.add_edge(a, x) + + pos = { + x: (0, 0), + a: (-1, 1), + d: (0, 1), + r: (1, 1), + s: (1, 0), + ua: (-1, 2), + ud: (0, 2), + ur: (1, 2), + us: (1, -1), + zx: (-0.25, -1), + ex: (0.25, -1), + } + + node_c = {} + for node in G: + node_c[node] = "lightgrey" if node in [x, a, d, r, s] else "white" + + edge_c = {e: "black" for e in G.edges} + node_line_c = {k: "black" for k, _ in node_c.items()} + + if args[0]: # do_r + # G.remove_edge(ur, r) + edge_c[(ur, r)] = "lightgrey" + node_line_c[r] = "red" + if args[1]: # do_s + # G.remove_edges_from([(us, s)]) + edge_c[(us, s)] = "lightgrey" + node_line_c[s] = "red" + if args[2]: # do_f (do_d) + # G.remove_edges_from([(ud, d), (a, d)]) + edge_c[(ud, d)] = "lightgrey" + edge_c[(a, d)] = "lightgrey" + node_line_c[d] = "red" + if args[3]: # do_a + # G.remove_edge(ua, a) + edge_c[(ua, a)] = "lightgrey" + node_line_c[a] = "red" + + fs = 30 + options = { + "font_size": fs, + "node_size": 3000, + "node_color": list(node_c.values()), + "edgecolors": list(node_line_c.values()), + "edge_color": list(edge_c.values()), + "linewidths": 2, + "width": 2, + } + plt.close("all") + fig, ax = plt.subplots(1, 1, figsize=(5, 5)) # , constrained_layout=True) + # fig.patch.set_visible(False) + ax.margins(x=0.1, y=0.08, tight=False) + ax.axis("off") + nx.draw_networkx(G, pos, **options, arrowsize=25, arrowstyle="-|>", ax=ax) + # need to reuse x, y limits so that the graphs plot the same way before and after removing edges + x_lim = (-1.32, 1.32) + y_lim = (-1.414, 2.414) + ax.set_xlim(x_lim) + ax.set_ylim(y_lim) + rect = patches.FancyBboxPatch( + (-0.5, -1.325), + 1, + 0.65, + boxstyle="round, pad=0.05, rounding_size=0", + linewidth=2, + edgecolor="black", + facecolor="none", + linestyle="-", + ) + ax.add_patch(rect) + ax.text(-0.9, -1.075, r"$\mathbf{U}_{\mathbf{x}}$", fontsize=fs) + + if args[0]: # do_r + fig.figimage(HAMMER, 0.72 * fig.bbox.xmax, 0.64 * fig.bbox.ymax, zorder=10) + if args[1]: # do_s + fig.figimage(HAMMER, 0.72 * fig.bbox.xmax, 0.395 * fig.bbox.ymax, zorder=11) + if args[2]: # do_f + fig.figimage(HAMMER, 0.363 * fig.bbox.xmax, 0.64 * fig.bbox.ymax, zorder=12) + if args[3]: # do_a + fig.figimage(HAMMER, 0.0075 * fig.bbox.xmax, 0.64 * fig.bbox.ymax, zorder=13) + + fig.tight_layout() + fig.canvas.draw() + return np.array(fig.canvas.renderer.buffer_rgba()) + + +def vae_preprocess(args, pa): + if "ukbb" in args.hps: + # preprocessing ukbb parents for the vae which was originally trained using + # log standardized parents. The pgm was trained using [-1,1] normalization + # first undo [-1,1] parent preprocessing back to original range + for k, v in pa.items(): + if k != "mri_seq" and k != "sex": + pa[k] = (v + 1) / 2 # [-1,1] -> [0,1] + _max, _min = get_attr_max_min(k) + pa[k] = pa[k] * (_max - _min) + _min + # log_standardize parents for vae input + for k, v in pa.items(): + logpa_k = torch.log(v.clamp(min=1e-12)) + if k == "age": + pa[k] = (logpa_k - 4.112339973449707) / 0.11769197136163712 + elif k == "brain_volume": + pa[k] = (logpa_k - 13.965583801269531) / 0.09537758678197861 + elif k == "ventricle_volume": + pa[k] = (logpa_k - 10.345998764038086) / 0.43127763271331787 + # concatenate parents expand to input res for conditioning the vae + pa = torch.cat( + [pa[k] if len(pa[k].shape) > 1 else pa[k][..., None] for k in args.parents_x], + dim=1, + ) + pa = ( + pa[..., None, None].repeat(1, 1, *(args.input_res,) * 2).to(args.device).float() + ) + return pa + + +def preprocess_brain(args, obs): + obs["x"] = (obs["x"][None, ...].float().to(args.device) - 127.5) / 127.5 # [-1,1] + # for all other variables except x + for k in [k for k in obs.keys() if k != "x"]: + obs[k] = obs[k].float().to(args.device).view(1, 1) + if k in ["age", "brain_volume", "ventricle_volume"]: + k_max, k_min = get_attr_max_min(k) + obs[k] = (obs[k] - k_min) / (k_max - k_min) # [0,1] + obs[k] = 2 * obs[k] - 1 # [-1,1] + return obs + + +def get_fig_arr(x, width=4, height=4, dpi=144, cmap="Greys_r", norm=None): + fig = plt.figure(figsize=(width, height), dpi=dpi) + ax = plt.axes([0, 0, 1, 1], frameon=False) + if cmap == "Greys_r": + ax.imshow(x, cmap=cmap, vmin=0, vmax=255) + else: + ax.imshow(x, cmap=cmap, norm=norm) + ax.axis("off") + fig.canvas.draw() + return np.array(fig.canvas.renderer.buffer_rgba()) + + +def normalize(x, x_min=None, x_max=None, zero_one=False): + if x_min is None: + x_min = x.min() + if x_max is None: + x_max = x.max() + x = (x - x_min) / (x_max - x_min) # [0,1] + return x if zero_one else 2 * x - 1 # else [-1,1] diff --git a/checkpoints/a_r_s_f/mimic_beta9_gelu_dgauss_1_lr3/checkpoint.pt b/checkpoints/a_r_s_f/mimic_beta9_gelu_dgauss_1_lr3/checkpoint.pt new file mode 100644 index 0000000000000000000000000000000000000000..b11a3e0bf04433e5b9ab0212c4b3423f86be8c76 --- /dev/null +++ b/checkpoints/a_r_s_f/mimic_beta9_gelu_dgauss_1_lr3/checkpoint.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eaab2e017c753c90183239bf6e149a0cebe83155a1749eab95305f068bdb552f +size 134 diff --git a/checkpoints/a_r_s_f/mimic_dscm_lr_1e5_lagrange_lr_1_damping_10/6500_checkpoint.pt b/checkpoints/a_r_s_f/mimic_dscm_lr_1e5_lagrange_lr_1_damping_10/6500_checkpoint.pt new file mode 100644 index 0000000000000000000000000000000000000000..76f2caffd1749fb7d1eac3c4de5d15a6c294edd4 --- /dev/null +++ b/checkpoints/a_r_s_f/mimic_dscm_lr_1e5_lagrange_lr_1_damping_10/6500_checkpoint.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:114b8f0f1677605417c99dc7f091ece828e89bc75ee9550e9d0f8048aa43d587 +size 134 diff --git a/checkpoints/a_r_s_f/sup_pgm_mimic/checkpoint.pt b/checkpoints/a_r_s_f/sup_pgm_mimic/checkpoint.pt new file mode 100644 index 0000000000000000000000000000000000000000..79c92366d88a63225a163c949dbee71198cfbf78 --- /dev/null +++ b/checkpoints/a_r_s_f/sup_pgm_mimic/checkpoint.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:109dda6b72d38390aabd6e590a27bd6eeb2eb6c92c3ecd753a2fe7c014ac319d +size 132 diff --git a/checkpoints/a_r_s_f/sup_pgm_mimic/checkpoint_current.pt b/checkpoints/a_r_s_f/sup_pgm_mimic/checkpoint_current.pt new file mode 100644 index 0000000000000000000000000000000000000000..8b8904a29f40622f446de9cd1be90ede3fdd2f24 --- /dev/null +++ b/checkpoints/a_r_s_f/sup_pgm_mimic/checkpoint_current.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e686cff0a6a6656c248acdc0873f3e5711665d1420217d89ae550b3bba9f8d59 +size 132 diff --git a/checkpoints/m_b_v_s/sup_pgm/checkpoint.pt b/checkpoints/m_b_v_s/sup_pgm/checkpoint.pt new file mode 100644 index 0000000000000000000000000000000000000000..834d6eb4700207fc3b1c7416b580a30569de4e17 --- /dev/null +++ b/checkpoints/m_b_v_s/sup_pgm/checkpoint.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8f1a873caf6a96f607034e7cbc8d8abaab5971d1297e51160b07b4ffe39b2c66 +size 132 diff --git a/checkpoints/m_b_v_s/ukbb192_beta5_dgauss_b33/checkpoint.pt b/checkpoints/m_b_v_s/ukbb192_beta5_dgauss_b33/checkpoint.pt new file mode 100644 index 0000000000000000000000000000000000000000..46cbfd13746cb4e7c5968f00adb6f6d205bdf5f5 --- /dev/null +++ b/checkpoints/m_b_v_s/ukbb192_beta5_dgauss_b33/checkpoint.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0eb4df03d7573187ee962297735e626af6104769d50f2d5211656cc81276a79b +size 134 diff --git a/checkpoints/t_i_d/dgauss_cond_big_beta1_dropexo/checkpoint.pt b/checkpoints/t_i_d/dgauss_cond_big_beta1_dropexo/checkpoint.pt new file mode 100644 index 0000000000000000000000000000000000000000..73bb8820bdd3949795f55ef61ce80918f25745aa --- /dev/null +++ b/checkpoints/t_i_d/dgauss_cond_big_beta1_dropexo/checkpoint.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f3122e11cce58d2e2cafcdb952bb8dbca57e65298aaced86eb700131e2cff632 +size 133 diff --git a/checkpoints/t_i_d/sup_pgm/checkpoint.pt b/checkpoints/t_i_d/sup_pgm/checkpoint.pt new file mode 100644 index 0000000000000000000000000000000000000000..852b5b63a92035625c212cfcb39c1dd54b1cb0eb --- /dev/null +++ b/checkpoints/t_i_d/sup_pgm/checkpoint.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8cb53124e1a91a8f4254d4cb3eaa1a0d2623b79eb8ec453207d2e6bc65ebcfb6 +size 130 diff --git a/data/mimic_subset/0.jpg b/data/mimic_subset/0.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c60902b48cd856221a1a521963e9b76b7322c10d Binary files /dev/null and b/data/mimic_subset/0.jpg differ diff --git a/data/mimic_subset/1.jpg b/data/mimic_subset/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..169bb806ce28d93880c8b9e19d0900afe872ecaf Binary files /dev/null and b/data/mimic_subset/1.jpg differ diff --git a/data/mimic_subset/10.jpg b/data/mimic_subset/10.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6e09fab6d1d4f1e849f48080ef41c4e66f6bfd08 Binary files /dev/null and b/data/mimic_subset/10.jpg differ diff --git a/data/mimic_subset/11.jpg b/data/mimic_subset/11.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f6f7cac22279d80465fe5bd5acb017c106591d1e Binary files /dev/null and b/data/mimic_subset/11.jpg differ diff --git a/data/mimic_subset/12.jpg b/data/mimic_subset/12.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e9b069d585d9a546c6352eb27535a514d9a3f9b7 Binary files /dev/null and b/data/mimic_subset/12.jpg differ diff --git a/data/mimic_subset/13.jpg b/data/mimic_subset/13.jpg new file mode 100644 index 0000000000000000000000000000000000000000..69fc7709302d0883ad8a9bae4e9c18ab2e8d5f84 Binary files /dev/null and b/data/mimic_subset/13.jpg differ diff --git a/data/mimic_subset/14.jpg b/data/mimic_subset/14.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a22e01a3c4d378b820d598f214892c14cd2c7ab1 Binary files /dev/null and b/data/mimic_subset/14.jpg differ diff --git a/data/mimic_subset/15.jpg b/data/mimic_subset/15.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c9499f81694a3c06a3538c2c03d23bf82896fede Binary files /dev/null and b/data/mimic_subset/15.jpg differ diff --git a/data/mimic_subset/16.jpg b/data/mimic_subset/16.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7e30aa14627b5dc53bac95e3c8e4cff7a00bcdc8 Binary files /dev/null and b/data/mimic_subset/16.jpg differ diff --git a/data/mimic_subset/17.jpg b/data/mimic_subset/17.jpg new file mode 100644 index 0000000000000000000000000000000000000000..20bd042d875d3f77863d4d3fde15af612d94c9c6 Binary files /dev/null and b/data/mimic_subset/17.jpg differ diff --git a/data/mimic_subset/18.jpg b/data/mimic_subset/18.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5cf80eb4749c29a859f894c58e30ed96b5f067d9 Binary files /dev/null and b/data/mimic_subset/18.jpg differ diff --git a/data/mimic_subset/19.jpg b/data/mimic_subset/19.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d3efaf117b2da762dea9c5b4194a88c666e07a09 Binary files /dev/null and b/data/mimic_subset/19.jpg differ diff --git a/data/mimic_subset/2.jpg b/data/mimic_subset/2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bc06f37bede6117287dab080aadc5f659786b677 Binary files /dev/null and b/data/mimic_subset/2.jpg differ diff --git a/data/mimic_subset/20.jpg b/data/mimic_subset/20.jpg new file mode 100644 index 0000000000000000000000000000000000000000..21907fb2a42d502c2640daf5a2e157063f074dfa Binary files /dev/null and b/data/mimic_subset/20.jpg differ diff --git a/data/mimic_subset/21.jpg b/data/mimic_subset/21.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f74a2cdff26a4a2ecd39a37e636e22b4a69dc795 Binary files /dev/null and b/data/mimic_subset/21.jpg differ diff --git a/data/mimic_subset/22.jpg b/data/mimic_subset/22.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5d8f08461006ce8a22d70f3413f3103f4ee63143 Binary files /dev/null and b/data/mimic_subset/22.jpg differ diff --git a/data/mimic_subset/23.jpg b/data/mimic_subset/23.jpg new file mode 100644 index 0000000000000000000000000000000000000000..06152c1a98594c3c965f5b7276f18998b22fe162 Binary files /dev/null and b/data/mimic_subset/23.jpg differ diff --git a/data/mimic_subset/24.jpg b/data/mimic_subset/24.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cf76874f71dce53ee9b4e474278de7c3405e5ad3 Binary files /dev/null and b/data/mimic_subset/24.jpg differ diff --git a/data/mimic_subset/25.jpg b/data/mimic_subset/25.jpg new file mode 100644 index 0000000000000000000000000000000000000000..364fffab70778b153a9c4c1456a1245aa91b4ec6 Binary files /dev/null and b/data/mimic_subset/25.jpg differ diff --git a/data/mimic_subset/26.jpg b/data/mimic_subset/26.jpg new file mode 100644 index 0000000000000000000000000000000000000000..487e5bbc3d1cd50617a13708a18b3606796db0e3 Binary files /dev/null and b/data/mimic_subset/26.jpg differ diff --git a/data/mimic_subset/27.jpg b/data/mimic_subset/27.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c8dc477d9b4a5b04bc9927c09855c0a92180af69 Binary files /dev/null and b/data/mimic_subset/27.jpg differ diff --git a/data/mimic_subset/28.jpg b/data/mimic_subset/28.jpg new file mode 100644 index 0000000000000000000000000000000000000000..646a525c6f259ed2749a6e1bf0c89458352cbbc3 Binary files /dev/null and b/data/mimic_subset/28.jpg differ diff --git a/data/mimic_subset/29.jpg b/data/mimic_subset/29.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b20338329f47cccf9a2304bf3a3ea32be5a85716 Binary files /dev/null and b/data/mimic_subset/29.jpg differ diff --git a/data/mimic_subset/3.jpg b/data/mimic_subset/3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ee36839ade96aba8acb53151f939737e3e6fa03a Binary files /dev/null and b/data/mimic_subset/3.jpg differ diff --git a/data/mimic_subset/30.jpg b/data/mimic_subset/30.jpg new file mode 100644 index 0000000000000000000000000000000000000000..723087b8abc1c1e902991b90215e6687fd9221b2 Binary files /dev/null and b/data/mimic_subset/30.jpg differ diff --git a/data/mimic_subset/31.jpg b/data/mimic_subset/31.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a4455558cddf17805c7f4a180b7cf9c2e8ce8832 Binary files /dev/null and b/data/mimic_subset/31.jpg differ diff --git a/data/mimic_subset/32.jpg b/data/mimic_subset/32.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cb006353282ddb8cc8cea7a891e310441b8b16aa Binary files /dev/null and b/data/mimic_subset/32.jpg differ diff --git a/data/mimic_subset/33.jpg b/data/mimic_subset/33.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7da926aaff8553605b9b6d76ebb61c3e546681c9 Binary files /dev/null and b/data/mimic_subset/33.jpg differ diff --git a/data/mimic_subset/34.jpg b/data/mimic_subset/34.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b4e21110d7225f1a15393dcd0fab39d6d2aafce8 Binary files /dev/null and b/data/mimic_subset/34.jpg differ diff --git a/data/mimic_subset/35.jpg b/data/mimic_subset/35.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b1e0e8c000caa5b7f568c90323575183f2db6015 Binary files /dev/null and b/data/mimic_subset/35.jpg differ diff --git a/data/mimic_subset/36.jpg b/data/mimic_subset/36.jpg new file mode 100644 index 0000000000000000000000000000000000000000..802c3100d13d066d8fe0beaef5633cc4d4217d72 Binary files /dev/null and b/data/mimic_subset/36.jpg differ diff --git a/data/mimic_subset/37.jpg b/data/mimic_subset/37.jpg new file mode 100644 index 0000000000000000000000000000000000000000..db4c89aecfb60750a2d9ac71442ce6b0ae19375a Binary files /dev/null and b/data/mimic_subset/37.jpg differ diff --git a/data/mimic_subset/38.jpg b/data/mimic_subset/38.jpg new file mode 100644 index 0000000000000000000000000000000000000000..036de4b2719941387fc26cd51deef5f72b5cdf62 Binary files /dev/null and b/data/mimic_subset/38.jpg differ diff --git a/data/mimic_subset/39.jpg b/data/mimic_subset/39.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aa43c1d6f709d79512b00558c32c297cf3f838e0 Binary files /dev/null and b/data/mimic_subset/39.jpg differ diff --git a/data/mimic_subset/4.jpg b/data/mimic_subset/4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b1c3d8e8e475819d12eeaae151a48f855d2386d8 Binary files /dev/null and b/data/mimic_subset/4.jpg differ diff --git a/data/mimic_subset/40.jpg b/data/mimic_subset/40.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0ea9809492848682e9818c2ad3d0f48b61a88b45 Binary files /dev/null and b/data/mimic_subset/40.jpg differ diff --git a/data/mimic_subset/41.jpg b/data/mimic_subset/41.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0d8ff20727124efb8569021608b943a7b1130b5f Binary files /dev/null and b/data/mimic_subset/41.jpg differ diff --git a/data/mimic_subset/42.jpg b/data/mimic_subset/42.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8a45fa33cb47709e9b5fa6d709dedef66bed8261 Binary files /dev/null and b/data/mimic_subset/42.jpg differ diff --git a/data/mimic_subset/43.jpg b/data/mimic_subset/43.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d3ff1123a17ec4b572c32dc7b1a700fd5a6b5c5d Binary files /dev/null and b/data/mimic_subset/43.jpg differ diff --git a/data/mimic_subset/44.jpg b/data/mimic_subset/44.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8c041a4de5294f228ab101bb1566bfed85c3e338 Binary files /dev/null and b/data/mimic_subset/44.jpg differ diff --git a/data/mimic_subset/45.jpg b/data/mimic_subset/45.jpg new file mode 100644 index 0000000000000000000000000000000000000000..70abb0da248e8659bec690f6f2afc51dcea6aebb Binary files /dev/null and b/data/mimic_subset/45.jpg differ diff --git a/data/mimic_subset/46.jpg b/data/mimic_subset/46.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a5f920e875593e9470cb7103cb4e56348d949bdd Binary files /dev/null and b/data/mimic_subset/46.jpg differ diff --git a/data/mimic_subset/47.jpg b/data/mimic_subset/47.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f3edac182dd32136e16472d332194be9341f745c Binary files /dev/null and b/data/mimic_subset/47.jpg differ diff --git a/data/mimic_subset/48.jpg b/data/mimic_subset/48.jpg new file mode 100644 index 0000000000000000000000000000000000000000..768383c4cf010725d3592edf0ab4895331c6cf6b Binary files /dev/null and b/data/mimic_subset/48.jpg differ diff --git a/data/mimic_subset/49.jpg b/data/mimic_subset/49.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3db46e2e1b4336585a93d4c2be164681a5a3712e Binary files /dev/null and b/data/mimic_subset/49.jpg differ diff --git a/data/mimic_subset/5.jpg b/data/mimic_subset/5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..405b77112deef32de45643002395b76b8e47e8d8 Binary files /dev/null and b/data/mimic_subset/5.jpg differ diff --git a/data/mimic_subset/50.jpg b/data/mimic_subset/50.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5974b71c5cdbd30bff15830d03e0ad39ce2b514c Binary files /dev/null and b/data/mimic_subset/50.jpg differ diff --git a/data/mimic_subset/6.jpg b/data/mimic_subset/6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9f52ffdd39c3daa94cd02f55740587245ff23ec3 Binary files /dev/null and b/data/mimic_subset/6.jpg differ diff --git a/data/mimic_subset/7.jpg b/data/mimic_subset/7.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e5d239fc54a3ec6c6253aabcf3ac057d4c785163 Binary files /dev/null and b/data/mimic_subset/7.jpg differ diff --git a/data/mimic_subset/8.jpg b/data/mimic_subset/8.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4817dfa6b0c84f97dcb3f3181889afecd65eba0e Binary files /dev/null and b/data/mimic_subset/8.jpg differ diff --git a/data/mimic_subset/9.jpg b/data/mimic_subset/9.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9919baada98e0b0334d305b49344a23fb71fd351 Binary files /dev/null and b/data/mimic_subset/9.jpg differ diff --git a/data/mimic_subset/mimic.sample.test.csv b/data/mimic_subset/mimic.sample.test.csv new file mode 100644 index 0000000000000000000000000000000000000000..76a16d7a2e82401ec7b7694851ab5d2678c7d2ce --- /dev/null +++ b/data/mimic_subset/mimic.sample.test.csv @@ -0,0 +1,52 @@ +,path,PerformedProcedureStepDescription,split,ViewPosition,Rows,Columns,StudyDate,StudyTime,ProcedureCodeSequence_CodeMeaning,ViewCodeSequence_CodeMeaning,PatientOrientationCodeSequence_CodeMeaning,Atelectasis,Cardiomegaly,Consolidation,Edema,Enlarged Cardiomediastinum,Fracture,Lung Lesion,Lung Opacity,No Finding,Pleural Effusion,Pleural Other,Pneumonia,Pneumothorax,Support Devices,race,sex,age,anchor_year,anchor_year_group,dod,race_label,sex_label,disease,disease_label,path_preproc +0,p16/p16394447/s50003676/c5e0182b-436be488-dc7c03a1-73f4038b-97edf019.jpg,CHEST (PA AND LAT),test,PA,3056,2544,21350225,194829.703,CHEST (PA AND LAT),postero-anterior,Erect,,,,,,,,,1.0,,,,,,Black,Female,44.0,2128,2008 - 2010,,2,1,No Finding,0,0.jpg +1,p17/p17735335/s52949889/60d00570-f4d2bba9-04001e62-774b616b-0c6b09bb.jpg,CHEST (PORTABLE AP),test,AP,2712,2544,21190110,184154.625,CHEST (PORTABLE AP),antero-posterior,Erect,1.0,,,-1.0,,,,1.0,,1.0,,1.0,,1.0,White,Female,74.0,2118,2011 - 2013,2119-01-27,0,1,Pleural Effusion,1,1.jpg +2,p18/p18201582/s58089447/f681073e-a00d021f-f8078458-8e5786d7-bd1b8f58.jpg,CHEST (PORTABLE AP),test,AP,2942,2539,21670609,140138.531,CHEST (PORTABLE AP),antero-posterior,,,1.0,,,,,,,,1.0,,,0.0,,White,Male,79.0,2163,2011 - 2013,,0,0,Pleural Effusion,1,2.jpg +3,p11/p11984647/s50912149/1fe0ab1f-2e69077b-64cbe536-639e7abd-c56ffc35.jpg,CHEST (PORTABLE AP),test,AP,3050,2539,21280330,185753.64,CHEST (PORTABLE AP),antero-posterior,,,1.0,,1.0,,,,1.0,,1.0,,,0.0,1.0,White,Male,52.0,2128,2014 - 2016,,0,0,Pleural Effusion,1,3.jpg +4,p17/p17843033/s55692716/bef1b267-3b916df3-2bcb9ab7-40269cd9-de065978.jpg,CHEST (PORTABLE AP),test,AP,3056,2544,21630815,35853.015,CHEST (PORTABLE AP),antero-posterior,Erect,1.0,,,,,,,1.0,,1.0,,-1.0,0.0,1.0,Asian,Male,82.0,2163,2011 - 2013,,1,0,Pleural Effusion,1,4.jpg +5,p11/p11740173/s50574105/bc923ff4-85d3bf88-bee46f78-f5d38e9d-db100517.jpg,CHEST (PORTABLE AP),test,AP,3050,2539,21721110,124229.0,CHEST (PORTABLE AP),antero-posterior,Erect,,1.0,1.0,1.0,,,1.0,,,1.0,,,0.0,1.0,White,Female,68.0,2172,2014 - 2016,,0,1,Pleural Effusion,1,5.jpg +6,p15/p15104675/s52995159/74027416-55d7fe0b-be7ced34-1876a1e5-eea1da02.jpg,CHEST (PORTABLE AP),test,AP,2544,3056,21881221,114627.796,CHEST (PORTABLE AP),antero-posterior,Erect,,,1.0,1.0,,,,1.0,,1.0,,,0.0,1.0,White,Male,64.0,2188,2014 - 2016,,0,0,Pleural Effusion,1,6.jpg +7,p14/p14538785/s56163294/ba73ed90-024f44a5-c30cdf28-df4aa17a-ee9e8d3c.jpg,CHEST (PORTABLE AP),test,AP,2544,3056,21200204,53142.578,CHEST (PORTABLE AP),antero-posterior,Erect,,,,,,,,,1.0,,,,,,White,Male,76.0,2120,2014 - 2016,,0,0,No Finding,0,7.jpg +8,p12/p12445879/s51758043/3c72a2f1-6c45bd25-3eb6fa75-0a93c82e-2006c372.jpg,,test,PA,2022,2022,21830507,171249.0,CHEST (PA AND LAT),postero-anterior,Erect,1.0,,,,,,,,,1.0,,,,,White,Male,71.0,2181,2011 - 2013,,0,0,Pleural Effusion,1,8.jpg +9,p13/p13896515/s58088717/4f4c1ed7-5e3e7b32-534f3142-60dfa8a1-b5350381.jpg,CHEST (PORTABLE AP),test,AP,3056,2544,21730116,120127.187,CHEST (PORTABLE AP),antero-posterior,Erect,,,,,,,,,1.0,,,,,1.0,White,Male,79.0,2165,2008 - 2010,,0,0,No Finding,0,9.jpg +10,p16/p16008484/s56921303/69a7ce6b-3da6ef04-aba99696-962b2c0a-2163fe46.jpg,CHEST (PORTABLE AP),test,AP,2866,2457,21430108,123424.718,CHEST (PORTABLE AP),antero-posterior,Erect,,,,,,,,,1.0,,,,,,White,Female,46.0,2143,2011 - 2013,,0,1,No Finding,0,10.jpg +11,p13/p13358526/s50260231/28605298-faed1815-717412fa-4badb4e6-bd9632e1.jpg,CHEST (PORTABLE AP),test,AP,2539,3050,21330312,50705.765,CHEST (PORTABLE AP),antero-posterior,Recumbent,,1.0,,1.0,1.0,,,,,1.0,,,0.0,1.0,White,Male,68.0,2133,2014 - 2016,,0,0,Pleural Effusion,1,11.jpg +12,p19/p19736038/s51052347/a2bb31e1-1fc247a6-ef2e8e80-83c722c8-c87ecfdd.jpg,,test,PA,2022,2022,21690108,100151.0,CHEST (PA AND LAT),postero-anterior,Erect,,,,,,,,,,1.0,,,,,White,Female,60.0,2167,2014 - 2016,,0,1,Pleural Effusion,1,12.jpg +13,p13/p13582491/s57856319/729bdbc4-b3d98878-adc44de2-8e5bc537-a801eb2c.jpg,CHEST (PA AND LAT),test,PA,3056,2544,21300518,133559.109,CHEST (PA AND LAT),postero-anterior,Erect,,,,,,,,,1.0,,,,,,Black,Female,85.0,2127,2008 - 2010,2131-01-14,2,1,No Finding,0,13.jpg +14,p14/p14181616/s58270165/f88ac608-8e313eb7-3184daa1-169fb736-12d64d5f.jpg,CHEST (PORTABLE AP),test,AP,2539,3050,21971025,45640.171,CHEST (PORTABLE AP),antero-posterior,Erect,,,,0.0,,,,,,1.0,,,,1.0,White,Female,65.0,2197,2014 - 2016,,0,1,Pleural Effusion,1,14.jpg +15,p16/p16783577/s54728959/4ebff787-20664d84-85d1854e-ae058355-caf8060a.jpg,CHEST (PORTABLE AP),test,AP,3050,2539,21801226,35707.234,CHEST (PORTABLE AP),antero-posterior,Erect,,1.0,,1.0,,,,,,1.0,,,0.0,1.0,Asian,Male,73.0,2173,2008 - 2010,2180-12-30,1,0,Pleural Effusion,1,15.jpg +16,p10/p10826816/s59137955/0fa748ba-83fc5b52-96b6dd32-26a4b345-1aab9005.jpg,CHEST (PORTABLE AP),test,AP,2544,3056,21740814,120751.015,CHEST (PORTABLE AP),antero-posterior,Erect,,,,1.0,,,,,,1.0,,,,1.0,White,Male,81.0,2172,2008 - 2010,2174-08-15,0,0,Pleural Effusion,1,16.jpg +17,p11/p11404988/s55668449/e36414c5-8362ccc2-14b8abc1-155b1c88-09a874f2.jpg,CHEST (PA AND LAT),test,AP,2544,3056,21800506,224003.437,CHEST (PA AND LAT),antero-posterior,Erect,,,0.0,,,,,,1.0,,,,,,Black,Female,68.0,2180,2014 - 2016,,2,1,No Finding,0,17.jpg +18,p14/p14488269/s54552917/508a9999-a2a78b71-e05b7925-bfb7ebdb-6e2e000f.jpg,CHEST (PA AND LAT),test,PA,2607,2544,21780204,174727.312,CHEST (PA AND LAT),postero-anterior,Erect,,,,,,,,,1.0,,,,,,Black,Female,57.0,2174,2011 - 2013,,2,1,No Finding,0,18.jpg +19,p19/p19254962/s56252844/c7b38e29-6d2d4b7d-6213d761-5a0ca7b2-07f213e2.jpg,CHEST (PORTABLE AP),test,AP,3050,2539,21180920,51711.0,CHEST (PORTABLE AP),antero-posterior,Erect,,,,,,,,,1.0,,,,,,White,Female,66.0,2118,2011 - 2013,,0,1,No Finding,0,19.jpg +20,p16/p16598160/s50930334/16c358e6-490381ee-77ecdedb-c6c8adbc-6138de0d.jpg,CHEST (PA AND LAT),test,PA,3056,2544,21610127,105046.562,CHEST (PA AND LAT),postero-anterior,Erect,,,,,,,,,1.0,,,,,,White,Male,44.0,2161,2014 - 2016,,0,0,No Finding,0,20.jpg +21,p12/p12654170/s58892257/60d9d278-e01eeed6-9d2631b1-453d773c-1c912db2.jpg,CHEST (PORTABLE AP),test,AP,2544,3056,21830720,173829.828,CHEST (PORTABLE AP),antero-posterior,Erect,,,,1.0,,,,,,1.0,,1.0,,,White,Male,79.0,2178,2008 - 2010,,0,0,Pleural Effusion,1,21.jpg +22,p15/p15425725/s59210491/c9418557-3fe462e7-83ce49ba-54341df2-fc0e3941.jpg,CHEST (PORTABLE AP),test,AP,3056,2544,21421218,30944.968,CHEST (PORTABLE AP),antero-posterior,Erect,,,,0.0,,,,0.0,1.0,,,0.0,,1.0,White,Female,54.0,2142,2011 - 2013,,0,1,No Finding,0,22.jpg +23,p15/p15345462/s55790218/5ac076c5-0c16d5bd-16fbc289-be6ef9f8-06e8a7f0.jpg,CHEST (PA AND LAT),test,PA,2544,2926,22041001,104831.593,CHEST (PA AND LAT),postero-anterior,Erect,,,,,,,,,1.0,,,,,,White,Male,36.0,2196,2008 - 2010,,0,0,No Finding,0,23.jpg +24,p17/p17639884/s53217733/212a56d0-7eb46f71-b708bd44-eb698da4-8602abb4.jpg,CHEST (PA AND LAT),test,PA,3056,2532,21530622,150109.703,CHEST (PA AND LAT),postero-anterior,Erect,,,,,,,,,1.0,,,,0.0,,White,Male,20.0,2153,2011 - 2013,,0,0,No Finding,0,24.jpg +25,p19/p19279951/s52215754/a24fa5ed-1aa4ee08-418ecea4-a245c14f-f9eff1fb.jpg,CHEST (PA AND LAT),test,PA,3056,2544,21720605,161124.062,CHEST (PA AND LAT),postero-anterior,Erect,,,,,,,,,1.0,,,,,,White,Female,24.0,2172,2011 - 2013,,0,1,No Finding,0,25.jpg +26,p13/p13028893/s51810673/590d274c-9db31af1-351be54c-1f647e23-d31e94ed.jpg,CHEST (PORTABLE AP),test,AP,2539,3050,21211018,51144.531,CHEST (PORTABLE AP),antero-posterior,,,,,,,,,,1.0,,,0.0,,,White,Male,65.0,2116,2008 - 2010,,0,0,No Finding,0,26.jpg +27,p16/p16773746/s50446568/97a3ddfc-14ed5726-9c111bac-0b5817e3-f2e24280.jpg,CHEST (PORTABLE AP),test,AP,2539,3028,21791012,215503.593,CHEST (PORTABLE AP),antero-posterior,,,0.0,,,,,,,1.0,0.0,,0.0,0.0,,White,Male,84.0,2179,2014 - 2016,,0,0,No Finding,0,27.jpg +28,p19/p19106574/s55918447/eb4bebd6-b3c88829-da9d46f7-a4ccbbde-5b755126.jpg,Performed Desc,test,PA,2021,2021,21820630,95958.0,CHEST (PA AND LAT),postero-anterior,Recumbent,,,,,,,1.0,,,1.0,,,0.0,,Black,Female,80.0,2182,2014 - 2016,,2,1,Pleural Effusion,1,28.jpg +29,p16/p16833001/s51430879/b11738da-615bee27-b84dea4c-3ad79432-812033d8.jpg,CHEST (PA AND LAT),test,AP,2544,3056,21740514,145239.656,CHEST (PA AND LAT),antero-posterior,Erect,1.0,,,,,,,,,1.0,,,,,White,Male,65.0,2168,2008 - 2010,,0,0,Pleural Effusion,1,29.jpg +30,p16/p16960471/s50068717/d2074c7c-eaac2601-2b2caff7-81507022-113d57ae.jpg,CHEST (PA AND LAT),test,PA,2544,3056,21490804,131405.421,CHEST (PA AND LAT),postero-anterior,Erect,,,,,,,,,1.0,,,,,,White,Male,53.0,2149,2014 - 2016,,0,0,No Finding,0,30.jpg +31,p13/p13919434/s57821150/68b1f143-7ea360e0-f0a67f35-7e8ad0ec-748c8942.jpg,CHEST (PORTABLE AP),test,AP,2544,3056,21890213,210502.828,CHEST (PORTABLE AP),antero-posterior,Erect,,-1.0,,,-1.0,,,1.0,,1.0,,,,1.0,White,Male,82.0,2188,2014 - 2016,,0,0,Pleural Effusion,1,31.jpg +32,p19/p19276413/s54431291/45695d2e-7b8261cf-ad9bdb25-00435044-457d2907.jpg,CHEST (PA AND LAT),test,PA,3056,2544,21260121,102101.187,CHEST (PA AND LAT),postero-anterior,Erect,1.0,,,,,,-1.0,,,1.0,,,,,White,Female,87.0,2121,2008 - 2010,2129-07-13,0,1,Pleural Effusion,1,32.jpg +33,p19/p19800188/s52849099/c4caf8fc-faccd41c-d6443d23-37fb2204-1444eab6.jpg,,test,PA,2022,1636,21330607,120854.0,CHEST (PA AND LAT),postero-anterior,Erect,,,,,,,,0.0,1.0,,,,,,Black,Female,77.0,2129,2008 - 2010,,2,1,No Finding,0,33.jpg +34,p12/p12912569/s55468473/ce30f8d2-54952d1d-d10ea581-824d578d-990ff08e.jpg,CHEST (PA AND LAT),test,PA,3056,2544,21590601,144118.265,CHEST (PA AND LAT),postero-anterior,Erect,,,,,,,,,1.0,,,,,,White,Male,67.0,2154,2011 - 2013,,0,0,No Finding,0,34.jpg +35,p18/p18232511/s56646752/45abc995-02a94561-19fd7a59-00ad34dd-829f20e1.jpg,CHEST (PORTABLE AP),test,AP,3056,2544,21280830,170057.859,CHEST (PORTABLE AP),antero-posterior,,1.0,1.0,,-1.0,-1.0,,,,,1.0,,,0.0,1.0,White,Male,88.0,2128,2011 - 2013,2128-09-08,0,0,Pleural Effusion,1,35.jpg +36,p19/p19807371/s50496092/2b7d811f-b9d6b82b-5b565ce1-541ed6f7-4d57f055.jpg,Performed Desc,test,PA,1867,1829,21500411,203638.0,CHEST (PA AND LAT),postero-anterior,Recumbent,,,,,,,,,1.0,,,,,,White,Male,62.0,2146,2008 - 2010,,0,0,No Finding,0,36.jpg +37,p14/p14776642/s59556092/b5db2600-ab2d895a-4eacc917-96045060-69c5ddf3.jpg,CHEST (PA AND LAT),test,PA,3056,2544,21730413,204306.983,CHEST (PA AND LAT),postero-anterior,Erect,,,,,,,,,1.0,,,,,,White,Female,88.0,2171,2014 - 2016,,0,1,No Finding,0,37.jpg +38,p14/p14170425/s57683293/d4224ddd-8aa6156b-cd29c9d9-348705e1-b788d738.jpg,CHEST (PORTABLE AP),test,AP,2706,2509,21491214,153207.953,CHEST (PORTABLE AP),antero-posterior,Recumbent,1.0,,,,,,,1.0,,1.0,,-1.0,,1.0,White,Female,67.0,2149,2011 - 2013,,0,1,Pleural Effusion,1,38.jpg +39,p16/p16851334/s59719450/8505b9e9-8b3fecaf-a0566263-8ce70bf5-a937460d.jpg,CHEST (PA AND LAT),test,PA,3056,2544,21511113,211152.359,CHEST (PA AND LAT),postero-anterior,Erect,,,,,,,,,1.0,,,,,,White,Female,60.0,2151,2011 - 2013,,0,1,No Finding,0,39.jpg +40,p14/p14412677/s58769341/49bb997d-f4161c0d-99213469-a08d59b6-bc635cdd.jpg,CHEST (PA AND LAT),test,AP,2260,3056,21680810,110725.234,CHEST (PA AND LAT),antero-posterior,Erect,,,,,,,,,1.0,,,,,,Black,Male,68.0,2165,2008 - 2010,,2,0,No Finding,0,40.jpg +41,p13/p13971613/s54858442/f1f31a24-299a993f-9d3cffa7-377b8b93-d7b85909.jpg,CHEST (PA AND LAT),test,PA,3056,2544,21290626,30728.281000000003,CHEST (PA AND LAT),postero-anterior,Erect,,,,,,,,,1.0,,,,,,Black,Female,47.0,2123,2008 - 2010,,2,1,No Finding,0,41.jpg +42,p16/p16132012/s53066662/58faeda6-ac72ab8d-5ecf67e5-445585c3-5fb602b5.jpg,CHEST (PORTABLE AP),test,AP,2544,3056,21701006,42234.64,CHEST (PORTABLE AP),antero-posterior,Erect,,,1.0,,,,,,,1.0,,,0.0,1.0,White,Male,67.0,2170,2014 - 2016,,0,0,Pleural Effusion,1,42.jpg +43,p12/p12709045/s51630219/e90bca50-23ea826d-44292992-64f1f150-eafbf035.jpg,CHEST (PORTABLE AP),test,AP,2544,3056,21170412,113656.562,CHEST (PORTABLE AP),antero-posterior,Erect,,0.0,,0.0,,,,,1.0,0.0,,0.0,,1.0,White,Male,40.0,2117,2011 - 2013,,0,0,No Finding,0,43.jpg +44,p17/p17639480/s51056784/111b5f65-fe385262-3eaef61a-bf50a9f5-61ecd0fa.jpg,CHEST (PA AND LAT),test,AP,2544,3056,21251003,135051.296,CHEST (PA AND LAT),antero-posterior,Erect,,,,,,,,,1.0,,,,,,Black,Male,63.0,2121,2008 - 2010,,2,0,No Finding,0,44.jpg +45,p19/p19467588/s55028214/58505eb6-3059b00b-7ca76e6f-8e6f29c9-58136da3.jpg,CHEST (PORTABLE AP),test,AP,2544,3056,21550810,233507.781,CHEST (PORTABLE AP),antero-posterior,Erect,,,,,,,,,1.0,,,0.0,,,White,Male,50.0,2151,2008 - 2010,,0,0,No Finding,0,45.jpg +46,p14/p14798598/s52112755/b5d54c2b-3c976d41-4cfaf756-3aa4c341-fee6e69a.jpg,CHEST (PORTABLE AP),test,AP,2287,3050,21710507,120639.843,CHEST (PORTABLE AP),antero-posterior,Erect,,,,-1.0,,,,,,1.0,,,,,Black,Male,60.0,2167,2011 - 2013,,2,0,Pleural Effusion,1,46.jpg +47,p18/p18028180/s50287111/2a240148-cbd4d113-36f18e92-4a93807b-9bbefb0f.jpg,,test,PA,2022,1886,21630823,121711.0,CHEST (PA AND LAT),postero-anterior,Erect,,,,,,,,,1.0,,,,,,White,Male,71.0,2161,2008 - 2010,,0,0,No Finding,0,47.jpg +48,p11/p11140108/s50465343/0b506cd2-337fba7a-55ffab8a-781091e7-667dcd37.jpg,CHEST (PA AND LAT),test,PA,2544,3056,21830925,193407.796,CHEST (PA AND LAT),postero-anterior,Erect,,,,,,,,,1.0,,,,,,Black,Male,45.0,2183,2011 - 2013,,2,0,No Finding,0,48.jpg +49,p14/p14460495/s57211021/87d8e7b7-819a0c2c-87dd4fe4-48362be0-6c726a02.jpg,,test,PA,2022,1736,21550131,92656.0,CHEST (PA AND LAT),postero-anterior,Erect,,,,,,,,,,1.0,,,1.0,,White,Female,55.0,2152,2014 - 2016,,0,1,Pleural Effusion,1,49.jpg +50,p10/p10336114/s58646090/fc1d55da-bcd0ea7b-37c8124c-4af23324-c4be4c77.jpg,CHEST (PA AND LAT),test,AP,3056,2544,21720822,182659.984,CHEST (PA AND LAT),antero-posterior,Erect,-1.0,,,1.0,,,,1.0,,1.0,,-1.0,1.0,,White,Male,91.0,2172,2014 - 2016,,0,0,Pleural Effusion,1,50.jpg diff --git a/data/mimic_subset/subset.csv b/data/mimic_subset/subset.csv new file mode 100644 index 0000000000000000000000000000000000000000..76a16d7a2e82401ec7b7694851ab5d2678c7d2ce --- /dev/null +++ b/data/mimic_subset/subset.csv @@ -0,0 +1,52 @@ +,path,PerformedProcedureStepDescription,split,ViewPosition,Rows,Columns,StudyDate,StudyTime,ProcedureCodeSequence_CodeMeaning,ViewCodeSequence_CodeMeaning,PatientOrientationCodeSequence_CodeMeaning,Atelectasis,Cardiomegaly,Consolidation,Edema,Enlarged Cardiomediastinum,Fracture,Lung Lesion,Lung Opacity,No Finding,Pleural Effusion,Pleural Other,Pneumonia,Pneumothorax,Support Devices,race,sex,age,anchor_year,anchor_year_group,dod,race_label,sex_label,disease,disease_label,path_preproc +0,p16/p16394447/s50003676/c5e0182b-436be488-dc7c03a1-73f4038b-97edf019.jpg,CHEST (PA AND LAT),test,PA,3056,2544,21350225,194829.703,CHEST (PA AND LAT),postero-anterior,Erect,,,,,,,,,1.0,,,,,,Black,Female,44.0,2128,2008 - 2010,,2,1,No Finding,0,0.jpg +1,p17/p17735335/s52949889/60d00570-f4d2bba9-04001e62-774b616b-0c6b09bb.jpg,CHEST (PORTABLE AP),test,AP,2712,2544,21190110,184154.625,CHEST (PORTABLE AP),antero-posterior,Erect,1.0,,,-1.0,,,,1.0,,1.0,,1.0,,1.0,White,Female,74.0,2118,2011 - 2013,2119-01-27,0,1,Pleural Effusion,1,1.jpg +2,p18/p18201582/s58089447/f681073e-a00d021f-f8078458-8e5786d7-bd1b8f58.jpg,CHEST (PORTABLE AP),test,AP,2942,2539,21670609,140138.531,CHEST (PORTABLE AP),antero-posterior,,,1.0,,,,,,,,1.0,,,0.0,,White,Male,79.0,2163,2011 - 2013,,0,0,Pleural Effusion,1,2.jpg +3,p11/p11984647/s50912149/1fe0ab1f-2e69077b-64cbe536-639e7abd-c56ffc35.jpg,CHEST (PORTABLE AP),test,AP,3050,2539,21280330,185753.64,CHEST (PORTABLE AP),antero-posterior,,,1.0,,1.0,,,,1.0,,1.0,,,0.0,1.0,White,Male,52.0,2128,2014 - 2016,,0,0,Pleural Effusion,1,3.jpg +4,p17/p17843033/s55692716/bef1b267-3b916df3-2bcb9ab7-40269cd9-de065978.jpg,CHEST (PORTABLE AP),test,AP,3056,2544,21630815,35853.015,CHEST (PORTABLE AP),antero-posterior,Erect,1.0,,,,,,,1.0,,1.0,,-1.0,0.0,1.0,Asian,Male,82.0,2163,2011 - 2013,,1,0,Pleural Effusion,1,4.jpg +5,p11/p11740173/s50574105/bc923ff4-85d3bf88-bee46f78-f5d38e9d-db100517.jpg,CHEST (PORTABLE AP),test,AP,3050,2539,21721110,124229.0,CHEST (PORTABLE AP),antero-posterior,Erect,,1.0,1.0,1.0,,,1.0,,,1.0,,,0.0,1.0,White,Female,68.0,2172,2014 - 2016,,0,1,Pleural Effusion,1,5.jpg +6,p15/p15104675/s52995159/74027416-55d7fe0b-be7ced34-1876a1e5-eea1da02.jpg,CHEST (PORTABLE AP),test,AP,2544,3056,21881221,114627.796,CHEST (PORTABLE AP),antero-posterior,Erect,,,1.0,1.0,,,,1.0,,1.0,,,0.0,1.0,White,Male,64.0,2188,2014 - 2016,,0,0,Pleural Effusion,1,6.jpg +7,p14/p14538785/s56163294/ba73ed90-024f44a5-c30cdf28-df4aa17a-ee9e8d3c.jpg,CHEST (PORTABLE AP),test,AP,2544,3056,21200204,53142.578,CHEST (PORTABLE AP),antero-posterior,Erect,,,,,,,,,1.0,,,,,,White,Male,76.0,2120,2014 - 2016,,0,0,No Finding,0,7.jpg +8,p12/p12445879/s51758043/3c72a2f1-6c45bd25-3eb6fa75-0a93c82e-2006c372.jpg,,test,PA,2022,2022,21830507,171249.0,CHEST (PA AND LAT),postero-anterior,Erect,1.0,,,,,,,,,1.0,,,,,White,Male,71.0,2181,2011 - 2013,,0,0,Pleural Effusion,1,8.jpg +9,p13/p13896515/s58088717/4f4c1ed7-5e3e7b32-534f3142-60dfa8a1-b5350381.jpg,CHEST (PORTABLE AP),test,AP,3056,2544,21730116,120127.187,CHEST (PORTABLE AP),antero-posterior,Erect,,,,,,,,,1.0,,,,,1.0,White,Male,79.0,2165,2008 - 2010,,0,0,No Finding,0,9.jpg +10,p16/p16008484/s56921303/69a7ce6b-3da6ef04-aba99696-962b2c0a-2163fe46.jpg,CHEST (PORTABLE AP),test,AP,2866,2457,21430108,123424.718,CHEST (PORTABLE AP),antero-posterior,Erect,,,,,,,,,1.0,,,,,,White,Female,46.0,2143,2011 - 2013,,0,1,No Finding,0,10.jpg +11,p13/p13358526/s50260231/28605298-faed1815-717412fa-4badb4e6-bd9632e1.jpg,CHEST (PORTABLE AP),test,AP,2539,3050,21330312,50705.765,CHEST (PORTABLE AP),antero-posterior,Recumbent,,1.0,,1.0,1.0,,,,,1.0,,,0.0,1.0,White,Male,68.0,2133,2014 - 2016,,0,0,Pleural Effusion,1,11.jpg +12,p19/p19736038/s51052347/a2bb31e1-1fc247a6-ef2e8e80-83c722c8-c87ecfdd.jpg,,test,PA,2022,2022,21690108,100151.0,CHEST (PA AND LAT),postero-anterior,Erect,,,,,,,,,,1.0,,,,,White,Female,60.0,2167,2014 - 2016,,0,1,Pleural Effusion,1,12.jpg +13,p13/p13582491/s57856319/729bdbc4-b3d98878-adc44de2-8e5bc537-a801eb2c.jpg,CHEST (PA AND LAT),test,PA,3056,2544,21300518,133559.109,CHEST (PA AND LAT),postero-anterior,Erect,,,,,,,,,1.0,,,,,,Black,Female,85.0,2127,2008 - 2010,2131-01-14,2,1,No Finding,0,13.jpg +14,p14/p14181616/s58270165/f88ac608-8e313eb7-3184daa1-169fb736-12d64d5f.jpg,CHEST (PORTABLE AP),test,AP,2539,3050,21971025,45640.171,CHEST (PORTABLE AP),antero-posterior,Erect,,,,0.0,,,,,,1.0,,,,1.0,White,Female,65.0,2197,2014 - 2016,,0,1,Pleural Effusion,1,14.jpg +15,p16/p16783577/s54728959/4ebff787-20664d84-85d1854e-ae058355-caf8060a.jpg,CHEST (PORTABLE AP),test,AP,3050,2539,21801226,35707.234,CHEST (PORTABLE AP),antero-posterior,Erect,,1.0,,1.0,,,,,,1.0,,,0.0,1.0,Asian,Male,73.0,2173,2008 - 2010,2180-12-30,1,0,Pleural Effusion,1,15.jpg +16,p10/p10826816/s59137955/0fa748ba-83fc5b52-96b6dd32-26a4b345-1aab9005.jpg,CHEST (PORTABLE AP),test,AP,2544,3056,21740814,120751.015,CHEST (PORTABLE AP),antero-posterior,Erect,,,,1.0,,,,,,1.0,,,,1.0,White,Male,81.0,2172,2008 - 2010,2174-08-15,0,0,Pleural Effusion,1,16.jpg +17,p11/p11404988/s55668449/e36414c5-8362ccc2-14b8abc1-155b1c88-09a874f2.jpg,CHEST (PA AND LAT),test,AP,2544,3056,21800506,224003.437,CHEST (PA AND LAT),antero-posterior,Erect,,,0.0,,,,,,1.0,,,,,,Black,Female,68.0,2180,2014 - 2016,,2,1,No Finding,0,17.jpg +18,p14/p14488269/s54552917/508a9999-a2a78b71-e05b7925-bfb7ebdb-6e2e000f.jpg,CHEST (PA AND LAT),test,PA,2607,2544,21780204,174727.312,CHEST (PA AND LAT),postero-anterior,Erect,,,,,,,,,1.0,,,,,,Black,Female,57.0,2174,2011 - 2013,,2,1,No Finding,0,18.jpg +19,p19/p19254962/s56252844/c7b38e29-6d2d4b7d-6213d761-5a0ca7b2-07f213e2.jpg,CHEST (PORTABLE AP),test,AP,3050,2539,21180920,51711.0,CHEST (PORTABLE AP),antero-posterior,Erect,,,,,,,,,1.0,,,,,,White,Female,66.0,2118,2011 - 2013,,0,1,No Finding,0,19.jpg +20,p16/p16598160/s50930334/16c358e6-490381ee-77ecdedb-c6c8adbc-6138de0d.jpg,CHEST (PA AND LAT),test,PA,3056,2544,21610127,105046.562,CHEST (PA AND LAT),postero-anterior,Erect,,,,,,,,,1.0,,,,,,White,Male,44.0,2161,2014 - 2016,,0,0,No Finding,0,20.jpg +21,p12/p12654170/s58892257/60d9d278-e01eeed6-9d2631b1-453d773c-1c912db2.jpg,CHEST (PORTABLE AP),test,AP,2544,3056,21830720,173829.828,CHEST (PORTABLE AP),antero-posterior,Erect,,,,1.0,,,,,,1.0,,1.0,,,White,Male,79.0,2178,2008 - 2010,,0,0,Pleural Effusion,1,21.jpg +22,p15/p15425725/s59210491/c9418557-3fe462e7-83ce49ba-54341df2-fc0e3941.jpg,CHEST (PORTABLE AP),test,AP,3056,2544,21421218,30944.968,CHEST (PORTABLE AP),antero-posterior,Erect,,,,0.0,,,,0.0,1.0,,,0.0,,1.0,White,Female,54.0,2142,2011 - 2013,,0,1,No Finding,0,22.jpg +23,p15/p15345462/s55790218/5ac076c5-0c16d5bd-16fbc289-be6ef9f8-06e8a7f0.jpg,CHEST (PA AND LAT),test,PA,2544,2926,22041001,104831.593,CHEST (PA AND LAT),postero-anterior,Erect,,,,,,,,,1.0,,,,,,White,Male,36.0,2196,2008 - 2010,,0,0,No Finding,0,23.jpg +24,p17/p17639884/s53217733/212a56d0-7eb46f71-b708bd44-eb698da4-8602abb4.jpg,CHEST (PA AND LAT),test,PA,3056,2532,21530622,150109.703,CHEST (PA AND LAT),postero-anterior,Erect,,,,,,,,,1.0,,,,0.0,,White,Male,20.0,2153,2011 - 2013,,0,0,No Finding,0,24.jpg +25,p19/p19279951/s52215754/a24fa5ed-1aa4ee08-418ecea4-a245c14f-f9eff1fb.jpg,CHEST (PA AND LAT),test,PA,3056,2544,21720605,161124.062,CHEST (PA AND LAT),postero-anterior,Erect,,,,,,,,,1.0,,,,,,White,Female,24.0,2172,2011 - 2013,,0,1,No Finding,0,25.jpg +26,p13/p13028893/s51810673/590d274c-9db31af1-351be54c-1f647e23-d31e94ed.jpg,CHEST (PORTABLE AP),test,AP,2539,3050,21211018,51144.531,CHEST (PORTABLE AP),antero-posterior,,,,,,,,,,1.0,,,0.0,,,White,Male,65.0,2116,2008 - 2010,,0,0,No Finding,0,26.jpg +27,p16/p16773746/s50446568/97a3ddfc-14ed5726-9c111bac-0b5817e3-f2e24280.jpg,CHEST (PORTABLE AP),test,AP,2539,3028,21791012,215503.593,CHEST (PORTABLE AP),antero-posterior,,,0.0,,,,,,,1.0,0.0,,0.0,0.0,,White,Male,84.0,2179,2014 - 2016,,0,0,No Finding,0,27.jpg +28,p19/p19106574/s55918447/eb4bebd6-b3c88829-da9d46f7-a4ccbbde-5b755126.jpg,Performed Desc,test,PA,2021,2021,21820630,95958.0,CHEST (PA AND LAT),postero-anterior,Recumbent,,,,,,,1.0,,,1.0,,,0.0,,Black,Female,80.0,2182,2014 - 2016,,2,1,Pleural Effusion,1,28.jpg +29,p16/p16833001/s51430879/b11738da-615bee27-b84dea4c-3ad79432-812033d8.jpg,CHEST (PA AND LAT),test,AP,2544,3056,21740514,145239.656,CHEST (PA AND LAT),antero-posterior,Erect,1.0,,,,,,,,,1.0,,,,,White,Male,65.0,2168,2008 - 2010,,0,0,Pleural Effusion,1,29.jpg +30,p16/p16960471/s50068717/d2074c7c-eaac2601-2b2caff7-81507022-113d57ae.jpg,CHEST (PA AND LAT),test,PA,2544,3056,21490804,131405.421,CHEST (PA AND LAT),postero-anterior,Erect,,,,,,,,,1.0,,,,,,White,Male,53.0,2149,2014 - 2016,,0,0,No Finding,0,30.jpg +31,p13/p13919434/s57821150/68b1f143-7ea360e0-f0a67f35-7e8ad0ec-748c8942.jpg,CHEST (PORTABLE AP),test,AP,2544,3056,21890213,210502.828,CHEST (PORTABLE AP),antero-posterior,Erect,,-1.0,,,-1.0,,,1.0,,1.0,,,,1.0,White,Male,82.0,2188,2014 - 2016,,0,0,Pleural Effusion,1,31.jpg +32,p19/p19276413/s54431291/45695d2e-7b8261cf-ad9bdb25-00435044-457d2907.jpg,CHEST (PA AND LAT),test,PA,3056,2544,21260121,102101.187,CHEST (PA AND LAT),postero-anterior,Erect,1.0,,,,,,-1.0,,,1.0,,,,,White,Female,87.0,2121,2008 - 2010,2129-07-13,0,1,Pleural Effusion,1,32.jpg +33,p19/p19800188/s52849099/c4caf8fc-faccd41c-d6443d23-37fb2204-1444eab6.jpg,,test,PA,2022,1636,21330607,120854.0,CHEST (PA AND LAT),postero-anterior,Erect,,,,,,,,0.0,1.0,,,,,,Black,Female,77.0,2129,2008 - 2010,,2,1,No Finding,0,33.jpg +34,p12/p12912569/s55468473/ce30f8d2-54952d1d-d10ea581-824d578d-990ff08e.jpg,CHEST (PA AND LAT),test,PA,3056,2544,21590601,144118.265,CHEST (PA AND LAT),postero-anterior,Erect,,,,,,,,,1.0,,,,,,White,Male,67.0,2154,2011 - 2013,,0,0,No Finding,0,34.jpg +35,p18/p18232511/s56646752/45abc995-02a94561-19fd7a59-00ad34dd-829f20e1.jpg,CHEST (PORTABLE AP),test,AP,3056,2544,21280830,170057.859,CHEST (PORTABLE AP),antero-posterior,,1.0,1.0,,-1.0,-1.0,,,,,1.0,,,0.0,1.0,White,Male,88.0,2128,2011 - 2013,2128-09-08,0,0,Pleural Effusion,1,35.jpg +36,p19/p19807371/s50496092/2b7d811f-b9d6b82b-5b565ce1-541ed6f7-4d57f055.jpg,Performed Desc,test,PA,1867,1829,21500411,203638.0,CHEST (PA AND LAT),postero-anterior,Recumbent,,,,,,,,,1.0,,,,,,White,Male,62.0,2146,2008 - 2010,,0,0,No Finding,0,36.jpg +37,p14/p14776642/s59556092/b5db2600-ab2d895a-4eacc917-96045060-69c5ddf3.jpg,CHEST (PA AND LAT),test,PA,3056,2544,21730413,204306.983,CHEST (PA AND LAT),postero-anterior,Erect,,,,,,,,,1.0,,,,,,White,Female,88.0,2171,2014 - 2016,,0,1,No Finding,0,37.jpg +38,p14/p14170425/s57683293/d4224ddd-8aa6156b-cd29c9d9-348705e1-b788d738.jpg,CHEST (PORTABLE AP),test,AP,2706,2509,21491214,153207.953,CHEST (PORTABLE AP),antero-posterior,Recumbent,1.0,,,,,,,1.0,,1.0,,-1.0,,1.0,White,Female,67.0,2149,2011 - 2013,,0,1,Pleural Effusion,1,38.jpg +39,p16/p16851334/s59719450/8505b9e9-8b3fecaf-a0566263-8ce70bf5-a937460d.jpg,CHEST (PA AND LAT),test,PA,3056,2544,21511113,211152.359,CHEST (PA AND LAT),postero-anterior,Erect,,,,,,,,,1.0,,,,,,White,Female,60.0,2151,2011 - 2013,,0,1,No Finding,0,39.jpg +40,p14/p14412677/s58769341/49bb997d-f4161c0d-99213469-a08d59b6-bc635cdd.jpg,CHEST (PA AND LAT),test,AP,2260,3056,21680810,110725.234,CHEST (PA AND LAT),antero-posterior,Erect,,,,,,,,,1.0,,,,,,Black,Male,68.0,2165,2008 - 2010,,2,0,No Finding,0,40.jpg +41,p13/p13971613/s54858442/f1f31a24-299a993f-9d3cffa7-377b8b93-d7b85909.jpg,CHEST (PA AND LAT),test,PA,3056,2544,21290626,30728.281000000003,CHEST (PA AND LAT),postero-anterior,Erect,,,,,,,,,1.0,,,,,,Black,Female,47.0,2123,2008 - 2010,,2,1,No Finding,0,41.jpg +42,p16/p16132012/s53066662/58faeda6-ac72ab8d-5ecf67e5-445585c3-5fb602b5.jpg,CHEST (PORTABLE AP),test,AP,2544,3056,21701006,42234.64,CHEST (PORTABLE AP),antero-posterior,Erect,,,1.0,,,,,,,1.0,,,0.0,1.0,White,Male,67.0,2170,2014 - 2016,,0,0,Pleural Effusion,1,42.jpg +43,p12/p12709045/s51630219/e90bca50-23ea826d-44292992-64f1f150-eafbf035.jpg,CHEST (PORTABLE AP),test,AP,2544,3056,21170412,113656.562,CHEST (PORTABLE AP),antero-posterior,Erect,,0.0,,0.0,,,,,1.0,0.0,,0.0,,1.0,White,Male,40.0,2117,2011 - 2013,,0,0,No Finding,0,43.jpg +44,p17/p17639480/s51056784/111b5f65-fe385262-3eaef61a-bf50a9f5-61ecd0fa.jpg,CHEST (PA AND LAT),test,AP,2544,3056,21251003,135051.296,CHEST (PA AND LAT),antero-posterior,Erect,,,,,,,,,1.0,,,,,,Black,Male,63.0,2121,2008 - 2010,,2,0,No Finding,0,44.jpg +45,p19/p19467588/s55028214/58505eb6-3059b00b-7ca76e6f-8e6f29c9-58136da3.jpg,CHEST (PORTABLE AP),test,AP,2544,3056,21550810,233507.781,CHEST (PORTABLE AP),antero-posterior,Erect,,,,,,,,,1.0,,,0.0,,,White,Male,50.0,2151,2008 - 2010,,0,0,No Finding,0,45.jpg +46,p14/p14798598/s52112755/b5d54c2b-3c976d41-4cfaf756-3aa4c341-fee6e69a.jpg,CHEST (PORTABLE AP),test,AP,2287,3050,21710507,120639.843,CHEST (PORTABLE AP),antero-posterior,Erect,,,,-1.0,,,,,,1.0,,,,,Black,Male,60.0,2167,2011 - 2013,,2,0,Pleural Effusion,1,46.jpg +47,p18/p18028180/s50287111/2a240148-cbd4d113-36f18e92-4a93807b-9bbefb0f.jpg,,test,PA,2022,1886,21630823,121711.0,CHEST (PA AND LAT),postero-anterior,Erect,,,,,,,,,1.0,,,,,,White,Male,71.0,2161,2008 - 2010,,0,0,No Finding,0,47.jpg +48,p11/p11140108/s50465343/0b506cd2-337fba7a-55ffab8a-781091e7-667dcd37.jpg,CHEST (PA AND LAT),test,PA,2544,3056,21830925,193407.796,CHEST (PA AND LAT),postero-anterior,Erect,,,,,,,,,1.0,,,,,,Black,Male,45.0,2183,2011 - 2013,,2,0,No Finding,0,48.jpg +49,p14/p14460495/s57211021/87d8e7b7-819a0c2c-87dd4fe4-48362be0-6c726a02.jpg,,test,PA,2022,1736,21550131,92656.0,CHEST (PA AND LAT),postero-anterior,Erect,,,,,,,,,,1.0,,,1.0,,White,Female,55.0,2152,2014 - 2016,,0,1,Pleural Effusion,1,49.jpg +50,p10/p10336114/s58646090/fc1d55da-bcd0ea7b-37c8124c-4af23324-c4be4c77.jpg,CHEST (PA AND LAT),test,AP,3056,2544,21720822,182659.984,CHEST (PA AND LAT),antero-posterior,Erect,-1.0,,,1.0,,,,1.0,,1.0,,-1.0,1.0,,White,Male,91.0,2172,2014 - 2016,,0,0,Pleural Effusion,1,50.jpg diff --git a/data/morphomnist/args.txt b/data/morphomnist/args.txt new file mode 100644 index 0000000000000000000000000000000000000000..0024fac7a0f717a2d2c822f91ceb9990550847ea --- /dev/null +++ b/data/morphomnist/args.txt @@ -0,0 +1,2 @@ +Generated data for: + {'data_dir': None, 'out_dir': None, 'digit_class': None, 'scale': 0.5, 'invert': False} diff --git a/data/morphomnist/t10k-images-idx3-ubyte.gz b/data/morphomnist/t10k-images-idx3-ubyte.gz new file mode 100644 index 0000000000000000000000000000000000000000..1decd0e380f6f760cd9c6c1a263cfdf24b001fb4 --- /dev/null +++ b/data/morphomnist/t10k-images-idx3-ubyte.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fca251af9e8bb975a9d96f43efc7a6df475413eccdf915aabb74dc65f4e5652e +size 132 diff --git a/data/morphomnist/t10k-labels-idx1-ubyte.gz b/data/morphomnist/t10k-labels-idx1-ubyte.gz new file mode 100644 index 0000000000000000000000000000000000000000..b16f659f93718844b7902babb188f65361893fc5 --- /dev/null +++ b/data/morphomnist/t10k-labels-idx1-ubyte.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2291b1b95f6c84f505c7a071a520a01cd3925a6a87fc72f5a109e39fae8f2336 +size 129 diff --git a/data/morphomnist/t10k-morpho.csv b/data/morphomnist/t10k-morpho.csv new file mode 100644 index 0000000000000000000000000000000000000000..5edc2f3b48a122fddfee99a832ccf42e504a89f2 --- /dev/null +++ b/data/morphomnist/t10k-morpho.csv @@ -0,0 +1,10001 @@ +index,thickness,intensity +0,2.2673757,145.269 +1,3.2086186,229.09312 +2,2.9266238,191.09865 +3,2.602468,134.27042 +4,2.6118739,124.75302 +5,2.7481873,169.86557 +6,3.9670238,243.42421 +7,2.274238,121.70919 +8,2.112816,103.30275 +9,3.575687,226.01262 +10,2.1956968,105.64374 +11,3.3157773,223.2632 +12,2.9447083,189.03122 +13,3.632892,242.2603 +14,3.511247,223.5301 +15,3.146798,215.69023 +16,2.2441509,127.599014 +17,1.9850459,103.87755 +18,2.447785,116.930435 +19,2.4949822,133.49014 +20,1.5686895,90.98499 +21,2.9808774,189.59213 +22,3.019344,205.9497 +23,1.6816409,112.61929 +24,2.0056744,122.38548 +25,2.306978,162.87416 +26,2.5021217,175.02821 +27,3.381744,216.67838 +28,2.7623684,205.39868 +29,2.1588445,161.63425 +30,1.4531327,101.3557 +31,3.2868595,217.7907 +32,1.7369993,133.83975 +33,2.1665843,138.93214 +34,1.9845929,112.14717 +35,2.5477767,122.86253 +36,2.8865564,190.21315 +37,2.2291188,139.14005 +38,3.239295,230.37546 +39,2.0487282,133.75041 +40,2.6465335,156.61505 +41,2.0909898,116.943115 +42,2.5802891,142.01439 +43,2.6023927,185.4331 +44,2.3954034,146.0748 +45,3.50733,239.54323 +46,2.4135566,138.0409 +47,1.2688905,98.93027 +48,1.9364803,140.81815 +49,2.6095722,189.84763 +50,1.9471502,126.02113 +51,1.710875,106.79206 +52,3.145038,184.65063 +53,2.909958,221.41014 +54,2.427731,135.36215 +55,2.6117015,172.37921 +56,2.0775468,157.86493 +57,2.1031141,115.31748 +58,1.7218287,122.004196 +59,2.7981696,210.95705 +60,2.862187,194.7292 +61,3.0382202,207.40799 +62,1.6253458,99.12088 +63,2.3943875,130.47131 +64,2.0364025,96.311905 +65,1.8539282,85.34467 +66,2.2991493,179.94786 +67,2.5008261,175.13293 +68,2.358411,146.60893 +69,2.206313,132.08783 +70,2.0772445,141.7496 +71,3.366714,231.58981 +72,2.4531004,157.10654 +73,2.9243326,190.89354 +74,2.2341926,125.05069 +75,2.6363804,183.12085 +76,1.5988505,118.33134 +77,1.9967797,118.58586 +78,1.8076907,99.08919 +79,2.3315024,161.56421 +80,2.4991834,175.56711 +81,3.1358562,232.21307 +82,3.0674736,218.18842 +83,3.0363507,191.88205 +84,2.6981902,177.27032 +85,2.2884114,155.52895 +86,2.8621264,215.73434 +87,2.9721916,184.77246 +88,1.704276,114.31651 +89,3.8123066,242.98073 +90,2.6129804,176.12265 +91,2.1094875,166.17642 +92,1.6699878,95.552246 +93,1.9285647,82.57107 +94,1.9792948,99.29985 +95,2.4722667,156.77933 +96,2.2839365,158.0548 +97,2.4767509,149.31363 +98,1.8018615,126.89961 +99,1.8415756,115.27343 +100,2.0769541,125.36293 +101,2.7043903,201.22514 +102,3.0324602,186.27078 +103,2.3139277,150.88191 +104,2.6452563,183.8222 +105,1.9682902,141.53949 +106,2.375388,127.916504 +107,2.5387733,144.44678 +108,3.7038586,249.25627 +109,2.2073188,153.06522 +110,2.1279225,115.270645 +111,2.4975402,162.62094 +112,3.546432,237.91061 +113,3.2684703,206.00992 +114,2.0161164,104.054306 +115,1.7505124,104.23308 +116,2.2832613,179.72171 +117,3.1394272,212.98482 +118,1.5518419,86.31007 +119,1.8881845,130.73328 +120,2.6360326,177.07053 +121,1.9592526,113.85046 +122,2.6667447,176.0632 +123,2.600924,157.38364 +124,2.780024,188.61682 +125,2.9626153,201.06393 +126,2.6458051,193.47693 +127,2.6495178,156.56624 +128,1.3498305,77.148186 +129,3.0577023,203.8353 +130,2.6984544,230.40785 +131,2.7537844,219.01633 +132,1.8769181,91.41308 +133,2.345368,158.77866 +134,3.0831773,201.67374 +135,3.638596,227.37868 +136,1.4238127,83.19237 +137,1.9850644,90.57391 +138,2.5225751,174.82224 +139,2.8191123,212.84056 +140,2.8809364,170.05603 +141,2.2801802,161.53482 +142,2.244582,130.01987 +143,1.6534855,91.1864 +144,2.477763,133.14174 +145,2.2678912,101.513016 +146,2.9031637,219.909 +147,2.0109127,117.92179 +148,2.1722362,126.94238 +149,3.3318057,204.41982 +150,2.41961,130.01996 +151,1.9165206,132.18385 +152,2.2280343,99.201706 +153,2.3766866,161.7127 +154,1.9627783,110.921104 +155,2.1250174,94.872696 +156,1.6925597,111.294815 +157,2.6036987,164.49945 +158,2.1434913,134.89615 +159,1.6968777,90.880516 +160,1.758213,113.8715 +161,2.5706875,148.22816 +162,1.9412643,154.92654 +163,2.9285798,193.68031 +164,4.009933,249.08939 +165,2.312398,175.03609 +166,2.6072614,175.92001 +167,2.9214072,150.66196 +168,3.2028751,233.35751 +169,1.7936461,100.34071 +170,2.5710595,181.95518 +171,3.0139384,204.11275 +172,2.5577772,164.88269 +173,2.4753385,141.77094 +174,1.4102862,76.78978 +175,2.4595344,165.88042 +176,2.1212752,145.1033 +177,2.1039338,131.75093 +178,1.7850652,99.27373 +179,3.6297977,228.22298 +180,3.3826556,222.78508 +181,3.75163,240.60196 +182,3.2521589,227.5131 +183,2.5075502,127.45083 +184,2.312299,143.43256 +185,1.9887502,116.65382 +186,2.4038682,161.00677 +187,1.9933028,111.08122 +188,2.9759183,195.29956 +189,2.9467802,185.9161 +190,2.0525117,119.772934 +191,2.2689786,130.3057 +192,1.9806349,113.36229 +193,2.3537436,110.55376 +194,2.05708,126.3394 +195,3.6734147,243.77876 +196,3.0444589,224.08107 +197,1.7531065,91.46775 +198,2.934497,204.33833 +199,1.6474679,97.870865 +200,2.275401,125.63819 +201,2.0138526,135.3632 +202,1.6583077,90.04986 +203,2.5476542,128.03873 +204,2.3399062,169.13698 +205,2.5966728,144.20627 +206,1.2474506,77.817726 +207,3.6959252,238.81898 +208,2.056226,144.87396 +209,2.6221807,192.54466 +210,1.9289778,106.37317 +211,3.545443,236.98416 +212,1.3725547,84.1521 +213,2.4111638,119.88483 +214,1.6691542,80.545975 +215,1.9290047,87.415436 +216,2.0835285,120.36631 +217,2.8285248,161.2527 +218,2.4400897,158.95071 +219,2.1871903,135.86086 +220,2.3470545,177.68353 +221,3.083964,214.05542 +222,2.4475062,175.59216 +223,2.4460816,143.14096 +224,2.7614715,165.73642 +225,3.834406,247.81685 +226,2.3982882,139.46878 +227,2.0167418,124.29111 +228,2.5287962,131.52242 +229,2.340773,142.91116 +230,2.2410572,194.73123 +231,3.0321121,209.73636 +232,1.9363112,88.175026 +233,3.0728986,186.75685 +234,1.9807231,109.70126 +235,3.0794568,220.60147 +236,3.9514472,244.66722 +237,2.384793,142.34866 +238,3.9207902,241.02686 +239,2.6768696,137.11432 +240,2.5292673,204.52466 +241,1.7953136,119.93915 +242,2.1173315,140.04306 +243,2.9216342,198.98245 +244,2.287512,129.87679 +245,2.4816294,166.95055 +246,1.5705087,99.815445 +247,2.4002879,129.11696 +248,3.666222,229.0708 +249,1.7351202,96.986755 +250,2.596482,214.65643 +251,3.2970045,205.23022 +252,3.8681495,231.98817 +253,3.4001677,245.14545 +254,2.395963,199.289 +255,2.360695,154.04462 +256,2.083621,119.20741 +257,2.2433383,98.93125 +258,2.086771,122.791695 +259,3.3675923,213.58595 +260,1.6374018,90.06726 +261,2.3209093,163.93378 +262,1.7390395,107.002144 +263,2.475526,162.5285 +264,1.4359696,88.94977 +265,4.5739517,252.7332 +266,2.5580864,220.61426 +267,2.245527,172.50708 +268,2.9102125,228.73811 +269,2.9250178,212.46947 +270,3.9895349,248.22702 +271,3.8592384,232.32495 +272,2.5792716,118.97925 +273,4.378156,248.20642 +274,2.2131612,111.34888 +275,1.9154717,147.59259 +276,2.289251,160.78316 +277,2.812851,149.4154 +278,2.2779825,145.67706 +279,2.9055815,215.315 +280,2.0445406,98.32141 +281,2.9835966,177.86594 +282,3.0409465,198.1924 +283,2.9144325,222.04988 +284,2.2719274,154.48524 +285,2.170375,120.02228 +286,2.3921888,126.71088 +287,1.7523656,96.89014 +288,2.5294034,192.66023 +289,1.7382963,116.4506 +290,2.8287766,205.02672 +291,2.8906543,175.91821 +292,2.6451974,170.58798 +293,2.0173457,138.11731 +294,1.4023157,73.24778 +295,4.1879945,250.67824 +296,1.9571459,154.29266 +297,2.1937366,141.51266 +298,2.6270397,139.03851 +299,3.2471776,236.9315 +300,2.5310833,153.77965 +301,2.5883894,166.64726 +302,2.4549828,157.6865 +303,1.4074669,113.83982 +304,1.7522256,81.42742 +305,2.4874098,131.26357 +306,3.0715675,228.24756 +307,3.9976525,246.83824 +308,1.5299016,75.41405 +309,2.0816727,119.36755 +310,2.1514187,143.62161 +311,2.4023798,144.6051 +312,3.5481129,237.59853 +313,1.8759058,108.18762 +314,2.0855553,132.43011 +315,1.6145006,88.979126 +316,2.1030576,102.576035 +317,2.8029675,210.04082 +318,2.786076,178.48718 +319,1.8007151,87.9243 +320,3.3318238,221.95135 +321,2.7504642,171.22188 +322,3.055728,169.88962 +323,2.740697,184.18698 +324,2.6141477,164.7016 +325,3.2414982,220.48062 +326,3.2596927,238.14043 +327,3.5103257,222.49457 +328,2.607817,143.9408 +329,2.7741318,194.42851 +330,2.088839,121.65741 +331,1.898196,95.807816 +332,1.9506317,90.06913 +333,3.1441302,206.14383 +334,1.3082056,71.48551 +335,2.4173167,149.40218 +336,1.4609855,73.613785 +337,2.52404,183.43353 +338,3.2323596,218.84673 +339,3.111466,238.62447 +340,2.814489,172.72614 +341,2.417461,161.47833 +342,2.7395313,177.12024 +343,2.5509858,164.24924 +344,2.2563171,107.49196 +345,2.3252368,166.8312 +346,3.4471252,227.17282 +347,1.6832631,95.66654 +348,2.6417642,200.40115 +349,3.0659497,222.12657 +350,3.1753983,232.2308 +351,2.9340076,197.19273 +352,2.018929,116.10913 +353,2.9671874,217.56912 +354,2.10576,146.99239 +355,1.8642496,102.71622 +356,3.4240937,240.77333 +357,2.596373,167.09528 +358,3.3840709,218.68674 +359,3.0496573,151.48756 +360,3.418346,235.78279 +361,2.4324305,173.23262 +362,2.1212425,138.95389 +363,2.8489203,213.79329 +364,3.5672188,231.04095 +365,2.83707,195.60204 +366,2.9406664,208.00795 +367,2.6865287,161.79242 +368,2.2604501,178.33612 +369,2.2746801,144.83609 +370,1.6559794,95.5112 +371,2.0400407,104.97896 +372,1.7437482,84.979576 +373,2.6659667,183.98154 +374,1.9834887,102.03903 +375,1.8861322,100.201035 +376,1.5810158,81.56938 +377,2.374472,135.58905 +378,2.203782,101.725266 +379,2.1513987,132.81674 +380,2.066187,109.68887 +381,2.0452733,138.47472 +382,2.4861858,152.4318 +383,3.5744803,242.4676 +384,3.4618015,227.91458 +385,2.1534922,135.16675 +386,2.836918,193.05844 +387,3.054313,223.09898 +388,3.3975005,239.7421 +389,2.7860563,175.36658 +390,1.9209157,119.11113 +391,3.0679605,227.54454 +392,2.076559,118.69217 +393,1.9998069,115.73056 +394,1.6327949,94.00953 +395,1.8236978,104.59216 +396,2.5490556,176.42554 +397,2.8095698,174.60172 +398,2.4316525,190.21739 +399,2.732707,181.72708 +400,2.581118,172.96646 +401,3.3147466,217.88234 +402,2.1600604,148.58975 +403,2.0048974,144.17564 +404,3.0403612,224.15308 +405,1.9488972,136.39801 +406,1.8629833,126.21539 +407,1.5541753,79.59771 +408,1.8106848,94.4716 +409,3.3609254,231.83356 +410,1.5077757,92.088326 +411,2.5066018,152.31409 +412,2.7011082,172.73969 +413,2.5423632,166.85025 +414,3.3897033,228.14047 +415,3.1250615,213.78036 +416,2.0863008,116.522705 +417,1.905031,106.39688 +418,1.8375726,92.55167 +419,2.381357,110.26193 +420,2.3700595,146.72322 +421,2.978291,190.54895 +422,3.5469599,211.51315 +423,2.5255353,180.24838 +424,2.948158,177.09796 +425,1.849359,96.22445 +426,1.557858,99.4989 +427,2.1946812,112.71724 +428,4.8106027,252.6722 +429,3.3203895,217.36597 +430,2.9890685,197.84198 +431,2.407825,143.62984 +432,3.7869925,242.5551 +433,2.0857768,98.63675 +434,3.4524426,235.00902 +435,2.440599,164.02332 +436,1.9934489,125.493256 +437,1.7499545,84.234085 +438,1.5435581,80.882866 +439,2.1445084,170.13718 +440,1.8514572,104.18418 +441,2.6283958,147.48727 +442,2.5786822,128.46371 +443,3.5511494,219.68349 +444,2.0663366,144.56433 +445,1.846624,151.37595 +446,1.9850447,100.7854 +447,2.162745,122.54686 +448,3.0439315,203.40427 +449,1.6632354,131.44824 +450,2.6461778,170.72467 +451,3.1268163,226.58847 +452,2.3075702,109.490875 +453,3.2752767,211.22992 +454,2.2089086,142.9559 +455,2.3756201,124.99385 +456,2.5065815,113.56018 +457,1.6393031,88.6271 +458,2.9769044,194.15623 +459,2.0522895,93.79538 +460,3.1265612,233.29483 +461,2.9726846,167.50067 +462,2.8255332,178.09871 +463,3.2396052,200.04443 +464,2.243506,127.285164 +465,1.8843446,104.102936 +466,2.741963,150.35593 +467,2.5434084,203.32965 +468,2.193556,126.08284 +469,1.9355943,98.46798 +470,2.813716,215.06558 +471,3.121945,192.97223 +472,2.6243336,162.37733 +473,2.4256845,154.50334 +474,2.3989363,167.63773 +475,1.8675029,108.6077 +476,1.999488,123.977325 +477,2.456967,112.1832 +478,1.7534175,102.95955 +479,1.8885931,112.09259 +480,3.401434,212.91121 +481,1.8621378,121.57953 +482,1.9945562,113.98045 +483,2.4729753,198.11037 +484,1.6920034,107.416725 +485,1.4443295,95.165764 +486,2.316791,150.47748 +487,2.607493,126.85961 +488,2.8530192,206.8711 +489,2.3840113,141.2804 +490,3.0518987,216.74713 +491,3.0281978,218.33469 +492,2.6393254,133.83282 +493,1.4371897,80.0811 +494,1.8848202,129.44507 +495,3.082543,208.80455 +496,2.4512777,164.27365 +497,1.3701043,79.462135 +498,2.7584717,210.14873 +499,2.8808954,212.19688 +500,2.151309,124.06328 +501,3.3100073,204.07701 +502,1.6333628,93.10405 +503,1.9147277,130.10245 +504,2.206942,141.44373 +505,3.218402,220.83969 +506,2.5351906,146.99536 +507,2.3719268,163.66238 +508,2.449987,129.4125 +509,2.0332396,138.13213 +510,2.300864,154.61917 +511,1.7322614,110.49306 +512,1.6402223,93.47202 +513,3.1021264,196.00522 +514,2.181738,114.61182 +515,2.597462,179.0495 +516,1.9014248,94.260765 +517,2.1491184,165.30309 +518,3.3954203,206.48537 +519,2.2127595,105.48334 +520,2.6949363,178.03241 +521,2.9042528,216.07883 +522,2.460948,116.45517 +523,2.813733,163.58896 +524,2.5035849,208.64616 +525,1.3230802,69.75969 +526,2.2012606,139.15533 +527,2.9555097,170.36285 +528,1.0073516,73.23634 +529,2.7292182,208.29834 +530,1.7515413,95.089096 +531,2.688682,212.54869 +532,2.7031846,197.98196 +533,2.8592415,200.46918 +534,3.5224185,244.94156 +535,1.2903184,76.7989 +536,2.3779025,164.22281 +537,3.12459,214.5191 +538,1.7010307,101.33243 +539,2.7342157,182.76906 +540,2.6131802,150.51306 +541,2.4934616,143.67447 +542,1.7298267,104.341774 +543,2.987234,194.3245 +544,1.4791113,81.664185 +545,2.6713896,151.39966 +546,3.4115143,211.39212 +547,4.1750627,251.13062 +548,3.4643693,222.78876 +549,1.9311225,104.45716 +550,3.7679474,250.16339 +551,2.170177,135.82407 +552,1.6089627,80.25726 +553,2.098222,107.10205 +554,2.1770778,97.542435 +555,1.5647262,100.353745 +556,2.774046,173.46011 +557,1.9587561,135.38467 +558,3.4407895,238.05684 +559,2.5077188,152.78061 +560,1.1732237,89.822365 +561,2.7291408,146.73189 +562,2.5380988,179.09392 +563,2.545739,140.04369 +564,3.8233795,243.51904 +565,3.077527,226.27368 +566,2.5417802,183.63168 +567,1.2278342,75.834015 +568,2.9725323,221.18205 +569,2.4954846,138.14377 +570,3.0412571,210.20538 +571,2.5204804,138.33473 +572,2.3394828,149.21527 +573,3.8147175,243.07553 +574,1.9179862,126.09141 +575,2.018475,122.199936 +576,2.9791908,194.10352 +577,2.8141594,199.79053 +578,2.2062066,139.59903 +579,1.8565625,84.44763 +580,2.4974666,168.1304 +581,1.8792437,127.8744 +582,2.9870026,200.1298 +583,1.8934834,96.17238 +584,2.38668,165.59404 +585,1.7057725,98.11966 +586,1.1077583,70.53088 +587,2.8662748,196.49269 +588,2.1868892,112.67286 +589,2.7751873,156.21295 +590,1.1790986,80.98457 +591,2.9344504,195.64377 +592,3.3024912,233.78693 +593,2.6669545,118.13446 +594,1.981948,117.43315 +595,2.611614,150.16106 +596,1.9389638,116.80342 +597,1.3671772,90.55331 +598,2.2114644,140.5159 +599,2.977294,211.36652 +600,2.7244508,145.90111 +601,2.3116076,144.47461 +602,2.1777234,129.06015 +603,2.6538882,187.21722 +604,1.9498651,112.92868 +605,2.6409557,145.32886 +606,2.6949062,183.00145 +607,1.926786,121.36192 +608,2.253798,140.17859 +609,3.505169,229.76636 +610,1.8767322,103.95375 +611,2.198637,154.9035 +612,3.697948,233.6873 +613,2.607047,141.36583 +614,2.7874706,192.79034 +615,2.2674584,138.3769 +616,3.5046675,230.77502 +617,3.328034,227.89206 +618,2.7163627,174.85242 +619,2.252126,165.55411 +620,2.2113488,145.83084 +621,2.9936206,183.02173 +622,2.163267,115.46661 +623,2.7476535,179.49638 +624,1.5860035,88.739655 +625,2.192925,129.76616 +626,1.421149,78.553635 +627,2.5520442,168.31396 +628,1.7077268,102.43266 +629,2.6444097,190.1431 +630,2.14559,100.622925 +631,2.5797195,179.7489 +632,2.2944329,200.94554 +633,2.8195796,193.71515 +634,2.5719042,186.21152 +635,1.9591191,103.611755 +636,3.3676093,227.83327 +637,3.016274,201.27113 +638,2.3481123,165.12097 +639,2.771153,152.98593 +640,2.0991595,86.30677 +641,2.0296788,138.30637 +642,2.0204701,114.74088 +643,2.267257,147.71269 +644,2.3206196,163.39363 +645,2.2971275,105.57585 +646,3.2208648,198.11046 +647,1.556935,88.5429 +648,3.3860507,217.04779 +649,2.4981496,177.38182 +650,2.5695953,161.35152 +651,2.19059,99.9715 +652,3.2091641,230.6727 +653,1.9295913,80.493484 +654,1.75646,134.53589 +655,2.3910828,189.2467 +656,2.6975427,191.86261 +657,1.8009843,115.943115 +658,3.4590223,221.65872 +659,2.420419,183.5787 +660,2.8113189,177.46248 +661,2.1393101,149.36795 +662,3.275324,221.61653 +663,3.011653,213.37216 +664,2.083859,127.711586 +665,2.7296677,156.3768 +666,3.2680302,228.35066 +667,1.9407319,119.59317 +668,2.0392923,159.50995 +669,1.7831738,93.75375 +670,3.9014823,242.5526 +671,2.0902991,140.10738 +672,1.6989249,115.89945 +673,2.171309,128.13504 +674,2.3923924,138.11407 +675,2.3400083,147.86223 +676,2.2825236,111.77162 +677,2.8957558,204.44478 +678,2.8179917,171.13515 +679,2.7330062,152.6963 +680,2.9906783,173.43637 +681,2.2642229,100.85001 +682,2.378778,113.91295 +683,3.430934,205.45518 +684,2.2894635,141.24948 +685,2.414014,187.06906 +686,2.5304875,169.96735 +687,2.6099546,179.74896 +688,3.8261352,240.8042 +689,2.4025025,168.56909 +690,1.2431136,87.507126 +691,2.396648,189.28766 +692,2.4511163,128.41866 +693,2.7627463,204.471 +694,3.340751,242.15224 +695,2.8565607,214.65009 +696,2.0904384,117.39517 +697,2.1801238,120.99103 +698,1.6758302,83.14655 +699,3.4446874,212.77417 +700,2.6584985,165.23872 +701,3.252469,186.57709 +702,2.347917,140.07196 +703,2.436295,160.4466 +704,2.0849512,128.44415 +705,3.3648112,227.71909 +706,1.4782069,93.53441 +707,2.2456937,118.11719 +708,2.4764903,138.34647 +709,2.6071901,166.5887 +710,3.4785695,232.56819 +711,2.0658402,84.264885 +712,1.6561015,115.608246 +713,2.2689686,104.42943 +714,3.178782,225.7607 +715,3.2554126,206.98624 +716,3.4480295,225.3266 +717,2.3547516,126.62516 +718,2.5842712,194.95868 +719,2.494588,171.2939 +720,1.6319675,91.249176 +721,2.1569324,154.37909 +722,2.5539975,199.31995 +723,3.347036,239.06868 +724,2.6901631,171.0432 +725,5.4481115,254.66566 +726,1.8526031,101.92 +727,2.8655417,207.97255 +728,2.5059018,126.93559 +729,4.08188,243.96864 +730,1.8716457,96.797585 +731,2.4671388,173.22916 +732,3.7454517,239.17848 +733,1.7403215,91.6774 +734,2.2599156,163.50285 +735,1.7871385,102.21379 +736,2.1996875,140.226 +737,2.720206,162.87521 +738,3.0903058,227.2435 +739,4.073458,248.09216 +740,1.7507563,102.94173 +741,3.812257,245.24484 +742,2.8571076,232.11868 +743,2.481693,211.28966 +744,1.196213,77.26831 +745,2.098187,111.48045 +746,3.343495,228.0273 +747,2.294158,129.06087 +748,1.6480187,84.80928 +749,1.6150031,88.09729 +750,2.597547,204.25383 +751,2.1208959,118.06335 +752,1.4397181,80.67963 +753,2.1522148,116.17691 +754,2.4119234,131.95337 +755,1.8985409,134.08533 +756,3.0778966,194.58868 +757,3.3366418,238.49397 +758,1.333574,78.42505 +759,2.123674,121.24074 +760,2.9525228,207.23164 +761,3.1451135,211.7525 +762,1.8316028,139.97354 +763,2.0028648,141.49274 +764,3.6252465,237.68034 +765,2.6851134,204.43219 +766,1.9860883,115.13438 +767,1.6779158,91.51277 +768,2.030801,127.977585 +769,3.514245,247.3734 +770,2.39537,160.84177 +771,3.708117,233.591 +772,3.2991161,218.71785 +773,2.1757236,130.12793 +774,1.7702166,95.19165 +775,2.4961228,173.31473 +776,2.7749202,173.47537 +777,3.4412608,239.59648 +778,1.9654002,95.45508 +779,1.883686,98.61824 +780,2.3603768,170.85287 +781,2.9259918,168.21057 +782,2.9514544,228.8432 +783,1.7556951,92.21853 +784,2.3257663,114.67501 +785,2.2551246,126.45111 +786,2.366917,193.22084 +787,2.0991724,162.62341 +788,3.125918,211.92453 +789,3.0695431,221.59602 +790,2.409638,129.72768 +791,2.7958436,198.46892 +792,2.2327247,118.94395 +793,2.8003972,211.65852 +794,1.6913928,94.9229 +795,2.7688735,213.38657 +796,2.495044,143.43512 +797,2.225243,124.55516 +798,1.801503,90.72995 +799,3.0733821,195.39464 +800,1.5629826,126.943665 +801,2.5375454,161.87564 +802,2.6606612,220.39613 +803,2.7143369,187.19415 +804,2.7397046,195.80257 +805,2.13977,137.24602 +806,3.688435,221.83185 +807,1.6770613,97.8974 +808,2.9954762,228.06377 +809,3.1557853,205.45657 +810,2.3339596,151.99075 +811,1.873076,102.73883 +812,3.5490742,246.62889 +813,2.536501,122.37503 +814,1.7315612,99.64517 +815,4.079708,248.71107 +816,1.9297782,112.72111 +817,2.0910442,142.32791 +818,2.4441204,126.46924 +819,2.397367,133.69444 +820,3.484077,216.92528 +821,2.257127,167.65738 +822,2.8833752,212.5076 +823,3.0176136,183.62427 +824,2.0322368,83.42569 +825,1.7936308,106.10354 +826,1.8699281,123.85335 +827,2.6775181,206.8682 +828,1.6676817,90.22045 +829,2.3976061,128.25735 +830,2.516984,179.83266 +831,2.6944351,160.77606 +832,2.5372987,154.6149 +833,4.3334417,246.89195 +834,0.9843708,74.07173 +835,2.8351805,211.25238 +836,2.5167482,131.34378 +837,1.9628748,96.717865 +838,3.2264814,238.93597 +839,2.7521014,182.6741 +840,1.8764505,104.25073 +841,3.1051955,235.50815 +842,3.0752003,175.3646 +843,1.8239282,103.52702 +844,2.092512,138.48386 +845,2.9706826,217.17024 +846,1.8441542,115.38051 +847,4.061463,249.04253 +848,2.5474849,134.83269 +849,1.5918691,105.20744 +850,1.8886853,118.90994 +851,2.4072642,197.00317 +852,2.0470853,98.99921 +853,2.474955,115.98555 +854,1.808093,99.90234 +855,1.8385348,87.34831 +856,3.4614549,212.77443 +857,3.289338,237.99306 +858,1.7927151,115.42755 +859,2.0398436,125.83418 +860,2.0587156,160.9301 +861,2.2115428,126.46565 +862,2.3606725,111.88037 +863,2.9298599,170.72064 +864,2.684684,156.51611 +865,3.5953863,228.73254 +866,2.315539,176.0083 +867,1.941481,114.7538 +868,2.1257052,129.32504 +869,3.366611,213.64433 +870,3.4972286,220.63557 +871,1.2798991,105.17876 +872,1.7156942,109.288864 +873,3.214073,220.95523 +874,1.1822649,71.20828 +875,2.9311736,202.08554 +876,3.1530218,214.67525 +877,2.826494,188.66199 +878,2.3988235,159.74904 +879,1.8355873,94.75213 +880,2.9371495,220.79778 +881,1.8721864,119.938034 +882,3.546993,236.02493 +883,2.4867394,176.23868 +884,2.65199,196.22034 +885,2.4724476,163.39993 +886,2.1302264,131.32523 +887,1.6461036,98.23941 +888,2.1772377,105.50893 +889,2.8598003,181.73073 +890,2.3158662,197.88405 +891,1.7578808,77.289665 +892,2.0604916,117.16753 +893,3.1758876,213.94513 +894,2.26617,155.69022 +895,2.69269,172.17245 +896,2.3150787,151.8563 +897,2.746129,177.9828 +898,2.3511226,130.52646 +899,1.6035317,95.20455 +900,2.1538675,95.14838 +901,2.1075685,119.08378 +902,2.7288578,173.69574 +903,1.8556783,114.98941 +904,3.0094419,219.17514 +905,3.1784885,214.33406 +906,1.8299861,102.88334 +907,2.715913,204.00041 +908,2.638188,151.2775 +909,1.9943314,133.46716 +910,2.158716,145.22287 +911,1.7422276,120.45285 +912,2.5885108,167.89053 +913,2.7852786,207.58607 +914,2.058637,117.22633 +915,1.9852976,97.6314 +916,2.9135005,171.88322 +917,2.284827,125.39082 +918,3.0484424,225.16983 +919,2.881353,175.51633 +920,2.3839529,134.28448 +921,2.9552348,223.41414 +922,2.7935185,187.12057 +923,2.057205,143.47708 +924,2.1439557,160.02524 +925,2.8781104,160.35342 +926,2.8320222,178.2919 +927,3.0133965,185.5932 +928,1.923046,116.67253 +929,2.142843,138.28668 +930,2.7252576,142.54694 +931,3.2420957,191.63957 +932,2.7695045,204.96318 +933,2.7556868,197.38483 +934,2.7578971,189.00156 +935,1.603425,105.66738 +936,4.0258203,246.87259 +937,2.6546261,199.54153 +938,2.3977044,138.49774 +939,2.3252695,172.09877 +940,3.3713288,230.11478 +941,2.757289,154.94695 +942,2.5459008,127.66222 +943,2.4311028,169.80847 +944,1.9584373,92.238365 +945,3.4849513,225.69545 +946,2.756508,187.93811 +947,2.0970244,128.07675 +948,2.6317945,200.94084 +949,3.8216636,242.26608 +950,2.262782,122.33086 +951,2.9475982,223.62428 +952,3.0994537,223.29651 +953,2.6435604,197.2364 +954,1.8142765,109.76402 +955,1.7931788,108.51814 +956,3.4959953,223.10594 +957,1.6995366,85.16164 +958,2.6142118,194.73901 +959,2.5190635,184.85258 +960,1.9431775,103.04782 +961,2.0012884,141.88821 +962,3.037332,208.78276 +963,2.3586903,145.7357 +964,3.1610875,224.03198 +965,1.4888593,83.28184 +966,3.2066972,215.08943 +967,3.22219,239.26978 +968,1.9814681,89.220055 +969,2.04611,116.32814 +970,2.0006456,120.552086 +971,2.4422,167.61377 +972,3.2425108,194.56673 +973,2.3191147,117.89192 +974,2.4036481,142.45026 +975,3.6705275,233.57303 +976,3.2120461,247.4265 +977,3.427094,211.89653 +978,2.6977816,171.72049 +979,1.6129655,94.594635 +980,1.9849343,100.896935 +981,4.3687277,250.00363 +982,3.1524167,211.19907 +983,2.2222931,154.43156 +984,2.8139994,181.46341 +985,2.3682008,122.0094 +986,2.2469776,153.48267 +987,2.1371202,116.99017 +988,1.7731578,109.582184 +989,2.7564108,219.27643 +990,2.0989008,127.21912 +991,3.195146,226.27025 +992,2.34858,109.28339 +993,2.3316581,121.03596 +994,3.0662284,188.48044 +995,2.665778,167.6088 +996,2.799071,174.34901 +997,3.6871135,246.06726 +998,2.6042495,191.83809 +999,2.5719054,162.17197 +1000,2.3892748,155.29953 +1001,2.1241155,129.14972 +1002,2.7799726,187.46243 +1003,1.7524145,102.123535 +1004,2.3217049,168.99527 +1005,2.271235,139.35165 +1006,1.9593472,98.890564 +1007,2.996292,215.00139 +1008,1.7849677,94.62421 +1009,3.074052,226.90175 +1010,2.7581177,165.3488 +1011,2.4686112,170.59067 +1012,1.8145607,109.36511 +1013,2.5999522,214.24602 +1014,1.7056012,95.15573 +1015,3.30715,170.9829 +1016,2.9572275,189.95299 +1017,1.7373583,91.75553 +1018,3.1607833,223.2196 +1019,3.1902804,212.3318 +1020,2.8365936,202.09528 +1021,1.7608764,106.38935 +1022,2.4176822,135.85522 +1023,3.0750506,185.90298 +1024,2.4649818,114.68857 +1025,2.7206976,156.84406 +1026,3.8385532,244.67326 +1027,1.8522716,89.31249 +1028,2.6133332,207.54962 +1029,3.1079571,218.99266 +1030,3.5180871,240.4364 +1031,2.9176881,222.49768 +1032,1.9382612,115.76288 +1033,2.209931,113.20679 +1034,2.0885441,131.47647 +1035,2.6193397,171.10638 +1036,2.6732001,141.39392 +1037,2.8712144,185.39012 +1038,2.266725,130.49583 +1039,1.4046077,81.02806 +1040,1.7608392,100.12726 +1041,2.6767318,221.82576 +1042,2.744222,183.08612 +1043,3.144222,191.04593 +1044,2.313596,131.16185 +1045,2.3697603,114.726555 +1046,1.7282801,93.99829 +1047,2.079146,140.96436 +1048,2.017712,102.721954 +1049,1.8733122,124.47958 +1050,1.7870331,118.89554 +1051,1.995332,125.090775 +1052,2.2899919,155.37773 +1053,2.1634939,126.984146 +1054,3.002873,223.97594 +1055,2.0052252,134.29703 +1056,3.415774,224.49007 +1057,3.3734345,220.7671 +1058,1.4313664,79.25989 +1059,3.4227042,227.0629 +1060,2.3000565,125.31516 +1061,2.8605654,198.6639 +1062,2.781279,187.52362 +1063,2.007361,137.76266 +1064,4.093289,248.32158 +1065,2.3385415,136.50896 +1066,3.06795,204.04918 +1067,1.8856165,95.80323 +1068,2.2450018,136.07791 +1069,4.7384443,250.99905 +1070,2.8346808,205.63889 +1071,1.9483815,105.10829 +1072,3.1207366,195.96548 +1073,3.2277792,221.4374 +1074,2.6921854,198.03464 +1075,2.4138503,184.3794 +1076,2.1673522,117.22193 +1077,3.3891542,225.21083 +1078,2.2058234,160.35309 +1079,2.4035573,147.26611 +1080,1.9606199,158.64557 +1081,1.2192969,85.8896 +1082,2.6353412,150.06604 +1083,2.1343017,134.3385 +1084,2.6830316,157.5956 +1085,2.811394,170.84555 +1086,2.516721,135.81703 +1087,1.9776555,120.80798 +1088,2.5956829,162.69904 +1089,2.4724746,186.0518 +1090,2.6054168,175.15031 +1091,1.3646436,77.283775 +1092,2.6823144,190.73296 +1093,2.488587,137.86433 +1094,3.2016037,220.4071 +1095,2.088666,145.42792 +1096,2.2321522,122.32571 +1097,1.7153122,88.41057 +1098,2.5007067,141.74982 +1099,2.2331004,113.17522 +1100,3.575787,221.23422 +1101,3.3980913,215.68501 +1102,3.5697663,235.0764 +1103,3.0444086,227.12126 +1104,3.8337986,232.92538 +1105,1.6347789,96.83423 +1106,2.0343208,102.71685 +1107,2.8894308,155.08017 +1108,2.3293357,163.66309 +1109,2.0839949,123.18423 +1110,3.7062485,241.7862 +1111,2.1389737,113.33226 +1112,2.6884675,159.73859 +1113,1.5068392,76.4131 +1114,3.4000556,239.82178 +1115,1.9436415,93.6729 +1116,2.4449408,166.88551 +1117,2.6201477,180.02719 +1118,2.3534923,163.81262 +1119,1.810106,93.03934 +1120,2.9275165,214.26628 +1121,2.6412768,167.4558 +1122,2.1142867,113.57394 +1123,3.5645785,235.29698 +1124,3.5234315,232.00545 +1125,2.0168614,119.82306 +1126,2.1923354,135.72957 +1127,2.528074,162.57288 +1128,3.3442984,229.54991 +1129,2.0319717,126.807884 +1130,2.6365256,158.98878 +1131,2.3435974,177.465 +1132,2.5948267,130.86823 +1133,2.447338,174.29681 +1134,1.833154,102.10997 +1135,1.6118315,101.1927 +1136,2.69983,129.73538 +1137,3.4878,225.9223 +1138,3.959888,242.21242 +1139,2.6257505,188.64072 +1140,4.409195,248.21548 +1141,3.1617846,230.84784 +1142,2.4293005,165.74112 +1143,2.354798,167.9358 +1144,2.7598054,184.336 +1145,2.0489097,159.25146 +1146,1.8649247,132.0807 +1147,2.3351972,124.37584 +1148,3.8573654,235.22131 +1149,2.827903,189.86673 +1150,2.3068264,101.49722 +1151,4.0605936,248.998 +1152,1.9719374,135.40018 +1153,1.5360796,71.10901 +1154,2.91997,200.7212 +1155,3.2932143,231.86436 +1156,2.406836,189.38815 +1157,2.450928,135.33609 +1158,3.5202549,215.26381 +1159,2.1544805,175.45448 +1160,2.6881185,206.58548 +1161,2.4850726,175.94145 +1162,2.3390753,133.2508 +1163,2.5741982,165.79472 +1164,1.9425826,119.789116 +1165,3.5862262,237.24162 +1166,1.638433,97.8797 +1167,2.4453406,199.08209 +1168,2.1492567,132.12398 +1169,2.5418408,192.39116 +1170,2.6546865,184.74432 +1171,3.7298558,234.2602 +1172,2.79332,177.55061 +1173,2.2012324,118.64421 +1174,2.7196565,183.75755 +1175,2.3564014,138.21918 +1176,1.6306243,88.383484 +1177,3.3171158,223.23158 +1178,2.4545636,151.95688 +1179,2.1381943,108.47006 +1180,1.5922339,85.71751 +1181,3.5510678,209.33476 +1182,2.0881157,109.72475 +1183,2.9922364,172.30254 +1184,1.6808147,107.97575 +1185,3.064955,193.30614 +1186,2.6072783,199.23729 +1187,1.9377291,127.53566 +1188,3.3131313,228.5287 +1189,3.6357017,240.6431 +1190,2.4625316,130.38945 +1191,3.04531,207.60728 +1192,1.4135506,80.240974 +1193,2.3159688,155.2195 +1194,1.3584795,84.23955 +1195,2.408623,162.03894 +1196,1.9685856,98.73157 +1197,2.1136413,168.5521 +1198,2.6907883,201.58182 +1199,2.9726639,202.16422 +1200,3.0192323,222.70453 +1201,2.989143,188.39896 +1202,2.9477937,225.57549 +1203,2.0192394,139.42421 +1204,2.023238,111.05543 +1205,2.7837186,220.3589 +1206,1.9379475,124.160904 +1207,2.5042794,154.57 +1208,2.211556,154.1203 +1209,3.11168,223.93845 +1210,2.5358956,138.3539 +1211,2.546585,114.35663 +1212,1.5616125,76.092415 +1213,4.194555,237.0438 +1214,2.9199042,206.59547 +1215,2.596156,199.52113 +1216,2.4075756,157.82697 +1217,2.4295769,125.099045 +1218,2.4520905,163.76341 +1219,2.6595182,170.86502 +1220,2.8944163,206.37184 +1221,2.7694209,175.6182 +1222,2.1841812,168.63904 +1223,2.7304888,170.53888 +1224,2.8622625,182.49037 +1225,3.2911055,212.32541 +1226,3.3725348,234.17328 +1227,2.1657608,111.232056 +1228,1.7682855,125.27641 +1229,3.3525324,235.65636 +1230,2.4182353,154.28569 +1231,2.8152657,208.47116 +1232,2.469678,152.37312 +1233,3.3012383,229.79729 +1234,1.7455171,86.6483 +1235,2.0989747,143.38443 +1236,2.1848338,140.9191 +1237,1.4797924,105.77914 +1238,2.0374472,109.624855 +1239,2.1768997,136.06964 +1240,2.6485226,199.75282 +1241,3.781971,241.27248 +1242,3.3721995,209.31177 +1243,3.1575375,209.82777 +1244,1.6949939,96.66885 +1245,1.6406723,104.05669 +1246,2.1495454,123.85858 +1247,2.039901,138.4859 +1248,1.6025802,75.86397 +1249,3.574491,228.87593 +1250,1.458462,109.57394 +1251,1.9719279,106.24542 +1252,2.163074,121.26317 +1253,2.559585,154.90952 +1254,2.2651017,149.54134 +1255,1.8553249,89.8216 +1256,2.7156816,169.79492 +1257,2.7812972,156.4502 +1258,1.8745873,89.175156 +1259,1.819888,93.28068 +1260,2.030511,169.3714 +1261,1.7532498,117.246735 +1262,1.8692923,93.95245 +1263,2.3554978,121.654526 +1264,1.7151387,88.23394 +1265,2.3045015,140.71686 +1266,2.0902882,174.46649 +1267,2.249255,139.11655 +1268,3.7906983,240.744 +1269,2.0569558,88.463745 +1270,2.5160537,144.3098 +1271,2.0856075,141.7457 +1272,2.1525338,134.77669 +1273,2.4302144,101.60477 +1274,2.324909,119.346466 +1275,2.4105022,114.67945 +1276,1.8507417,107.21312 +1277,2.2953558,166.75793 +1278,2.8006835,165.4773 +1279,3.5061948,230.43242 +1280,2.1038888,138.07097 +1281,2.426947,115.36865 +1282,2.8052673,197.75409 +1283,3.143823,226.54054 +1284,2.3990607,190.71722 +1285,2.153954,142.79733 +1286,2.1121092,123.80286 +1287,3.0617795,226.88834 +1288,2.705381,184.93889 +1289,1.3435628,79.46898 +1290,2.193626,103.385925 +1291,3.0787272,229.99887 +1292,2.24432,173.95828 +1293,1.6528207,82.73645 +1294,1.9787709,114.9279 +1295,3.1633844,232.24124 +1296,2.7012093,148.52084 +1297,3.11553,175.20529 +1298,3.672036,245.66246 +1299,3.7105193,241.52312 +1300,3.08637,231.50378 +1301,1.7681612,86.03417 +1302,2.9746547,229.3531 +1303,3.6361256,230.46136 +1304,2.4358532,107.7086 +1305,2.7467127,166.71451 +1306,2.0256593,126.789566 +1307,5.3150682,254.42719 +1308,2.2290537,116.57317 +1309,2.148981,146.2265 +1310,2.2048643,142.93457 +1311,3.4466658,222.64838 +1312,1.3453366,78.39459 +1313,3.207662,225.21524 +1314,2.2005537,129.07129 +1315,3.4361415,231.35776 +1316,3.0266175,225.5906 +1317,2.986257,194.78455 +1318,3.7580566,236.45952 +1319,3.1223829,205.611 +1320,1.998898,128.92084 +1321,3.5102124,241.94693 +1322,2.7745404,184.19958 +1323,1.7588346,99.67113 +1324,2.7677503,194.46397 +1325,1.8131605,110.660446 +1326,2.8685946,206.22343 +1327,2.427652,154.80399 +1328,1.8289697,133.98929 +1329,2.8679223,201.37978 +1330,3.5340037,236.1017 +1331,2.3393478,133.20389 +1332,1.890521,96.04161 +1333,1.9123629,100.9241 +1334,3.5507843,238.39737 +1335,1.3574774,77.45239 +1336,3.133332,187.75867 +1337,1.8209774,119.63957 +1338,2.2011237,148.52658 +1339,2.3417504,168.03235 +1340,3.1007335,224.62299 +1341,2.9726355,174.44977 +1342,2.3488224,140.91971 +1343,2.8011003,211.74062 +1344,2.023053,115.882614 +1345,2.6153088,211.65892 +1346,2.9244251,232.63745 +1347,2.0931282,142.00766 +1348,3.0436587,231.29752 +1349,3.172602,216.49197 +1350,2.6867385,161.62547 +1351,3.2923326,224.186 +1352,2.242173,152.88799 +1353,1.9548209,106.545975 +1354,1.2517182,75.35265 +1355,2.5056033,172.52545 +1356,2.789699,142.41864 +1357,2.4563022,136.81451 +1358,2.3230505,137.45511 +1359,2.3410819,96.764656 +1360,3.4432502,242.3972 +1361,2.4232707,150.70691 +1362,2.810278,178.18234 +1363,1.9339322,97.2731 +1364,2.5316272,153.3418 +1365,2.3510742,163.8805 +1366,2.0758684,106.12609 +1367,1.6111243,88.91342 +1368,2.4155688,117.781586 +1369,1.7808697,155.00919 +1370,2.7884204,203.20654 +1371,1.7891079,91.17219 +1372,2.0139487,109.147964 +1373,3.1228871,204.17767 +1374,2.72448,198.67627 +1375,1.4019592,78.3535 +1376,2.789223,168.56033 +1377,2.8662283,195.54639 +1378,2.0951083,107.43814 +1379,2.9759312,195.15321 +1380,3.0445476,217.48222 +1381,2.6097195,130.62585 +1382,1.8676137,144.38492 +1383,2.166616,162.42516 +1384,2.9405365,183.84454 +1385,2.251927,160.10382 +1386,3.1728683,225.31473 +1387,1.2965473,80.39906 +1388,2.161755,124.0096 +1389,2.7824583,143.46548 +1390,2.1383796,142.69102 +1391,2.3042462,142.42448 +1392,2.400588,185.61694 +1393,2.2747865,104.07151 +1394,2.0612438,117.79816 +1395,2.5227928,167.1113 +1396,2.074932,101.539536 +1397,3.5746784,242.8554 +1398,1.9959525,106.0972 +1399,2.191873,135.28383 +1400,1.7244847,98.1816 +1401,2.4200213,152.13837 +1402,3.2533305,228.4443 +1403,3.6270843,248.25914 +1404,2.5619073,180.58624 +1405,1.9085513,139.02014 +1406,3.3600438,231.32054 +1407,2.159453,113.185646 +1408,2.9259546,212.93509 +1409,3.1924484,229.50871 +1410,3.0268111,203.64188 +1411,3.025063,217.01335 +1412,2.3678613,115.47073 +1413,1.8210406,87.56189 +1414,2.179328,120.64 +1415,4.487629,251.74115 +1416,1.5532606,89.94888 +1417,2.8187547,154.80948 +1418,2.2985816,163.24487 +1419,2.4529529,142.23389 +1420,3.2937388,230.70511 +1421,2.0622544,108.83087 +1422,1.7395794,110.784164 +1423,2.087914,116.59224 +1424,2.1107802,100.13832 +1425,1.9810772,105.300995 +1426,1.8962204,102.58787 +1427,3.4222178,217.6831 +1428,1.981257,96.805466 +1429,3.3024764,210.54105 +1430,2.5225406,193.71913 +1431,1.5962104,104.38396 +1432,2.7064214,196.4854 +1433,2.150473,114.48076 +1434,2.3927083,167.3869 +1435,2.6113954,198.94867 +1436,2.4256926,128.80614 +1437,3.0517168,229.54594 +1438,3.6471732,216.66107 +1439,2.3056169,133.68063 +1440,2.0148482,144.31413 +1441,3.5692677,239.8728 +1442,2.1545439,125.1149 +1443,2.0648963,90.67674 +1444,2.8613412,135.49625 +1445,2.5893345,110.83284 +1446,1.7846735,81.465256 +1447,2.4969199,208.91978 +1448,1.4690678,82.80664 +1449,3.6576912,227.53714 +1450,2.2890782,160.05304 +1451,3.1915114,226.76129 +1452,3.5458372,226.2396 +1453,2.6783412,165.67679 +1454,2.9789968,206.35106 +1455,2.3589127,140.91434 +1456,2.1754947,137.0443 +1457,2.336182,155.88054 +1458,2.0333064,150.76587 +1459,2.109273,133.11987 +1460,1.679711,89.61635 +1461,1.7918122,93.33775 +1462,2.639002,178.29918 +1463,3.2545178,222.49913 +1464,2.1296031,146.57056 +1465,2.0876174,109.787865 +1466,2.5841415,176.57648 +1467,2.7757812,226.31825 +1468,4.2607775,248.39328 +1469,2.2259436,106.51841 +1470,2.394496,129.76096 +1471,3.437762,239.66269 +1472,1.7970434,87.18199 +1473,2.2490706,133.95776 +1474,2.2763278,127.56986 +1475,2.8781314,208.86116 +1476,2.2502813,115.70934 +1477,2.6451592,194.56177 +1478,2.1832871,120.22249 +1479,2.210299,155.12341 +1480,1.8796043,95.15361 +1481,2.5294735,112.31703 +1482,2.4138842,151.58801 +1483,2.267584,103.00587 +1484,2.583047,153.53345 +1485,3.4636493,217.63347 +1486,2.0251462,129.57486 +1487,2.319925,145.39062 +1488,1.9624307,108.66478 +1489,3.1568315,225.44243 +1490,2.5863402,173.60507 +1491,2.319466,124.00453 +1492,2.2481606,142.43085 +1493,1.763436,101.13257 +1494,4.513607,249.4775 +1495,1.616446,79.45548 +1496,2.8552392,177.84552 +1497,2.4613252,133.70656 +1498,3.1330323,207.44183 +1499,2.0686154,119.77623 +1500,2.031225,122.36334 +1501,2.1813502,107.09238 +1502,4.360952,250.29982 +1503,2.1846094,117.08888 +1504,2.7339175,161.11453 +1505,3.1873343,217.35165 +1506,2.092739,93.28886 +1507,3.163881,207.33363 +1508,2.570682,179.29994 +1509,3.7056623,240.99808 +1510,1.8263203,122.186554 +1511,3.3312201,245.74573 +1512,2.6873899,188.58292 +1513,3.2113957,203.72581 +1514,2.7780783,233.39516 +1515,1.5172522,85.372955 +1516,2.7956543,200.03386 +1517,2.7721536,198.56798 +1518,2.8797708,188.11505 +1519,3.6865513,240.8891 +1520,1.4353545,83.10256 +1521,1.5502673,81.9555 +1522,1.4959229,80.57883 +1523,2.2948337,139.88248 +1524,3.4546146,238.29832 +1525,2.4732862,194.48445 +1526,2.4022622,169.19946 +1527,3.0761533,212.79883 +1528,1.5250074,95.159645 +1529,1.8330519,109.270294 +1530,2.2327952,138.14943 +1531,2.7207565,196.3808 +1532,2.2666838,119.24833 +1533,1.6402974,98.32272 +1534,3.0104856,229.17172 +1535,2.053854,90.0619 +1536,3.5524068,233.22142 +1537,2.0076494,141.44382 +1538,2.0791628,115.400024 +1539,3.2099593,237.5368 +1540,4.3594503,247.62401 +1541,1.9930136,104.79591 +1542,2.1578593,113.38116 +1543,2.4653592,133.38815 +1544,2.867401,202.32149 +1545,1.845791,86.727005 +1546,2.464234,130.02802 +1547,2.1901567,161.1152 +1548,1.6175182,91.18968 +1549,2.7375774,204.17122 +1550,3.8537812,243.84628 +1551,2.222133,140.21983 +1552,2.0263517,114.31891 +1553,1.7923647,121.25368 +1554,3.847873,239.65276 +1555,1.6260121,82.80984 +1556,2.4531314,171.33719 +1557,3.940062,249.99545 +1558,3.1099913,234.18471 +1559,3.0879874,203.21494 +1560,2.4646447,180.91293 +1561,2.1661675,98.24361 +1562,3.4034467,228.04066 +1563,2.685216,162.98453 +1564,2.2320447,98.50222 +1565,2.1802726,119.91289 +1566,3.056801,222.27025 +1567,1.883077,127.1517 +1568,1.977777,136.82089 +1569,1.9076576,113.883484 +1570,2.6365116,153.28897 +1571,3.0404315,240.34094 +1572,2.6574223,126.59711 +1573,1.8791153,130.46252 +1574,1.5347493,87.276596 +1575,2.445062,193.01097 +1576,2.468779,166.57944 +1577,4.38433,247.21431 +1578,1.5663551,92.38371 +1579,1.7536844,105.40734 +1580,2.901523,184.34 +1581,1.444538,87.01894 +1582,3.2908425,236.91718 +1583,2.7470415,189.53323 +1584,2.785849,176.00172 +1585,2.2298827,145.5497 +1586,2.3297908,134.73718 +1587,2.432074,162.45155 +1588,2.7425897,132.09784 +1589,3.831756,247.07578 +1590,2.0903072,123.92178 +1591,1.8498836,145.4315 +1592,2.4463305,191.03648 +1593,1.9873085,119.21356 +1594,2.6775146,170.4884 +1595,3.4863477,236.95097 +1596,1.9450548,102.7307 +1597,2.3809123,141.47049 +1598,2.8942914,190.87326 +1599,1.9356756,101.95743 +1600,2.1364923,111.917336 +1601,2.389505,162.3816 +1602,2.2567744,175.91788 +1603,2.2656608,116.878006 +1604,1.6382482,106.79098 +1605,1.9741569,127.64412 +1606,2.092969,126.33335 +1607,1.7437458,109.443954 +1608,2.5464768,181.0286 +1609,2.1742883,149.79346 +1610,2.5129492,193.54688 +1611,2.0934436,90.20612 +1612,2.4669547,116.94701 +1613,1.9874133,130.74918 +1614,3.085468,223.10103 +1615,2.052669,93.750534 +1616,1.5480589,98.73189 +1617,4.721802,252.35466 +1618,3.9688447,240.25269 +1619,3.1042724,211.30067 +1620,2.8445277,203.75003 +1621,2.9130952,191.17258 +1622,3.7880034,241.46988 +1623,1.924421,120.51044 +1624,3.3755288,201.05168 +1625,2.6443186,157.0086 +1626,2.8071694,175.12447 +1627,1.7299739,99.49332 +1628,2.650135,204.53044 +1629,1.5618824,75.26127 +1630,2.0549183,125.15723 +1631,2.6737666,172.8445 +1632,2.867561,231.37279 +1633,2.6025424,200.30449 +1634,2.681069,175.63489 +1635,2.4574678,171.62518 +1636,2.563598,190.05698 +1637,2.7607002,168.18665 +1638,1.8603942,125.09497 +1639,2.6270068,152.04807 +1640,2.1011467,134.01035 +1641,2.441722,197.77888 +1642,2.4648724,175.62593 +1643,2.7236068,210.48473 +1644,2.080494,147.50133 +1645,3.3929112,216.16594 +1646,3.1300154,211.77129 +1647,4.2331014,249.7626 +1648,2.8408527,188.69446 +1649,2.8314211,174.27754 +1650,2.6352813,169.2307 +1651,1.6864245,77.810844 +1652,1.9408038,136.14569 +1653,1.7952602,85.26106 +1654,2.4187238,153.79681 +1655,2.7728217,188.71196 +1656,2.1247756,112.38732 +1657,2.7964547,196.66304 +1658,2.409236,136.3522 +1659,4.2168283,250.85909 +1660,2.4236674,156.91232 +1661,2.5360198,129.58618 +1662,3.4803267,237.20317 +1663,3.9774082,246.53029 +1664,2.5681784,187.98947 +1665,2.7937477,157.09937 +1666,2.5375404,150.09634 +1667,2.5667615,185.37236 +1668,3.9059823,240.40344 +1669,2.0479052,121.572174 +1670,3.9247437,247.90067 +1671,2.0952468,170.62317 +1672,2.591122,160.43002 +1673,1.9540721,107.36293 +1674,2.445876,134.51813 +1675,2.3713284,118.48785 +1676,2.8643126,203.44208 +1677,2.787504,192.72333 +1678,2.920384,223.73663 +1679,2.6626594,172.12762 +1680,2.4460592,163.86514 +1681,2.8737228,185.27826 +1682,2.3864872,163.2222 +1683,3.356726,231.7949 +1684,2.6040628,152.64589 +1685,3.5804088,233.62599 +1686,1.7018421,128.97711 +1687,2.6515198,178.10889 +1688,1.9464262,109.2753 +1689,3.6631272,242.09076 +1690,2.0344691,137.72083 +1691,3.3654082,218.39911 +1692,3.1475189,232.38675 +1693,2.4807916,175.11076 +1694,2.2757885,161.97243 +1695,2.3106666,193.26971 +1696,2.0139155,89.87937 +1697,1.38519,76.26424 +1698,2.8867316,173.47595 +1699,2.6598544,199.28189 +1700,3.672523,242.9966 +1701,3.4322488,232.95259 +1702,1.8902401,118.68135 +1703,1.6783267,86.355865 +1704,2.8653283,184.72653 +1705,1.8428767,114.4826 +1706,2.0245795,101.42534 +1707,3.4253263,240.3371 +1708,2.9541085,211.31682 +1709,2.1216998,111.088005 +1710,3.6123319,247.60701 +1711,2.189691,162.18924 +1712,2.9096296,179.86276 +1713,3.5472946,236.86769 +1714,2.3846972,127.499985 +1715,1.8150436,153.41298 +1716,1.9079483,102.798416 +1717,1.5081823,82.219795 +1718,1.764601,113.8655 +1719,2.4832914,197.55373 +1720,2.1661007,126.434204 +1721,2.4633493,151.972 +1722,3.5715199,244.9507 +1723,2.1193647,110.571304 +1724,2.0069315,106.57685 +1725,1.6832091,111.096375 +1726,1.9188652,133.27545 +1727,2.4702823,147.29825 +1728,3.0028052,168.47324 +1729,3.2465825,201.47285 +1730,2.1376686,114.84883 +1731,2.18341,145.27435 +1732,2.1922684,112.33887 +1733,1.4769604,73.50228 +1734,1.6507976,88.419495 +1735,2.107934,128.90561 +1736,1.5325792,108.58888 +1737,4.149588,249.40887 +1738,2.406459,138.68591 +1739,2.88764,200.19583 +1740,2.9419167,152.98294 +1741,2.8677769,204.94434 +1742,1.5780561,92.238235 +1743,2.2060347,124.49471 +1744,2.2822416,111.55301 +1745,2.0700948,90.34323 +1746,2.8506775,199.8164 +1747,3.1391604,222.48978 +1748,2.382925,171.57233 +1749,2.3776765,153.09117 +1750,3.1982892,219.2644 +1751,2.0823328,120.21556 +1752,2.3969045,169.44858 +1753,1.5118886,77.79789 +1754,2.112011,145.0872 +1755,2.4847064,165.55869 +1756,2.2072005,160.99298 +1757,2.969832,233.12102 +1758,1.869655,140.32788 +1759,1.5679008,79.03916 +1760,2.2057617,164.04218 +1761,3.1910536,205.37164 +1762,2.461309,145.3135 +1763,2.433763,126.79283 +1764,2.592168,186.29794 +1765,2.615045,152.93945 +1766,3.5370805,231.11188 +1767,1.7311499,105.348114 +1768,3.706086,230.3406 +1769,2.665836,190.97876 +1770,2.0628922,135.04086 +1771,2.6103835,184.94336 +1772,2.0999465,115.26796 +1773,2.1513994,165.29213 +1774,3.5746448,239.1079 +1775,1.9831549,117.51037 +1776,2.2202897,154.98422 +1777,1.9246615,123.886536 +1778,1.6758846,107.52263 +1779,2.2652812,107.12178 +1780,2.4070673,195.77394 +1781,2.0485783,122.14464 +1782,1.650622,90.48087 +1783,2.293981,118.18375 +1784,3.2457137,231.49413 +1785,2.0524883,107.42595 +1786,1.7546542,98.624695 +1787,1.7267796,125.14128 +1788,2.3559148,153.35284 +1789,2.2018037,166.64508 +1790,2.4796457,137.91853 +1791,3.334345,243.17705 +1792,2.2777624,163.20206 +1793,2.1511664,149.54755 +1794,2.8459094,196.75807 +1795,2.9218628,186.49982 +1796,2.0968285,110.48524 +1797,2.4835067,113.89432 +1798,3.740025,219.77669 +1799,3.4391923,240.644 +1800,2.3483155,120.11 +1801,3.03314,211.10994 +1802,2.3533735,158.62154 +1803,4.801441,254.00089 +1804,2.6610532,174.20447 +1805,2.9477928,197.72838 +1806,2.8385673,208.61987 +1807,2.8901548,216.96938 +1808,3.5081677,241.7911 +1809,4.0061245,239.6242 +1810,1.9267027,135.17117 +1811,2.80144,141.15265 +1812,2.3223286,170.52489 +1813,4.0939813,247.67482 +1814,4.533345,250.32098 +1815,2.8314958,219.92413 +1816,3.0024848,196.12064 +1817,2.7492418,198.24423 +1818,1.7000767,91.54349 +1819,2.8435614,204.87543 +1820,1.8726444,103.650116 +1821,2.7268555,163.387 +1822,1.266729,92.32922 +1823,1.9909158,115.38255 +1824,2.3288088,123.154816 +1825,1.6280267,97.11751 +1826,3.5936003,239.14333 +1827,2.5426989,180.50534 +1828,1.7472653,94.08429 +1829,1.9863397,92.14327 +1830,2.7325125,185.46071 +1831,2.1516593,112.66858 +1832,2.4237516,208.14766 +1833,2.4746974,168.82977 +1834,1.3737466,96.07704 +1835,3.6880858,243.93506 +1836,2.8316357,173.85709 +1837,3.7585187,250.38588 +1838,1.8045465,130.1579 +1839,4.0319033,248.87752 +1840,2.1389031,108.232956 +1841,4.463581,253.74461 +1842,2.1625903,126.72646 +1843,3.6203732,242.92433 +1844,1.8013808,95.00389 +1845,2.3491054,121.6874 +1846,2.506286,181.07936 +1847,1.834224,128.79451 +1848,1.880274,98.39627 +1849,2.084544,122.72096 +1850,1.822003,98.4423 +1851,2.019487,105.62184 +1852,2.6479878,186.14294 +1853,1.8284678,114.32992 +1854,2.3594685,143.67825 +1855,3.1204119,199.51225 +1856,2.4544322,152.85294 +1857,3.9376037,249.37569 +1858,3.2329974,214.90901 +1859,2.6828833,157.93112 +1860,1.5331943,92.532196 +1861,2.4719794,139.79028 +1862,1.93536,100.1995 +1863,2.6260457,152.78503 +1864,1.4888862,86.08925 +1865,2.7430458,172.36887 +1866,1.6828182,125.55896 +1867,2.0988123,85.197876 +1868,3.088718,206.35904 +1869,2.9027333,200.68648 +1870,2.7650483,160.71109 +1871,1.2017239,70.28776 +1872,2.6692584,181.05594 +1873,2.811795,199.62244 +1874,2.6387258,133.49286 +1875,2.5447664,156.98456 +1876,4.503401,250.11758 +1877,2.6146553,141.23172 +1878,1.7919488,104.57385 +1879,4.0903955,247.9058 +1880,1.8596749,102.11435 +1881,2.3645928,138.65573 +1882,2.2987535,123.50959 +1883,3.1221766,191.66711 +1884,3.8386295,241.7017 +1885,1.9961331,115.12999 +1886,1.5573431,84.08205 +1887,4.049805,251.24353 +1888,1.6372848,105.63629 +1889,2.6008897,178.3348 +1890,3.1945534,211.64641 +1891,3.5328565,228.74707 +1892,2.7488272,174.3182 +1893,2.0972428,125.19868 +1894,3.3095934,203.9737 +1895,3.0526702,204.9597 +1896,2.775585,201.68695 +1897,2.9230075,232.19542 +1898,1.8463477,122.59551 +1899,2.834954,185.499 +1900,2.6432364,192.9025 +1901,2.4928164,146.8589 +1902,2.5280082,174.53352 +1903,2.0998535,135.80609 +1904,1.5608276,91.50845 +1905,2.1162188,150.87296 +1906,1.8127629,125.08415 +1907,3.207532,211.06253 +1908,3.0546842,206.78271 +1909,2.087163,117.25456 +1910,2.1286197,135.14795 +1911,1.128849,74.369156 +1912,2.6640556,197.04643 +1913,1.7247488,107.37097 +1914,2.2573884,126.310524 +1915,2.3327234,166.7095 +1916,2.6249251,166.20293 +1917,2.606582,172.57208 +1918,3.2917624,216.3347 +1919,4.1073627,247.05658 +1920,2.087025,127.57297 +1921,2.5076292,157.80533 +1922,2.0852945,103.796936 +1923,4.0864906,249.01938 +1924,2.5781984,155.56544 +1925,2.4554203,114.871475 +1926,2.0664797,131.6139 +1927,2.61836,170.89093 +1928,2.2024007,151.23639 +1929,2.5034752,184.4314 +1930,2.3499024,103.73642 +1931,2.0483198,143.41324 +1932,2.101344,115.827286 +1933,3.3329327,233.69844 +1934,2.129144,132.35088 +1935,1.9770076,82.027596 +1936,3.1058393,216.39801 +1937,2.477953,139.36526 +1938,2.49981,153.46275 +1939,2.405767,199.35901 +1940,3.6216187,242.63626 +1941,2.4943933,160.9805 +1942,2.4670012,203.05962 +1943,2.3988187,139.08307 +1944,1.7663673,102.995544 +1945,3.3563104,196.12552 +1946,2.4104629,149.043 +1947,2.2605097,147.02287 +1948,2.1703002,121.14906 +1949,3.8280349,238.05933 +1950,1.4262812,80.45806 +1951,3.787908,239.0784 +1952,2.2348647,136.5835 +1953,3.0611665,226.1092 +1954,3.0011163,210.13464 +1955,2.3499713,122.21944 +1956,3.0744598,192.213 +1957,2.5227332,182.15012 +1958,3.3336189,221.81152 +1959,3.497091,234.26929 +1960,2.7106872,204.37276 +1961,1.9779031,124.171875 +1962,2.0858173,125.96007 +1963,1.9081532,121.28377 +1964,1.9256557,109.47293 +1965,2.5821197,131.4736 +1966,2.378937,148.81712 +1967,2.0820248,99.57885 +1968,2.7350574,165.25082 +1969,2.1934361,120.30141 +1970,3.0409102,205.77704 +1971,1.9357835,91.74094 +1972,2.8422766,181.08813 +1973,2.5853639,169.98322 +1974,2.086736,108.3621 +1975,2.237559,108.16828 +1976,1.5547628,76.475 +1977,3.0321958,193.37358 +1978,2.0905852,125.39853 +1979,2.0995433,136.45726 +1980,2.0761104,119.47957 +1981,1.8135269,111.28595 +1982,2.5844665,195.99243 +1983,2.08692,115.14307 +1984,1.769723,100.74513 +1985,1.6916927,95.7026 +1986,2.1439743,158.72124 +1987,2.299562,145.93338 +1988,1.9085377,102.23692 +1989,3.4997761,231.55757 +1990,1.51946,78.68146 +1991,2.988885,215.20772 +1992,1.8710127,119.189514 +1993,2.0258107,122.36539 +1994,1.7813637,104.18648 +1995,2.5032563,137.33926 +1996,2.3202522,178.87772 +1997,3.3072577,214.47754 +1998,3.6787524,236.96098 +1999,2.7693796,173.92612 +2000,2.4160924,128.85107 +2001,1.4336822,82.10747 +2002,2.6950908,181.12482 +2003,3.8365245,236.50797 +2004,3.5162714,225.2417 +2005,2.1080866,121.809525 +2006,1.798267,119.2481 +2007,1.7632729,97.86561 +2008,2.7012334,176.5444 +2009,3.147285,223.26018 +2010,1.4459724,79.13656 +2011,1.9683673,110.673065 +2012,2.5765877,212.07077 +2013,1.4982672,100.19139 +2014,2.536097,156.44098 +2015,3.6507552,220.71704 +2016,2.4235642,177.31015 +2017,2.432701,133.2814 +2018,2.2603216,109.82742 +2019,2.8111615,185.61365 +2020,2.6421244,154.58264 +2021,3.7766967,237.13043 +2022,2.571446,209.85234 +2023,3.912272,245.97725 +2024,2.4525201,158.11285 +2025,3.4607024,185.40506 +2026,2.2618291,105.21361 +2027,2.7076921,148.92014 +2028,2.8951106,208.70485 +2029,2.19551,205.7868 +2030,2.239016,97.39601 +2031,2.6694245,182.6073 +2032,2.5014925,174.15286 +2033,3.1676757,205.4506 +2034,1.2377661,84.97971 +2035,2.3946536,149.6294 +2036,1.9759148,126.55863 +2037,3.721643,247.90602 +2038,2.953105,176.04897 +2039,1.345958,78.05855 +2040,2.315244,143.4776 +2041,2.4442587,146.24544 +2042,1.8458571,87.3347 +2043,1.2955984,85.59345 +2044,4.0568395,247.5802 +2045,2.5937657,173.853 +2046,1.8052253,99.80771 +2047,2.5031123,130.25641 +2048,1.7561789,123.66684 +2049,2.0659606,145.91135 +2050,2.186048,132.54381 +2051,2.8714926,195.9112 +2052,1.9630597,106.22435 +2053,3.135882,206.06862 +2054,2.035457,132.70605 +2055,2.7496865,182.8458 +2056,2.512154,144.55826 +2057,2.9048982,224.89224 +2058,2.562878,156.64453 +2059,2.724474,141.974 +2060,1.7068878,98.15497 +2061,3.2032106,216.9835 +2062,1.9136053,128.0357 +2063,2.9518545,186.43622 +2064,2.6708934,186.28052 +2065,3.9849331,246.53134 +2066,2.5769477,203.44702 +2067,2.987371,222.69693 +2068,2.239962,127.27144 +2069,2.4206707,138.73703 +2070,2.3482578,121.004105 +2071,1.6820819,100.78777 +2072,1.9838005,114.8922 +2073,1.8660522,106.47475 +2074,2.8341713,158.72159 +2075,1.9708288,147.16449 +2076,1.9371854,94.105 +2077,2.954392,211.35074 +2078,2.853656,198.46834 +2079,2.4981322,113.90718 +2080,1.6809775,91.47298 +2081,2.3238883,180.44989 +2082,2.4997535,160.39072 +2083,4.087682,249.65007 +2084,1.538733,83.419655 +2085,1.5603321,85.51729 +2086,3.4298935,232.89714 +2087,2.6468585,131.05927 +2088,1.420822,100.73973 +2089,2.8779798,185.58966 +2090,2.0695624,170.6312 +2091,2.8597584,206.94843 +2092,1.8822792,111.10063 +2093,2.2289062,142.20209 +2094,1.7403362,106.29324 +2095,2.9428892,223.68272 +2096,2.5273807,166.85583 +2097,2.1267266,167.1388 +2098,1.9772974,154.87125 +2099,2.1224165,152.99744 +2100,4.0180273,244.98116 +2101,3.0493581,178.40088 +2102,3.2425103,177.21039 +2103,3.298022,219.6692 +2104,1.4821637,79.98679 +2105,2.538301,128.28433 +2106,2.618867,203.461 +2107,3.374807,217.63193 +2108,2.5710466,152.08664 +2109,1.978636,134.68524 +2110,4.1415,249.79324 +2111,3.9242082,247.26265 +2112,2.3248062,109.84006 +2113,2.3863604,168.38083 +2114,3.1577604,210.71191 +2115,1.8066351,90.04978 +2116,2.499131,133.07355 +2117,2.4189126,196.72536 +2118,2.1898427,109.7348 +2119,1.36085,97.71452 +2120,2.7594845,177.22842 +2121,3.744163,239.16678 +2122,1.8932747,127.8094 +2123,2.3818197,118.50815 +2124,3.3635488,231.30466 +2125,2.1197515,115.4327 +2126,1.3254211,79.186264 +2127,2.0024245,120.61043 +2128,1.7940357,130.38376 +2129,2.8975477,156.28055 +2130,1.1289239,74.88248 +2131,2.7238212,168.54172 +2132,2.0377462,126.04763 +2133,1.9707505,139.01831 +2134,1.3359648,83.32401 +2135,3.218594,233.33055 +2136,1.5154914,90.01347 +2137,3.3256292,229.49197 +2138,2.4896522,149.4783 +2139,2.5605373,176.18262 +2140,2.4179723,136.87424 +2141,2.2753756,140.24805 +2142,2.2084212,123.34863 +2143,2.5761473,186.35803 +2144,2.698905,177.76625 +2145,2.3390899,127.7404 +2146,2.192417,160.85973 +2147,3.0027776,221.05069 +2148,2.872865,205.56708 +2149,1.7502444,123.95752 +2150,2.0680046,148.45123 +2151,3.1369402,229.19545 +2152,1.8066132,77.67909 +2153,3.5697968,231.76016 +2154,2.1409478,153.58948 +2155,3.0546203,195.56128 +2156,2.3933206,161.91347 +2157,1.8601925,124.39689 +2158,2.1398888,108.421524 +2159,2.7157845,216.78954 +2160,2.294215,150.00421 +2161,3.1000922,193.46413 +2162,2.0802054,131.23975 +2163,2.326432,126.91159 +2164,2.3047032,159.80235 +2165,1.7201097,114.04735 +2166,2.9589808,220.0474 +2167,3.281343,215.90367 +2168,2.7715278,161.56445 +2169,1.8781224,123.6438 +2170,3.654255,238.33633 +2171,1.987623,97.947174 +2172,1.7804681,95.17872 +2173,2.3228426,117.26541 +2174,2.2022426,154.91873 +2175,2.9233916,191.45615 +2176,2.889904,178.91086 +2177,3.0271683,209.31099 +2178,4.3888993,253.35333 +2179,3.1149378,222.73045 +2180,1.7945954,107.84821 +2181,3.2055008,194.61961 +2182,3.0595107,223.60532 +2183,3.5269907,241.1166 +2184,2.6725879,158.17534 +2185,2.7659245,222.4429 +2186,2.2836306,158.06573 +2187,2.2918553,120.49484 +2188,2.4483218,166.289 +2189,2.7658198,191.11343 +2190,2.7128117,211.13058 +2191,2.159818,100.75872 +2192,2.1169317,146.8967 +2193,2.0083253,130.8779 +2194,2.6119,172.97058 +2195,2.3726764,115.4017 +2196,4.0981255,247.73567 +2197,2.7616494,183.259 +2198,2.6916401,144.21648 +2199,3.5570621,242.26176 +2200,1.850909,100.59085 +2201,2.269298,168.77895 +2202,1.887192,109.68921 +2203,2.0256524,137.25208 +2204,2.2582052,115.002884 +2205,2.0039117,126.63455 +2206,2.5356402,167.24107 +2207,2.1491992,119.71113 +2208,3.748183,234.60283 +2209,3.3350685,230.27948 +2210,2.8602104,171.43787 +2211,2.6037195,203.45865 +2212,2.7903724,210.68376 +2213,2.1050968,109.064865 +2214,2.7032342,204.3463 +2215,3.0729387,207.47508 +2216,2.5026422,143.68114 +2217,2.424565,174.4819 +2218,3.320117,214.88712 +2219,2.1335704,118.16612 +2220,3.0991502,216.41771 +2221,2.3740323,179.06146 +2222,2.1549153,92.678795 +2223,3.1972375,220.01373 +2224,3.4231699,238.27959 +2225,2.4988546,126.15738 +2226,3.3323889,242.74706 +2227,1.7400672,98.09241 +2228,2.714524,170.72012 +2229,2.507014,183.17377 +2230,2.4355876,139.6751 +2231,2.3312562,145.93271 +2232,1.8701969,101.771454 +2233,2.9034052,172.12439 +2234,2.2835288,150.78827 +2235,2.0083764,130.75069 +2236,2.1568305,121.47789 +2237,1.708901,98.86954 +2238,2.3547845,142.81107 +2239,2.0119925,99.23841 +2240,1.6008734,89.81596 +2241,2.398452,178.99869 +2242,2.1109936,145.79419 +2243,2.7112176,199.9224 +2244,2.250815,138.8875 +2245,2.1154258,108.377975 +2246,2.50701,176.16013 +2247,2.363158,123.69501 +2248,3.8403492,242.1833 +2249,3.2447472,191.78131 +2250,1.6351826,92.58352 +2251,2.3717804,136.41402 +2252,2.696404,163.11108 +2253,1.9325075,156.41798 +2254,2.3471706,112.44214 +2255,2.7132146,167.8721 +2256,3.6933358,228.42761 +2257,2.406929,162.48254 +2258,2.2267208,127.92764 +2259,1.6649424,108.57576 +2260,2.1791873,112.890656 +2261,2.0450459,89.78455 +2262,2.373629,138.47472 +2263,1.3593738,81.85159 +2264,2.2551816,140.05103 +2265,3.7559402,229.9522 +2266,2.7148416,173.9454 +2267,1.7497612,89.921036 +2268,1.4060643,79.657745 +2269,1.7478285,136.15369 +2270,2.9281929,211.10487 +2271,2.727205,176.00296 +2272,2.4602478,184.06267 +2273,1.9673587,123.20359 +2274,2.0976357,113.693924 +2275,2.0131085,121.68723 +2276,2.1394787,161.60143 +2277,2.6537077,187.52213 +2278,2.225101,152.79456 +2279,2.3389554,147.69733 +2280,3.8153248,222.30872 +2281,3.578329,237.97845 +2282,1.9693505,158.46112 +2283,2.759095,197.00446 +2284,2.2014732,127.882904 +2285,1.9429454,99.39052 +2286,1.7106755,81.07981 +2287,2.7492354,180.92862 +2288,2.771931,155.32076 +2289,2.2445486,135.2562 +2290,3.1412613,200.87103 +2291,2.9280856,173.93234 +2292,1.7652223,93.73466 +2293,1.6994154,109.74245 +2294,1.8747383,100.6373 +2295,3.4393039,228.59613 +2296,2.6085267,192.13982 +2297,1.8068477,90.73479 +2298,3.0390506,234.21388 +2299,2.1792474,122.87744 +2300,3.1761937,222.47165 +2301,2.2787938,142.16849 +2302,4.094256,247.73009 +2303,3.5930183,235.06563 +2304,2.0572333,145.86032 +2305,1.3402553,73.97009 +2306,2.168269,101.80246 +2307,1.9206882,164.2429 +2308,2.5916336,162.70801 +2309,2.4296205,191.24078 +2310,2.7831306,209.24655 +2311,2.0884924,99.08424 +2312,1.9207464,82.61961 +2313,2.8872766,219.239 +2314,3.2173173,197.99129 +2315,2.8415165,183.6052 +2316,2.4358544,138.33112 +2317,1.8868806,100.16254 +2318,2.6452916,174.39409 +2319,3.805345,246.49622 +2320,2.24812,112.468124 +2321,2.404173,147.6879 +2322,2.7362878,169.88428 +2323,2.7228613,183.7058 +2324,2.0285852,142.95312 +2325,2.8881946,179.42099 +2326,2.583796,176.18622 +2327,3.2952666,223.17317 +2328,2.5607526,143.62091 +2329,2.894538,195.0747 +2330,1.929368,109.890366 +2331,2.9495268,161.10907 +2332,2.176811,122.31049 +2333,1.5884962,113.99805 +2334,3.5840805,243.04181 +2335,3.6195555,239.6239 +2336,3.2029316,232.14876 +2337,1.9450241,109.533356 +2338,2.0612931,105.837616 +2339,2.2709212,193.1579 +2340,1.7815359,89.34474 +2341,3.5209796,240.18776 +2342,2.2187445,114.069435 +2343,2.5228565,151.88196 +2344,2.0593948,81.37781 +2345,2.4244475,168.15675 +2346,1.8923326,118.60605 +2347,3.5025678,231.95483 +2348,1.6365862,94.41354 +2349,1.6474415,80.89252 +2350,2.2718349,124.74196 +2351,4.041211,246.00714 +2352,2.244627,163.28839 +2353,2.4995348,189.39038 +2354,2.7024,171.86694 +2355,1.9813684,137.35783 +2356,1.9513712,132.32607 +2357,3.2434287,206.15045 +2358,2.3803964,143.87787 +2359,1.8926046,112.33209 +2360,1.867815,93.400215 +2361,2.0764318,114.48313 +2362,3.030497,215.36176 +2363,2.651558,156.55971 +2364,1.5055991,110.60188 +2365,1.8275034,110.35075 +2366,2.1119215,180.17126 +2367,3.045024,193.57831 +2368,2.733237,192.22606 +2369,2.2402902,166.18005 +2370,3.637509,243.44371 +2371,1.9071862,127.78115 +2372,2.7554479,189.47633 +2373,2.9616702,171.85757 +2374,2.5245621,151.87262 +2375,1.6896266,98.57782 +2376,1.7882116,91.11592 +2377,3.5319731,229.79181 +2378,2.3017154,116.45232 +2379,1.8267533,93.782394 +2380,2.157517,93.74838 +2381,2.9159806,220.50906 +2382,2.7449207,202.09729 +2383,1.9481919,100.193344 +2384,2.855076,194.58333 +2385,3.871138,246.87427 +2386,4.457303,251.35403 +2387,1.7923099,100.30584 +2388,2.4430833,145.73465 +2389,2.9545712,211.47572 +2390,2.609316,172.04349 +2391,1.9529859,133.08267 +2392,1.6704538,116.956985 +2393,2.3712568,115.752335 +2394,2.4860306,176.77274 +2395,3.545149,224.9296 +2396,1.6743567,113.41452 +2397,2.8625634,171.46533 +2398,2.859338,218.09021 +2399,2.1373558,139.97498 +2400,3.1361547,202.44624 +2401,2.0233192,134.51462 +2402,1.8212972,137.40636 +2403,2.9902554,176.32343 +2404,1.6145247,122.68674 +2405,3.9354439,235.30612 +2406,1.8801491,104.46832 +2407,2.4482033,190.722 +2408,2.189419,125.88874 +2409,2.2641532,125.10315 +2410,2.6556249,145.37447 +2411,2.2557402,110.60939 +2412,2.943979,218.79117 +2413,2.390428,217.72044 +2414,2.6520963,190.14635 +2415,3.1253154,205.5384 +2416,3.58365,234.713 +2417,2.3621292,122.73294 +2418,1.424873,82.71194 +2419,1.9143348,125.22543 +2420,3.2697842,227.8098 +2421,2.0788517,123.41706 +2422,2.2984118,124.05517 +2423,3.2248158,224.80713 +2424,2.7585363,190.17734 +2425,1.6909411,113.270004 +2426,2.4594955,195.64511 +2427,1.747491,88.75529 +2428,3.225347,229.00023 +2429,2.782616,182.33432 +2430,3.8360114,245.97258 +2431,1.8105152,117.0333 +2432,2.7248151,163.24854 +2433,2.9048123,209.21907 +2434,2.1895642,147.5922 +2435,2.3817708,179.24881 +2436,2.0283766,87.92473 +2437,2.6422684,174.42734 +2438,1.7950284,95.088806 +2439,2.5060449,176.78558 +2440,2.2588418,138.51157 +2441,2.5701623,186.08035 +2442,1.9386879,111.72443 +2443,2.997571,190.15146 +2444,2.4176114,174.57123 +2445,2.243905,124.961945 +2446,3.2251406,220.6427 +2447,2.1097643,109.86271 +2448,1.9167205,100.52579 +2449,2.591271,179.15747 +2450,2.3329148,124.012436 +2451,2.4139094,138.13863 +2452,1.6086639,100.52351 +2453,1.9888122,102.0406 +2454,1.8713545,104.876755 +2455,1.9618773,128.83145 +2456,1.6847776,87.96607 +2457,1.9498698,90.61089 +2458,1.8696365,98.1215 +2459,3.0041566,206.93486 +2460,2.3313668,119.46678 +2461,2.105438,171.24133 +2462,2.583464,208.00374 +2463,3.1181648,218.62914 +2464,2.6481807,157.70438 +2465,2.1069238,115.68147 +2466,2.6610866,163.50159 +2467,2.542326,203.66554 +2468,1.8122398,92.02966 +2469,3.0867848,223.71188 +2470,2.0854087,113.17177 +2471,1.6607796,95.86719 +2472,2.7080464,193.7575 +2473,2.660453,179.41171 +2474,2.5208874,168.98598 +2475,3.0518584,193.87242 +2476,1.5190979,77.78668 +2477,1.6007569,87.2994 +2478,2.2103367,142.38373 +2479,2.8827755,178.81741 +2480,4.1361446,243.69803 +2481,3.0163963,216.7134 +2482,3.0495858,235.17406 +2483,3.0363894,187.98175 +2484,3.074155,218.37428 +2485,1.9335022,87.59979 +2486,2.2586663,161.00958 +2487,2.4748728,136.19247 +2488,1.9565785,107.113106 +2489,1.8803569,100.88933 +2490,1.601385,100.27887 +2491,2.9903874,219.56967 +2492,3.68395,230.90257 +2493,2.2200418,137.76804 +2494,2.5721295,150.04279 +2495,3.0645282,188.7285 +2496,2.5638146,163.4997 +2497,1.9887062,114.871574 +2498,2.8513408,212.38327 +2499,1.8640898,109.90558 +2500,3.5300765,232.69518 +2501,4.0750566,237.56824 +2502,3.6467633,240.7032 +2503,2.3755672,111.66675 +2504,1.6439248,96.2198 +2505,1.654501,104.52011 +2506,1.7579378,90.85664 +2507,3.0872114,215.38536 +2508,2.072298,109.0883 +2509,3.5595434,243.19933 +2510,3.37648,210.98756 +2511,2.1978664,122.58936 +2512,2.8275645,196.87247 +2513,1.9109943,97.51469 +2514,3.3437486,218.13504 +2515,2.1563053,125.93407 +2516,3.576151,236.73901 +2517,2.0271971,109.353714 +2518,2.8320735,210.19672 +2519,1.5053571,92.89728 +2520,2.5510635,137.41357 +2521,1.4372132,80.99517 +2522,2.2750099,158.60153 +2523,3.410706,221.91049 +2524,2.646852,203.43307 +2525,2.1057734,129.6141 +2526,2.9940279,210.51868 +2527,2.2637193,104.70456 +2528,2.5730367,198.67834 +2529,3.0762734,189.24057 +2530,3.0983825,200.44249 +2531,3.4907799,235.89388 +2532,2.3803768,160.28879 +2533,2.4496307,166.76576 +2534,4.3842897,252.31807 +2535,2.117584,141.38458 +2536,2.3410645,157.64084 +2537,1.8999797,101.43912 +2538,1.9647601,102.97513 +2539,2.8727748,171.32547 +2540,2.088537,119.26251 +2541,1.6301348,91.09921 +2542,2.5293512,177.16772 +2543,2.80318,189.42973 +2544,2.3579016,135.58096 +2545,3.630649,225.18509 +2546,3.6479478,238.1482 +2547,2.5507748,141.57462 +2548,2.503399,182.41252 +2549,2.6537702,170.8977 +2550,3.2137697,244.17163 +2551,4.30736,251.62431 +2552,4.4140725,252.49783 +2553,1.8632647,92.18065 +2554,3.1369572,224.95937 +2555,1.7011225,102.39182 +2556,2.5946991,148.17194 +2557,3.685427,234.17093 +2558,2.249478,121.33076 +2559,2.6566882,142.30463 +2560,1.5382688,75.24498 +2561,3.7577233,243.73961 +2562,3.0612378,197.14226 +2563,1.8686632,109.83174 +2564,1.835888,155.30576 +2565,3.2659461,227.37799 +2566,1.579624,99.00691 +2567,2.8929586,197.32463 +2568,2.7009466,191.88556 +2569,2.5525534,148.17953 +2570,3.3104022,219.37785 +2571,2.7528462,222.26524 +2572,5.209964,254.2569 +2573,2.4157073,123.70674 +2574,3.8198414,232.70966 +2575,2.647574,189.28174 +2576,3.033975,180.68164 +2577,2.951107,210.35603 +2578,1.9729143,131.45476 +2579,2.7621386,187.84456 +2580,2.7775826,186.9748 +2581,2.1684022,102.83441 +2582,3.4847271,234.90495 +2583,2.6425054,170.11443 +2584,2.8037329,184.13184 +2585,2.5840838,201.01202 +2586,2.332642,126.80173 +2587,2.082417,123.644135 +2588,1.8634015,143.03787 +2589,1.6442511,82.95849 +2590,1.7449272,102.39317 +2591,3.049731,241.5052 +2592,2.4890985,141.6753 +2593,1.9259274,142.28674 +2594,2.3352513,151.7691 +2595,3.3194084,235.53995 +2596,2.7567544,208.02844 +2597,2.491268,98.70044 +2598,2.0160785,152.21588 +2599,2.0358737,94.89451 +2600,2.0283227,127.44347 +2601,2.2246554,123.32615 +2602,2.1299477,121.40193 +2603,3.1913629,211.56868 +2604,3.0318227,199.0826 +2605,3.5032701,222.49811 +2606,2.2316322,110.03142 +2607,2.1459637,148.8549 +2608,2.3524346,203.26297 +2609,2.405863,141.94553 +2610,2.918676,188.24335 +2611,1.6886351,78.79794 +2612,2.998266,216.35156 +2613,1.7337267,110.22586 +2614,3.0138326,192.40038 +2615,2.532513,148.15614 +2616,3.4039836,219.13474 +2617,1.8692852,105.3925 +2618,3.0792193,216.96158 +2619,2.4642885,133.40363 +2620,2.8716092,222.15144 +2621,2.709022,197.04771 +2622,1.6573255,96.54344 +2623,2.5969148,184.57878 +2624,2.2804973,140.1894 +2625,2.130232,146.20462 +2626,1.9815189,121.04439 +2627,2.2495544,115.74333 +2628,1.7388934,104.3416 +2629,4.5060124,249.28818 +2630,2.336851,147.78697 +2631,2.1348524,113.55519 +2632,2.0527208,153.38455 +2633,1.9351298,88.091125 +2634,2.3572574,133.22372 +2635,1.9553181,101.86295 +2636,2.8212266,202.11543 +2637,2.1025794,147.41289 +2638,3.1073985,206.66043 +2639,2.6316235,184.31361 +2640,2.9079819,168.34216 +2641,1.4885776,78.659584 +2642,2.6707518,177.71365 +2643,2.4375596,121.07988 +2644,2.6216257,154.70462 +2645,2.247393,139.05814 +2646,2.7337286,161.95834 +2647,1.2943738,80.05279 +2648,2.5491707,180.89108 +2649,3.1355855,197.25864 +2650,2.8862884,196.86346 +2651,2.53568,184.60074 +2652,2.7495942,182.50217 +2653,2.9327931,184.4617 +2654,4.150155,248.51591 +2655,3.5138793,234.22849 +2656,2.8352637,182.70374 +2657,2.0319695,122.92731 +2658,3.424533,227.65067 +2659,2.167294,114.28583 +2660,2.7283666,231.80194 +2661,2.763308,181.8269 +2662,2.5714307,174.36462 +2663,2.876041,202.45714 +2664,1.797049,115.51405 +2665,1.8301492,82.887085 +2666,1.4698511,88.841095 +2667,3.7591221,238.47159 +2668,2.3567693,135.13326 +2669,3.1603875,229.67302 +2670,1.6570237,93.15085 +2671,2.2996485,161.5219 +2672,2.3044322,178.2557 +2673,2.4312341,165.61896 +2674,2.000873,111.10979 +2675,3.1872208,225.05746 +2676,2.6078088,154.9896 +2677,2.3378015,172.8435 +2678,2.8777034,174.78442 +2679,1.9838195,106.87828 +2680,2.735336,230.71423 +2681,3.3063738,193.94379 +2682,2.0264926,96.425125 +2683,3.2139819,218.89093 +2684,3.3524423,221.09782 +2685,2.7185674,215.66867 +2686,1.7677215,85.49501 +2687,2.1452293,112.96591 +2688,3.0187602,187.7904 +2689,2.2771811,140.27388 +2690,2.9111793,189.9224 +2691,2.96444,186.27113 +2692,2.2129369,149.62212 +2693,3.4006045,242.12048 +2694,2.5332253,121.10415 +2695,3.1916404,210.74478 +2696,2.1348026,143.89902 +2697,3.702601,242.30035 +2698,2.492862,159.5279 +2699,3.0633018,206.30183 +2700,3.5358334,226.936 +2701,1.7292385,104.13309 +2702,1.9059808,87.808136 +2703,2.5799377,182.45705 +2704,2.743449,176.28781 +2705,2.4445043,174.35019 +2706,2.3803678,192.82915 +2707,2.4448256,169.45354 +2708,2.4318357,184.81575 +2709,2.034505,136.18512 +2710,4.7921286,253.66666 +2711,2.8909602,196.56923 +2712,2.5034337,111.07589 +2713,2.1113262,116.83148 +2714,2.1993952,161.66937 +2715,2.2637775,145.23883 +2716,1.6694047,103.022675 +2717,2.0922258,158.12321 +2718,2.5552535,147.56552 +2719,2.5518374,153.62442 +2720,3.465094,207.42865 +2721,1.3993763,96.88154 +2722,2.6576924,161.33514 +2723,3.0340781,214.35542 +2724,1.5945675,113.75864 +2725,2.385636,134.18192 +2726,1.7492718,92.651344 +2727,2.5728774,159.26892 +2728,3.5973704,237.124 +2729,3.7129655,242.0347 +2730,2.1579041,160.24261 +2731,2.2322402,102.94644 +2732,1.3744915,83.93269 +2733,2.2831025,121.02046 +2734,1.8892572,113.44494 +2735,3.4187586,221.54556 +2736,2.075798,97.2475 +2737,2.8177588,212.93283 +2738,1.836507,103.43239 +2739,2.5960317,133.12389 +2740,2.49804,134.16232 +2741,3.7506466,230.12863 +2742,1.9531759,105.5685 +2743,2.8013356,192.32115 +2744,1.9887279,90.19368 +2745,1.7967169,109.803894 +2746,1.8391759,112.7036 +2747,3.2350185,213.25993 +2748,1.9625874,87.32467 +2749,2.3545728,146.74976 +2750,2.7241683,183.31088 +2751,2.9682107,217.33658 +2752,2.255787,95.33246 +2753,1.818527,89.69536 +2754,2.8600001,194.35919 +2755,2.4894044,196.25348 +2756,3.0542026,226.04665 +2757,2.730716,218.0076 +2758,1.7451508,98.913864 +2759,2.629984,140.14542 +2760,1.7969505,91.526634 +2761,2.7463198,164.28369 +2762,2.0580356,107.60415 +2763,1.6297537,89.71472 +2764,3.1035562,232.1006 +2765,1.9954035,90.9504 +2766,2.5044096,164.9012 +2767,2.8072698,181.83575 +2768,1.2453113,67.86933 +2769,2.7198033,189.97995 +2770,1.403472,89.68046 +2771,2.0675795,132.8189 +2772,1.6954808,98.504234 +2773,2.7422473,185.36847 +2774,1.6956618,96.15271 +2775,3.2829766,214.22592 +2776,2.7242103,193.50607 +2777,1.8349118,83.30003 +2778,2.1597607,109.759026 +2779,2.182319,98.450356 +2780,2.876842,200.7371 +2781,1.8691685,85.227295 +2782,3.0229228,205.52791 +2783,2.3029141,170.08249 +2784,2.2327223,116.53444 +2785,2.4513812,137.97032 +2786,2.1834855,107.09572 +2787,2.1469712,147.34982 +2788,2.5380766,177.25447 +2789,2.6728842,172.70465 +2790,2.777474,152.21729 +2791,2.2707236,120.308304 +2792,1.981847,108.654976 +2793,2.2897668,143.20918 +2794,3.0809927,202.8089 +2795,2.825029,153.07642 +2796,3.4883344,223.6496 +2797,1.6981623,111.61405 +2798,3.8283474,246.60942 +2799,2.6383204,198.26697 +2800,2.1090977,96.6224 +2801,2.7843137,180.83278 +2802,2.8675666,173.96307 +2803,2.7526007,145.12631 +2804,2.137036,99.68024 +2805,1.2395074,76.769394 +2806,2.437079,153.90738 +2807,1.5295094,88.4423 +2808,1.9554279,91.03838 +2809,2.9628654,190.8551 +2810,1.966136,81.77319 +2811,2.0726707,107.34199 +2812,2.301965,177.65558 +2813,3.6777914,243.88838 +2814,2.0992007,121.4503 +2815,3.0410802,230.76152 +2816,1.4068077,85.52339 +2817,2.1731882,116.3469 +2818,2.0204024,113.43581 +2819,2.8647983,198.21149 +2820,1.989919,124.27821 +2821,2.2832127,121.881805 +2822,2.5447493,158.93114 +2823,2.2578163,178.81848 +2824,3.2751327,210.95236 +2825,2.4785838,172.46243 +2826,1.6547693,120.50279 +2827,2.012878,142.13017 +2828,2.0908048,103.63425 +2829,3.2791333,223.62521 +2830,2.4405487,135.95746 +2831,1.9914856,108.931274 +2832,2.1832385,113.21316 +2833,1.5215002,81.82225 +2834,2.749655,207.67839 +2835,2.2199156,127.8573 +2836,2.5894392,150.38245 +2837,3.0511057,187.218 +2838,2.0359406,139.5332 +2839,2.9061806,201.79184 +2840,1.9474319,162.47163 +2841,2.0669453,120.53101 +2842,3.0314722,197.8888 +2843,2.3610628,170.28795 +2844,2.1441529,131.47253 +2845,2.9632719,238.24965 +2846,2.9514232,190.90488 +2847,3.7924252,227.305 +2848,1.9704263,119.182045 +2849,2.329787,170.54214 +2850,3.5056512,240.25822 +2851,3.312756,197.17072 +2852,3.768521,246.6059 +2853,2.1984627,143.11937 +2854,2.5318844,192.84398 +2855,3.666552,247.74149 +2856,2.5944588,157.20505 +2857,1.9166234,110.698135 +2858,2.1472113,132.02237 +2859,2.0407925,99.6873 +2860,3.0145125,211.02242 +2861,2.2162492,128.00073 +2862,3.0985398,185.67542 +2863,2.705108,174.05615 +2864,1.8716859,83.489334 +2865,3.3150249,215.1643 +2866,3.0755794,177.66507 +2867,1.7714314,168.71176 +2868,3.1279793,219.44856 +2869,2.4816453,176.58118 +2870,2.5560658,153.76305 +2871,3.6791806,243.9986 +2872,1.9074975,109.74077 +2873,1.8286307,99.47121 +2874,3.078441,203.71886 +2875,1.7175683,85.38278 +2876,3.1314187,179.52777 +2877,2.119247,121.78029 +2878,3.0689363,191.82422 +2879,3.5261476,226.67645 +2880,2.4596906,121.75306 +2881,3.093515,206.52713 +2882,2.9656827,203.559 +2883,3.9134185,245.36447 +2884,1.9455688,114.46236 +2885,3.0250802,219.57845 +2886,1.8089797,93.957275 +2887,2.7868953,200.86961 +2888,2.008558,88.234505 +2889,2.2044742,181.36426 +2890,2.4802275,133.14479 +2891,3.4048417,239.3802 +2892,3.6283374,235.06166 +2893,1.8807929,99.74252 +2894,2.3272657,154.38777 +2895,2.2956111,149.46097 +2896,2.1713524,189.46678 +2897,1.7735481,118.22554 +2898,2.1430476,125.15376 +2899,2.2070723,130.78186 +2900,2.1028395,133.60666 +2901,2.300165,141.30698 +2902,2.8358207,153.82918 +2903,1.4089519,80.036385 +2904,2.3453457,143.14514 +2905,2.67867,154.3761 +2906,3.1622307,225.06989 +2907,2.3373947,126.46587 +2908,3.026356,209.04198 +2909,3.1226578,238.17601 +2910,2.47277,135.67873 +2911,3.024092,158.5362 +2912,4.413944,249.8782 +2913,2.104259,123.07034 +2914,2.3048763,135.8252 +2915,2.330194,128.64877 +2916,2.4630075,147.74722 +2917,2.3448882,141.24974 +2918,3.444439,225.38243 +2919,3.7184296,246.10802 +2920,1.6255772,122.605255 +2921,2.7509534,172.68 +2922,1.9819973,88.44062 +2923,2.3578427,141.61487 +2924,3.0674016,195.86722 +2925,2.2737212,142.78995 +2926,3.125402,222.5994 +2927,2.338842,172.43005 +2928,1.2799885,77.8021 +2929,1.4077291,75.57837 +2930,2.1328633,118.25556 +2931,2.1215081,144.46173 +2932,2.2131116,160.13898 +2933,3.000489,170.58952 +2934,2.4915826,151.95786 +2935,2.2148001,139.06122 +2936,3.1342785,215.82983 +2937,1.9734164,78.069855 +2938,2.417213,146.28577 +2939,3.2361948,196.16089 +2940,2.2095041,120.5974 +2941,1.6344467,88.72258 +2942,1.432422,96.55278 +2943,3.482199,235.05533 +2944,2.282708,152.97118 +2945,3.1325889,194.14352 +2946,3.1719613,222.90714 +2947,2.3890653,111.19482 +2948,3.18533,221.6062 +2949,2.340991,123.36789 +2950,2.2026975,98.25789 +2951,3.3618648,240.40793 +2952,3.0546288,189.30228 +2953,2.1296082,104.481445 +2954,2.0329738,137.04784 +2955,2.172357,125.539276 +2956,3.2067533,236.83072 +2957,1.8926332,100.258255 +2958,2.1358683,125.9795 +2959,2.7051687,174.67474 +2960,3.5846279,230.05267 +2961,2.6749833,166.18419 +2962,2.2730832,193.13481 +2963,2.4378097,186.09656 +2964,3.2366023,213.44319 +2965,2.1496673,112.215256 +2966,1.7921633,102.83006 +2967,4.050208,248.30777 +2968,2.7114747,187.99397 +2969,1.928252,123.208755 +2970,3.4656107,233.85136 +2971,1.9620609,97.8084 +2972,1.3878902,94.2612 +2973,1.2117139,85.63246 +2974,3.1186414,205.524 +2975,2.3042412,133.63528 +2976,1.6753519,81.84436 +2977,2.672554,187.32741 +2978,3.020781,214.79956 +2979,3.6725383,224.01392 +2980,2.5755517,216.20418 +2981,1.5810511,88.90546 +2982,2.98486,218.3151 +2983,3.5336833,234.89345 +2984,1.6447495,82.29634 +2985,3.3684845,226.5753 +2986,2.3736491,125.48483 +2987,2.527426,174.2441 +2988,2.1797707,168.2911 +2989,1.7622625,94.44149 +2990,1.8531772,121.78053 +2991,2.871515,210.73535 +2992,2.2528484,137.85764 +2993,1.3271649,90.32354 +2994,2.0121899,133.31915 +2995,2.7655518,185.92635 +2996,2.4016924,125.22303 +2997,2.4046836,122.65596 +2998,3.4593272,232.12772 +2999,1.4649346,84.67178 +3000,1.7089442,97.81559 +3001,1.7482915,123.08794 +3002,3.4248269,214.9759 +3003,2.8995001,152.03255 +3004,2.6166034,160.87405 +3005,1.8724985,107.21988 +3006,1.2935544,100.23868 +3007,2.3244832,151.54301 +3008,2.466565,134.12326 +3009,2.2596922,116.3798 +3010,2.7282238,193.43175 +3011,2.138819,145.08664 +3012,2.7249024,175.85138 +3013,2.5752487,157.00731 +3014,3.481323,232.60344 +3015,2.8210378,198.54967 +3016,2.7994149,192.97426 +3017,2.6992364,195.0231 +3018,1.9613771,117.52313 +3019,2.7539554,174.77158 +3020,3.446805,220.92712 +3021,1.7263994,96.45346 +3022,1.8718779,121.537735 +3023,1.9560354,104.98459 +3024,2.7294328,184.60628 +3025,3.000824,203.60048 +3026,2.821456,183.23936 +3027,2.2537675,158.13824 +3028,2.8918998,215.19063 +3029,1.6790359,96.37004 +3030,2.6260285,183.25723 +3031,2.5168595,174.23502 +3032,2.410214,134.54501 +3033,3.7908072,240.96059 +3034,2.0958884,139.75177 +3035,1.9998478,92.764626 +3036,2.7751412,181.71866 +3037,2.5823348,157.751 +3038,2.8932824,186.5531 +3039,3.9514294,247.05655 +3040,3.0306184,229.33382 +3041,1.9166957,127.49855 +3042,4.035105,248.98232 +3043,2.482047,160.71582 +3044,2.1537218,120.75032 +3045,2.3666015,140.96875 +3046,2.696692,172.66905 +3047,2.894449,200.289 +3048,1.6690444,95.36493 +3049,3.6247406,246.58101 +3050,2.3938308,142.73338 +3051,3.2165866,228.50778 +3052,1.999369,95.43834 +3053,2.162975,155.35211 +3054,2.4603097,176.36087 +3055,2.0862207,131.92148 +3056,3.0128045,196.19601 +3057,2.9912817,176.26012 +3058,2.7427921,147.06927 +3059,2.1036694,122.770935 +3060,1.8984885,87.183754 +3061,2.9671698,187.12442 +3062,3.4251027,215.89874 +3063,2.1967607,162.49934 +3064,2.1951752,126.70481 +3065,4.8955603,253.45999 +3066,2.5123897,169.62035 +3067,2.107438,99.44849 +3068,1.616281,100.9331 +3069,2.0548937,114.38307 +3070,2.5727363,180.86282 +3071,2.563105,165.59167 +3072,1.9141734,117.6966 +3073,1.6778266,89.61467 +3074,2.8101344,194.573 +3075,3.3070176,218.10811 +3076,2.2853444,144.61264 +3077,2.7608438,182.37885 +3078,2.8998406,202.8846 +3079,3.0937922,218.05481 +3080,2.4693146,158.69092 +3081,1.7850767,77.6698 +3082,2.6999242,188.2265 +3083,3.5571802,236.62868 +3084,3.0691257,224.8337 +3085,1.8625973,110.66318 +3086,3.7826056,242.86502 +3087,1.8707342,133.18045 +3088,3.178806,210.9531 +3089,2.0713987,150.5678 +3090,2.8593552,197.72754 +3091,2.2924159,119.576324 +3092,2.6325562,160.16623 +3093,2.7515922,184.88704 +3094,2.2775915,146.39642 +3095,1.8256019,92.96901 +3096,3.0316844,192.44424 +3097,2.3465645,170.77287 +3098,4.147357,249.52547 +3099,2.8941865,199.92447 +3100,2.0435,123.1482 +3101,1.8068266,87.92675 +3102,2.358248,161.82437 +3103,2.4831688,138.6174 +3104,1.9486512,121.416595 +3105,1.9135134,157.30981 +3106,2.5291598,180.08386 +3107,2.1121519,120.51497 +3108,4.2912307,250.46724 +3109,2.009521,98.351616 +3110,2.1146815,125.01843 +3111,3.7451606,208.04861 +3112,1.8502824,96.327545 +3113,1.8499014,109.842575 +3114,1.5871384,92.93518 +3115,1.2916081,82.92032 +3116,2.851407,212.61946 +3117,2.7589774,179.68951 +3118,2.2173219,156.04344 +3119,2.6025915,159.20374 +3120,2.9578202,237.47888 +3121,2.8108134,162.02625 +3122,2.438128,198.80545 +3123,2.4036036,154.48485 +3124,1.8470306,109.555664 +3125,1.9735869,111.417984 +3126,2.2968845,153.52536 +3127,2.648249,184.27057 +3128,2.1775222,145.54855 +3129,3.0920136,198.33788 +3130,1.7161677,86.20914 +3131,2.75299,221.375 +3132,1.9773233,118.01848 +3133,2.942767,202.47653 +3134,1.9864552,100.19571 +3135,2.1888175,157.37195 +3136,2.1318154,166.58109 +3137,1.857811,112.8547 +3138,2.1735497,140.81891 +3139,2.0806026,152.66565 +3140,3.578506,223.65417 +3141,2.641206,162.3624 +3142,2.1861808,127.75716 +3143,2.6318827,176.30052 +3144,2.6549299,174.5268 +3145,2.2978148,120.365814 +3146,2.3955579,175.02393 +3147,2.223647,152.65176 +3148,2.4021287,146.4464 +3149,2.5623846,187.69446 +3150,2.0708334,92.40561 +3151,1.7636751,107.80205 +3152,2.768959,134.71439 +3153,1.6624106,96.04066 +3154,2.7329192,149.41269 +3155,2.6315658,187.39462 +3156,2.900206,209.95728 +3157,2.2315843,128.95541 +3158,2.206926,167.92802 +3159,3.1682758,199.1096 +3160,3.0748646,214.61339 +3161,1.9404795,132.199 +3162,2.8178582,173.85043 +3163,2.1369584,123.697876 +3164,2.4429667,151.21724 +3165,2.7605553,163.54205 +3166,1.8365428,102.723724 +3167,3.2734332,220.61371 +3168,2.2599196,140.8027 +3169,3.3867114,223.69911 +3170,2.6030383,186.79611 +3171,3.9810295,248.05643 +3172,3.1375356,235.90204 +3173,2.685584,195.39684 +3174,2.6524146,156.54865 +3175,1.8706218,106.86708 +3176,2.1861002,140.29355 +3177,2.4736156,196.85915 +3178,1.5391301,77.61261 +3179,3.2815347,230.8787 +3180,1.8143581,93.52345 +3181,2.0953343,109.96571 +3182,2.6638997,161.85226 +3183,2.7636604,163.25726 +3184,2.5532665,171.83353 +3185,2.6579847,144.05106 +3186,2.8968368,204.99414 +3187,1.6258812,101.976105 +3188,3.0557961,174.40692 +3189,2.3987901,133.52884 +3190,2.5409834,127.49254 +3191,2.0527403,135.23453 +3192,2.3733165,126.03357 +3193,2.7203324,203.89066 +3194,2.0055416,92.78081 +3195,2.5776865,155.69382 +3196,3.8054264,245.02536 +3197,2.3640041,137.11911 +3198,2.4556308,145.56703 +3199,3.4068718,223.74344 +3200,1.710068,90.250496 +3201,1.7280314,92.99828 +3202,2.0901337,106.65072 +3203,3.2353816,233.68486 +3204,1.793589,94.70093 +3205,2.065292,112.8799 +3206,2.7521691,176.11185 +3207,2.099739,111.08119 +3208,1.8848332,114.38654 +3209,1.205203,73.98831 +3210,3.0590954,212.91862 +3211,2.2895474,158.94806 +3212,2.4227147,138.88477 +3213,3.0551214,193.33188 +3214,2.0199783,149.19838 +3215,1.6711462,90.760185 +3216,2.4430583,167.3923 +3217,3.409307,224.20047 +3218,2.052134,141.86105 +3219,3.0107248,217.86693 +3220,1.9659245,107.780174 +3221,3.5445845,244.75052 +3222,2.022122,108.10492 +3223,3.1196759,212.66101 +3224,1.6590565,97.1581 +3225,2.193877,119.96508 +3226,1.7079548,108.089134 +3227,2.2749226,126.91187 +3228,2.1860688,106.28813 +3229,2.33864,149.2419 +3230,3.1641998,230.13864 +3231,3.1486425,228.27046 +3232,3.1376674,221.63326 +3233,2.3661382,106.82483 +3234,3.0927782,195.3585 +3235,2.610295,197.38847 +3236,2.411382,125.91652 +3237,2.4597168,176.15045 +3238,2.8245184,183.53561 +3239,2.8700764,191.09775 +3240,2.914442,186.8198 +3241,1.5333433,76.86921 +3242,3.1042056,184.11024 +3243,1.6891999,109.46236 +3244,3.010654,183.09857 +3245,1.8635061,102.92732 +3246,2.3940988,159.7979 +3247,3.0635638,225.60507 +3248,1.6224643,93.8243 +3249,2.5338874,167.8627 +3250,2.639131,168.17496 +3251,1.911171,128.6709 +3252,1.7512542,115.65367 +3253,1.8105952,123.4507 +3254,3.5053308,237.99551 +3255,3.072416,213.19713 +3256,3.0110898,214.19312 +3257,2.532732,163.1756 +3258,2.4808004,180.15363 +3259,2.5761435,160.75548 +3260,2.211667,127.76756 +3261,2.4748783,181.18999 +3262,2.1390212,113.00423 +3263,2.5876832,193.13527 +3264,2.9776266,198.6552 +3265,2.159049,104.24661 +3266,3.5202289,225.12721 +3267,2.604594,172.45146 +3268,2.241487,126.61714 +3269,2.6931682,151.68724 +3270,1.5550147,76.68432 +3271,2.2674646,137.50656 +3272,2.2110112,199.37918 +3273,2.8372378,159.83636 +3274,3.1450584,218.00789 +3275,2.2637117,103.43494 +3276,2.0966172,97.466644 +3277,1.630299,90.49255 +3278,2.35658,142.70813 +3279,2.139733,156.03397 +3280,1.6915722,95.739716 +3281,3.330893,233.19092 +3282,1.9589067,128.65204 +3283,1.9241893,118.85474 +3284,2.2185347,106.91144 +3285,3.1461895,199.90334 +3286,3.6787038,234.62723 +3287,1.8066158,86.297005 +3288,2.5702581,196.21017 +3289,3.4412332,202.95407 +3290,2.605643,165.77211 +3291,2.0528944,130.95877 +3292,2.444428,199.22731 +3293,2.2218108,144.78433 +3294,2.9094522,151.93869 +3295,2.636701,177.98328 +3296,1.4830487,75.25252 +3297,2.812842,206.1062 +3298,3.254273,227.94058 +3299,2.3669996,173.55936 +3300,2.2825272,129.51614 +3301,2.5535865,165.56357 +3302,2.473833,143.03735 +3303,2.9978206,230.10484 +3304,2.2523942,140.5198 +3305,1.0255446,72.19818 +3306,2.9850593,198.84619 +3307,1.5333512,78.14752 +3308,2.4035528,160.84235 +3309,2.1369119,177.43677 +3310,2.9789596,161.47751 +3311,2.088284,122.26475 +3312,2.5672615,168.9739 +3313,1.9841666,153.19698 +3314,1.6623192,77.89774 +3315,2.7854648,203.74217 +3316,2.6514297,127.019394 +3317,2.2693124,171.39587 +3318,1.8065966,127.287315 +3319,2.7585833,117.545746 +3320,1.7685474,110.78032 +3321,2.6457782,145.26968 +3322,1.782892,111.42766 +3323,2.9175963,170.10571 +3324,4.5784254,253.20782 +3325,4.249083,252.0107 +3326,2.6341522,168.77542 +3327,3.0702865,199.4694 +3328,2.540843,160.32681 +3329,1.8700291,128.68013 +3330,1.8338339,89.15201 +3331,1.882684,136.62895 +3332,2.0938833,135.12613 +3333,2.045102,91.762825 +3334,2.7358575,190.22522 +3335,2.5936313,158.50635 +3336,2.0193584,123.280136 +3337,2.1366465,147.6326 +3338,4.5489774,253.16806 +3339,3.0224738,168.95676 +3340,2.2203193,168.0326 +3341,1.7057822,132.65082 +3342,3.0564466,215.7417 +3343,3.179454,204.67888 +3344,2.374482,207.48993 +3345,2.4202046,104.83821 +3346,2.391699,115.308014 +3347,3.967879,243.99753 +3348,2.8776143,190.02672 +3349,1.7709122,104.50908 +3350,2.3424065,130.69865 +3351,2.9399529,219.272 +3352,2.381106,146.13763 +3353,1.8730203,100.25077 +3354,2.4722714,172.96017 +3355,2.4161196,116.857086 +3356,3.8030288,239.13705 +3357,2.5578923,199.26059 +3358,2.7395835,176.95395 +3359,3.1996748,217.60432 +3360,2.4146268,130.48636 +3361,3.4561265,228.02048 +3362,3.696997,241.75653 +3363,2.8372052,186.95772 +3364,2.4180868,172.45595 +3365,2.7962909,188.17924 +3366,2.2792768,172.2449 +3367,2.2210407,110.511406 +3368,3.3052163,214.52966 +3369,2.5968118,181.26822 +3370,2.2783215,164.20245 +3371,2.034587,121.14466 +3372,2.3562818,142.63614 +3373,2.299569,142.46313 +3374,3.3154063,201.9182 +3375,3.3956106,225.44081 +3376,1.4799621,82.87272 +3377,3.0568235,164.3935 +3378,2.7208915,181.22754 +3379,2.316466,155.40488 +3380,3.688601,247.2309 +3381,2.1093845,108.4637 +3382,2.320633,145.59433 +3383,4.5162544,252.07193 +3384,1.9430541,114.75891 +3385,2.390364,136.89612 +3386,3.6168268,215.10965 +3387,2.8299284,183.07733 +3388,3.5672615,234.90547 +3389,2.207839,179.84668 +3390,1.9731333,109.58905 +3391,2.933512,208.09117 +3392,2.1482377,150.72993 +3393,2.215885,105.82001 +3394,3.4567282,233.88956 +3395,2.4092832,192.7884 +3396,2.1133294,116.72991 +3397,3.5612173,238.60641 +3398,1.5347111,81.24629 +3399,2.24054,165.56155 +3400,2.5583792,168.58572 +3401,1.7769485,132.46991 +3402,2.5067713,154.88419 +3403,2.4526172,173.05725 +3404,1.7584846,99.40292 +3405,1.912313,115.63089 +3406,3.3853455,238.34102 +3407,1.3700577,75.380936 +3408,3.0124898,211.96764 +3409,2.1345077,149.42511 +3410,2.101604,151.42139 +3411,2.0038624,110.9371 +3412,3.005173,193.87984 +3413,3.8700104,248.98065 +3414,1.8435707,106.36879 +3415,3.1066887,193.93134 +3416,3.2287128,177.19644 +3417,2.2373729,143.33054 +3418,3.904271,248.7679 +3419,2.173841,122.410324 +3420,3.0767817,178.9599 +3421,3.0316224,193.00418 +3422,2.7696295,204.84702 +3423,2.9162378,180.71802 +3424,3.002286,237.61133 +3425,1.5773447,75.15181 +3426,2.5448647,174.89087 +3427,1.8235186,109.87506 +3428,3.1390808,193.45198 +3429,2.6717272,155.16592 +3430,2.35511,128.04417 +3431,2.726302,195.96289 +3432,1.6729742,84.37312 +3433,2.2454028,146.66121 +3434,2.9030962,227.88313 +3435,1.6928637,91.59764 +3436,2.9593062,218.94284 +3437,2.080584,101.64468 +3438,2.2971983,147.11636 +3439,1.4015198,70.43074 +3440,2.1108365,119.86696 +3441,2.192182,123.27988 +3442,2.4296212,149.4531 +3443,1.9722643,98.58125 +3444,2.0857296,95.50679 +3445,1.8277142,110.43912 +3446,2.3594708,145.94345 +3447,2.6421123,194.60324 +3448,3.3415387,221.05373 +3449,2.0634296,99.13064 +3450,3.221062,231.55057 +3451,2.2178,136.74869 +3452,2.0260658,140.57709 +3453,2.1573887,129.7929 +3454,2.7323344,179.43259 +3455,1.340072,77.6175 +3456,1.6671519,102.65481 +3457,1.6823839,85.79865 +3458,2.401218,124.058334 +3459,2.7661362,183.0516 +3460,2.3812828,129.1837 +3461,3.4419456,229.73912 +3462,3.3166454,230.34407 +3463,1.8221443,99.09424 +3464,3.327175,232.72307 +3465,1.9577533,127.725555 +3466,2.2539935,168.27255 +3467,1.5621253,74.854805 +3468,1.7824633,84.23068 +3469,3.1243947,211.27798 +3470,1.7809174,87.74649 +3471,2.386847,150.60587 +3472,2.5851028,98.72741 +3473,2.6521056,174.33368 +3474,1.8902938,113.40999 +3475,2.9185007,162.407 +3476,2.717112,195.66382 +3477,2.1377528,153.42831 +3478,1.8762205,94.50025 +3479,2.9581218,211.46791 +3480,2.395026,157.216 +3481,1.9459736,123.203186 +3482,2.087935,113.62309 +3483,2.5681424,162.53651 +3484,2.4982917,163.3778 +3485,2.5094266,175.33617 +3486,1.950737,154.95557 +3487,2.8127956,185.24352 +3488,1.7312682,84.75473 +3489,3.3067584,215.64458 +3490,2.3536167,145.19438 +3491,1.96748,146.19156 +3492,2.033023,101.35125 +3493,2.044481,103.18448 +3494,3.4097211,245.23434 +3495,2.937133,198.8012 +3496,1.883016,120.89226 +3497,2.5701723,157.55374 +3498,3.1795485,204.23413 +3499,3.3302922,192.59798 +3500,2.540556,183.35051 +3501,2.860502,217.84572 +3502,2.264026,135.12558 +3503,1.8435166,98.21688 +3504,3.1782835,221.84087 +3505,2.1835494,170.36032 +3506,3.2615075,217.89941 +3507,2.5098848,162.3031 +3508,1.7952415,131.59283 +3509,3.2023063,182.10928 +3510,2.4358654,183.12802 +3511,1.9676178,77.25083 +3512,3.279611,238.83527 +3513,1.6666238,126.622986 +3514,3.367669,220.82405 +3515,2.2001948,137.5859 +3516,2.8062527,178.49388 +3517,2.5693462,178.33289 +3518,2.455708,141.81738 +3519,2.2738433,154.76115 +3520,1.9193332,108.08004 +3521,2.7983737,175.6889 +3522,3.24108,232.02513 +3523,2.054185,94.74042 +3524,1.4010494,92.32197 +3525,2.1860025,115.150955 +3526,2.9067132,174.5058 +3527,1.9229553,105.95171 +3528,2.3702035,137.62543 +3529,3.6970942,237.34485 +3530,3.127462,233.69348 +3531,1.5816518,90.277374 +3532,2.3852615,132.60162 +3533,2.2286804,156.9223 +3534,2.0589933,119.35658 +3535,2.3549416,118.5107 +3536,1.8627902,84.85721 +3537,2.1345458,112.57734 +3538,1.6884243,119.00079 +3539,4.083499,251.22656 +3540,2.128566,135.4764 +3541,2.804009,211.64346 +3542,1.7864298,95.015594 +3543,1.7782962,104.45581 +3544,2.961208,192.96577 +3545,2.538488,177.06552 +3546,2.5005183,123.16075 +3547,2.3382192,123.04207 +3548,2.2841926,111.04289 +3549,2.4573507,157.58981 +3550,1.5072176,85.0181 +3551,2.4993978,146.42862 +3552,2.6137729,159.29747 +3553,2.601142,156.99908 +3554,2.5941467,151.96793 +3555,3.0361464,199.98117 +3556,2.9940898,226.59793 +3557,2.1565385,147.97266 +3558,1.9941645,91.00407 +3559,2.314981,127.449615 +3560,3.033719,199.0946 +3561,2.5641985,127.1544 +3562,3.3034701,237.01001 +3563,1.6601326,107.89888 +3564,3.013747,218.85864 +3565,2.4518533,134.5466 +3566,1.5515728,83.45962 +3567,3.0532205,210.7034 +3568,1.5945272,90.720345 +3569,1.5011463,93.46988 +3570,2.484693,164.63647 +3571,2.182467,87.28871 +3572,2.1752486,151.08105 +3573,2.022248,128.22772 +3574,2.2846954,138.3039 +3575,1.6641284,84.4389 +3576,2.6491778,198.3877 +3577,2.5711694,154.14682 +3578,2.0878046,114.384674 +3579,2.642013,161.2136 +3580,2.805861,139.93652 +3581,2.7450268,186.69952 +3582,1.5678483,82.224884 +3583,1.933632,101.99013 +3584,3.0332043,206.54167 +3585,2.4416945,172.7229 +3586,2.5959067,175.92786 +3587,2.907708,190.67407 +3588,2.3064313,192.14186 +3589,3.4523094,221.24394 +3590,2.0403893,95.234146 +3591,1.5686828,109.18498 +3592,1.7361461,100.20688 +3593,2.6186922,174.2214 +3594,2.7101283,164.22723 +3595,2.671577,177.0185 +3596,2.3709953,187.59668 +3597,2.4153633,119.145004 +3598,2.3688204,143.49713 +3599,1.8904505,102.126434 +3600,2.061328,119.57499 +3601,2.1940267,94.34864 +3602,2.6061592,143.52429 +3603,3.9336014,248.21619 +3604,2.7963915,214.82526 +3605,2.5041795,172.21838 +3606,2.0200825,153.36746 +3607,2.6161501,139.15208 +3608,2.7195735,197.17204 +3609,1.6171753,127.263016 +3610,2.093045,113.321365 +3611,2.173415,142.6503 +3612,1.9587437,121.76072 +3613,2.6134694,121.97605 +3614,1.8981435,100.14876 +3615,3.3996055,233.67207 +3616,1.3444191,90.10403 +3617,1.6682451,84.50119 +3618,2.744017,217.54701 +3619,3.062462,193.7137 +3620,3.1853547,212.18297 +3621,2.404606,160.19312 +3622,1.2814516,73.06241 +3623,1.8842076,101.73683 +3624,1.7102163,114.567825 +3625,2.2953742,136.21216 +3626,2.351444,183.2191 +3627,1.7662313,122.97954 +3628,3.147904,189.99536 +3629,2.5672336,180.21353 +3630,3.274332,233.53755 +3631,2.0367856,114.09241 +3632,2.1790352,132.41724 +3633,2.5560663,102.32036 +3634,3.0176063,220.57968 +3635,2.1080227,106.76587 +3636,1.9003237,133.22644 +3637,3.2181792,225.72269 +3638,2.4686904,207.85616 +3639,2.9398623,194.78006 +3640,3.2643182,220.55489 +3641,4.398507,248.4679 +3642,2.136037,146.37163 +3643,3.4000893,234.17809 +3644,2.1441216,110.72127 +3645,2.2636366,103.879364 +3646,2.090468,125.05313 +3647,3.5881162,242.6983 +3648,2.2125192,108.16871 +3649,2.0790825,155.17938 +3650,2.655381,183.69089 +3651,2.0658,149.18073 +3652,2.864351,184.1067 +3653,2.0873706,109.63272 +3654,2.895175,171.03311 +3655,1.9286165,107.43864 +3656,2.1709394,165.05276 +3657,2.5395207,179.19318 +3658,2.3406157,159.6399 +3659,2.378883,112.03604 +3660,2.300916,138.28024 +3661,1.8952091,101.355034 +3662,1.8554107,114.416595 +3663,2.5613246,205.43878 +3664,2.4255557,155.18484 +3665,2.3869948,141.55301 +3666,1.5010397,81.10744 +3667,2.5141556,119.67508 +3668,2.9019663,216.0966 +3669,3.1152186,206.81732 +3670,2.1144488,117.782524 +3671,2.8588946,219.98155 +3672,2.2737017,143.28621 +3673,3.3467631,241.70563 +3674,2.467811,174.51424 +3675,2.3303182,159.02133 +3676,2.3430495,139.01697 +3677,2.8547397,226.51376 +3678,2.8605475,156.5868 +3679,1.5543363,87.39888 +3680,2.6753101,148.79935 +3681,3.4667323,229.36784 +3682,2.812624,178.2526 +3683,2.033574,152.07516 +3684,2.173019,130.70123 +3685,2.54102,136.55966 +3686,2.8927293,187.22491 +3687,1.6551837,88.89851 +3688,2.676675,152.96225 +3689,2.8259795,180.4673 +3690,3.5764568,246.91583 +3691,2.909586,198.92847 +3692,2.9209294,212.21846 +3693,2.7175002,150.44263 +3694,3.1745534,234.37617 +3695,2.0811558,109.33966 +3696,2.3811016,119.43228 +3697,2.8939319,197.2149 +3698,2.0628996,103.74336 +3699,1.813998,98.058876 +3700,2.653725,168.3378 +3701,2.8073516,205.59525 +3702,1.9855268,135.07318 +3703,1.6040679,88.76848 +3704,2.1488383,136.45349 +3705,2.6446328,173.46475 +3706,2.187077,169.37642 +3707,1.1464443,82.04785 +3708,3.3821023,234.96042 +3709,2.3323956,176.42657 +3710,3.0067945,190.80898 +3711,1.8125,104.06445 +3712,2.1552725,158.18118 +3713,2.2067542,153.36456 +3714,3.2194297,207.39223 +3715,2.2561972,124.869385 +3716,1.9376161,74.81394 +3717,2.3045237,139.76273 +3718,2.5530946,118.63014 +3719,3.3510013,223.37317 +3720,2.9570544,173.1553 +3721,2.4166307,167.72363 +3722,2.104048,170.96172 +3723,2.8218472,192.04033 +3724,3.0676148,200.86366 +3725,3.8178482,229.70236 +3726,1.4224654,88.67102 +3727,1.5338846,87.54872 +3728,2.3600175,176.9927 +3729,1.4833359,81.49779 +3730,1.6468247,92.679504 +3731,2.399616,150.43828 +3732,1.903567,131.5376 +3733,2.4860482,130.96683 +3734,1.9732177,139.08049 +3735,4.1033163,237.97197 +3736,2.217369,93.41345 +3737,2.3709211,142.32239 +3738,1.9252542,107.11406 +3739,2.1651947,104.384155 +3740,1.5609233,87.38355 +3741,3.216484,229.1129 +3742,2.135111,124.611465 +3743,2.6708484,167.92883 +3744,3.1735864,226.6377 +3745,2.418881,146.12227 +3746,2.7701197,196.27428 +3747,2.4693973,130.29572 +3748,2.0639338,118.127106 +3749,3.5109007,224.69437 +3750,2.0379448,95.55531 +3751,2.274012,108.08562 +3752,2.3422103,193.66519 +3753,2.2487955,189.85419 +3754,1.9444422,92.86828 +3755,2.3200228,143.36923 +3756,2.0779674,124.37639 +3757,2.558815,148.3581 +3758,2.4397032,143.04477 +3759,3.1292846,187.56265 +3760,2.74299,203.19778 +3761,2.2519662,120.896545 +3762,1.6486323,114.57742 +3763,2.3362646,167.26332 +3764,2.7037516,192.45477 +3765,3.181839,212.57881 +3766,2.9698167,238.80696 +3767,1.7306924,103.26541 +3768,2.2571182,180.27296 +3769,2.2793536,163.03613 +3770,2.9999132,209.99506 +3771,2.2879586,107.91638 +3772,2.8405528,204.63513 +3773,1.8604941,132.95757 +3774,1.898633,95.01621 +3775,2.0485082,133.10263 +3776,2.9303927,196.69646 +3777,2.6564057,154.15047 +3778,3.1338012,187.33673 +3779,3.2520714,237.15363 +3780,2.0105534,113.089264 +3781,2.002937,105.56662 +3782,3.4712644,233.1231 +3783,2.9665477,223.0966 +3784,1.8883047,97.71489 +3785,3.7656198,244.09503 +3786,1.6157047,99.97588 +3787,1.844499,84.9312 +3788,2.4978728,168.62888 +3789,1.7837596,140.28857 +3790,2.4943662,154.0914 +3791,3.3582075,185.55942 +3792,2.737527,167.05481 +3793,2.8951616,187.52115 +3794,2.1574883,155.1254 +3795,2.3158932,160.35324 +3796,2.3962922,133.74088 +3797,3.0325239,180.66696 +3798,2.9613063,190.33585 +3799,2.4603844,149.13495 +3800,2.4883294,165.97195 +3801,2.2916603,107.59523 +3802,4.04765,250.418 +3803,2.399238,157.32558 +3804,3.4414358,234.82387 +3805,2.9841378,231.9594 +3806,2.678013,121.002556 +3807,2.836485,169.67319 +3808,1.5966927,85.38184 +3809,2.2064013,136.20844 +3810,1.5948241,87.37879 +3811,2.1061502,100.54283 +3812,3.0900128,216.94275 +3813,2.3332846,170.93024 +3814,2.7745206,174.57788 +3815,2.1148295,108.66069 +3816,1.557869,85.5694 +3817,2.9551368,188.57816 +3818,2.44306,177.32086 +3819,3.2296896,217.99463 +3820,1.8171675,115.47464 +3821,2.8008416,190.83145 +3822,3.0282514,187.50488 +3823,2.4988837,172.55055 +3824,2.7116144,145.59198 +3825,2.1433444,129.85205 +3826,2.464279,108.14505 +3827,1.9193143,119.368904 +3828,2.4759731,130.4596 +3829,3.1602716,217.30853 +3830,2.2071111,126.01682 +3831,2.7820857,178.72981 +3832,2.9915457,222.18289 +3833,2.6669147,219.56093 +3834,4.0172043,248.71188 +3835,2.531905,164.33862 +3836,2.389104,117.48131 +3837,2.7832828,183.45206 +3838,2.087677,129.74487 +3839,3.699017,228.42766 +3840,3.0434346,201.61563 +3841,1.921319,145.73816 +3842,2.8220477,231.1876 +3843,1.8267564,101.23972 +3844,1.7193651,102.52965 +3845,2.2169244,136.04947 +3846,2.19339,114.06509 +3847,2.4605334,196.70105 +3848,2.780426,183.75906 +3849,2.4027057,160.20465 +3850,1.925803,79.4917 +3851,2.546782,156.18835 +3852,2.2823393,121.612564 +3853,1.732731,100.07211 +3854,2.9348662,178.7898 +3855,4.044505,238.25551 +3856,2.1127808,164.57843 +3857,1.3425847,74.57379 +3858,2.7108665,128.16013 +3859,3.1688955,217.34186 +3860,2.1123924,133.57901 +3861,2.4823923,163.21191 +3862,4.0662394,249.70294 +3863,2.5881262,120.58332 +3864,3.0730119,220.42174 +3865,2.3801608,152.4289 +3866,1.872746,93.30229 +3867,2.4627614,153.68146 +3868,2.26675,131.13464 +3869,2.6360385,194.61957 +3870,1.446852,88.175415 +3871,2.7097433,212.64188 +3872,2.7033658,215.271 +3873,2.6528182,138.25095 +3874,2.734838,168.24515 +3875,2.473676,165.81558 +3876,2.726885,177.88623 +3877,1.770554,98.979645 +3878,2.7442367,156.07529 +3879,3.0054379,151.21527 +3880,2.6802857,190.96298 +3881,2.238372,126.05243 +3882,2.274282,142.08978 +3883,3.0334456,205.41788 +3884,2.3273802,166.34189 +3885,2.9352303,197.08093 +3886,3.149283,203.19565 +3887,2.2465992,146.31898 +3888,2.4127643,172.89911 +3889,1.9150579,98.26828 +3890,2.116345,110.7577 +3891,2.0662675,154.55392 +3892,1.1530418,75.55457 +3893,2.754789,190.41602 +3894,2.3120039,126.02808 +3895,3.04911,197.81233 +3896,2.0902328,99.34955 +3897,2.9691613,228.2818 +3898,2.2523608,163.34903 +3899,1.7421616,90.97015 +3900,2.6589227,166.4212 +3901,2.0968568,145.67671 +3902,3.361095,197.525 +3903,3.3393035,230.95634 +3904,3.886612,239.60818 +3905,3.8434448,239.9045 +3906,3.1564896,203.54117 +3907,2.7152772,204.15329 +3908,1.9882734,123.90398 +3909,1.8786485,95.44388 +3910,2.0912285,172.60727 +3911,2.463071,161.00153 +3912,1.6583374,84.94782 +3913,2.0930338,124.211784 +3914,2.5384965,148.60432 +3915,3.2731528,214.00558 +3916,2.967639,179.97212 +3917,2.3590367,175.47702 +3918,1.8786714,109.48216 +3919,2.1489882,133.15448 +3920,2.187634,157.3988 +3921,1.87163,100.539246 +3922,4.075439,249.8684 +3923,3.9902241,240.294 +3924,1.5113374,82.429115 +3925,2.409967,127.01526 +3926,3.3640254,232.13815 +3927,3.2658014,228.31749 +3928,3.100113,206.00774 +3929,2.77546,178.60684 +3930,2.5952077,173.65485 +3931,2.256928,107.50012 +3932,1.4827304,93.503395 +3933,1.9237928,118.90982 +3934,2.081394,139.6131 +3935,3.8311696,239.55965 +3936,2.649184,165.53821 +3937,2.63464,144.90167 +3938,1.9066696,100.543846 +3939,2.022678,109.58685 +3940,2.0471249,109.92314 +3941,2.4658906,152.40005 +3942,1.9908031,135.64902 +3943,2.9154434,190.44202 +3944,2.6122396,189.7717 +3945,1.1628969,78.87192 +3946,2.225953,93.14499 +3947,2.258349,128.81381 +3948,3.3631368,217.79878 +3949,2.486278,172.28543 +3950,1.8206011,109.77094 +3951,2.6820264,164.32306 +3952,1.8136357,103.304695 +3953,1.8428519,98.133194 +3954,1.9916787,104.699524 +3955,3.4415572,239.07889 +3956,1.4308867,96.83565 +3957,1.8573055,96.12631 +3958,3.4226422,220.33633 +3959,2.1013837,138.7211 +3960,2.07967,112.654724 +3961,2.3333597,117.72026 +3962,1.9617629,157.80211 +3963,3.1513207,212.81203 +3964,2.1211433,125.355995 +3965,2.2307918,149.25417 +3966,2.606371,167.19852 +3967,2.6169932,170.11237 +3968,3.1251101,220.4791 +3969,1.9789623,94.358574 +3970,3.8242962,238.46721 +3971,2.11536,129.34549 +3972,3.5083337,212.41673 +3973,2.2035475,158.78284 +3974,2.3330135,144.16272 +3975,2.457643,120.315384 +3976,2.5931687,165.40611 +3977,2.100555,119.808136 +3978,2.015414,103.82282 +3979,1.7858725,93.50904 +3980,2.457893,180.01382 +3981,1.2926733,84.76035 +3982,2.7705507,215.10086 +3983,3.0246127,168.2857 +3984,1.8016481,92.770424 +3985,2.6059985,181.94412 +3986,1.7571466,82.11109 +3987,2.6656775,190.82404 +3988,2.77172,207.63042 +3989,2.130571,133.85141 +3990,2.460643,160.22647 +3991,2.93902,200.00243 +3992,1.621207,82.28519 +3993,3.1967463,200.46484 +3994,4.4562283,250.3868 +3995,2.0212908,92.642334 +3996,2.1968043,167.94696 +3997,2.0528164,111.23443 +3998,1.5675445,96.24335 +3999,2.314316,134.45676 +4000,2.1220806,94.7044 +4001,1.4274331,77.62516 +4002,3.0700393,199.63942 +4003,2.5561275,166.71858 +4004,4.023515,248.64198 +4005,2.8994482,209.05298 +4006,2.890576,215.29568 +4007,2.6563876,133.21112 +4008,2.926836,205.76392 +4009,2.7187047,212.44133 +4010,2.1840649,159.8964 +4011,2.2889903,150.58804 +4012,2.6675317,169.5128 +4013,1.6187818,99.379105 +4014,2.6888285,168.97449 +4015,1.1767544,88.872856 +4016,2.4561095,120.50059 +4017,1.8110445,94.20943 +4018,2.410838,146.57504 +4019,3.8434422,242.4028 +4020,2.5705638,124.530334 +4021,1.8262899,87.28818 +4022,2.055316,97.126144 +4023,3.217987,217.10056 +4024,3.0689282,203.69566 +4025,1.7363877,100.799866 +4026,2.0914812,132.99812 +4027,2.9817748,186.53961 +4028,1.7051345,127.18952 +4029,2.5316093,137.69432 +4030,1.7025999,84.9471 +4031,2.9236028,157.96724 +4032,2.7383637,193.49391 +4033,1.9858809,117.870926 +4034,3.3135123,228.27971 +4035,1.7938921,90.246 +4036,2.880926,213.42859 +4037,2.4041011,144.94537 +4038,2.56988,148.96326 +4039,3.4412165,233.16069 +4040,1.8983829,102.394684 +4041,2.6401553,185.73926 +4042,2.4180088,149.76346 +4043,2.2920375,158.43936 +4044,3.532384,236.1846 +4045,3.927142,246.40256 +4046,4.116599,241.78423 +4047,3.2157798,228.85999 +4048,1.5437014,101.99785 +4049,2.645344,211.61845 +4050,3.0773766,219.38992 +4051,2.1320632,188.06891 +4052,1.5262122,88.060585 +4053,3.2946088,242.54109 +4054,1.3528664,113.97089 +4055,2.155577,106.9828 +4056,2.2836108,116.19652 +4057,2.1952565,151.41278 +4058,2.81418,191.27304 +4059,3.0594745,223.6279 +4060,1.4222988,83.93866 +4061,1.8782896,84.382965 +4062,2.6111748,198.3553 +4063,2.2016137,103.52181 +4064,2.5940626,144.49751 +4065,2.0312865,125.95764 +4066,2.1115887,169.19635 +4067,1.3805984,74.863914 +4068,3.3987768,232.44382 +4069,1.7496314,95.42906 +4070,4.8588924,252.8762 +4071,3.018412,207.48378 +4072,3.3333569,229.15262 +4073,3.5678046,245.50221 +4074,2.6789596,163.28592 +4075,2.9764237,167.52197 +4076,2.304005,131.84427 +4077,3.146975,227.55782 +4078,1.6083606,87.879555 +4079,2.815178,176.20175 +4080,3.495257,234.55814 +4081,1.5393684,107.41841 +4082,3.7403045,239.37675 +4083,2.8375673,198.97707 +4084,1.7819203,93.04221 +4085,2.8477118,207.97621 +4086,2.1415095,141.00908 +4087,2.8665173,203.49811 +4088,3.5482123,245.4401 +4089,1.671951,114.11797 +4090,2.3133502,117.82355 +4091,3.132388,212.36543 +4092,3.366358,245.19713 +4093,1.910116,92.51121 +4094,1.4997826,81.12221 +4095,2.999065,186.72552 +4096,2.7547832,154.1972 +4097,2.5699067,173.87422 +4098,4.379852,252.99194 +4099,2.230578,124.056625 +4100,1.7967212,89.026596 +4101,2.07018,134.96762 +4102,2.370342,116.7061 +4103,3.0046608,207.94272 +4104,3.1622221,231.39677 +4105,2.905104,202.3507 +4106,2.3613875,144.17859 +4107,3.2191112,221.21858 +4108,1.7267796,79.19987 +4109,2.179936,149.88322 +4110,2.724779,173.70682 +4111,2.6040874,159.15846 +4112,1.6018589,79.492516 +4113,3.5108292,243.45135 +4114,1.9111028,118.47583 +4115,1.4431257,74.990364 +4116,2.185245,135.37045 +4117,1.828662,103.85582 +4118,1.4703882,73.86268 +4119,3.344708,222.97478 +4120,2.8928034,222.52821 +4121,2.5536141,154.35349 +4122,1.9272592,87.76256 +4123,2.2710357,152.98772 +4124,3.6605525,238.3342 +4125,2.145702,113.08344 +4126,2.7165372,175.59216 +4127,1.6787846,104.17187 +4128,2.1272058,134.74667 +4129,3.325054,235.25851 +4130,3.201071,222.24347 +4131,1.5706661,83.64482 +4132,2.656116,170.19754 +4133,1.8927907,111.34819 +4134,1.5057404,78.27649 +4135,2.8470626,201.54922 +4136,3.119046,205.57292 +4137,2.7179396,151.06529 +4138,3.7236717,232.36374 +4139,2.3261275,118.43498 +4140,2.193146,114.124405 +4141,2.7068756,204.27908 +4142,2.1916614,150.32387 +4143,2.108655,94.66217 +4144,2.6031084,190.79187 +4145,1.6974084,84.55554 +4146,3.4633389,214.51413 +4147,3.7062507,243.1192 +4148,2.1427958,107.414444 +4149,2.299479,162.45078 +4150,2.0690327,124.978134 +4151,2.1170309,179.29034 +4152,2.3866274,171.58803 +4153,2.4645429,178.04984 +4154,3.3085237,217.20473 +4155,2.7661517,166.12401 +4156,2.484538,149.94644 +4157,1.8254125,116.91533 +4158,2.226248,183.53851 +4159,2.4406896,136.97537 +4160,1.9193387,99.986084 +4161,1.4007753,87.286736 +4162,2.182409,111.5552 +4163,3.2915816,223.3766 +4164,1.8757702,93.30235 +4165,2.815764,176.03784 +4166,1.7129996,82.6959 +4167,3.3364494,224.65875 +4168,3.2300062,231.10172 +4169,2.464782,142.27719 +4170,2.8397892,184.0278 +4171,2.7885165,203.94595 +4172,1.8276743,96.32022 +4173,2.3027797,136.10297 +4174,2.097568,116.825806 +4175,1.7952793,99.94077 +4176,2.587422,190.197 +4177,2.8171933,156.96317 +4178,4.120992,246.35555 +4179,2.9915373,221.69452 +4180,2.4806106,188.7839 +4181,2.1992478,117.498985 +4182,3.1624904,227.97598 +4183,3.294823,228.65521 +4184,2.7282329,223.74622 +4185,2.4879591,187.26913 +4186,2.135248,111.43685 +4187,1.9217137,112.39288 +4188,1.8037587,95.65875 +4189,2.060518,139.34 +4190,2.0698938,116.665436 +4191,1.3566642,83.673836 +4192,3.3321643,194.20131 +4193,2.4155345,185.54822 +4194,3.8709254,245.49486 +4195,1.3608203,81.759384 +4196,2.1304321,116.34789 +4197,2.4316065,166.83589 +4198,2.5437586,169.69463 +4199,2.8025057,180.82327 +4200,2.7091136,192.92004 +4201,2.2149007,126.65497 +4202,2.6383867,181.29947 +4203,2.3075373,138.11316 +4204,2.4264302,154.59311 +4205,2.7037296,183.68796 +4206,1.7001721,106.94165 +4207,2.6195884,172.34521 +4208,3.104963,210.35257 +4209,2.2616634,148.99236 +4210,1.9391444,100.81752 +4211,2.5871427,184.04138 +4212,2.2722287,133.43547 +4213,4.126478,244.11049 +4214,1.9147775,92.67541 +4215,3.2233071,190.41896 +4216,2.852974,187.28967 +4217,2.0420954,145.18735 +4218,2.0446935,115.30359 +4219,2.0546055,100.29608 +4220,2.5733054,180.04254 +4221,1.7952162,98.33946 +4222,1.9164164,129.84921 +4223,1.9997302,96.76689 +4224,1.8646182,83.70332 +4225,3.3237636,229.51495 +4226,2.0499842,122.143265 +4227,2.9841082,194.71135 +4228,2.4210668,158.73044 +4229,1.334077,82.02132 +4230,1.9613385,111.57591 +4231,2.8899932,201.5151 +4232,2.124715,126.55983 +4233,1.57472,79.159485 +4234,1.6879017,89.66056 +4235,2.6680002,183.05823 +4236,1.548291,71.77466 +4237,1.8873513,99.74164 +4238,1.5527484,94.10704 +4239,2.0433948,105.13377 +4240,1.9551469,75.71862 +4241,2.1265159,182.66965 +4242,1.4469765,93.79622 +4243,3.2188644,226.86229 +4244,2.4045033,144.47629 +4245,2.3836122,131.55574 +4246,1.5094886,88.727585 +4247,2.0557532,129.40836 +4248,2.8471818,162.956 +4249,2.5292008,179.22531 +4250,1.9421713,90.85299 +4251,1.3106284,78.38758 +4252,2.5759997,194.17136 +4253,2.476216,181.48526 +4254,2.6772714,221.59006 +4255,2.5583365,158.24837 +4256,2.5896525,137.10718 +4257,2.02675,111.863495 +4258,2.1915257,120.7903 +4259,2.6526527,139.48306 +4260,2.4453223,158.09273 +4261,2.9807658,216.02145 +4262,1.9303215,105.72954 +4263,2.6136134,160.49602 +4264,2.3011448,159.0274 +4265,2.4418285,110.43758 +4266,2.4406383,152.32588 +4267,1.9413427,96.86304 +4268,3.1451125,227.19807 +4269,2.2873778,149.74945 +4270,3.574106,238.1956 +4271,3.384123,234.36072 +4272,1.6028968,92.18431 +4273,3.146797,197.59152 +4274,1.2418731,89.86974 +4275,2.2611415,158.91138 +4276,1.6230217,79.82641 +4277,1.8477517,86.45551 +4278,1.5343229,114.5075 +4279,2.3784091,146.32645 +4280,2.2532868,132.37979 +4281,2.3716786,131.39041 +4282,1.5194994,75.81701 +4283,2.1062655,92.39194 +4284,3.2584743,187.9122 +4285,3.0199351,217.71518 +4286,2.0131621,123.07178 +4287,2.3320518,158.75436 +4288,2.0757732,112.69237 +4289,2.8913085,197.32317 +4290,3.019669,197.1125 +4291,3.3731806,201.89221 +4292,2.9766839,193.82446 +4293,2.5483377,140.66261 +4294,1.956031,171.18619 +4295,2.4453745,177.49466 +4296,2.8911312,210.86714 +4297,2.4290638,119.977646 +4298,1.3478116,80.17006 +4299,1.8182738,125.19876 +4300,2.1870782,122.57415 +4301,3.045924,214.36536 +4302,2.6720707,179.31874 +4303,1.9214953,93.8695 +4304,2.811133,188.27551 +4305,2.4841952,151.75424 +4306,2.1987357,169.79056 +4307,2.2751992,126.403885 +4308,2.511723,168.875 +4309,2.4265637,140.28528 +4310,2.463245,153.38174 +4311,2.8129773,181.755 +4312,2.213606,116.960915 +4313,2.881492,189.17902 +4314,2.2609963,139.08899 +4315,1.41269,83.94302 +4316,2.9817657,222.7434 +4317,2.2589848,161.59369 +4318,2.6523452,181.0665 +4319,2.3927417,127.58751 +4320,2.8851132,207.65294 +4321,3.758105,238.49928 +4322,1.6016412,82.000824 +4323,2.7903907,186.6661 +4324,2.227282,142.13567 +4325,2.3231642,127.20982 +4326,2.2687972,131.64143 +4327,3.4758782,243.98645 +4328,3.0485466,218.4765 +4329,3.0054753,170.48116 +4330,2.4541626,179.33144 +4331,2.1058269,115.41141 +4332,2.2546308,162.61421 +4333,2.4633179,123.05021 +4334,3.2395039,188.08978 +4335,2.3447127,115.017944 +4336,2.219919,124.76761 +4337,1.9328786,119.614105 +4338,3.12422,207.12646 +4339,3.5952835,240.4045 +4340,2.7400565,182.3981 +4341,2.858553,163.00003 +4342,2.0369196,119.573586 +4343,3.2142594,182.75388 +4344,3.1160924,199.97539 +4345,2.5359418,160.0858 +4346,3.5801227,244.23024 +4347,2.6246903,209.64545 +4348,2.4384332,171.81134 +4349,2.6818519,149.88562 +4350,4.011935,245.45625 +4351,1.9489044,115.30142 +4352,1.857382,150.7313 +4353,1.9346133,127.499115 +4354,3.7204413,237.25415 +4355,2.557733,189.81993 +4356,1.8654006,96.293594 +4357,2.8413448,210.57533 +4358,2.9361856,172.92418 +4359,4.338131,249.69379 +4360,2.4240828,143.55164 +4361,2.569025,154.03091 +4362,2.9381344,155.0379 +4363,2.1615705,135.90402 +4364,2.2168329,113.977684 +4365,1.7162752,109.04959 +4366,3.6630158,222.81226 +4367,1.7929595,147.58359 +4368,2.5680144,155.3016 +4369,2.3743095,129.1913 +4370,1.6328995,96.31929 +4371,3.2720559,224.89658 +4372,3.8900857,242.26271 +4373,1.1255512,76.06173 +4374,2.7850316,180.2941 +4375,2.3389027,128.0778 +4376,2.0340078,106.46921 +4377,1.9648681,134.39746 +4378,2.213089,131.95139 +4379,3.7077293,246.49287 +4380,2.4390774,176.58005 +4381,2.1574469,137.9956 +4382,2.649652,147.79572 +4383,3.0330317,217.83867 +4384,1.6767455,96.61558 +4385,2.611939,186.01057 +4386,1.6668729,86.87556 +4387,2.1142583,134.03177 +4388,2.0012333,145.50961 +4389,1.9779214,92.05283 +4390,2.3214507,151.84329 +4391,3.7423565,242.60393 +4392,2.530546,195.60916 +4393,2.1539106,135.62341 +4394,3.0418603,182.45407 +4395,1.6912237,104.13739 +4396,2.675587,121.64761 +4397,3.3136182,228.37755 +4398,4.065196,252.03645 +4399,2.2832408,121.15442 +4400,2.1689916,133.22464 +4401,2.2996001,113.24957 +4402,1.5724957,113.52267 +4403,2.199144,114.46602 +4404,2.257587,128.52333 +4405,2.8092906,212.34875 +4406,2.546761,204.47136 +4407,2.5039697,178.03755 +4408,2.4305959,176.77382 +4409,1.654371,86.25268 +4410,3.1749861,186.65596 +4411,3.1794574,212.75557 +4412,2.591992,156.91106 +4413,3.0426748,225.01703 +4414,2.286672,138.6507 +4415,1.8471361,108.38817 +4416,2.1797848,146.53769 +4417,2.5195081,181.91289 +4418,2.5323524,119.54028 +4419,2.5301957,159.9417 +4420,1.5085559,83.79343 +4421,1.9869975,177.10956 +4422,3.2401912,208.63203 +4423,2.8366294,203.97299 +4424,3.034781,211.50601 +4425,2.2546875,170.2799 +4426,1.7708523,88.864395 +4427,3.69676,236.04729 +4428,2.6546328,135.12753 +4429,2.8666267,186.81993 +4430,1.5966351,88.04489 +4431,2.085051,118.65285 +4432,1.2636914,79.65697 +4433,2.1371565,103.626526 +4434,2.6025703,153.96767 +4435,2.0095787,93.95874 +4436,2.1632733,121.91104 +4437,1.699187,77.455376 +4438,2.341842,139.09967 +4439,2.9946005,185.43446 +4440,3.9396293,243.352 +4441,2.5824862,151.95529 +4442,2.7029066,174.71588 +4443,2.0558667,134.19034 +4444,2.9104333,169.59506 +4445,1.6011089,106.676605 +4446,2.0097077,103.102036 +4447,2.7959788,186.59601 +4448,2.8835359,203.56384 +4449,2.6268446,182.64833 +4450,2.1543164,127.87947 +4451,2.1712315,133.4863 +4452,3.4823997,229.10097 +4453,2.7601037,184.76318 +4454,2.747307,187.51726 +4455,1.591141,153.96918 +4456,2.8566604,212.28699 +4457,3.066876,221.15121 +4458,2.3675618,143.6263 +4459,2.507795,169.69565 +4460,2.4721646,129.86076 +4461,1.9712751,115.8578 +4462,3.343517,233.25308 +4463,1.9879429,117.282364 +4464,2.1705842,196.04486 +4465,3.4738197,235.50014 +4466,2.5615268,179.42622 +4467,3.8981717,246.94833 +4468,2.4254737,163.67752 +4469,4.3350444,251.64966 +4470,1.7458398,82.88456 +4471,2.7967165,221.0731 +4472,2.2998383,139.727 +4473,2.351253,157.51086 +4474,2.440588,190.14122 +4475,1.792274,86.6624 +4476,3.1482735,224.27257 +4477,3.089439,217.81224 +4478,2.5493832,146.85547 +4479,2.8157794,185.13573 +4480,2.1913004,140.64285 +4481,2.4809058,138.82214 +4482,2.7566714,173.27136 +4483,1.7905031,75.385155 +4484,3.1758053,225.91618 +4485,2.9718184,209.59428 +4486,2.1935499,115.80904 +4487,4.5902977,252.6544 +4488,2.1397152,120.402115 +4489,2.0526042,124.27028 +4490,1.8319829,128.6943 +4491,2.3904386,126.14664 +4492,4.405483,247.09888 +4493,1.9136786,94.389 +4494,2.4254146,141.25671 +4495,1.8703725,105.34461 +4496,2.802278,184.81598 +4497,3.1233487,216.32712 +4498,2.3006206,146.61102 +4499,2.6947277,129.5805 +4500,1.8267395,109.30898 +4501,2.7084491,150.96405 +4502,2.25384,137.8241 +4503,2.0146644,124.895065 +4504,2.1950383,142.48685 +4505,2.237978,103.2608 +4506,3.4775596,242.70746 +4507,2.6391208,158.47006 +4508,1.9613013,82.37593 +4509,2.732022,149.13504 +4510,3.1281085,194.86205 +4511,2.7962768,186.16656 +4512,2.1091719,110.78528 +4513,2.5100727,127.98314 +4514,2.9283702,211.76929 +4515,2.0224533,109.45477 +4516,2.2644787,136.7532 +4517,3.2662706,205.99765 +4518,2.2256057,138.00081 +4519,2.6715567,197.42236 +4520,2.0540109,144.55342 +4521,2.6866937,152.95451 +4522,1.8815863,99.74663 +4523,2.625239,209.18945 +4524,3.3749673,230.70216 +4525,2.8568296,204.09563 +4526,1.8243716,123.67538 +4527,3.8805096,245.02718 +4528,1.9739372,131.29744 +4529,2.4951909,94.65175 +4530,1.8937883,86.81317 +4531,3.5109706,240.58322 +4532,1.90614,104.18299 +4533,2.2936373,122.42291 +4534,2.4790902,199.33176 +4535,1.5080738,103.79735 +4536,1.9187527,121.41986 +4537,2.62109,153.67914 +4538,3.0166945,203.39264 +4539,3.88922,247.29465 +4540,3.1615865,220.15082 +4541,2.3804402,168.16904 +4542,1.841407,113.02656 +4543,2.5904791,151.45116 +4544,2.6448138,184.2573 +4545,2.1648092,138.1908 +4546,2.329102,122.42641 +4547,1.725022,80.64891 +4548,2.2266982,152.30731 +4549,2.2530282,126.242485 +4550,2.7498736,201.74413 +4551,3.0815787,199.24092 +4552,1.9737713,160.42424 +4553,2.1646388,99.323006 +4554,3.171397,239.18745 +4555,2.7739196,189.15408 +4556,2.4700282,127.67467 +4557,1.6066824,112.49811 +4558,2.5599933,218.94325 +4559,3.3456128,217.37254 +4560,1.6575931,84.6186 +4561,2.9068747,169.4414 +4562,2.2126188,116.45447 +4563,2.319761,131.40994 +4564,1.5168288,69.94686 +4565,2.5573845,151.05415 +4566,1.9413608,93.79501 +4567,2.6251416,150.2878 +4568,2.923717,202.88783 +4569,2.6576674,179.10217 +4570,2.4893298,136.59396 +4571,2.0580597,130.41951 +4572,1.8804225,128.7197 +4573,4.1678553,250.55171 +4574,2.832109,155.27843 +4575,2.484653,200.95853 +4576,3.6753244,237.24873 +4577,1.9435701,129.68335 +4578,2.2947056,177.15991 +4579,2.9490066,192.13136 +4580,2.5065253,136.354 +4581,4.564638,250.25626 +4582,2.1998842,164.35712 +4583,3.1595254,221.8943 +4584,2.5726237,158.37607 +4585,2.481955,180.37904 +4586,1.8039398,93.47805 +4587,2.1886125,114.478546 +4588,2.7683897,191.7792 +4589,2.6386676,211.65242 +4590,2.516931,154.54391 +4591,3.9703388,244.18097 +4592,2.8972378,209.65973 +4593,2.2853923,140.61568 +4594,2.4551919,164.21196 +4595,2.0577724,142.52863 +4596,2.909402,207.30212 +4597,1.6764029,112.45848 +4598,1.9709735,134.46834 +4599,2.4395397,124.80899 +4600,1.7409418,102.738106 +4601,3.405679,243.14383 +4602,2.9492567,217.89081 +4603,3.0561025,219.71892 +4604,2.4498773,180.10587 +4605,2.2836838,117.979225 +4606,1.8024437,97.024284 +4607,3.7793725,237.86182 +4608,3.9551525,233.7075 +4609,3.1452513,181.13776 +4610,1.3666008,86.256485 +4611,1.9875824,101.67421 +4612,2.4320142,178.12863 +4613,3.133716,219.97955 +4614,1.9617665,96.733154 +4615,2.4281719,144.62708 +4616,2.304853,93.308716 +4617,1.9913193,114.43236 +4618,2.0986252,135.90701 +4619,2.1875458,122.31436 +4620,1.9883429,126.26397 +4621,2.5771375,153.40863 +4622,2.4484224,167.59662 +4623,2.3264232,156.77522 +4624,2.3289673,186.17474 +4625,2.5546033,179.77295 +4626,2.3547597,142.03888 +4627,2.5643306,138.03864 +4628,2.3328195,178.63908 +4629,1.7632071,88.03613 +4630,2.476971,176.99806 +4631,4.4995418,249.93631 +4632,4.074403,240.18425 +4633,2.8784187,218.42696 +4634,2.5267794,178.52872 +4635,2.9960444,182.60422 +4636,3.023973,222.13466 +4637,2.324341,163.56778 +4638,2.4617152,153.48633 +4639,1.7638712,135.96075 +4640,2.388903,168.52483 +4641,1.7849872,109.783325 +4642,1.9163449,98.762924 +4643,2.3907511,154.94522 +4644,2.0913951,106.90399 +4645,2.0311413,141.60944 +4646,2.6905055,197.80736 +4647,1.9654915,107.52096 +4648,2.3644044,182.4415 +4649,2.4577765,142.10356 +4650,1.5321653,79.04583 +4651,2.2392483,157.71136 +4652,2.4428341,144.78592 +4653,2.094843,128.09048 +4654,2.6029754,146.5426 +4655,2.6383824,178.04634 +4656,3.271194,217.24338 +4657,2.9142556,174.83138 +4658,1.9362103,149.12903 +4659,2.2450602,119.1722 +4660,2.140157,115.79657 +4661,2.9975939,225.65407 +4662,1.7463752,130.51617 +4663,1.9745414,105.76701 +4664,3.6130016,243.67313 +4665,2.8130476,178.824 +4666,2.1059775,126.906296 +4667,3.2622979,233.75027 +4668,3.0125508,200.9225 +4669,3.1006835,226.66594 +4670,2.8393445,207.2943 +4671,2.1026285,138.83789 +4672,2.8232942,204.20807 +4673,2.054016,110.47423 +4674,1.9393032,95.532364 +4675,2.552348,186.39569 +4676,2.71756,174.34079 +4677,1.1794275,81.03997 +4678,3.5711896,231.71078 +4679,2.7073073,175.83946 +4680,1.7609771,82.23665 +4681,1.5302951,88.54298 +4682,2.7674136,171.85379 +4683,3.7435544,239.86423 +4684,1.903393,108.34799 +4685,2.5972533,207.54747 +4686,3.0726016,212.04807 +4687,1.6257466,100.86389 +4688,2.2161384,118.47103 +4689,1.4755315,81.63373 +4690,2.167454,122.17751 +4691,1.9347479,110.52821 +4692,2.5668395,183.15901 +4693,2.7695575,198.61516 +4694,2.6901484,174.47563 +4695,3.662102,218.00188 +4696,2.9179943,229.56415 +4697,2.689632,178.72975 +4698,1.5066515,85.70383 +4699,4.6529264,252.42554 +4700,1.933507,115.68576 +4701,1.7473577,150.02664 +4702,2.8283668,147.90729 +4703,2.0660465,152.22742 +4704,2.421288,142.00923 +4705,2.226804,117.46292 +4706,2.5243726,143.345 +4707,3.0091248,201.98918 +4708,2.8826575,211.28691 +4709,2.0112967,114.69382 +4710,5.55691,254.66841 +4711,2.5715115,169.13382 +4712,2.5676472,151.99911 +4713,2.3449874,142.29056 +4714,2.112867,163.43323 +4715,3.6884344,230.64479 +4716,2.779531,222.56665 +4717,2.547159,155.54065 +4718,1.5660862,90.91038 +4719,3.4235363,218.29189 +4720,3.432487,228.87662 +4721,1.6585381,106.91171 +4722,1.8741214,96.548615 +4723,2.1413436,104.64838 +4724,3.2105892,237.77916 +4725,1.857589,97.79628 +4726,2.6688924,195.25626 +4727,2.6031828,193.79869 +4728,1.9466063,133.04776 +4729,2.107607,96.57665 +4730,3.744868,236.41458 +4731,2.021305,117.98102 +4732,1.8795571,95.24127 +4733,2.4244256,118.12541 +4734,1.703788,93.655136 +4735,1.9897485,108.47262 +4736,3.5033798,236.02701 +4737,1.6889627,106.02022 +4738,2.592074,146.72104 +4739,2.6958385,171.48288 +4740,2.2387064,124.4077 +4741,1.9610398,135.28958 +4742,2.9476068,214.01486 +4743,2.4462032,171.0081 +4744,2.7088206,140.32236 +4745,3.2614045,209.74171 +4746,2.0112514,132.60986 +4747,3.6744757,245.38289 +4748,3.5530698,239.64594 +4749,2.7242627,165.35474 +4750,3.97331,232.57507 +4751,2.1987576,157.03894 +4752,3.0075402,185.36458 +4753,1.6898879,124.20444 +4754,3.2511706,194.58476 +4755,2.1690507,155.94862 +4756,1.9267323,110.990685 +4757,3.0799615,219.4887 +4758,2.0011094,125.15895 +4759,2.0298645,161.06941 +4760,2.3582966,136.99841 +4761,1.8790903,102.0013 +4762,2.4352183,165.90189 +4763,3.101221,210.12782 +4764,1.9572592,153.96411 +4765,2.09869,120.68061 +4766,1.6606061,113.51611 +4767,2.1678796,163.51775 +4768,2.1239274,162.0288 +4769,3.2976108,219.08167 +4770,1.9311786,115.82789 +4771,1.8151357,99.49454 +4772,3.076564,172.72809 +4773,2.4960551,150.66574 +4774,1.6668212,107.2197 +4775,1.9927082,126.82037 +4776,2.5105524,182.49762 +4777,3.3129983,209.8128 +4778,2.5067427,198.01352 +4779,2.714977,208.6775 +4780,2.9024405,198.45772 +4781,2.32764,131.09094 +4782,3.276964,212.18022 +4783,1.9281869,93.22382 +4784,2.5120282,191.60468 +4785,4.063405,249.42413 +4786,1.7713144,131.0962 +4787,2.796552,200.32585 +4788,3.8376737,242.62602 +4789,1.7670151,93.446465 +4790,2.445744,136.14514 +4791,2.3068948,160.68916 +4792,2.6419904,182.57709 +4793,2.3936005,124.08641 +4794,2.0796335,135.24057 +4795,2.509825,128.98822 +4796,2.0227349,153.06714 +4797,3.2547755,201.72566 +4798,3.4601393,231.3382 +4799,2.946956,183.81181 +4800,3.5436924,238.90382 +4801,1.9452116,111.68169 +4802,4.2982564,248.25758 +4803,3.1519837,229.77614 +4804,2.643707,156.70006 +4805,2.2138941,137.53978 +4806,3.961623,248.5683 +4807,3.3040237,224.44144 +4808,2.7523139,167.81787 +4809,2.6320775,170.25122 +4810,3.2355974,227.93004 +4811,1.8595623,91.921555 +4812,3.5367637,246.2299 +4813,2.8329163,169.29672 +4814,3.8580983,246.12003 +4815,2.5255961,175.37738 +4816,3.0736375,198.73332 +4817,2.3577447,176.89432 +4818,1.2914541,88.61249 +4819,1.8179797,106.84522 +4820,1.9759458,100.380005 +4821,3.5947223,226.056 +4822,1.5470042,84.58438 +4823,3.0572333,203.70158 +4824,2.247943,149.81313 +4825,2.0755653,126.28971 +4826,2.1143434,136.4252 +4827,3.265582,230.90105 +4828,2.9766085,188.20456 +4829,2.052412,137.9108 +4830,3.4547284,241.19449 +4831,2.42267,102.58263 +4832,2.165428,120.80572 +4833,1.8864489,120.34413 +4834,2.0622232,118.715546 +4835,4.866713,253.61343 +4836,1.4858778,75.71708 +4837,2.188478,135.44507 +4838,2.6352654,196.52078 +4839,2.0728836,95.59905 +4840,2.097035,114.88464 +4841,2.1488466,123.27078 +4842,2.5605848,153.08434 +4843,2.2733107,126.7915 +4844,2.178077,112.456924 +4845,2.7576752,143.11226 +4846,3.3881395,245.53865 +4847,3.1311634,203.50447 +4848,2.1769829,133.65262 +4849,1.9964403,117.178986 +4850,2.3151636,136.56445 +4851,1.7533381,122.75109 +4852,1.8428531,110.329865 +4853,3.1671484,211.66107 +4854,3.7889774,232.11624 +4855,2.185618,140.50119 +4856,2.6528785,177.27402 +4857,1.6618003,91.84729 +4858,2.596686,176.8659 +4859,2.851886,144.99367 +4860,2.4596195,171.38437 +4861,2.3187218,199.87503 +4862,3.1394994,206.14595 +4863,2.005091,94.358765 +4864,2.542552,215.27663 +4865,2.0416286,135.9076 +4866,1.3433646,76.01631 +4867,1.4828161,111.433334 +4868,1.551236,104.088554 +4869,1.5470793,77.89759 +4870,1.9979064,125.20493 +4871,2.5252585,121.77059 +4872,2.866488,217.01611 +4873,2.5976472,161.49849 +4874,3.2177143,213.4705 +4875,1.7356768,152.97812 +4876,2.7195606,178.25989 +4877,2.0550573,115.96295 +4878,2.4873333,150.24393 +4879,2.3663225,132.13206 +4880,2.6130505,203.97395 +4881,2.5815413,173.5727 +4882,1.7035329,77.36049 +4883,3.4826503,241.71014 +4884,2.1270616,94.051956 +4885,1.5946468,108.33569 +4886,2.3550627,154.0824 +4887,2.589313,179.2764 +4888,2.0127587,102.93948 +4889,1.994275,111.30585 +4890,5.8807974,254.87321 +4891,2.8060753,179.9183 +4892,3.3743315,229.91768 +4893,3.2506473,228.071 +4894,2.2915983,151.60637 +4895,2.4515786,148.0002 +4896,2.055589,144.67622 +4897,1.9919996,89.68958 +4898,2.4109702,148.46512 +4899,1.95379,108.24579 +4900,3.783067,246.51997 +4901,1.6773306,88.044624 +4902,2.383435,159.24536 +4903,2.9967163,171.08698 +4904,2.459247,164.99773 +4905,1.6704261,84.17767 +4906,2.5507088,131.79526 +4907,1.6238877,111.00687 +4908,2.019266,122.15646 +4909,2.043431,107.562256 +4910,1.7057996,87.35506 +4911,3.164527,212.07205 +4912,2.4686587,128.88074 +4913,2.1718738,134.36221 +4914,4.8571167,249.17897 +4915,2.2566087,140.47598 +4916,2.4906816,152.4834 +4917,2.9016762,211.3226 +4918,2.6810086,199.07013 +4919,1.3887148,89.41754 +4920,2.0427308,124.20118 +4921,3.0324626,207.5816 +4922,3.0308452,210.30449 +4923,2.1996722,142.32166 +4924,2.374022,167.68018 +4925,1.9632185,138.58868 +4926,2.6756353,140.46654 +4927,1.7524678,86.94081 +4928,2.537342,172.42456 +4929,2.4734645,128.45013 +4930,2.6556122,156.35114 +4931,2.180435,123.7639 +4932,2.7745433,180.13577 +4933,2.9113288,217.0404 +4934,1.8029275,127.03171 +4935,2.6124938,164.29782 +4936,1.9285705,104.96505 +4937,2.274229,119.13161 +4938,2.4495711,140.07523 +4939,1.8109286,112.1767 +4940,3.116329,228.48503 +4941,2.881909,199.94243 +4942,2.0572922,112.02277 +4943,2.0446405,139.61179 +4944,2.0813677,120.50188 +4945,2.445281,161.88287 +4946,3.1330695,196.8676 +4947,2.0884426,162.34041 +4948,2.006068,118.53369 +4949,2.8421361,196.02261 +4950,2.3881783,137.06845 +4951,3.2817907,240.128 +4952,2.8862674,178.67374 +4953,2.6932824,198.61143 +4954,2.4251506,172.6835 +4955,2.7566543,189.81297 +4956,2.2480245,132.53986 +4957,2.6210344,167.97472 +4958,1.8890786,117.57258 +4959,1.8214943,85.427505 +4960,2.1583457,137.3641 +4961,2.3505619,157.98137 +4962,1.3123815,86.41521 +4963,2.7037501,195.88602 +4964,2.2168794,116.096146 +4965,2.5321908,129.88336 +4966,1.5054389,80.403076 +4967,1.4219682,82.25444 +4968,1.8608298,113.79221 +4969,2.0438094,102.27903 +4970,2.173575,135.63232 +4971,1.8045533,107.190636 +4972,2.8743298,184.74973 +4973,2.4912546,140.08905 +4974,2.7712386,182.21576 +4975,2.5364966,187.22482 +4976,3.010418,219.03156 +4977,3.3671088,199.46455 +4978,2.965834,211.63548 +4979,1.6184801,95.48064 +4980,2.1523135,162.26813 +4981,1.5584109,87.69624 +4982,1.4863122,89.632675 +4983,2.3356984,132.32605 +4984,2.0104997,103.1662 +4985,1.8637056,101.804306 +4986,2.270947,147.66638 +4987,3.341436,239.80885 +4988,2.5081859,159.79974 +4989,1.8440061,103.95843 +4990,2.8561568,176.71227 +4991,3.4748678,221.96504 +4992,2.8521988,186.2254 +4993,2.602108,145.79617 +4994,2.922593,188.55183 +4995,2.4200826,159.96713 +4996,2.0361712,83.89647 +4997,3.339888,195.19444 +4998,2.4052882,161.70404 +4999,3.0681107,182.37068 +5000,2.6814113,189.32935 +5001,3.8263397,243.66307 +5002,2.70675,205.69896 +5003,2.7265494,201.5661 +5004,2.6859493,222.72404 +5005,2.317658,138.07242 +5006,3.0969195,234.19179 +5007,2.3353837,182.83316 +5008,1.7294985,94.985954 +5009,2.0376818,126.56691 +5010,1.436799,72.16797 +5011,3.231686,240.34138 +5012,2.6948888,171.47385 +5013,2.4001803,163.3148 +5014,2.1119542,120.633965 +5015,2.2183824,103.6915 +5016,2.2924454,119.79988 +5017,2.0479999,147.46426 +5018,3.20625,215.48265 +5019,2.1697567,125.30218 +5020,3.034083,196.04422 +5021,1.8562573,126.78667 +5022,2.7011905,151.6688 +5023,1.7870998,108.21054 +5024,2.7856581,136.39645 +5025,1.6088508,84.19731 +5026,1.8458307,119.61629 +5027,2.2957816,137.20322 +5028,3.677854,230.04666 +5029,2.218635,141.14078 +5030,3.3467987,228.93503 +5031,2.7915308,206.99797 +5032,2.2577355,143.76367 +5033,2.268537,116.20658 +5034,2.5458179,158.53397 +5035,2.29979,141.02872 +5036,2.962526,218.65854 +5037,1.5895419,93.19653 +5038,2.3360696,120.1051 +5039,3.0916467,210.57571 +5040,3.132934,184.5591 +5041,2.1782434,107.99429 +5042,3.6900208,243.08482 +5043,2.6501043,166.50574 +5044,3.1802661,229.36914 +5045,1.6863654,86.63578 +5046,1.8998634,117.66475 +5047,4.1206064,250.64842 +5048,3.0336869,192.23192 +5049,2.9716072,211.44585 +5050,3.5704482,230.08136 +5051,4.030995,247.94133 +5052,2.8775773,208.11192 +5053,2.2472947,145.52716 +5054,2.916781,214.3451 +5055,1.8997911,106.12184 +5056,1.8713753,96.35822 +5057,2.7694025,147.83414 +5058,2.1898496,164.32715 +5059,2.7611885,191.70268 +5060,2.5291784,181.32199 +5061,2.2769053,138.22052 +5062,2.5889344,149.15498 +5063,3.376034,222.45952 +5064,2.3150315,175.46161 +5065,2.2797768,126.29285 +5066,2.2390292,186.34854 +5067,2.0310597,124.60011 +5068,3.0434556,198.54292 +5069,1.9549191,147.02448 +5070,1.8333974,105.38299 +5071,3.2113633,221.44403 +5072,3.302746,218.90361 +5073,3.9562469,231.4022 +5074,3.4268281,232.61627 +5075,2.7168536,202.00415 +5076,2.69438,190.16501 +5077,2.5228403,181.09708 +5078,2.3563976,135.36487 +5079,2.5933435,178.9827 +5080,2.3423812,141.6241 +5081,2.9096453,165.12808 +5082,1.4873278,83.8971 +5083,3.466784,215.22353 +5084,2.567726,184.22983 +5085,2.6321585,115.915405 +5086,2.2389536,107.92007 +5087,2.7391138,198.06497 +5088,2.4802227,151.23917 +5089,2.340519,147.22232 +5090,1.6072065,87.97506 +5091,1.9694488,101.751526 +5092,1.5421418,116.43662 +5093,3.6630573,230.15387 +5094,3.579185,231.18106 +5095,3.4513059,222.63322 +5096,1.8844621,149.73639 +5097,3.2364237,227.32077 +5098,1.7285874,95.50616 +5099,3.3068848,224.84233 +5100,1.8989404,121.29957 +5101,2.0193436,114.71431 +5102,2.194347,124.94158 +5103,1.3966198,72.02599 +5104,2.3035576,145.27496 +5105,2.0508912,137.5577 +5106,1.8671389,84.09419 +5107,3.0651133,192.9466 +5108,3.791991,246.51042 +5109,2.8839226,223.5237 +5110,1.7475375,96.30184 +5111,2.2122731,148.9493 +5112,1.774828,91.980515 +5113,3.5682118,237.44472 +5114,3.0597205,197.02168 +5115,2.8159559,188.37437 +5116,1.9258491,108.46956 +5117,2.484789,137.76004 +5118,2.7252927,146.40018 +5119,3.1850944,231.91397 +5120,1.9669418,115.631775 +5121,2.9572673,197.69818 +5122,2.831018,206.27039 +5123,2.3404276,135.25111 +5124,2.1067572,108.38624 +5125,1.9431603,111.72775 +5126,4.1344886,248.00777 +5127,2.9511905,170.69272 +5128,2.6393008,136.26433 +5129,2.789173,170.48007 +5130,1.7925316,87.896706 +5131,2.5071614,164.2201 +5132,2.391173,128.31912 +5133,2.6140282,156.84015 +5134,2.6555908,145.3168 +5135,3.3994505,230.06851 +5136,2.1226337,119.439026 +5137,2.3732293,140.00772 +5138,1.6542134,85.684296 +5139,2.2244694,119.56405 +5140,2.2024205,103.403046 +5141,2.776565,157.08755 +5142,2.2482247,149.76427 +5143,1.5668249,93.70889 +5144,2.6432881,172.32053 +5145,1.8870205,79.06552 +5146,2.5577745,160.45459 +5147,1.2565017,77.60831 +5148,3.436702,230.42767 +5149,3.8472161,245.07335 +5150,1.928899,98.47498 +5151,2.9714212,222.60674 +5152,3.2228484,182.44691 +5153,1.9002692,95.62337 +5154,3.2419186,227.51704 +5155,1.4604352,79.73778 +5156,2.1883063,114.48128 +5157,1.6852617,102.4523 +5158,1.6673615,80.49711 +5159,2.7833047,220.61093 +5160,2.6888878,149.9997 +5161,2.539076,148.44629 +5162,2.6848254,169.43314 +5163,2.0222795,121.293625 +5164,1.968493,106.593544 +5165,1.7363309,87.78859 +5166,1.974376,142.02133 +5167,2.3545816,154.66461 +5168,2.483152,187.11435 +5169,2.114794,154.82477 +5170,2.4666011,144.47882 +5171,3.835395,244.1959 +5172,1.9273678,128.87494 +5173,2.752984,199.41008 +5174,4.144418,249.06021 +5175,1.9173229,108.334015 +5176,2.1771502,101.23587 +5177,2.6098502,150.78412 +5178,2.5370584,191.39655 +5179,1.2524152,85.34961 +5180,1.800803,102.44655 +5181,2.584149,182.99896 +5182,2.7486691,176.20338 +5183,2.9946322,212.78645 +5184,2.9426637,211.4554 +5185,1.70975,94.0188 +5186,3.2515779,222.27138 +5187,3.4959042,243.51031 +5188,2.7549074,173.00427 +5189,3.0372276,213.6469 +5190,1.7323062,83.369736 +5191,2.161152,163.9224 +5192,2.232553,107.650536 +5193,3.3443885,218.48434 +5194,2.8641639,201.49896 +5195,1.9750946,95.17267 +5196,2.2830567,109.54106 +5197,3.0767603,208.17558 +5198,1.2268641,78.858185 +5199,2.138501,133.52405 +5200,2.7913566,195.25426 +5201,2.770235,198.45448 +5202,1.9928378,153.9036 +5203,1.7906578,93.29189 +5204,1.9486327,118.09093 +5205,2.8063889,202.54475 +5206,2.5483012,192.65205 +5207,3.7539134,240.02103 +5208,2.560985,179.19785 +5209,2.2588112,99.94945 +5210,1.3021929,89.73877 +5211,2.7114124,201.57738 +5212,2.204761,110.8044 +5213,3.4614348,240.21678 +5214,3.863437,236.29314 +5215,2.0803685,178.0465 +5216,3.5516922,241.56836 +5217,3.1492715,237.38039 +5218,2.9739738,158.71198 +5219,2.715164,195.2411 +5220,1.9761128,123.91226 +5221,2.8239415,163.3042 +5222,4.70667,250.42288 +5223,4.353563,252.5588 +5224,3.9817684,239.62126 +5225,2.28323,120.05533 +5226,2.349512,144.5665 +5227,2.3554196,118.11566 +5228,1.8064517,130.27884 +5229,3.2591252,239.45868 +5230,2.079296,105.41128 +5231,1.9898545,104.923515 +5232,2.7974017,188.52151 +5233,2.280168,171.28683 +5234,2.6129022,150.09549 +5235,1.8775442,89.57803 +5236,2.6033647,175.3302 +5237,2.764603,188.44081 +5238,2.0183845,132.83704 +5239,3.0856555,227.9735 +5240,1.4737674,83.35859 +5241,2.598602,170.22601 +5242,2.0175204,94.08029 +5243,3.1790788,223.40318 +5244,2.9191241,197.1925 +5245,3.6861534,230.99432 +5246,1.7958697,82.677124 +5247,2.786503,202.45872 +5248,1.8085023,114.8822 +5249,2.4808598,133.97278 +5250,2.5819077,143.26123 +5251,2.6635287,180.17612 +5252,2.7288353,189.17474 +5253,2.3455098,147.39941 +5254,2.3107839,175.76456 +5255,4.289442,252.51012 +5256,3.1455655,182.92346 +5257,1.9098572,88.910515 +5258,2.0364864,138.56735 +5259,2.2346628,135.34451 +5260,2.3127432,149.6703 +5261,3.1335967,217.84227 +5262,2.008874,141.53207 +5263,1.8736786,120.58219 +5264,2.9628282,186.65192 +5265,1.7827194,94.88162 +5266,2.7313492,181.77547 +5267,2.783571,142.99777 +5268,2.8627179,210.12659 +5269,2.3640566,145.80937 +5270,2.6135848,194.50598 +5271,3.2783103,229.45906 +5272,2.3778965,134.88956 +5273,1.6246368,91.51987 +5274,3.0350184,203.01593 +5275,3.161077,218.91652 +5276,2.797692,185.34268 +5277,3.1391308,228.75484 +5278,2.6309943,158.49661 +5279,2.8002496,211.44783 +5280,1.8350751,117.95161 +5281,2.793635,196.92613 +5282,1.7136595,99.626526 +5283,2.5337596,156.8177 +5284,2.5579863,131.35764 +5285,1.7173141,111.11485 +5286,2.6990275,216.44382 +5287,1.5174048,78.09341 +5288,2.6410165,171.86469 +5289,2.67158,227.56763 +5290,2.4210799,130.99088 +5291,2.8596013,188.31973 +5292,1.7393095,96.624756 +5293,2.7607436,153.80022 +5294,2.4378138,148.61436 +5295,2.4721527,122.26361 +5296,3.0063653,220.72797 +5297,3.0582018,237.42467 +5298,2.9973378,207.76976 +5299,1.9926848,126.911446 +5300,2.5987012,158.97435 +5301,2.6585906,217.62965 +5302,2.6145473,163.50589 +5303,2.780078,205.07835 +5304,1.8491127,92.160095 +5305,2.0768085,109.25304 +5306,2.270739,147.29158 +5307,1.425816,75.17543 +5308,2.0640762,126.15971 +5309,3.0149214,217.906 +5310,3.246712,218.9894 +5311,2.5777574,172.81482 +5312,2.1398132,106.12123 +5313,3.4964242,229.41057 +5314,3.8809807,247.95123 +5315,4.1130075,244.34967 +5316,2.196654,216.15483 +5317,2.1556945,106.81406 +5318,2.0948677,156.5705 +5319,2.263144,148.00287 +5320,1.7924956,98.03284 +5321,2.1906404,146.22441 +5322,2.6827185,194.0849 +5323,3.2421453,218.9366 +5324,2.9728463,214.05696 +5325,2.7687178,151.41531 +5326,1.858775,119.698425 +5327,2.7416801,187.05508 +5328,1.5394294,104.38257 +5329,2.09025,119.55835 +5330,1.7039626,81.28433 +5331,2.2415242,137.31334 +5332,2.7810738,211.44496 +5333,2.294949,125.36319 +5334,3.015254,186.37459 +5335,1.9015596,149.79358 +5336,3.0822864,183.03915 +5337,3.987573,239.46738 +5338,1.9788997,87.5973 +5339,1.6963527,97.90358 +5340,2.5333061,155.92946 +5341,2.2802272,113.974335 +5342,2.2172582,153.1601 +5343,1.8564192,130.59105 +5344,1.612934,123.43451 +5345,2.7821336,184.69794 +5346,3.1446486,190.83206 +5347,3.4744272,234.79631 +5348,1.4356387,82.26433 +5349,2.3467987,149.56366 +5350,2.2495482,132.89096 +5351,2.5311604,167.93689 +5352,1.6951973,84.596695 +5353,2.0600724,115.92206 +5354,2.0912364,148.74014 +5355,2.14988,120.25063 +5356,1.5862156,75.232765 +5357,1.9021264,120.00246 +5358,2.7299542,175.66812 +5359,1.6440005,89.65903 +5360,2.622404,159.32869 +5361,2.329241,182.68152 +5362,2.4803042,130.16376 +5363,2.9056175,213.80759 +5364,4.436211,250.9995 +5365,2.5418434,160.51045 +5366,2.3516936,128.44919 +5367,4.390777,245.32559 +5368,3.6280642,236.45816 +5369,2.8199465,206.62889 +5370,2.344954,172.26021 +5371,2.146184,179.28735 +5372,2.3662333,169.25737 +5373,2.4782853,156.81458 +5374,3.0019572,157.07639 +5375,1.7796502,92.19322 +5376,2.3142705,148.67386 +5377,2.642209,190.12236 +5378,3.07624,196.49461 +5379,2.0197463,113.45413 +5380,3.6158452,247.38457 +5381,4.759383,251.72993 +5382,1.6675506,111.4343 +5383,3.0343468,209.57867 +5384,1.9089195,111.19919 +5385,2.415832,149.67232 +5386,1.7449105,88.476746 +5387,2.591124,174.17078 +5388,1.7231936,115.302666 +5389,2.8213658,178.57135 +5390,2.9921248,236.3398 +5391,2.421536,167.82716 +5392,2.3328757,114.90147 +5393,2.3070784,131.91896 +5394,3.1338658,216.13132 +5395,2.6291163,190.96434 +5396,1.8986808,109.65633 +5397,3.112611,184.06662 +5398,2.318907,147.0906 +5399,2.9106514,219.4677 +5400,2.999879,196.24434 +5401,2.2367854,137.69638 +5402,2.2864053,151.54611 +5403,1.9765087,112.23047 +5404,2.0105467,131.55817 +5405,2.0380106,111.43509 +5406,1.24847,80.56215 +5407,2.351351,116.50609 +5408,2.70883,193.4297 +5409,2.6839945,135.57275 +5410,3.1260228,190.26784 +5411,2.4852762,159.81644 +5412,3.1223094,215.29222 +5413,2.9591305,184.96048 +5414,2.0541086,106.41972 +5415,1.7671226,93.05611 +5416,2.0438113,136.75958 +5417,1.0525765,69.55967 +5418,2.2860966,129.04813 +5419,3.2182999,224.26437 +5420,2.0474684,89.46401 +5421,2.25677,127.411545 +5422,2.0426397,149.55704 +5423,2.19004,97.232315 +5424,2.2701893,134.37415 +5425,1.8604223,110.24214 +5426,3.1952958,240.44704 +5427,4.011775,251.57515 +5428,2.6789908,193.81409 +5429,2.5315208,128.99878 +5430,2.5394216,105.74289 +5431,2.9823027,198.5925 +5432,1.7252156,86.56397 +5433,2.4043322,155.26956 +5434,2.0148442,117.89392 +5435,2.4580193,192.41414 +5436,1.5901058,78.12874 +5437,2.156058,142.8864 +5438,3.2160249,190.19516 +5439,1.5913517,83.839386 +5440,2.1609802,139.06941 +5441,2.3967257,155.22061 +5442,1.6519767,87.38447 +5443,2.1875203,97.66452 +5444,2.4159715,155.40123 +5445,2.1434574,114.85893 +5446,1.8082235,83.66697 +5447,2.6058414,200.12091 +5448,2.2012508,112.9722 +5449,2.5075126,183.08897 +5450,4.1454573,250.12369 +5451,1.366183,77.45114 +5452,2.544498,133.92136 +5453,2.218696,145.87088 +5454,1.3895658,87.36597 +5455,3.7946649,239.25378 +5456,1.4013549,77.81395 +5457,3.7137806,241.66832 +5458,3.0313888,204.92465 +5459,2.1917386,90.703476 +5460,2.6226075,175.15475 +5461,3.375865,204.11607 +5462,1.7324557,97.05556 +5463,2.1566105,120.53453 +5464,2.6318777,175.69028 +5465,2.8335683,152.54352 +5466,2.9776216,233.02188 +5467,2.2658153,130.41602 +5468,2.4126968,167.82512 +5469,2.4822583,122.47507 +5470,2.5114844,158.92615 +5471,2.6675804,160.62973 +5472,2.55271,167.68864 +5473,2.6016076,154.0078 +5474,2.6473937,194.79431 +5475,4.339507,243.85522 +5476,2.1832702,146.55414 +5477,2.241484,160.77295 +5478,2.1309228,143.1094 +5479,2.0457942,114.754486 +5480,2.9155035,216.98474 +5481,2.329272,130.34271 +5482,2.4160593,166.0492 +5483,3.5181239,221.03464 +5484,3.4610796,224.79126 +5485,2.2873516,166.08078 +5486,2.3425202,178.23726 +5487,2.4937344,138.79294 +5488,2.4410336,108.4631 +5489,1.8959202,93.61369 +5490,2.3071592,128.46574 +5491,2.4981775,124.362656 +5492,2.0970135,118.690994 +5493,2.7403228,189.4572 +5494,2.0777528,91.99335 +5495,3.3915825,237.52531 +5496,2.7257018,189.98138 +5497,2.735882,173.3223 +5498,2.2770524,113.35686 +5499,2.6111784,136.41513 +5500,2.571759,191.04161 +5501,1.8999244,91.605995 +5502,2.2987463,137.25708 +5503,2.448654,160.01233 +5504,1.8445129,118.09514 +5505,2.366218,198.37273 +5506,3.8949406,241.98059 +5507,2.9624007,213.2606 +5508,2.1219034,136.15652 +5509,2.113344,124.923294 +5510,2.106042,148.61978 +5511,2.1511524,121.92058 +5512,3.331245,237.48172 +5513,1.8057646,130.02374 +5514,2.17176,116.930824 +5515,2.741166,128.16568 +5516,3.3056083,234.20581 +5517,1.8325489,76.903305 +5518,2.4611802,132.74792 +5519,2.885241,196.4961 +5520,2.587132,132.89743 +5521,3.1327825,171.20221 +5522,2.2005825,130.18832 +5523,2.4280164,140.35889 +5524,2.1437027,97.125946 +5525,2.218584,115.10115 +5526,2.269665,117.92876 +5527,2.5812812,129.57693 +5528,1.780535,125.14416 +5529,2.2563798,135.2409 +5530,2.4682221,152.2203 +5531,3.2053218,210.13643 +5532,2.3739598,183.5572 +5533,2.844605,170.15787 +5534,2.046314,127.58867 +5535,1.7391429,102.613815 +5536,2.2295175,130.91245 +5537,2.8380897,174.86934 +5538,2.2652338,143.15999 +5539,1.4758737,89.47221 +5540,2.6958356,203.57173 +5541,2.9311218,170.42056 +5542,2.6749995,184.13187 +5543,3.4447923,234.39142 +5544,1.6383412,84.39783 +5545,2.6943421,157.80779 +5546,3.6395528,233.52594 +5547,1.4941132,96.90282 +5548,2.6695256,208.04044 +5549,3.2568302,229.36365 +5550,2.128508,109.03572 +5551,2.1264355,141.3927 +5552,3.3165193,204.93062 +5553,2.3769295,141.63351 +5554,3.1441145,219.47171 +5555,2.3396916,132.9386 +5556,1.0716269,78.18597 +5557,3.142097,228.04175 +5558,2.2904184,168.99838 +5559,3.4032626,226.98958 +5560,2.0000808,150.07397 +5561,2.3338008,163.18434 +5562,1.6306045,110.21231 +5563,2.781323,175.97699 +5564,3.1757288,225.4027 +5565,3.8055356,232.63463 +5566,2.450403,160.81522 +5567,3.0915987,181.82425 +5568,3.149013,192.24084 +5569,1.6421818,101.73689 +5570,2.6269934,195.04457 +5571,1.8608934,98.95261 +5572,1.7718793,118.42644 +5573,2.2738774,145.41144 +5574,1.6464088,84.31331 +5575,2.141171,125.42723 +5576,2.098518,154.23407 +5577,2.7311683,204.76491 +5578,2.6526604,159.88342 +5579,2.447178,116.07999 +5580,2.461944,176.00504 +5581,2.555472,180.21284 +5582,1.5979245,75.69234 +5583,1.5102128,83.18949 +5584,2.7295442,171.63203 +5585,2.7728162,185.99857 +5586,4.155881,250.1539 +5587,2.4248157,172.67358 +5588,1.735903,114.110565 +5589,2.283931,113.37813 +5590,2.2738068,151.57101 +5591,2.4020255,159.57037 +5592,3.2770574,236.85779 +5593,1.8421427,87.12501 +5594,2.3887298,121.54808 +5595,3.052126,222.50853 +5596,2.3205295,129.4966 +5597,1.7655743,80.78116 +5598,2.771607,191.87009 +5599,2.5829024,172.7091 +5600,2.0489135,123.00126 +5601,2.4580414,176.96268 +5602,4.5379777,252.36368 +5603,1.649093,92.367836 +5604,3.1262136,198.61516 +5605,2.0882618,107.5688 +5606,3.0468643,220.12686 +5607,3.518218,234.9901 +5608,2.940671,207.74655 +5609,1.6758356,88.329895 +5610,2.3288975,134.39247 +5611,2.5920167,167.23026 +5612,1.0866361,68.57783 +5613,1.9919504,130.91144 +5614,1.8021187,107.24252 +5615,2.915512,221.06526 +5616,3.0530841,221.38034 +5617,1.6926932,84.92603 +5618,2.4404478,124.18784 +5619,1.8148239,127.52621 +5620,2.790963,167.75848 +5621,2.8989255,187.56174 +5622,1.5494733,87.3672 +5623,2.394663,148.34059 +5624,1.9227061,118.22398 +5625,2.2459557,162.41716 +5626,2.0271926,121.70062 +5627,2.0335107,116.996704 +5628,2.316863,152.50046 +5629,1.6705854,83.37632 +5630,2.1881614,106.410736 +5631,2.7804291,191.80331 +5632,1.5690951,95.87588 +5633,2.8120115,167.12259 +5634,1.7805487,95.11427 +5635,3.7355034,238.51205 +5636,2.6178567,214.79268 +5637,2.6177106,133.63422 +5638,3.1604505,221.24126 +5639,2.235355,99.8465 +5640,2.635483,184.71802 +5641,2.2250562,107.409164 +5642,2.126446,101.65511 +5643,1.6634138,96.86496 +5644,3.3509526,205.46886 +5645,1.6808707,86.947235 +5646,1.8576113,117.3692 +5647,2.3611486,140.15251 +5648,1.3888772,73.42872 +5649,2.1456532,157.95595 +5650,2.0056982,124.47354 +5651,1.6527683,88.995186 +5652,3.0799835,202.24918 +5653,1.9124441,118.535995 +5654,2.42905,147.01349 +5655,1.7921116,113.980576 +5656,2.214372,177.09799 +5657,2.6466107,181.0607 +5658,2.5556803,155.74973 +5659,2.0614343,136.08734 +5660,1.6051222,83.30603 +5661,2.3195946,155.41562 +5662,2.2360232,126.86889 +5663,2.1335094,130.42615 +5664,1.8628304,137.98212 +5665,2.9025872,195.58539 +5666,1.8319333,90.28391 +5667,2.477538,147.72003 +5668,3.4431326,219.76611 +5669,2.4836357,160.74774 +5670,1.9169791,104.08986 +5671,1.8292464,117.61242 +5672,2.564885,112.202194 +5673,2.089811,98.83792 +5674,2.154515,130.8581 +5675,3.0309472,225.63171 +5676,1.9578463,129.58548 +5677,2.2019305,103.10201 +5678,2.8164492,152.32565 +5679,2.6814353,173.40384 +5680,2.8331444,151.73961 +5681,2.0361228,134.91281 +5682,2.2993503,116.56448 +5683,2.3821898,164.37137 +5684,1.9690793,89.63704 +5685,1.6730633,102.47766 +5686,2.4097533,185.1145 +5687,2.1330705,122.226685 +5688,2.351384,136.98477 +5689,1.5413244,82.640495 +5690,2.1317172,132.1717 +5691,2.1584103,142.64914 +5692,2.8505607,185.90472 +5693,2.513071,150.43652 +5694,2.1282837,130.62152 +5695,4.3737464,249.38596 +5696,1.8286154,109.493195 +5697,2.437509,135.4288 +5698,1.4408919,99.84807 +5699,2.789866,178.51299 +5700,3.7770023,246.2901 +5701,2.0884798,94.11958 +5702,1.9402187,85.695114 +5703,2.370988,164.48442 +5704,2.3771424,119.308914 +5705,4.2478704,250.65869 +5706,2.9455802,199.24094 +5707,1.985305,101.571724 +5708,2.0749295,141.83905 +5709,2.345561,171.58241 +5710,3.2771385,232.05438 +5711,1.861083,89.76323 +5712,2.0091722,134.77023 +5713,2.0380418,112.24736 +5714,2.455634,175.81561 +5715,3.3356967,232.62115 +5716,3.519525,237.51338 +5717,2.8682914,140.00888 +5718,4.0541115,250.40117 +5719,2.7090876,202.9126 +5720,2.0682917,121.83331 +5721,1.7306908,129.30867 +5722,3.6382446,239.96683 +5723,2.0718906,129.37952 +5724,3.0163498,221.39519 +5725,2.5013304,146.7216 +5726,2.2923212,123.87361 +5727,3.6832972,242.99696 +5728,1.8230008,116.00574 +5729,2.2056649,122.82551 +5730,1.9521911,105.31349 +5731,2.8488114,204.11136 +5732,2.3874855,142.31952 +5733,2.9495814,182.6924 +5734,1.7063596,119.37119 +5735,1.9485725,114.41166 +5736,2.08912,132.33438 +5737,2.6715531,180.67154 +5738,1.7490895,95.630394 +5739,2.7685363,175.9002 +5740,2.2567897,160.09457 +5741,2.759123,160.96002 +5742,2.5374587,164.99396 +5743,3.1721838,226.08499 +5744,2.8456416,202.91249 +5745,2.4544601,168.73553 +5746,2.7627523,187.74228 +5747,1.8331382,140.61685 +5748,2.0111122,96.48327 +5749,3.014024,168.46506 +5750,1.957693,135.61922 +5751,2.4969196,164.96114 +5752,2.5878637,151.66623 +5753,2.635584,168.32367 +5754,2.077958,124.545456 +5755,2.5671885,146.43292 +5756,2.3901331,113.47149 +5757,2.708281,187.62497 +5758,2.7866387,202.91953 +5759,2.4450269,139.74588 +5760,2.664114,208.45834 +5761,2.2369714,172.94864 +5762,3.2972035,230.3423 +5763,2.8612018,163.88095 +5764,3.3820112,233.21219 +5765,2.7260394,197.32274 +5766,1.7571273,85.114525 +5767,2.0955575,123.12892 +5768,2.6764836,214.70486 +5769,2.2459245,123.7401 +5770,1.8334482,110.77705 +5771,2.8680289,211.43605 +5772,1.8208328,135.37395 +5773,3.4402392,216.79071 +5774,2.3805568,115.39253 +5775,1.8947309,95.8203 +5776,1.6594788,100.17279 +5777,2.4160607,150.49426 +5778,3.1214876,238.89603 +5779,2.6705117,201.74182 +5780,4.017743,249.402 +5781,1.8057181,105.189575 +5782,2.5868895,144.06831 +5783,2.5835843,162.14255 +5784,3.5098424,235.00636 +5785,2.6679828,187.21957 +5786,2.5219073,193.4916 +5787,2.9163,223.85309 +5788,2.2688582,105.582855 +5789,3.6945071,240.7052 +5790,2.4045444,151.79735 +5791,1.3610511,85.02908 +5792,2.0179014,110.469604 +5793,2.193603,109.079346 +5794,1.856518,108.53061 +5795,1.4659041,85.2948 +5796,1.8753588,141.01257 +5797,2.0833073,165.2546 +5798,2.731327,173.71585 +5799,3.591062,217.24683 +5800,2.8024452,208.0482 +5801,1.2370409,79.83917 +5802,2.414886,126.970566 +5803,2.8583531,213.33171 +5804,3.4652324,230.78072 +5805,2.6333232,154.58575 +5806,2.4791012,185.89246 +5807,2.3160205,165.61966 +5808,2.4866035,103.15522 +5809,1.7349265,109.33334 +5810,2.5092762,155.94504 +5811,3.1774173,212.87947 +5812,3.1512473,235.55487 +5813,2.3036113,139.61853 +5814,2.1708148,128.63731 +5815,2.786251,202.70921 +5816,2.506789,170.40987 +5817,3.7181237,238.61021 +5818,2.946159,210.26752 +5819,3.2423754,204.49734 +5820,4.032859,249.21487 +5821,2.5921023,168.59497 +5822,3.5701802,245.32622 +5823,2.0935688,142.27704 +5824,1.8850279,129.23312 +5825,2.5805418,157.99689 +5826,3.555798,220.64839 +5827,2.1186252,117.528534 +5828,2.1000698,147.32135 +5829,4.465731,251.83257 +5830,2.156813,123.31739 +5831,2.0006006,122.75481 +5832,2.1495328,134.08807 +5833,1.3654459,80.429474 +5834,2.7982917,179.76793 +5835,2.4283931,191.91342 +5836,3.0503023,174.123 +5837,2.479097,166.58104 +5838,1.367194,72.67218 +5839,1.1890895,72.33487 +5840,2.4864442,143.52843 +5841,2.178454,152.02747 +5842,3.009672,190.42249 +5843,3.2524436,233.43228 +5844,3.461883,242.69162 +5845,2.5949388,181.65231 +5846,2.3387876,110.73585 +5847,2.227615,160.2972 +5848,3.4560714,222.34637 +5849,2.332992,103.84363 +5850,1.7335775,109.09612 +5851,1.8958901,110.06268 +5852,1.3521103,82.459366 +5853,3.3960552,230.61125 +5854,2.5351834,170.28752 +5855,2.752434,171.73988 +5856,3.8362985,247.83789 +5857,1.7920964,131.01389 +5858,1.885106,137.93573 +5859,4.11333,249.29898 +5860,1.9692833,106.05147 +5861,1.7511265,104.43553 +5862,1.8806666,97.89502 +5863,2.4220414,168.52104 +5864,2.309235,141.37332 +5865,2.4702446,186.8637 +5866,3.3634746,217.9547 +5867,3.4609654,188.07733 +5868,2.1743867,117.3943 +5869,2.9955869,212.85994 +5870,2.2790372,120.32317 +5871,2.3827286,172.97435 +5872,1.8126131,83.0213 +5873,1.6803339,91.360825 +5874,1.9680426,105.76819 +5875,1.8746771,92.41879 +5876,2.3795352,153.61453 +5877,3.437376,239.24628 +5878,3.1540709,171.1223 +5879,2.3891017,174.08105 +5880,1.101685,70.44453 +5881,2.1920495,145.13449 +5882,3.1355376,198.59946 +5883,2.0622048,117.760735 +5884,2.1491203,104.06218 +5885,2.7458453,178.76416 +5886,2.9931052,219.55362 +5887,2.6540196,181.25388 +5888,3.2852263,225.71701 +5889,2.2484126,97.51755 +5890,2.2275987,153.90106 +5891,2.4059765,148.2125 +5892,2.0028188,110.95789 +5893,3.346376,236.17601 +5894,4.953388,252.74414 +5895,2.3500226,138.77304 +5896,2.3118017,91.67979 +5897,3.1528049,186.65472 +5898,2.2302635,137.6441 +5899,2.4760592,149.25623 +5900,1.7151467,94.9261 +5901,2.0958905,89.32758 +5902,1.6862679,96.6873 +5903,2.5831246,177.16907 +5904,3.548244,240.16975 +5905,2.9306052,196.28589 +5906,1.8270353,97.1962 +5907,5.1573477,253.2879 +5908,2.1754959,118.809265 +5909,3.5206752,233.92131 +5910,1.456524,77.665375 +5911,2.5966353,177.25325 +5912,2.2216156,156.53842 +5913,2.0451913,131.77814 +5914,2.1783643,155.22151 +5915,3.765683,242.42445 +5916,2.7926893,203.2878 +5917,3.280573,186.77516 +5918,1.743736,106.03946 +5919,2.9143844,154.53711 +5920,2.1795843,146.97269 +5921,2.5752547,198.7555 +5922,2.9939709,207.63385 +5923,3.3483348,203.54326 +5924,2.877081,199.89937 +5925,2.349744,176.46153 +5926,2.3722742,160.53911 +5927,2.3136156,200.5094 +5928,3.0341387,213.7505 +5929,1.6694454,78.55446 +5930,2.0449781,110.46063 +5931,2.0885088,114.80609 +5932,2.9435058,199.36922 +5933,1.6289086,89.8427 +5934,1.8179564,87.725204 +5935,2.9211557,191.36816 +5936,1.8387554,74.248924 +5937,3.545266,227.87918 +5938,2.2720315,111.540794 +5939,2.4192178,128.10397 +5940,3.002538,209.8449 +5941,2.2407928,103.72803 +5942,1.3259823,74.192215 +5943,3.4940944,228.26106 +5944,3.801651,238.9773 +5945,2.1760316,112.27701 +5946,2.3018613,164.07175 +5947,2.0009944,97.42459 +5948,2.70606,190.69461 +5949,2.4550521,138.9851 +5950,3.5686936,227.91412 +5951,2.9238224,217.19455 +5952,3.5370576,231.24889 +5953,2.4633293,169.76758 +5954,2.1808372,103.80866 +5955,2.5759125,186.7396 +5956,2.6802647,172.889 +5957,3.045056,201.66693 +5958,1.5004607,83.77829 +5959,1.4338337,78.71294 +5960,2.3928905,138.28137 +5961,1.8600234,101.39731 +5962,2.551038,155.95961 +5963,2.818447,194.90773 +5964,3.358317,232.05397 +5965,3.1896758,173.90735 +5966,3.4042723,237.40105 +5967,3.1095786,178.44485 +5968,3.023205,208.67859 +5969,3.170695,212.02318 +5970,2.2589288,148.00691 +5971,3.0315003,238.33151 +5972,2.808449,169.02808 +5973,1.7968801,113.897385 +5974,3.0667343,231.02354 +5975,2.7607222,165.16963 +5976,2.5544899,151.39061 +5977,2.6350965,170.39969 +5978,3.1674695,236.29752 +5979,1.1379479,69.76777 +5980,2.1218808,102.41835 +5981,4.268712,248.09921 +5982,2.1300218,107.77666 +5983,1.4163893,77.46934 +5984,2.3230958,134.75294 +5985,1.7491444,97.859024 +5986,1.9996885,102.621666 +5987,1.9260918,126.55743 +5988,2.481974,168.15019 +5989,4.0742474,246.33318 +5990,1.7613323,105.72797 +5991,2.3263862,118.6158 +5992,1.8845346,95.93727 +5993,1.5964473,103.54776 +5994,2.4293072,121.32825 +5995,2.8868916,166.99522 +5996,2.4754744,148.65723 +5997,2.3980443,130.56622 +5998,2.3145747,114.09666 +5999,1.9211757,94.37823 +6000,2.2176087,100.2115 +6001,2.2446752,143.02928 +6002,2.352855,133.36888 +6003,2.1162841,132.33047 +6004,1.9741197,106.82655 +6005,2.2666335,169.08977 +6006,1.8819993,105.113396 +6007,3.9189281,230.09702 +6008,3.7303329,238.15851 +6009,3.47009,236.3689 +6010,2.5146701,152.97128 +6011,2.2529817,151.61847 +6012,3.2729926,229.19092 +6013,2.8950872,181.9276 +6014,1.8762343,111.050964 +6015,2.340631,126.976395 +6016,2.7554119,192.4007 +6017,1.2278279,73.61963 +6018,2.650972,203.95782 +6019,2.830239,228.2723 +6020,2.5870233,185.698 +6021,2.7846901,171.6302 +6022,3.092117,181.4603 +6023,1.621072,95.44762 +6024,2.3752239,129.26259 +6025,1.9137825,98.88504 +6026,1.8837695,91.54738 +6027,2.7721655,206.24696 +6028,2.1339736,122.35028 +6029,3.4297843,232.26273 +6030,2.0167742,107.75605 +6031,3.2176564,225.52058 +6032,2.322453,134.1163 +6033,2.074586,144.06161 +6034,3.8026147,243.23984 +6035,2.7854018,162.05304 +6036,3.151155,188.7886 +6037,2.7688165,202.00587 +6038,1.5446532,130.71196 +6039,3.0365024,206.55244 +6040,2.7368524,164.29385 +6041,3.8645692,244.39241 +6042,2.2013373,137.15152 +6043,2.8405557,219.95891 +6044,2.8266735,202.2445 +6045,1.5196363,91.10196 +6046,3.4513006,234.32974 +6047,2.054514,99.78912 +6048,2.1469865,123.2526 +6049,2.0743866,160.63583 +6050,1.5789299,90.825935 +6051,2.5158794,157.73354 +6052,1.8499273,120.22977 +6053,2.6406884,151.04088 +6054,2.979712,212.96571 +6055,2.6790414,168.90225 +6056,1.8390917,84.20068 +6057,3.6059701,248.53883 +6058,3.2438638,211.17848 +6059,1.9732895,95.55549 +6060,2.9120831,189.50552 +6061,2.1749806,145.15875 +6062,1.6523197,107.24808 +6063,2.467064,150.74445 +6064,2.7139933,184.12878 +6065,3.4385018,232.79526 +6066,1.5527146,92.72154 +6067,1.9758611,111.18652 +6068,3.506916,228.35013 +6069,3.1796725,209.79579 +6070,1.9164009,134.58255 +6071,2.3014247,119.05104 +6072,1.7992284,98.69716 +6073,2.3654916,106.06203 +6074,2.7289174,197.52522 +6075,2.8029196,183.86502 +6076,2.229916,126.49466 +6077,2.787078,201.2582 +6078,2.2929661,153.43033 +6079,3.690909,244.07033 +6080,1.7250686,92.71838 +6081,2.0322313,122.44023 +6082,3.1137528,208.807 +6083,2.7464652,207.83897 +6084,2.3577244,151.87973 +6085,2.1065884,104.51009 +6086,2.5931745,145.78108 +6087,2.144372,144.79156 +6088,2.8398747,211.2218 +6089,1.7664527,94.19854 +6090,2.869171,220.44707 +6091,2.0525453,133.76207 +6092,2.760445,176.8591 +6093,2.80132,192.02737 +6094,2.5523133,178.78922 +6095,2.0614734,137.52484 +6096,3.320574,235.64085 +6097,2.878921,225.9505 +6098,2.4003308,127.82717 +6099,2.4355044,148.87515 +6100,1.95207,141.45016 +6101,2.5548534,155.59634 +6102,3.1298175,220.83954 +6103,2.4459445,168.82999 +6104,2.19407,178.59253 +6105,2.4034855,127.25106 +6106,1.8884151,102.775955 +6107,1.7047945,94.12795 +6108,1.435433,79.6207 +6109,4.384925,251.11505 +6110,3.7783947,245.60802 +6111,3.248504,207.06229 +6112,1.5235598,92.44923 +6113,2.1187885,113.96887 +6114,2.6205523,199.43143 +6115,2.2265368,117.33374 +6116,2.797135,187.9697 +6117,2.5438442,149.04355 +6118,1.624905,77.71126 +6119,3.136031,204.48999 +6120,1.6763896,97.98509 +6121,3.6010473,218.13362 +6122,2.7186809,192.98174 +6123,3.230642,218.6623 +6124,2.6951623,198.91818 +6125,2.7452521,165.54053 +6126,2.5842488,170.62457 +6127,2.1499279,135.0895 +6128,2.0761905,112.37326 +6129,2.2272716,133.9012 +6130,2.0718346,160.32529 +6131,2.168972,122.026596 +6132,2.5397222,160.52835 +6133,2.8771534,194.71628 +6134,4.4814634,252.85353 +6135,1.8799664,101.04665 +6136,2.202095,174.71442 +6137,2.855106,183.33954 +6138,1.9380783,98.1232 +6139,1.5875204,89.03943 +6140,2.283143,157.00629 +6141,2.1675363,129.56317 +6142,2.1393428,112.98714 +6143,3.8931186,242.19112 +6144,3.2549036,207.57784 +6145,2.2033722,104.71716 +6146,2.0066931,141.90662 +6147,2.0582414,150.14175 +6148,2.3058438,99.788605 +6149,3.3008583,227.86636 +6150,2.6634588,195.13167 +6151,3.293445,227.05185 +6152,2.46864,162.63374 +6153,2.140326,130.56363 +6154,2.1464918,156.1787 +6155,2.2189355,119.13255 +6156,2.6919131,173.89911 +6157,2.6993442,180.85507 +6158,3.473832,231.78766 +6159,2.5640597,121.14582 +6160,1.8355933,85.53822 +6161,2.3605895,136.53436 +6162,1.9615848,114.07486 +6163,1.6818445,79.88043 +6164,3.300901,226.44958 +6165,2.2383335,163.61371 +6166,1.8315619,124.1709 +6167,2.5675173,185.56644 +6168,2.254457,127.861404 +6169,2.6693563,163.75136 +6170,1.48895,80.146515 +6171,4.2483735,250.66414 +6172,3.3768291,234.74973 +6173,3.2282043,212.4975 +6174,2.5424516,166.19861 +6175,2.6077142,169.99103 +6176,2.2167253,141.51427 +6177,1.7641935,113.3391 +6178,2.473776,156.13722 +6179,3.513275,223.04991 +6180,2.1751306,119.43646 +6181,2.0284023,100.4877 +6182,3.0678113,166.19447 +6183,2.3601801,139.92642 +6184,2.2247522,121.02499 +6185,2.6426435,178.0857 +6186,1.9064403,90.57507 +6187,1.8785591,97.223434 +6188,3.4238098,224.9962 +6189,2.3212943,114.20499 +6190,2.1287951,100.11107 +6191,2.625966,171.24178 +6192,1.3046058,82.426865 +6193,2.8096268,166.6367 +6194,3.7897122,239.67555 +6195,2.827174,208.5285 +6196,2.4791474,159.44629 +6197,1.9706733,128.98758 +6198,2.6505904,193.58083 +6199,1.3472307,78.65291 +6200,1.4726956,82.80271 +6201,2.1159472,113.800964 +6202,2.0460181,134.90974 +6203,2.6100783,194.5302 +6204,2.3254776,153.01747 +6205,2.743765,193.61383 +6206,2.4714723,175.13406 +6207,2.1960807,153.00421 +6208,2.8189094,191.77792 +6209,2.4445114,130.46823 +6210,2.4953105,161.08241 +6211,1.8053657,108.97155 +6212,2.5848088,165.89268 +6213,1.8531191,89.76584 +6214,2.7877467,187.1377 +6215,2.5445712,154.85545 +6216,2.408001,155.53233 +6217,3.2353594,189.84319 +6218,3.057344,207.27397 +6219,3.1674721,194.44064 +6220,2.572641,196.22003 +6221,2.891355,167.86879 +6222,2.4463186,172.75073 +6223,1.8527286,103.14603 +6224,3.8396003,238.95955 +6225,2.9535184,166.89694 +6226,3.5685172,238.59305 +6227,4.6045675,252.78511 +6228,1.799934,98.71097 +6229,2.9668553,221.65129 +6230,2.3498335,126.9281 +6231,3.2429168,226.52457 +6232,1.7455139,96.75057 +6233,2.140148,117.1826 +6234,2.2121797,112.50979 +6235,2.078444,144.88861 +6236,2.7143743,205.17032 +6237,1.7369697,92.76905 +6238,2.6122558,159.02344 +6239,3.2680998,217.035 +6240,2.7897758,144.49991 +6241,3.4935555,239.40486 +6242,1.7126772,117.08835 +6243,2.8894286,216.89583 +6244,2.4599268,143.61679 +6245,2.149275,131.75447 +6246,2.1121635,180.88547 +6247,2.3444788,133.79715 +6248,2.1074886,128.20712 +6249,2.5346735,164.80948 +6250,2.052412,95.70621 +6251,2.3049324,108.33356 +6252,2.6087654,175.98642 +6253,2.1084447,101.44979 +6254,2.1345778,144.72012 +6255,2.9834654,194.84653 +6256,1.9757806,109.14673 +6257,3.0312154,192.1083 +6258,2.472703,178.04945 +6259,1.6832429,113.282166 +6260,2.0398617,129.55745 +6261,2.0870206,127.537384 +6262,2.468333,150.90295 +6263,1.6568949,103.46395 +6264,3.0928953,224.84752 +6265,2.2313871,93.88914 +6266,2.0035357,160.5344 +6267,2.754663,194.57155 +6268,2.1041992,113.470695 +6269,3.4983573,233.6223 +6270,2.2040544,93.47693 +6271,3.0188818,209.35454 +6272,2.6222951,182.03497 +6273,3.6016958,240.86745 +6274,2.6941686,197.6363 +6275,2.1981392,113.23004 +6276,2.3162303,151.19046 +6277,2.819606,221.97705 +6278,3.6141994,239.95677 +6279,2.0848646,106.27782 +6280,4.15135,248.59944 +6281,2.2303262,149.46121 +6282,1.8594841,113.66882 +6283,2.7256026,184.02039 +6284,2.9770799,196.10384 +6285,1.1064484,76.811806 +6286,1.7114671,112.59038 +6287,4.41018,253.15726 +6288,2.7200372,143.10394 +6289,3.0580893,229.04623 +6290,3.0649881,166.93578 +6291,2.4741807,157.88367 +6292,2.848412,185.50397 +6293,3.0811856,214.66832 +6294,2.551296,143.45541 +6295,1.6244423,104.2742 +6296,1.6713153,94.32134 +6297,2.2504482,136.82864 +6298,3.7806938,227.76042 +6299,3.6045117,237.2281 +6300,1.9510278,135.09052 +6301,3.0268734,188.90604 +6302,3.015246,190.75505 +6303,3.068277,199.00096 +6304,2.7446847,166.0172 +6305,3.755586,249.50203 +6306,1.3837187,75.962746 +6307,3.1709569,222.56688 +6308,2.3231444,143.32652 +6309,2.919681,199.87825 +6310,1.4796791,100.127815 +6311,2.0561476,118.05135 +6312,4.1397114,251.33995 +6313,2.1187205,119.072784 +6314,2.722688,150.5687 +6315,2.6352115,170.10934 +6316,2.8632038,210.14772 +6317,2.9665933,204.09044 +6318,2.7298229,162.56018 +6319,2.5659256,165.69698 +6320,2.239111,140.82828 +6321,2.1124997,132.32484 +6322,1.8508861,103.50166 +6323,2.295437,184.8995 +6324,2.0027778,137.30582 +6325,1.6640251,116.8465 +6326,1.4422561,89.945885 +6327,2.6816819,143.07986 +6328,2.545144,108.46557 +6329,2.5979676,209.26779 +6330,2.488801,141.02728 +6331,2.3170207,115.38943 +6332,2.1079426,108.76996 +6333,3.0109518,210.94208 +6334,2.1857953,107.05316 +6335,1.4738514,76.80185 +6336,2.2667327,168.5863 +6337,2.7600303,205.14932 +6338,3.0636628,193.2459 +6339,2.6316733,140.16702 +6340,2.3992438,120.434746 +6341,2.8914847,211.90677 +6342,2.3927093,169.90079 +6343,2.5909564,220.70642 +6344,2.4324493,154.9537 +6345,2.8357768,210.80656 +6346,2.6050274,171.0588 +6347,1.968904,93.00531 +6348,1.8465558,92.64125 +6349,4.845706,252.73509 +6350,2.83112,171.25906 +6351,2.6176825,164.624 +6352,3.609413,222.64937 +6353,1.4162284,80.62253 +6354,3.2741785,226.74796 +6355,2.855029,183.25041 +6356,2.091964,132.49344 +6357,2.1972227,98.88362 +6358,1.805122,106.62341 +6359,2.5823655,151.86505 +6360,1.8012908,96.33359 +6361,2.006163,150.8638 +6362,1.533134,93.12023 +6363,2.7483816,170.83664 +6364,1.2792821,81.01399 +6365,3.2629662,229.62177 +6366,2.144199,129.9389 +6367,4.0904794,241.53815 +6368,2.241321,124.87842 +6369,1.6664951,91.742645 +6370,2.2086842,112.07085 +6371,2.847375,202.97386 +6372,1.7434314,98.0965 +6373,3.9943497,244.6326 +6374,1.9003403,109.44998 +6375,2.8120263,167.67987 +6376,2.6843607,176.32541 +6377,2.4670038,173.46143 +6378,2.6682973,189.54124 +6379,1.9100963,125.98303 +6380,2.5927508,200.68619 +6381,1.7167332,101.027725 +6382,2.2860994,108.58969 +6383,2.141978,147.25018 +6384,1.8408211,104.89624 +6385,2.5970716,147.70935 +6386,2.1640077,135.6291 +6387,2.797277,184.31024 +6388,1.8769313,94.464096 +6389,3.0904977,208.24965 +6390,3.8303676,246.15518 +6391,3.340006,221.79044 +6392,3.2217345,209.69434 +6393,2.1298735,156.49542 +6394,2.4101079,150.0723 +6395,4.1591854,245.52185 +6396,2.2177193,98.13031 +6397,1.7977874,102.94142 +6398,2.351708,146.416 +6399,1.8141296,150.47668 +6400,2.4712877,176.27155 +6401,1.4067533,99.066666 +6402,2.8209758,179.3147 +6403,1.5075616,81.7182 +6404,2.628552,173.45267 +6405,2.5104275,148.42926 +6406,1.9101789,119.82864 +6407,2.2662663,158.8417 +6408,1.9813436,107.99017 +6409,1.8493783,114.62718 +6410,2.570228,194.0765 +6411,2.5494123,187.6553 +6412,3.1191857,231.55705 +6413,1.8232625,110.83482 +6414,2.4137723,131.56384 +6415,2.0722656,122.47293 +6416,1.4336973,82.92448 +6417,3.4964855,233.75746 +6418,1.9259837,133.7493 +6419,2.1897993,130.87848 +6420,2.2588398,174.84975 +6421,1.9159527,111.74109 +6422,2.6205628,191.24979 +6423,2.3306632,147.15143 +6424,2.2384114,172.0553 +6425,3.7512798,244.70827 +6426,2.2742643,136.03418 +6427,4.073026,249.58542 +6428,2.4862838,140.7248 +6429,2.7782412,169.22488 +6430,1.9843299,95.58375 +6431,2.9347515,191.55243 +6432,2.221379,140.06406 +6433,3.016323,225.6624 +6434,4.29894,251.589 +6435,2.4047875,125.15918 +6436,3.7184608,245.2245 +6437,2.6797688,186.90335 +6438,2.765318,145.25067 +6439,3.1184022,215.14388 +6440,1.7070981,115.89688 +6441,2.7373908,176.66098 +6442,2.9275439,189.37172 +6443,2.0375526,123.21431 +6444,1.5691601,108.13248 +6445,1.5611387,88.98986 +6446,3.2877991,215.92708 +6447,1.7060983,85.853195 +6448,4.443095,249.08243 +6449,2.5363488,178.67322 +6450,2.9568381,210.86131 +6451,1.9411752,112.52074 +6452,2.4955623,140.87036 +6453,2.512469,129.21448 +6454,2.5547526,147.49231 +6455,1.1809053,77.792336 +6456,1.6293665,96.37659 +6457,2.9285007,193.7194 +6458,2.7108958,165.76031 +6459,2.4950888,127.43056 +6460,1.8478858,81.42981 +6461,3.3162954,224.44753 +6462,3.0733912,211.20517 +6463,2.835665,183.91116 +6464,1.9385209,85.78875 +6465,2.0483508,119.96987 +6466,2.4059176,165.7634 +6467,3.602185,230.92017 +6468,1.7890749,88.71999 +6469,2.4738562,168.16922 +6470,3.418066,195.08647 +6471,2.0544822,144.66068 +6472,2.4074154,119.42774 +6473,3.5308692,209.24501 +6474,3.661316,228.88657 +6475,2.6972384,188.55719 +6476,2.1995423,150.80988 +6477,2.9695475,222.94261 +6478,2.0380554,115.57831 +6479,2.915055,212.73784 +6480,2.6132665,146.91382 +6481,2.9775367,165.6654 +6482,2.7462125,192.28685 +6483,1.678796,106.02896 +6484,3.1654441,227.33173 +6485,3.1655457,211.03053 +6486,1.8325027,89.902596 +6487,4.083479,234.42719 +6488,2.9326186,184.46263 +6489,2.7742658,191.03876 +6490,2.9286895,176.39502 +6491,2.413264,133.6719 +6492,3.3388839,220.02005 +6493,1.8119812,100.6682 +6494,2.1628985,151.70303 +6495,2.3580146,179.6074 +6496,2.6316102,189.43521 +6497,2.5856564,128.01947 +6498,3.2272525,227.52486 +6499,2.7319708,184.60854 +6500,1.7851015,81.02037 +6501,2.8417645,175.40196 +6502,2.3277593,211.96054 +6503,1.8173815,87.234085 +6504,2.5979364,142.50787 +6505,1.9378608,103.79071 +6506,1.6650807,91.54623 +6507,1.5677584,84.13337 +6508,2.83462,189.5871 +6509,3.127832,174.21046 +6510,3.2434802,229.18484 +6511,2.9107828,184.73383 +6512,2.1589208,119.06669 +6513,3.0340858,204.77145 +6514,2.7220187,208.57555 +6515,2.1397192,133.65459 +6516,2.6088798,162.2876 +6517,2.100438,122.77167 +6518,1.881209,101.14308 +6519,3.4367542,234.5815 +6520,2.1390157,97.72638 +6521,2.3589458,138.23755 +6522,1.9877136,147.37706 +6523,2.1956651,108.755 +6524,1.4920638,94.95331 +6525,2.10508,115.7171 +6526,3.4868815,212.47304 +6527,1.8381016,128.82756 +6528,1.2791688,92.31476 +6529,1.9979893,106.18773 +6530,2.0748067,123.63568 +6531,3.524511,234.52045 +6532,2.4623754,145.50381 +6533,4.887143,252.85675 +6534,3.4325187,226.55457 +6535,2.4928913,182.06189 +6536,2.578447,140.77101 +6537,2.071117,98.26075 +6538,2.3901477,162.70825 +6539,2.6327205,203.26816 +6540,3.5796247,228.90674 +6541,3.0992165,223.89691 +6542,2.5801537,167.31802 +6543,2.940973,175.24696 +6544,1.9641701,97.46057 +6545,1.8187668,84.75952 +6546,2.4710038,144.80984 +6547,3.2871084,201.8938 +6548,2.680522,187.87143 +6549,3.5134158,238.53511 +6550,3.4718547,241.47876 +6551,3.1020784,196.39618 +6552,2.455509,174.00233 +6553,2.5659604,175.02655 +6554,3.3141046,203.85052 +6555,2.1725764,111.13607 +6556,2.6333737,134.23703 +6557,2.6130733,177.56195 +6558,2.7470968,179.17734 +6559,2.7740054,217.48994 +6560,2.0564356,103.29895 +6561,2.55086,170.61353 +6562,2.0461688,142.23392 +6563,2.7475266,166.57925 +6564,3.1709313,184.93527 +6565,2.5028503,136.85678 +6566,1.8764215,86.10741 +6567,2.2687116,110.56581 +6568,2.7389688,146.66788 +6569,2.652558,144.41487 +6570,1.8197536,104.894714 +6571,1.868562,115.2913 +6572,3.1578012,228.57613 +6573,2.9012086,208.4004 +6574,2.6502523,174.4013 +6575,1.5680895,115.76974 +6576,3.0240383,223.67892 +6577,2.051273,118.152794 +6578,2.5283885,172.0667 +6579,2.6824827,214.83257 +6580,1.4414976,78.328575 +6581,1.6191308,78.70223 +6582,3.6093993,245.05267 +6583,2.9669006,193.44284 +6584,3.31673,231.34918 +6585,2.4140825,136.95578 +6586,2.2820308,137.7927 +6587,3.2184691,196.46524 +6588,3.2069526,221.09459 +6589,1.932418,88.60475 +6590,2.495881,150.43924 +6591,2.194874,148.41869 +6592,1.8790452,102.02893 +6593,1.8991855,128.81166 +6594,2.3750901,153.46448 +6595,2.2343574,147.62292 +6596,1.7477975,89.013626 +6597,1.222647,73.14205 +6598,2.0685244,115.32887 +6599,2.8141806,214.09357 +6600,3.118452,225.80847 +6601,2.596059,125.39171 +6602,2.519035,173.79527 +6603,2.502671,183.51782 +6604,2.678606,163.26883 +6605,2.6009653,210.0901 +6606,2.3859043,126.159836 +6607,2.5016277,156.75446 +6608,3.0652325,170.66943 +6609,2.183634,146.629 +6610,2.1144738,102.48636 +6611,3.686006,243.04994 +6612,1.9547968,133.09036 +6613,2.314788,167.24673 +6614,2.0334983,118.471695 +6615,2.6455712,190.52423 +6616,1.6038673,91.39889 +6617,1.7756567,84.68643 +6618,2.615421,154.88013 +6619,2.5041907,179.43549 +6620,2.188082,127.10318 +6621,3.007001,221.03442 +6622,2.7253134,197.49426 +6623,1.3946955,105.6678 +6624,2.9739757,201.67052 +6625,1.9032352,82.9388 +6626,1.7432135,84.41948 +6627,2.1559377,94.09588 +6628,3.0262673,181.10735 +6629,2.0910134,151.12668 +6630,2.988952,165.10391 +6631,2.266676,134.30016 +6632,3.444266,239.43887 +6633,2.910839,209.64769 +6634,3.491473,238.81252 +6635,2.154142,120.876785 +6636,2.2893426,147.01645 +6637,3.786068,234.21736 +6638,2.7170486,156.89725 +6639,3.5548189,204.43474 +6640,2.2857323,174.11139 +6641,3.0284114,225.92772 +6642,2.2214034,102.85547 +6643,1.4674518,92.824875 +6644,3.6676266,232.788 +6645,2.438731,110.3736 +6646,2.4468374,160.8265 +6647,2.6446016,194.60796 +6648,2.6256196,179.6944 +6649,3.3078108,208.33133 +6650,2.3522086,101.238754 +6651,2.3941872,111.17505 +6652,1.2753628,89.805725 +6653,2.4622726,173.09375 +6654,2.6494937,166.29126 +6655,1.483171,78.177635 +6656,1.7236979,85.10305 +6657,2.6167111,214.7521 +6658,2.0410895,139.65839 +6659,2.1713214,151.80255 +6660,1.9980032,104.056114 +6661,2.2257113,178.90544 +6662,1.8430316,105.52998 +6663,1.8917694,118.277695 +6664,1.4768732,77.692 +6665,2.0681756,135.75606 +6666,2.0932002,138.44904 +6667,1.9537599,113.12262 +6668,2.2508209,188.4801 +6669,4.62247,252.66978 +6670,2.1759303,128.01472 +6671,2.1300263,136.97293 +6672,1.8524834,95.92729 +6673,3.1736217,195.76683 +6674,2.200253,119.329636 +6675,2.0325208,130.38657 +6676,2.527708,168.89609 +6677,3.768853,226.38011 +6678,2.143144,154.24435 +6679,2.0109465,107.10237 +6680,2.6617951,139.92932 +6681,2.281691,148.50905 +6682,4.3061037,251.17703 +6683,4.3872743,251.21762 +6684,1.4092383,79.8315 +6685,1.9422342,145.24344 +6686,1.7456629,114.94089 +6687,2.9695582,176.45349 +6688,4.0444365,233.36626 +6689,2.531872,171.76445 +6690,1.5121701,75.84735 +6691,2.7079387,189.44171 +6692,2.6138954,171.39273 +6693,2.3473334,169.34038 +6694,2.6274526,96.34118 +6695,2.0515053,125.861465 +6696,1.8752718,108.953964 +6697,2.3929527,196.07678 +6698,2.4847667,168.21655 +6699,2.8922725,170.50237 +6700,2.821432,139.66714 +6701,4.497184,251.37723 +6702,1.8630946,105.63663 +6703,1.8697776,92.29068 +6704,2.3519523,156.67169 +6705,2.2794127,120.38522 +6706,2.584915,192.24559 +6707,2.4466846,179.82147 +6708,2.249905,152.58766 +6709,1.7431349,82.21113 +6710,2.6331022,143.43846 +6711,2.3920257,139.24939 +6712,2.254383,135.28568 +6713,2.7905138,164.10947 +6714,2.4202619,201.54991 +6715,2.359217,151.92627 +6716,3.1714554,199.53156 +6717,2.6106434,171.3164 +6718,2.8133569,194.56544 +6719,2.822798,204.09756 +6720,2.771892,204.12386 +6721,2.6601865,158.83746 +6722,2.600667,190.06293 +6723,2.7978435,183.52982 +6724,1.9663237,129.29736 +6725,4.4837465,252.58647 +6726,2.3912158,150.35489 +6727,2.17458,117.73872 +6728,4.174363,243.91058 +6729,2.1928618,140.2799 +6730,2.303405,169.5975 +6731,2.650599,170.42372 +6732,2.1220345,141.13745 +6733,2.9577677,204.52278 +6734,2.6519613,216.73415 +6735,3.1324098,179.31216 +6736,2.6900628,180.26813 +6737,2.5030804,183.6937 +6738,2.367892,113.38307 +6739,1.5764217,85.943436 +6740,2.0330534,117.229614 +6741,2.4283843,115.16152 +6742,2.140615,145.34204 +6743,3.5909345,237.56721 +6744,1.6850765,120.63864 +6745,2.650442,191.98364 +6746,2.6971369,191.52277 +6747,3.2591722,227.93636 +6748,2.882281,168.55078 +6749,2.5754359,175.32587 +6750,2.8117423,148.39003 +6751,1.3646075,86.986176 +6752,3.5833526,239.09697 +6753,1.600076,93.02868 +6754,1.570906,113.09667 +6755,1.8917463,101.22127 +6756,2.8274455,186.70691 +6757,2.4516923,137.41306 +6758,2.4092603,145.30942 +6759,2.1747644,139.15704 +6760,2.1134286,122.8221 +6761,2.1764803,137.46321 +6762,1.8231665,126.49318 +6763,2.4756305,152.45044 +6764,2.6100335,164.60593 +6765,2.278973,129.77408 +6766,3.015183,225.25299 +6767,4.299424,249.27617 +6768,2.8730059,172.64062 +6769,2.5761943,177.74036 +6770,1.6951826,105.44229 +6771,3.0133939,204.70442 +6772,2.7174306,159.79884 +6773,3.203322,234.03792 +6774,2.1707284,137.02803 +6775,2.023953,131.50241 +6776,3.6952078,232.45184 +6777,2.3911853,141.03648 +6778,1.7355756,94.1571 +6779,2.6434665,196.92155 +6780,2.2075806,154.86348 +6781,2.4094837,173.889 +6782,1.9239571,129.1022 +6783,2.4355242,169.36841 +6784,2.7412388,167.18193 +6785,1.5851926,126.080536 +6786,1.9397165,113.046745 +6787,2.8071764,173.20886 +6788,2.9259324,190.81015 +6789,2.705674,169.97133 +6790,2.8870912,199.46953 +6791,1.7776818,100.19682 +6792,2.3495915,130.23514 +6793,1.5737512,90.77234 +6794,2.1282191,161.93793 +6795,2.0391695,116.058205 +6796,3.30977,219.22536 +6797,1.4788039,71.07186 +6798,2.930738,220.55345 +6799,1.9082699,98.21988 +6800,2.1968007,126.77365 +6801,2.8276744,193.65555 +6802,2.6579463,175.33646 +6803,2.1269662,102.18295 +6804,2.3552613,128.86023 +6805,2.1867967,106.46578 +6806,1.3853922,82.57028 +6807,2.423035,152.56833 +6808,3.0313287,166.22128 +6809,3.1653156,219.94922 +6810,2.6577487,166.57018 +6811,2.7869306,163.16147 +6812,2.8895242,152.32907 +6813,2.0589514,114.62402 +6814,3.478332,242.39224 +6815,2.7148182,193.60188 +6816,2.2777843,128.43005 +6817,3.7731342,245.5512 +6818,2.1486874,122.48349 +6819,2.3801544,163.77077 +6820,2.2411344,151.7385 +6821,2.5723023,199.17383 +6822,1.6970421,121.320435 +6823,1.7683222,105.99222 +6824,2.1362596,119.01619 +6825,2.7949157,216.8291 +6826,2.801785,200.97762 +6827,3.6876493,238.17279 +6828,2.2707047,160.34349 +6829,2.8405566,205.42863 +6830,2.7283494,185.13696 +6831,2.9350996,188.33446 +6832,2.4566011,153.53781 +6833,3.8634715,249.24667 +6834,2.2935672,170.66751 +6835,3.9431815,245.9462 +6836,2.3655202,160.78647 +6837,2.886474,195.37329 +6838,3.4304824,235.65822 +6839,2.6952155,156.05765 +6840,2.0181615,127.42699 +6841,2.3758626,141.32996 +6842,2.373719,108.16184 +6843,2.7211003,195.69148 +6844,1.9993209,128.98476 +6845,2.747718,208.71957 +6846,2.5605025,126.24866 +6847,2.2925634,133.19852 +6848,2.1794033,168.18033 +6849,2.212624,172.53651 +6850,3.3725324,229.54886 +6851,3.4517617,240.59592 +6852,2.4482586,122.26271 +6853,1.8800731,93.6064 +6854,1.7007972,98.528015 +6855,2.407348,143.54736 +6856,1.8442888,96.18065 +6857,2.4861338,149.17026 +6858,2.3597705,163.98895 +6859,3.011824,229.42569 +6860,3.2365205,233.439 +6861,1.8728018,109.19857 +6862,1.9610795,114.39702 +6863,1.7598375,99.16409 +6864,2.378336,135.86685 +6865,3.6847436,247.33644 +6866,2.1865442,140.65312 +6867,4.0941796,249.64536 +6868,3.3445737,202.30374 +6869,2.601494,132.9091 +6870,2.8417115,189.63095 +6871,1.730225,108.44643 +6872,3.3971038,239.69296 +6873,2.9205909,230.73264 +6874,2.1744823,141.23807 +6875,2.5602717,146.6888 +6876,2.0886734,107.80048 +6877,1.6842921,101.0777 +6878,3.6813393,233.6392 +6879,2.6253836,154.70403 +6880,2.5142894,187.73074 +6881,1.811364,95.46221 +6882,3.50623,242.83762 +6883,2.648126,130.64839 +6884,3.8951926,247.82556 +6885,2.2397535,165.58904 +6886,2.4023445,172.22015 +6887,2.5909119,186.96002 +6888,1.3907646,73.16567 +6889,3.1079798,217.2154 +6890,2.4472327,165.56271 +6891,3.4013886,237.94415 +6892,4.2079206,250.69344 +6893,2.162263,174.46164 +6894,2.7444813,178.91013 +6895,2.0141041,120.12076 +6896,3.7794204,246.15916 +6897,1.685175,97.237854 +6898,2.7023828,161.81406 +6899,1.9369977,119.888824 +6900,2.945498,189.18163 +6901,3.6451252,236.6557 +6902,1.267226,76.08719 +6903,1.9918219,87.80176 +6904,2.3549283,129.44073 +6905,1.8615866,104.80853 +6906,1.7056358,102.29457 +6907,2.983784,174.88647 +6908,2.1992466,107.00267 +6909,2.7496152,223.531 +6910,2.977195,183.93771 +6911,3.2957265,223.14958 +6912,1.7018663,87.30638 +6913,1.7333256,96.320335 +6914,1.4839407,78.26071 +6915,2.5530121,136.69211 +6916,1.4646412,76.42638 +6917,3.7811828,242.51645 +6918,2.9070988,201.62723 +6919,2.6293523,183.41649 +6920,2.6549745,198.22371 +6921,2.7659338,196.70477 +6922,1.9353095,138.64862 +6923,2.1191263,139.30928 +6924,2.9363275,221.57834 +6925,2.7484958,193.64095 +6926,2.4704785,173.11647 +6927,1.940743,121.61431 +6928,2.463564,163.99405 +6929,2.396513,127.74975 +6930,2.6508577,172.50833 +6931,4.0788345,249.13197 +6932,2.050621,132.83646 +6933,1.394806,81.45616 +6934,2.0999112,119.98783 +6935,4.462885,248.52802 +6936,2.5795484,206.8871 +6937,2.0415275,119.926956 +6938,2.4758747,139.43192 +6939,2.3220913,138.43225 +6940,1.4427437,95.77815 +6941,2.7971206,195.6587 +6942,2.813185,200.68501 +6943,2.483151,179.00519 +6944,2.7971358,160.70526 +6945,2.9791853,189.9639 +6946,2.7111626,123.640396 +6947,2.1039052,120.98049 +6948,1.2768928,74.93824 +6949,2.4555001,115.31407 +6950,3.1373062,214.80421 +6951,1.9152193,118.9545 +6952,2.4157157,142.93037 +6953,3.1355016,224.42172 +6954,2.8405676,187.06503 +6955,2.3097227,126.51883 +6956,1.4773322,88.42236 +6957,1.7817355,88.797295 +6958,2.990445,203.4143 +6959,2.412351,189.57715 +6960,2.064628,158.30496 +6961,2.591432,125.639145 +6962,2.8480477,188.08066 +6963,2.6548147,150.17435 +6964,2.632954,141.46417 +6965,1.6851981,79.35547 +6966,1.82286,133.5958 +6967,2.5466814,203.61511 +6968,2.4872503,196.4226 +6969,2.710911,164.61972 +6970,2.4525087,137.32712 +6971,1.9774382,101.87668 +6972,2.073281,154.78676 +6973,2.1825082,153.07289 +6974,2.9850183,214.45892 +6975,1.2098112,85.472206 +6976,2.0011895,127.00368 +6977,2.5282025,191.45811 +6978,2.156341,131.72585 +6979,2.000453,131.50308 +6980,1.8192276,108.7025 +6981,2.4629402,191.50383 +6982,2.5440972,189.35385 +6983,1.7197733,96.339005 +6984,4.1519446,250.26631 +6985,1.493555,83.73491 +6986,2.4880738,143.85426 +6987,2.6401744,193.66153 +6988,2.025156,106.37751 +6989,2.9033136,195.70134 +6990,1.6320016,101.79372 +6991,2.7636456,210.29092 +6992,2.5116096,182.59485 +6993,2.1894283,135.95604 +6994,3.0188043,180.7946 +6995,3.0227408,209.88351 +6996,1.9656886,132.17923 +6997,2.4168184,95.40466 +6998,2.3999906,149.64801 +6999,2.55817,157.54662 +7000,2.5101495,143.85846 +7001,1.8314867,99.20748 +7002,3.1023378,204.88611 +7003,2.9514863,180.04974 +7004,2.9943273,226.13821 +7005,2.5231278,150.74118 +7006,2.2279716,111.42947 +7007,3.0076706,201.01732 +7008,3.3676438,209.33665 +7009,2.7126458,197.33737 +7010,3.9997177,249.04346 +7011,2.1551318,138.94604 +7012,1.3761357,74.56874 +7013,3.3774736,230.86508 +7014,2.7427113,207.16522 +7015,2.7514966,150.34914 +7016,2.992986,206.26772 +7017,1.828211,106.53962 +7018,3.081678,235.12044 +7019,1.8569769,94.41618 +7020,2.0386088,131.5716 +7021,2.6927607,174.41301 +7022,2.0449064,123.32886 +7023,2.4431663,173.33047 +7024,2.2768443,129.2452 +7025,2.0564132,165.00763 +7026,2.3739877,121.013626 +7027,2.9291086,148.27042 +7028,2.9794884,205.65979 +7029,3.2653687,219.78418 +7030,2.324695,140.90475 +7031,2.3456178,127.73015 +7032,2.8089218,211.00838 +7033,1.3990929,82.30371 +7034,2.1760788,109.64787 +7035,1.8825641,104.73613 +7036,2.1441305,110.86342 +7037,2.1235006,133.48573 +7038,1.7417353,102.35439 +7039,2.230276,149.83784 +7040,2.6232343,134.9149 +7041,3.4651036,184.38153 +7042,2.35056,161.85373 +7043,2.0525084,120.6844 +7044,2.8841887,203.27023 +7045,2.0737283,130.4541 +7046,2.071815,146.21545 +7047,3.223902,224.5442 +7048,3.3690658,207.85916 +7049,2.0689125,158.45865 +7050,1.8182286,92.7368 +7051,3.160509,210.4241 +7052,2.172933,109.94289 +7053,2.8747044,192.2161 +7054,3.739409,232.88239 +7055,1.8209741,94.31179 +7056,3.0179293,204.28726 +7057,2.0010345,136.43604 +7058,2.3792605,189.36188 +7059,3.738706,235.3466 +7060,2.2465138,150.05765 +7061,3.6195138,244.53824 +7062,3.456561,218.93329 +7063,3.0604348,229.30406 +7064,2.430398,116.150345 +7065,3.0481164,207.17574 +7066,3.1513162,203.70937 +7067,1.7715065,106.2419 +7068,1.3945982,86.8725 +7069,2.5637429,151.19324 +7070,2.6701126,180.05884 +7071,2.2066097,116.95257 +7072,2.3490357,160.67474 +7073,2.3177922,157.73495 +7074,2.8429108,200.41614 +7075,1.4544256,76.54846 +7076,3.2190747,226.74768 +7077,2.4478118,144.5622 +7078,2.5865128,152.07565 +7079,2.4957275,112.001274 +7080,3.1702607,216.16484 +7081,2.327079,160.97556 +7082,3.6212978,234.11551 +7083,1.5091202,95.2734 +7084,2.76619,208.19531 +7085,2.2739892,177.0147 +7086,2.5266666,129.79996 +7087,2.1527376,127.465904 +7088,3.295291,230.26503 +7089,1.855259,107.54146 +7090,2.3528442,163.60233 +7091,2.8404298,190.29614 +7092,1.7080513,84.97712 +7093,2.127999,108.60637 +7094,2.949954,196.84428 +7095,2.1414528,125.53378 +7096,2.7475445,172.53589 +7097,2.1770546,144.14432 +7098,3.0447085,223.82895 +7099,2.3448887,156.58942 +7100,2.4039605,123.230194 +7101,3.0634222,215.77615 +7102,3.1550345,233.8198 +7103,2.5888264,162.21994 +7104,1.6464505,119.460785 +7105,1.5662514,85.54864 +7106,2.2754533,148.13496 +7107,1.913571,117.965515 +7108,2.580926,161.7262 +7109,1.7268124,124.90282 +7110,3.7043774,244.75513 +7111,2.6035576,146.85052 +7112,2.7350478,179.46313 +7113,1.8659236,96.66087 +7114,2.9234896,201.6669 +7115,2.2516823,133.89958 +7116,1.8698697,116.794876 +7117,3.2559872,225.4543 +7118,2.6073487,144.95505 +7119,2.2758284,130.26608 +7120,2.205134,197.58278 +7121,1.1107533,70.37203 +7122,2.982856,235.42781 +7123,3.4944496,237.66425 +7124,3.3143737,236.1391 +7125,3.27873,198.86674 +7126,2.6439154,171.01447 +7127,1.5963635,84.82205 +7128,2.9896865,192.63823 +7129,1.7503474,83.37633 +7130,2.3243492,143.38795 +7131,2.814162,200.66005 +7132,2.6939883,147.60143 +7133,2.6661162,175.12341 +7134,2.2748976,119.56566 +7135,3.6590288,244.06383 +7136,2.8884997,203.23834 +7137,3.4744344,229.57625 +7138,2.7854085,172.42807 +7139,2.01276,105.13253 +7140,1.9833138,114.15044 +7141,2.867851,168.60194 +7142,2.3528543,140.17853 +7143,1.8997607,87.38878 +7144,2.547594,166.96027 +7145,3.355113,236.72829 +7146,2.4976573,142.7818 +7147,2.9751697,216.1363 +7148,1.7326933,129.76764 +7149,1.7057613,92.388565 +7150,2.821401,207.03503 +7151,2.6994667,193.8172 +7152,2.9253693,222.94678 +7153,3.213306,194.71814 +7154,2.2960126,145.24713 +7155,3.5299845,238.80946 +7156,1.9967823,108.60486 +7157,3.0378232,184.60849 +7158,2.7862487,142.6971 +7159,2.1374283,123.94709 +7160,2.8151138,187.66931 +7161,1.8999518,92.47001 +7162,2.3325768,137.87189 +7163,3.0754852,220.18274 +7164,2.119171,129.57405 +7165,1.7793963,114.32968 +7166,1.5834492,79.102684 +7167,3.0876923,202.32027 +7168,3.1671386,217.2877 +7169,2.1169505,138.82724 +7170,3.0623593,228.97382 +7171,2.7027054,167.35587 +7172,2.1656184,111.32073 +7173,1.865955,91.42263 +7174,2.3383155,138.71387 +7175,1.701369,92.79785 +7176,2.768274,160.62076 +7177,3.249152,229.59091 +7178,2.6593783,159.47192 +7179,2.3632603,149.48688 +7180,2.9004397,179.68604 +7181,2.9509177,182.24817 +7182,2.7199762,182.69424 +7183,2.68386,169.522 +7184,1.8942226,99.42052 +7185,3.2768888,218.25514 +7186,2.471928,165.48563 +7187,2.3485336,119.922775 +7188,1.8995001,95.14875 +7189,3.0065827,167.2452 +7190,2.0989537,125.06645 +7191,2.3905053,177.50558 +7192,2.2437527,123.47693 +7193,2.0161178,109.903076 +7194,2.3962884,180.50821 +7195,2.8609974,186.45502 +7196,2.8988905,165.55054 +7197,1.9816,108.12752 +7198,2.4613435,179.35905 +7199,2.6474843,156.15797 +7200,2.60179,180.47647 +7201,2.1030605,124.63418 +7202,2.3508592,135.501 +7203,2.8020132,187.5163 +7204,2.538308,144.29964 +7205,2.0127885,98.72032 +7206,3.4544315,232.61604 +7207,2.944251,196.68433 +7208,2.8682427,204.62668 +7209,2.2858982,132.0035 +7210,2.3985,150.60855 +7211,2.9391134,179.09473 +7212,2.4372337,185.19267 +7213,2.805166,183.73236 +7214,1.7519712,96.80926 +7215,2.6587296,163.78973 +7216,2.042194,117.39751 +7217,3.5871668,240.52809 +7218,2.0235186,120.18473 +7219,2.2573838,155.53424 +7220,2.379355,134.50696 +7221,2.2880828,159.53587 +7222,1.3962615,101.68771 +7223,2.4956605,173.53699 +7224,3.293798,207.13606 +7225,2.7379785,172.17047 +7226,2.7769792,186.40494 +7227,3.658359,235.88101 +7228,2.789294,147.1023 +7229,2.738799,201.32678 +7230,1.8100765,96.75047 +7231,2.002727,119.973724 +7232,1.9089636,109.93931 +7233,1.7013965,99.47581 +7234,2.2561655,157.5246 +7235,3.1297688,204.41057 +7236,1.8650347,102.996704 +7237,2.5969658,180.67096 +7238,2.7220247,190.37589 +7239,2.9604037,203.26437 +7240,2.0196729,111.49077 +7241,3.3528578,212.61562 +7242,3.9587822,246.1589 +7243,1.5193462,105.6028 +7244,3.4512575,232.00671 +7245,1.8429475,107.951485 +7246,3.31396,224.22351 +7247,2.636325,163.92804 +7248,2.2552383,143.48485 +7249,1.3868911,83.30651 +7250,2.3291507,181.58846 +7251,2.4174867,133.19775 +7252,1.6839802,98.2186 +7253,1.8083766,131.94525 +7254,2.3546777,130.31064 +7255,2.136791,115.041 +7256,1.4180467,85.29859 +7257,3.1468632,167.49081 +7258,1.9737408,99.07771 +7259,2.293293,135.14813 +7260,3.3771346,236.17654 +7261,2.5999675,147.45807 +7262,3.0658293,187.48306 +7263,2.116793,118.625175 +7264,2.8587077,190.49081 +7265,1.8718045,100.71756 +7266,2.4274354,177.21371 +7267,2.5518937,126.02095 +7268,2.7498028,189.06198 +7269,2.2215686,176.38757 +7270,1.8824369,113.45544 +7271,2.1168792,136.35254 +7272,1.7578199,112.3806 +7273,2.0122962,139.68799 +7274,3.3590548,213.6718 +7275,2.118196,132.6272 +7276,1.8024061,90.367905 +7277,2.1807113,136.90552 +7278,2.7717946,202.89267 +7279,1.9845673,98.48855 +7280,2.1013336,109.15088 +7281,2.278443,127.32701 +7282,2.1333714,150.41171 +7283,4.2482386,249.08888 +7284,1.6887891,84.6319 +7285,1.9770454,143.3361 +7286,2.581351,168.45004 +7287,3.1510656,230.22081 +7288,3.750502,247.26848 +7289,3.3160472,240.01115 +7290,3.1880267,198.68228 +7291,1.9039838,93.93487 +7292,2.1059911,110.08037 +7293,2.400937,130.88583 +7294,2.3132834,123.587524 +7295,2.1276088,121.38856 +7296,2.3302283,167.23207 +7297,3.5440712,233.99008 +7298,2.2847507,135.55347 +7299,2.1690261,128.19635 +7300,2.867333,178.1152 +7301,3.4711454,232.34029 +7302,1.8195236,112.95646 +7303,2.231636,121.92366 +7304,1.5359846,85.60321 +7305,3.12229,212.0832 +7306,3.6012628,215.25496 +7307,2.9812503,183.69212 +7308,3.1778326,223.04181 +7309,3.4590583,231.60814 +7310,2.065453,123.429054 +7311,3.0281,232.70267 +7312,1.2415122,70.31819 +7313,1.6811211,81.52441 +7314,2.3600278,170.17711 +7315,2.7921052,198.32962 +7316,2.4378014,184.96939 +7317,2.3149858,135.90009 +7318,3.237582,201.1812 +7319,2.4510806,177.05573 +7320,1.7154081,120.153366 +7321,2.5824614,155.98096 +7322,3.4799507,239.57693 +7323,2.4927735,210.64891 +7324,1.9605927,102.13572 +7325,2.8284967,196.56798 +7326,2.9127269,194.55426 +7327,2.4279044,116.56079 +7328,2.7447622,193.58548 +7329,3.3243701,211.32259 +7330,2.1860723,152.37296 +7331,2.3459425,119.24329 +7332,1.940088,96.178955 +7333,2.6607714,200.7878 +7334,2.0983577,141.64432 +7335,2.613444,180.26462 +7336,2.4020813,139.22417 +7337,2.646112,184.73343 +7338,2.0063875,85.38972 +7339,2.853557,180.45438 +7340,2.9752183,219.8044 +7341,3.334721,221.09872 +7342,1.7590253,91.23539 +7343,1.173885,81.14179 +7344,2.6609695,152.3698 +7345,2.599173,197.1792 +7346,2.431524,191.48044 +7347,2.3696923,180.97226 +7348,2.4924905,191.73227 +7349,2.4711912,160.93678 +7350,2.4790425,149.07895 +7351,1.8179942,103.5172 +7352,3.0319848,191.04019 +7353,2.8949757,180.70683 +7354,1.6447957,114.71729 +7355,4.7205553,253.21198 +7356,2.2717218,152.68503 +7357,2.8070912,169.39935 +7358,3.2741034,227.95055 +7359,2.454804,142.43893 +7360,3.986465,246.16924 +7361,3.1471725,217.10413 +7362,2.1962423,125.45117 +7363,2.8604746,176.08148 +7364,3.4146287,239.4044 +7365,1.9387295,127.247986 +7366,1.295352,77.64315 +7367,1.9967871,105.39158 +7368,2.3748431,147.91257 +7369,2.249725,159.44354 +7370,1.763343,110.006546 +7371,2.0061486,107.97659 +7372,3.4603164,226.89355 +7373,1.8917292,98.49126 +7374,3.0576115,191.12761 +7375,2.5356355,174.2798 +7376,1.7918152,135.47571 +7377,2.2602572,149.33423 +7378,4.5748377,251.10703 +7379,2.9809985,181.79546 +7380,2.7104099,178.44208 +7381,2.6755548,213.4563 +7382,1.9799685,104.839935 +7383,1.4202461,78.78367 +7384,2.3230612,127.907074 +7385,3.6991224,244.34772 +7386,2.1792493,145.88887 +7387,1.6890463,99.07451 +7388,1.6141353,111.28407 +7389,2.643801,123.816284 +7390,2.8066087,184.7677 +7391,3.6239543,233.62827 +7392,1.8634762,111.236465 +7393,2.6743789,174.97678 +7394,2.823857,164.67264 +7395,1.954454,127.968445 +7396,2.8893802,173.42741 +7397,1.8780704,112.31421 +7398,1.9462192,92.917465 +7399,1.9014424,111.831825 +7400,1.5057192,82.27098 +7401,2.4272075,155.48212 +7402,2.3927286,101.55078 +7403,1.8774084,91.01448 +7404,2.2504737,169.90521 +7405,1.7628566,121.755684 +7406,2.446488,139.08008 +7407,2.5917668,161.97134 +7408,3.653402,245.75284 +7409,1.2788026,83.03962 +7410,2.848678,231.14102 +7411,2.8702726,209.64372 +7412,2.3800488,143.73979 +7413,2.6675425,173.74644 +7414,1.879824,90.04962 +7415,2.9267411,195.6964 +7416,1.9992328,99.23483 +7417,1.9793925,130.51505 +7418,2.3684726,148.51385 +7419,2.5142365,129.58723 +7420,2.6560798,203.95439 +7421,2.7180912,174.91888 +7422,2.3227937,126.68785 +7423,2.329515,143.97055 +7424,1.2752098,77.05381 +7425,2.5168576,134.32013 +7426,2.668313,206.9533 +7427,3.1777084,209.84438 +7428,2.664873,183.32278 +7429,1.793324,130.26775 +7430,2.0978494,135.5412 +7431,2.967037,196.66805 +7432,1.4729613,95.20791 +7433,2.3055358,140.89316 +7434,2.3596487,124.86041 +7435,1.9350116,110.97531 +7436,3.5141509,228.41179 +7437,3.4591181,228.08748 +7438,3.320826,211.75165 +7439,2.0819604,107.320984 +7440,2.2811527,163.25594 +7441,3.9624946,241.18123 +7442,3.435388,230.5775 +7443,2.94282,174.52176 +7444,3.371305,231.61389 +7445,2.2864728,150.1789 +7446,2.5693312,156.68121 +7447,3.1544378,220.55223 +7448,3.0514512,168.95639 +7449,3.1617494,196.90686 +7450,4.4509573,250.1106 +7451,3.4865506,241.21065 +7452,1.8442574,103.26805 +7453,1.8023964,104.76043 +7454,3.6921036,244.7609 +7455,3.2655082,228.2397 +7456,3.0716865,223.94772 +7457,2.312203,110.98181 +7458,2.6028047,202.73943 +7459,2.5370917,172.68799 +7460,2.6493497,136.52597 +7461,2.6543849,176.8582 +7462,2.7981806,198.86214 +7463,1.6544999,129.8205 +7464,3.4029684,232.86153 +7465,3.2482252,221.84943 +7466,2.684009,203.14964 +7467,2.8174887,174.31415 +7468,2.3216782,156.9184 +7469,1.5423189,96.12782 +7470,3.2233975,214.48882 +7471,3.1179674,208.8952 +7472,1.8337395,119.51425 +7473,2.0543003,154.36295 +7474,3.9183903,242.76567 +7475,2.704904,210.73245 +7476,2.5738835,160.51485 +7477,2.9149468,213.46864 +7478,2.664328,164.38266 +7479,1.6857713,81.10073 +7480,2.0906184,140.25836 +7481,2.048879,108.35531 +7482,2.2171273,142.961 +7483,1.5522954,73.02282 +7484,2.870849,125.138565 +7485,4.2914505,248.6526 +7486,2.441463,139.55305 +7487,2.4989676,126.01465 +7488,1.9778064,147.69199 +7489,2.7629905,187.80107 +7490,2.284458,116.01603 +7491,3.3457637,229.97473 +7492,3.0578592,199.98337 +7493,2.9628386,194.50945 +7494,4.396419,253.08669 +7495,2.0068734,114.326065 +7496,1.4870436,100.88762 +7497,1.8084352,85.47531 +7498,2.2349858,115.91078 +7499,2.2601628,117.28523 +7500,2.3368535,116.220505 +7501,2.1751122,162.54965 +7502,2.890204,188.31963 +7503,3.0862577,222.97592 +7504,2.726573,183.24663 +7505,2.796186,180.9054 +7506,2.999512,208.96106 +7507,1.8892558,92.80314 +7508,2.6448379,123.60353 +7509,2.4067016,116.09624 +7510,2.233381,115.69854 +7511,2.0949411,118.77586 +7512,3.6040797,238.76753 +7513,1.425568,79.83362 +7514,2.2205348,123.7236 +7515,1.8564806,114.27727 +7516,2.1408842,133.74548 +7517,2.8460288,166.16559 +7518,2.3369985,124.78824 +7519,2.0267098,120.378456 +7520,3.845039,234.14612 +7521,2.1644113,154.6568 +7522,3.214976,234.6854 +7523,2.6802564,204.7895 +7524,2.8218813,150.86707 +7525,1.4901775,86.42341 +7526,2.5672407,190.42886 +7527,1.3658371,90.84352 +7528,2.3920627,175.98395 +7529,2.1439009,143.37595 +7530,2.845135,209.46652 +7531,2.4757943,155.72264 +7532,1.5920559,89.55772 +7533,2.2901118,152.9245 +7534,2.0494401,143.67229 +7535,2.303738,150.55782 +7536,2.152477,113.574776 +7537,2.0102878,102.45839 +7538,2.9037244,165.37741 +7539,3.1129785,228.45088 +7540,2.0178819,106.1586 +7541,2.2470906,166.95676 +7542,1.7980258,95.2158 +7543,2.1786418,184.13866 +7544,2.0864122,149.15717 +7545,1.832021,108.8915 +7546,2.1447349,143.7269 +7547,2.4674933,155.32158 +7548,2.1749876,127.96524 +7549,1.7692275,85.45773 +7550,2.9821475,221.98306 +7551,1.7335747,94.33007 +7552,2.6823869,199.39851 +7553,1.9840028,110.92671 +7554,1.4877565,86.741486 +7555,1.9667045,113.1897 +7556,2.410585,172.13715 +7557,3.2486808,228.6099 +7558,2.9559746,177.15425 +7559,2.5867708,210.96954 +7560,1.8115073,88.80614 +7561,1.4422921,74.71495 +7562,2.5433986,188.37769 +7563,4.4507504,251.83261 +7564,2.1049187,114.45146 +7565,2.004557,128.88391 +7566,4.706336,253.61392 +7567,2.2223155,115.627716 +7568,1.5709304,121.43892 +7569,2.4727619,142.04803 +7570,3.0677645,200.05064 +7571,2.0876694,123.774826 +7572,2.5207922,144.35815 +7573,2.4397936,172.51228 +7574,3.2408874,224.75925 +7575,2.3907943,163.3918 +7576,2.8646932,164.80206 +7577,0.9212278,71.17405 +7578,2.053186,125.29809 +7579,1.6075575,108.034515 +7580,2.360942,98.76451 +7581,3.0056846,231.40651 +7582,1.9361646,118.35936 +7583,2.564837,184.41605 +7584,1.9309007,99.22592 +7585,1.9048463,119.10387 +7586,2.7600605,180.2466 +7587,2.6811914,191.26968 +7588,4.971234,251.61673 +7589,2.9068782,208.17546 +7590,2.6519647,192.80246 +7591,2.6410158,138.59927 +7592,1.9012234,130.30952 +7593,1.8143028,100.24414 +7594,1.9500011,89.390015 +7595,3.0738025,212.80663 +7596,2.7462618,185.15125 +7597,1.8757963,110.97033 +7598,1.5362386,76.21869 +7599,2.213121,118.59657 +7600,2.5538483,152.23763 +7601,1.9343255,101.10333 +7602,1.4733257,109.59855 +7603,5.278533,254.42476 +7604,1.8436921,94.79415 +7605,2.1695757,126.69362 +7606,2.5747828,183.31436 +7607,1.7405013,102.25108 +7608,1.6710876,82.24228 +7609,1.7296946,107.40098 +7610,3.665012,215.10446 +7611,2.650904,158.52435 +7612,2.9267392,180.56989 +7613,2.419373,148.0789 +7614,3.843906,246.0912 +7615,3.3172603,195.64037 +7616,2.99811,211.72287 +7617,2.371465,145.95773 +7618,3.4305606,228.91705 +7619,2.4022977,128.40791 +7620,2.31568,152.44588 +7621,1.6356845,76.26325 +7622,1.7015107,105.44827 +7623,2.7563806,216.81567 +7624,2.1289754,109.439 +7625,2.367413,152.30994 +7626,2.7179112,172.82388 +7627,2.4447014,143.18225 +7628,2.437742,167.03238 +7629,3.294274,217.49197 +7630,3.6632774,231.65988 +7631,1.784966,92.24763 +7632,3.4591835,244.73563 +7633,2.187842,119.00604 +7634,2.4174685,160.02362 +7635,2.2924855,145.2457 +7636,2.424748,165.28177 +7637,1.9343024,126.35431 +7638,2.1344664,140.88278 +7639,2.1935875,131.86145 +7640,1.6306099,103.772575 +7641,3.1896744,201.22084 +7642,1.9898528,114.46947 +7643,1.3688235,77.81431 +7644,2.4363942,141.75778 +7645,2.934495,189.86742 +7646,2.7852538,157.91364 +7647,2.528251,142.74658 +7648,2.5734363,153.56133 +7649,2.0348892,123.882706 +7650,2.8510053,209.2852 +7651,2.1112893,144.85489 +7652,3.3120918,233.21812 +7653,2.0396514,148.05222 +7654,2.3344672,124.4459 +7655,1.763242,96.722595 +7656,3.1920173,222.68364 +7657,1.9629748,87.44514 +7658,1.9186127,87.34102 +7659,2.8164396,177.50183 +7660,2.8262322,154.36145 +7661,3.8388488,240.61539 +7662,2.6284194,203.9264 +7663,3.3058934,228.17612 +7664,2.872163,198.17868 +7665,3.157106,211.81573 +7666,3.9877274,246.17513 +7667,2.3282304,162.19092 +7668,1.9920746,95.9142 +7669,2.2176642,113.40512 +7670,1.7980882,98.929245 +7671,2.0608644,136.3727 +7672,2.2051635,162.68549 +7673,2.3444304,176.16898 +7674,1.7950532,84.55197 +7675,1.4470428,80.4532 +7676,2.1572144,122.81132 +7677,2.373836,155.0604 +7678,2.2344108,117.384476 +7679,2.071116,105.3573 +7680,3.1715834,218.12004 +7681,3.0038056,218.60396 +7682,1.8438966,90.680466 +7683,3.1398315,223.31566 +7684,3.8969588,245.52986 +7685,3.218715,221.14166 +7686,1.9146756,101.01713 +7687,2.5834842,161.64426 +7688,3.1378856,195.111 +7689,2.085035,98.177086 +7690,2.186708,129.49036 +7691,2.6637928,178.26657 +7692,2.728608,210.10437 +7693,1.8253078,117.54352 +7694,2.9415393,195.06667 +7695,5.025693,254.36427 +7696,1.3241366,77.42906 +7697,3.0963166,224.17093 +7698,2.2669659,121.45601 +7699,1.7857416,127.58377 +7700,2.9460516,216.89804 +7701,3.1243277,219.22375 +7702,2.425444,167.30313 +7703,2.2199373,123.681625 +7704,3.0383704,229.02907 +7705,2.8792245,225.1691 +7706,2.20052,154.99521 +7707,2.2568831,138.22662 +7708,1.3744165,76.18653 +7709,2.3432817,141.53352 +7710,3.2441978,208.38934 +7711,3.6295245,230.30309 +7712,2.577115,177.20297 +7713,2.7005172,167.3919 +7714,2.3745668,153.33563 +7715,2.417743,177.73225 +7716,3.1308055,223.64166 +7717,1.6295981,89.40803 +7718,3.0458903,206.53572 +7719,2.4186008,127.65861 +7720,2.9010777,135.19836 +7721,2.8780072,179.7251 +7722,4.2494316,249.68997 +7723,1.6178567,79.83697 +7724,2.4502573,199.32545 +7725,2.575542,182.20978 +7726,3.1889362,230.08488 +7727,2.7400572,200.46313 +7728,2.545504,174.34224 +7729,1.9982873,119.16054 +7730,2.225461,146.78462 +7731,1.5381856,108.53853 +7732,3.0584295,211.01561 +7733,2.845553,157.98175 +7734,3.0780034,235.15172 +7735,2.2580733,113.90009 +7736,1.570479,92.36155 +7737,2.2167115,127.15616 +7738,2.4361994,125.77177 +7739,4.2555895,250.68488 +7740,3.5557587,244.4566 +7741,3.793302,239.93376 +7742,2.2950552,123.93521 +7743,3.5233355,233.3125 +7744,2.2209845,132.09721 +7745,1.6883163,105.64041 +7746,1.5440415,96.522415 +7747,2.311896,161.2363 +7748,2.4418464,167.38443 +7749,2.7862236,214.77727 +7750,1.6983216,104.63222 +7751,3.5904214,235.5882 +7752,1.9252001,136.53963 +7753,3.2449808,228.77383 +7754,2.8447993,194.54677 +7755,2.434524,113.53219 +7756,3.7062435,232.59036 +7757,2.4979548,123.82965 +7758,3.9334939,234.10469 +7759,2.8342412,191.15822 +7760,2.9507782,202.91963 +7761,2.936621,216.02779 +7762,2.4072268,141.32663 +7763,2.043279,120.30999 +7764,2.61361,193.88234 +7765,2.133554,131.7284 +7766,2.7230256,158.16342 +7767,1.6118401,102.07 +7768,1.3034819,78.252304 +7769,2.0138237,124.53732 +7770,2.858421,208.7984 +7771,1.5402834,82.047195 +7772,3.418958,221.15135 +7773,2.1558752,101.3277 +7774,4.134876,240.58528 +7775,1.8817998,131.15291 +7776,2.0765479,130.94241 +7777,2.0057468,128.0827 +7778,2.4128857,193.78871 +7779,4.2069616,247.49545 +7780,2.5876265,190.55624 +7781,2.430428,163.17134 +7782,3.2277493,243.09068 +7783,2.2811542,107.49243 +7784,2.34518,169.5897 +7785,2.8941183,167.33528 +7786,1.1854357,75.96774 +7787,3.3680077,218.82335 +7788,2.4232085,143.8139 +7789,2.273881,151.18091 +7790,2.60387,155.43317 +7791,2.2133882,114.004166 +7792,2.0593543,109.41481 +7793,1.9749949,149.15314 +7794,2.7886527,162.00618 +7795,2.6320498,174.16446 +7796,2.3860419,128.30472 +7797,2.9996254,206.5808 +7798,2.514282,157.2348 +7799,2.3836157,131.97223 +7800,2.5441093,170.57303 +7801,2.3281403,134.17177 +7802,1.8208336,101.762726 +7803,2.5341096,178.9198 +7804,1.9597384,149.18134 +7805,3.1151853,208.40324 +7806,2.4263175,146.37173 +7807,3.6837263,250.32195 +7808,2.9503767,182.78137 +7809,2.064181,121.32425 +7810,2.2610857,143.90916 +7811,1.681101,103.26465 +7812,2.215313,135.69421 +7813,2.2826524,131.70679 +7814,2.6499734,135.6625 +7815,2.4773257,152.75497 +7816,2.4984384,171.72429 +7817,3.7530885,229.8617 +7818,2.6262825,165.42792 +7819,3.1881843,197.39844 +7820,1.7203858,90.348755 +7821,1.3649728,84.4016 +7822,2.8440127,208.27298 +7823,2.3203273,156.48376 +7824,3.0385776,203.3868 +7825,3.2872133,188.88562 +7826,2.1817946,124.612015 +7827,3.4332738,228.5959 +7828,3.674812,228.37474 +7829,2.4997594,169.55374 +7830,2.1487086,109.799866 +7831,2.6348925,190.04407 +7832,1.6881826,89.914566 +7833,2.856624,159.87561 +7834,1.9100434,101.15782 +7835,3.416057,205.26321 +7836,2.3595967,168.36462 +7837,2.9936688,198.89645 +7838,3.455476,213.72932 +7839,2.203964,158.61151 +7840,1.8789208,103.91101 +7841,3.365346,244.25694 +7842,1.6619326,99.762535 +7843,2.3081968,173.07596 +7844,1.911988,121.69557 +7845,2.6742601,193.99345 +7846,3.275735,229.01036 +7847,2.675211,188.97092 +7848,2.2138696,124.07747 +7849,3.1757236,213.06458 +7850,2.6172295,217.47458 +7851,1.9773115,128.02971 +7852,3.1613586,218.9218 +7853,2.0980513,113.75934 +7854,2.5432572,190.88425 +7855,3.1699169,227.9221 +7856,3.3223906,201.8308 +7857,2.276278,137.56232 +7858,1.909039,96.80909 +7859,1.9153311,145.60678 +7860,2.7525744,163.22015 +7861,2.0597143,129.38885 +7862,1.7369783,105.41916 +7863,1.7212623,79.10441 +7864,2.9424481,191.56067 +7865,1.6420205,95.79762 +7866,3.0408802,220.77979 +7867,2.945486,205.95868 +7868,1.4589013,79.37255 +7869,2.2690222,136.20724 +7870,4.849918,252.12428 +7871,2.4638438,133.98361 +7872,1.4006848,80.2312 +7873,1.5117927,78.062386 +7874,2.231492,121.92634 +7875,2.7958093,164.68604 +7876,1.7159137,129.80917 +7877,2.6142716,194.27657 +7878,2.0935824,146.02748 +7879,3.7551773,238.93524 +7880,2.0879183,123.43331 +7881,3.6600888,225.02988 +7882,3.705524,241.23213 +7883,3.3948607,220.9642 +7884,2.3810878,154.58987 +7885,2.6839757,189.35033 +7886,3.060439,204.9579 +7887,2.0412068,102.06999 +7888,2.794285,164.0881 +7889,2.495079,192.65312 +7890,1.8993798,95.98681 +7891,0.90857357,73.27491 +7892,2.6580522,163.57153 +7893,2.192923,133.98553 +7894,2.4185133,172.61475 +7895,1.9971569,134.32925 +7896,2.0332375,113.742256 +7897,2.1003351,112.39076 +7898,1.2113556,72.964096 +7899,2.5582042,161.47858 +7900,2.422473,130.92377 +7901,1.9720027,92.90735 +7902,2.050092,180.09885 +7903,2.1100838,108.28618 +7904,2.128115,128.77078 +7905,2.6446383,185.2934 +7906,2.9916568,192.18556 +7907,2.2861123,126.15276 +7908,1.6275212,73.27411 +7909,2.7288618,156.09613 +7910,2.1660156,93.18209 +7911,2.1635535,121.68473 +7912,2.0717382,131.70786 +7913,2.1615524,138.71149 +7914,2.926078,152.79446 +7915,1.9109011,96.87527 +7916,2.5043976,155.09904 +7917,2.6416152,137.07748 +7918,2.5800061,153.95929 +7919,2.7587602,188.54501 +7920,2.3258781,182.69684 +7921,2.1940212,170.9614 +7922,2.5813603,180.41124 +7923,2.0878918,143.63031 +7924,2.0562851,128.0073 +7925,2.7616918,182.34409 +7926,2.0030394,98.46692 +7927,2.4815803,183.49966 +7928,2.8910418,225.48701 +7929,2.701333,199.53133 +7930,1.6498747,74.43892 +7931,2.876573,198.28296 +7932,1.5384933,80.83509 +7933,2.6858687,137.93668 +7934,2.701904,178.5264 +7935,2.3368363,123.397705 +7936,2.8592925,205.41252 +7937,2.5640476,125.05845 +7938,2.8364275,222.08029 +7939,1.8382621,155.07202 +7940,2.4868922,181.80162 +7941,2.394244,127.0856 +7942,2.1042635,96.30888 +7943,1.9109079,95.615486 +7944,2.6497822,154.73648 +7945,2.9702625,188.45212 +7946,2.7622473,156.30956 +7947,2.4354205,179.01453 +7948,2.5272298,106.465294 +7949,2.5529854,124.85579 +7950,3.791898,251.82632 +7951,2.616967,147.89099 +7952,2.9140804,180.74702 +7953,1.677679,89.8752 +7954,3.30098,232.60999 +7955,2.77357,212.57472 +7956,1.884835,119.59744 +7957,1.7541876,123.61088 +7958,1.92506,123.76782 +7959,2.7937987,198.55061 +7960,3.143387,209.00388 +7961,1.8467253,114.12417 +7962,3.2715452,231.36407 +7963,3.58955,238.13005 +7964,2.4019969,142.87993 +7965,2.157036,143.57953 +7966,2.9544952,216.17355 +7967,2.0924191,100.51532 +7968,1.8236775,101.971405 +7969,2.2303863,115.854004 +7970,3.527885,238.19197 +7971,1.8959478,89.634995 +7972,1.9584006,118.9351 +7973,2.5595782,138.85751 +7974,2.413896,134.31143 +7975,2.7126577,185.80154 +7976,2.1531937,120.984344 +7977,2.7086701,167.52837 +7978,3.1738505,188.4684 +7979,2.8505678,198.15244 +7980,1.8626392,115.950325 +7981,3.2850237,216.83662 +7982,1.6404543,98.429214 +7983,1.6308447,115.0417 +7984,2.2782214,153.1549 +7985,2.7117217,175.04381 +7986,3.261149,243.14091 +7987,4.432143,252.34796 +7988,2.03202,96.484726 +7989,3.155291,213.62215 +7990,2.9586911,189.40018 +7991,1.8382872,90.38625 +7992,1.7079091,92.97146 +7993,2.879899,139.97252 +7994,2.530524,132.20032 +7995,2.1966596,114.6021 +7996,2.8503637,196.3087 +7997,3.002294,233.80486 +7998,2.485973,166.90262 +7999,2.5625653,209.6244 +8000,3.3485513,230.5681 +8001,1.9011931,106.61659 +8002,2.1327717,127.92842 +8003,2.10601,111.81939 +8004,1.3915582,76.8568 +8005,3.8025525,236.83824 +8006,2.4013956,171.62503 +8007,1.6273427,130.18143 +8008,1.5563058,92.18976 +8009,2.5004046,188.09338 +8010,2.33186,140.70605 +8011,1.9749844,120.499954 +8012,2.0334535,113.04795 +8013,2.9979815,207.4489 +8014,1.9783144,155.82257 +8015,3.8247974,245.13374 +8016,2.3492992,171.28435 +8017,1.7400918,88.492386 +8018,2.3116853,134.76166 +8019,2.8805861,218.61621 +8020,3.1086383,222.16768 +8021,3.2017117,221.12415 +8022,2.8645968,214.17984 +8023,2.759398,186.09506 +8024,3.0752378,225.07106 +8025,1.9075062,92.71719 +8026,2.4862206,159.08636 +8027,2.8186164,164.84164 +8028,1.7548277,87.927315 +8029,1.9862105,137.74133 +8030,2.1092587,116.03555 +8031,2.138377,126.412994 +8032,3.3214622,231.46664 +8033,1.6569794,102.1944 +8034,3.717249,240.16156 +8035,4.001426,245.2088 +8036,2.481347,149.6521 +8037,2.9895031,218.31154 +8038,2.1595278,115.4854 +8039,2.643188,114.55757 +8040,2.6729097,195.85367 +8041,2.4766998,150.81459 +8042,2.4927695,161.35712 +8043,1.4468623,97.98012 +8044,2.7737908,201.79903 +8045,3.0590186,203.42468 +8046,1.9064891,130.0549 +8047,2.474546,179.51929 +8048,1.8841709,105.77489 +8049,2.6774476,207.13312 +8050,2.1464815,90.423965 +8051,2.1652179,109.55513 +8052,2.796577,194.13968 +8053,2.4837682,172.4086 +8054,2.5364015,157.1618 +8055,2.752765,214.10234 +8056,1.8069074,108.05658 +8057,2.2684033,128.58966 +8058,2.8568618,194.3602 +8059,3.202927,199.62599 +8060,2.1261134,118.805466 +8061,2.081767,115.49478 +8062,3.2562401,216.1444 +8063,2.9588785,189.8263 +8064,2.312254,151.73404 +8065,3.0957792,205.0931 +8066,1.9220438,117.696365 +8067,2.2294936,148.55942 +8068,2.1586118,184.58115 +8069,4.1394534,252.27776 +8070,2.1496844,118.50163 +8071,1.4796255,80.76608 +8072,2.6311738,219.48164 +8073,2.214274,155.92422 +8074,3.6122723,230.20035 +8075,4.688749,253.64845 +8076,3.066326,219.02193 +8077,2.800806,189.43861 +8078,2.3202822,155.45807 +8079,2.1916745,154.95047 +8080,1.6540827,94.15274 +8081,3.0962837,202.94437 +8082,1.9892563,106.51796 +8083,1.4697446,80.658195 +8084,2.262661,163.19891 +8085,2.7039618,206.93123 +8086,3.6323574,222.30286 +8087,2.0539556,138.62477 +8088,1.7312,86.29026 +8089,2.604115,123.32756 +8090,2.661518,192.4926 +8091,2.2517889,137.07893 +8092,2.4131174,168.6995 +8093,2.3533869,205.13565 +8094,2.5096054,128.14679 +8095,2.5633814,161.44278 +8096,2.4593773,195.66888 +8097,3.9270885,243.18523 +8098,2.6921592,188.54324 +8099,2.134077,140.59116 +8100,3.6736572,239.12778 +8101,2.3744433,144.55641 +8102,2.5696805,165.78323 +8103,3.3583803,226.91507 +8104,1.7934942,88.49797 +8105,2.1923537,118.419876 +8106,2.6675544,162.8688 +8107,1.9985579,133.44733 +8108,2.8950248,215.52303 +8109,2.0174496,101.63216 +8110,4.508707,251.73647 +8111,2.2054074,141.14816 +8112,2.5925193,151.79611 +8113,3.8941524,244.34618 +8114,2.5503001,195.11021 +8115,1.4212214,79.93244 +8116,3.9034123,241.62634 +8117,2.32788,114.04144 +8118,1.4614714,81.28914 +8119,2.081608,118.623726 +8120,2.21686,180.8441 +8121,3.3826022,234.85558 +8122,2.4544923,148.52252 +8123,2.6137383,194.27565 +8124,2.1606376,131.55026 +8125,2.2518919,187.58533 +8126,1.8774694,86.4008 +8127,2.5379148,154.96094 +8128,2.4561515,132.57645 +8129,1.7878468,119.099266 +8130,1.5339553,91.35636 +8131,2.9725544,184.80148 +8132,3.1600945,242.39337 +8133,3.04781,178.20058 +8134,2.2129395,135.92427 +8135,3.5498385,236.45685 +8136,2.3395607,170.99799 +8137,3.6382449,227.29668 +8138,2.2674086,96.974 +8139,2.5607114,203.7163 +8140,1.9657522,100.007095 +8141,1.9757572,100.22041 +8142,1.9774181,138.23682 +8143,2.401202,180.88734 +8144,4.386652,252.36879 +8145,2.075739,103.9635 +8146,2.0088453,158.50659 +8147,2.7837176,197.14288 +8148,2.1093438,119.0684 +8149,2.1754055,121.59449 +8150,2.170454,133.77887 +8151,2.188691,131.9723 +8152,2.4461331,166.27338 +8153,2.309155,180.31335 +8154,2.454571,178.13252 +8155,2.7371585,153.82068 +8156,2.0590477,110.581604 +8157,3.7448208,247.64934 +8158,2.6362154,163.92876 +8159,1.9126128,102.46225 +8160,2.6956987,179.70801 +8161,1.7775445,101.12015 +8162,1.7128309,84.6981 +8163,2.2055635,136.99469 +8164,2.4977098,173.75438 +8165,1.9901121,108.57625 +8166,2.7612653,145.25958 +8167,3.1283736,213.48596 +8168,1.7380726,102.44524 +8169,4.041682,244.46289 +8170,2.8702667,230.00323 +8171,1.5861742,89.04065 +8172,2.516104,182.9642 +8173,1.4799062,91.40373 +8174,3.166123,190.94202 +8175,3.2392013,224.39824 +8176,2.600757,171.81796 +8177,2.305419,117.33819 +8178,3.2333064,216.85876 +8179,3.434014,233.17805 +8180,2.7364306,184.74142 +8181,3.1567428,216.48143 +8182,1.9116117,92.09805 +8183,2.4111938,167.22095 +8184,2.3565946,171.42154 +8185,2.4838204,148.20294 +8186,2.3900561,168.2291 +8187,1.8394914,104.333725 +8188,1.8168988,144.37437 +8189,3.1623569,212.27931 +8190,3.1060944,202.41037 +8191,2.5126956,156.32053 +8192,1.7963856,109.261795 +8193,2.67186,156.89395 +8194,2.1032367,102.80972 +8195,2.3232145,126.73813 +8196,1.9167144,153.4176 +8197,2.162169,161.24736 +8198,2.1657865,107.01943 +8199,2.4404676,179.72618 +8200,2.2983453,141.56042 +8201,1.6604625,118.51675 +8202,2.0343807,110.514755 +8203,2.1270757,171.63806 +8204,1.8790026,112.89661 +8205,2.0097132,121.719574 +8206,1.5067927,92.369446 +8207,2.0442119,129.613 +8208,2.1788085,106.52094 +8209,1.6020797,84.34347 +8210,4.0212164,242.66998 +8211,3.1506402,224.62404 +8212,2.7207212,187.23904 +8213,3.17082,199.24193 +8214,2.2068326,112.80582 +8215,2.2562525,96.4081 +8216,2.266271,132.96645 +8217,3.367501,206.45578 +8218,2.010456,86.102974 +8219,2.8370585,202.99887 +8220,2.0989761,97.7845 +8221,3.114223,203.76352 +8222,2.2621787,148.13289 +8223,2.6469498,166.18341 +8224,1.9982852,127.85019 +8225,3.1707134,196.03099 +8226,2.4089572,123.640594 +8227,1.4668807,90.10008 +8228,3.6028047,220.82121 +8229,2.2974906,156.54282 +8230,2.5946546,158.80396 +8231,1.56385,68.49423 +8232,2.767713,214.76128 +8233,3.4745145,235.97446 +8234,2.377092,134.66003 +8235,1.9070474,131.3089 +8236,1.7115849,114.835464 +8237,1.958766,105.153336 +8238,2.0421882,105.8716 +8239,2.7980282,189.16214 +8240,1.5571859,84.13917 +8241,2.1008983,117.86335 +8242,1.9630154,128.24533 +8243,2.9156547,202.47668 +8244,2.782554,204.31198 +8245,3.9342742,244.54659 +8246,2.3555677,157.35765 +8247,2.0569162,156.85898 +8248,2.001991,186.92624 +8249,1.6303992,89.02695 +8250,1.3042216,72.572136 +8251,2.4386356,164.8216 +8252,2.2330108,107.73893 +8253,3.1818194,227.94066 +8254,2.2666335,123.86394 +8255,2.635412,147.2076 +8256,2.4565225,164.04019 +8257,2.5532584,161.08801 +8258,2.1223989,156.55203 +8259,3.2805285,235.71753 +8260,2.7846282,209.5398 +8261,2.6323025,173.78815 +8262,2.5477605,141.90485 +8263,1.894428,118.78353 +8264,2.2274542,192.14943 +8265,2.3734431,134.10153 +8266,2.4708292,160.76001 +8267,3.2288873,190.70935 +8268,2.6149364,216.88199 +8269,1.4632523,81.17446 +8270,1.9418443,99.596924 +8271,2.665373,185.6177 +8272,2.0591173,97.18263 +8273,2.0641134,140.37753 +8274,1.7797328,100.31662 +8275,2.2559633,128.56403 +8276,3.5621352,242.8192 +8277,1.7158355,85.06877 +8278,2.7503824,202.66348 +8279,4.0720277,248.73045 +8280,3.2929819,212.18742 +8281,2.1022522,111.767395 +8282,2.4184406,172.54233 +8283,3.1904678,201.99974 +8284,2.7410324,158.46051 +8285,1.8354385,128.95502 +8286,1.9335132,98.963135 +8287,2.5577395,177.92307 +8288,1.7923728,95.14192 +8289,2.366913,121.4522 +8290,2.2838137,149.41751 +8291,3.3032095,230.13065 +8292,2.2743704,129.78311 +8293,2.574963,144.14954 +8294,3.2608914,198.5324 +8295,2.9058528,188.91025 +8296,3.63061,227.65654 +8297,2.2587948,160.09975 +8298,2.1739376,115.72905 +8299,2.973448,208.76161 +8300,3.5348284,245.34624 +8301,1.4426872,91.58623 +8302,2.359345,128.21149 +8303,2.298853,124.03499 +8304,2.735333,204.45184 +8305,2.3646805,159.8887 +8306,3.4775069,245.63972 +8307,2.4442198,148.60759 +8308,2.6771183,164.24213 +8309,2.4560235,106.980774 +8310,5.009883,253.93507 +8311,2.4795318,156.50067 +8312,3.7440522,245.55716 +8313,1.9967494,95.49831 +8314,2.5718813,178.41151 +8315,2.631281,157.05183 +8316,3.4271574,229.94835 +8317,1.5504367,78.05801 +8318,2.825912,214.07607 +8319,2.4159184,154.0621 +8320,2.373882,139.48465 +8321,2.3945186,143.48221 +8322,2.161819,115.74455 +8323,2.2548697,100.855484 +8324,2.1957083,156.12032 +8325,3.2340386,214.25244 +8326,2.6336818,144.58716 +8327,1.2607447,72.81296 +8328,3.0664897,236.5968 +8329,3.6914825,245.51405 +8330,1.9397203,96.88631 +8331,3.1261678,233.60544 +8332,2.4850404,181.82968 +8333,2.6801574,180.18492 +8334,1.8010907,97.33276 +8335,3.8205314,238.12862 +8336,1.406707,83.09587 +8337,2.2397752,140.18605 +8338,2.7269928,215.56108 +8339,2.3227687,138.64296 +8340,3.2725153,224.97737 +8341,2.7007904,196.82251 +8342,2.4998395,123.23439 +8343,3.0209067,200.34306 +8344,2.7305098,187.97849 +8345,2.502987,175.84712 +8346,4.760064,250.81131 +8347,2.910739,178.60927 +8348,2.5173411,189.09702 +8349,4.004638,251.74106 +8350,2.6951404,150.60028 +8351,3.7617488,232.73027 +8352,2.2856004,178.28726 +8353,2.165577,110.767334 +8354,2.024384,94.29879 +8355,2.6743512,153.54163 +8356,2.111299,112.05398 +8357,2.1941068,152.19131 +8358,2.0269804,119.060715 +8359,2.3175912,123.12333 +8360,1.4030185,74.50586 +8361,2.6627138,132.64021 +8362,2.0486736,117.75115 +8363,1.6637204,94.015526 +8364,1.744484,77.49873 +8365,1.7247847,82.765045 +8366,1.9133849,105.34543 +8367,2.4807832,188.10266 +8368,3.1821783,204.39122 +8369,2.413053,118.5038 +8370,3.1674552,220.48131 +8371,2.1382258,145.69035 +8372,2.929277,187.0218 +8373,2.8345494,206.50114 +8374,2.399709,209.15343 +8375,3.0471542,213.00546 +8376,1.9536654,105.00276 +8377,2.2432227,148.72221 +8378,1.9905343,105.009766 +8379,1.6326356,105.812546 +8380,2.2269564,151.93124 +8381,2.4764035,174.05038 +8382,2.5353513,130.34952 +8383,2.648912,191.38225 +8384,1.98121,116.88266 +8385,2.4814844,147.24863 +8386,2.354007,170.09409 +8387,2.4994214,161.12535 +8388,2.3162682,163.17833 +8389,2.0835016,129.4198 +8390,2.9347038,208.44325 +8391,2.5006416,170.21964 +8392,2.4192128,187.74603 +8393,2.7638383,193.18399 +8394,3.0206501,233.88203 +8395,2.8991418,222.25363 +8396,2.8596988,172.99255 +8397,2.4084668,157.90414 +8398,2.5078669,140.97336 +8399,2.586099,155.03337 +8400,2.275458,109.52774 +8401,2.2573564,113.82147 +8402,2.8411574,143.08966 +8403,2.0209613,104.60843 +8404,1.6725495,81.283905 +8405,1.9178954,91.96636 +8406,3.334956,217.32103 +8407,2.7459145,159.30681 +8408,2.7429967,171.4817 +8409,2.7843585,188.46725 +8410,2.5717585,116.53699 +8411,2.2681146,121.19169 +8412,2.789914,162.42627 +8413,4.1966043,249.68384 +8414,2.7473474,206.06836 +8415,1.9461249,84.596436 +8416,4.1089373,249.07803 +8417,2.5655086,178.99713 +8418,2.31347,149.1004 +8419,2.5515668,209.26907 +8420,2.5102954,160.7858 +8421,2.8731313,173.51778 +8422,3.27074,217.37909 +8423,2.7763705,207.24341 +8424,1.8449299,110.20384 +8425,2.893127,148.01776 +8426,1.5772746,90.72677 +8427,2.639687,168.49951 +8428,3.087496,223.09369 +8429,2.4662151,136.36075 +8430,1.8301208,120.40375 +8431,2.011754,92.88687 +8432,2.1241934,127.50964 +8433,2.4940903,183.5549 +8434,2.68369,192.55182 +8435,3.577643,224.57935 +8436,2.5003037,142.5607 +8437,2.5349014,203.13074 +8438,2.701748,185.18677 +8439,2.6800723,159.08786 +8440,1.8442974,113.78901 +8441,1.9597963,109.43525 +8442,2.110702,102.668686 +8443,1.7122059,117.02347 +8444,1.492165,93.229126 +8445,2.3381152,121.85072 +8446,3.6932378,238.01456 +8447,2.8307383,190.09732 +8448,1.998928,74.20484 +8449,1.8851691,102.42633 +8450,2.4822054,148.49203 +8451,2.0269287,92.21864 +8452,3.0719519,178.6876 +8453,2.364637,144.15388 +8454,3.0387166,214.54573 +8455,3.1859283,193.27542 +8456,2.4088788,100.19734 +8457,3.0137925,211.79672 +8458,2.9356425,211.23557 +8459,3.3520026,223.99489 +8460,2.5385518,177.10252 +8461,3.2823155,233.00848 +8462,2.281076,158.58496 +8463,2.851461,212.74959 +8464,2.760665,170.54138 +8465,2.4152339,149.6602 +8466,2.6347759,185.9773 +8467,2.3545063,132.05942 +8468,1.8327026,108.517746 +8469,2.9401217,197.74399 +8470,2.9380257,206.37543 +8471,2.8402684,192.08392 +8472,2.2476733,163.71698 +8473,2.0691373,117.83173 +8474,1.7180979,94.74963 +8475,3.0719354,211.38445 +8476,2.7641368,164.32402 +8477,1.9682268,98.41079 +8478,2.0646539,142.3859 +8479,3.0371196,195.14021 +8480,2.0964491,123.64662 +8481,1.8952925,107.2014 +8482,2.2084277,117.38751 +8483,1.6981317,90.18444 +8484,2.7112732,181.61539 +8485,3.0755959,217.89427 +8486,3.436399,235.43631 +8487,2.221293,145.76978 +8488,2.6268597,162.4851 +8489,1.7482754,92.471115 +8490,2.9791138,212.00903 +8491,2.5657964,136.13828 +8492,1.9631175,99.42963 +8493,2.162309,147.9014 +8494,1.4444462,85.28861 +8495,1.5860665,84.21055 +8496,2.5276601,171.6273 +8497,3.7325177,244.10239 +8498,2.208881,123.57698 +8499,3.2654853,222.57849 +8500,2.4259038,170.71405 +8501,3.2726436,229.09842 +8502,2.454612,154.87671 +8503,1.5600249,105.457504 +8504,2.5374134,183.98026 +8505,2.8792496,174.15274 +8506,3.2346926,219.4174 +8507,2.2939987,133.19736 +8508,3.0320058,231.9142 +8509,3.4672651,244.35403 +8510,2.236819,114.531906 +8511,3.5801022,222.026 +8512,2.5295722,190.65001 +8513,2.5578427,172.29297 +8514,2.860387,151.18146 +8515,1.7490953,86.89125 +8516,1.8278677,90.762115 +8517,2.0774493,142.27301 +8518,3.623057,241.61868 +8519,2.93177,219.22887 +8520,1.9137444,85.12109 +8521,2.3329287,121.71352 +8522,2.5575323,167.46361 +8523,1.4101887,90.04454 +8524,1.690409,116.80508 +8525,2.7364504,175.73138 +8526,3.0210109,222.84903 +8527,3.060844,215.31909 +8528,2.4727306,132.81113 +8529,2.1691442,109.917465 +8530,2.3231516,116.01174 +8531,3.5013893,234.36073 +8532,1.9393003,128.74905 +8533,2.728389,175.73607 +8534,2.6919246,200.33107 +8535,1.9837513,134.65158 +8536,1.9963644,106.73157 +8537,1.9703872,93.04683 +8538,2.0380595,147.42566 +8539,2.6116176,174.43726 +8540,2.0430708,114.00148 +8541,2.7271562,173.92273 +8542,2.4912982,126.03196 +8543,2.3154945,151.18967 +8544,1.6963365,101.90811 +8545,3.3266048,202.86838 +8546,2.7004666,165.87125 +8547,2.9693365,188.23517 +8548,2.1839018,121.992355 +8549,3.2273574,203.18361 +8550,2.059796,140.7185 +8551,3.6817207,240.99211 +8552,1.6958083,124.810295 +8553,2.6569142,208.4925 +8554,2.256156,142.48889 +8555,2.6360826,130.8529 +8556,2.338018,118.94066 +8557,2.0772293,118.86633 +8558,3.7481065,243.74113 +8559,2.3170648,130.66309 +8560,2.9007509,223.30145 +8561,1.8380669,132.55304 +8562,2.7223268,202.5391 +8563,3.1068013,212.36534 +8564,1.3284034,103.8653 +8565,1.9522594,140.73401 +8566,3.7572503,237.71104 +8567,2.6561494,201.62167 +8568,2.9864306,166.78075 +8569,2.823119,221.6007 +8570,2.0340266,126.8775 +8571,2.581364,138.64055 +8572,3.2756047,180.33781 +8573,1.8749231,103.43503 +8574,1.8223615,83.63776 +8575,2.609423,190.81216 +8576,2.024005,100.65152 +8577,2.43477,191.58557 +8578,1.3907789,95.32789 +8579,2.6204274,142.99814 +8580,1.4190353,87.72286 +8581,2.6662338,165.90436 +8582,1.910132,105.695145 +8583,2.93471,188.69707 +8584,3.0636308,219.52345 +8585,2.2194514,93.74437 +8586,3.7357838,242.8163 +8587,2.562448,149.00647 +8588,3.3106236,198.42526 +8589,2.2515624,136.82968 +8590,3.3240814,223.2975 +8591,2.5838046,162.85373 +8592,1.018195,69.95596 +8593,2.2251363,106.14107 +8594,2.321985,129.32005 +8595,2.705424,204.19388 +8596,2.4035485,143.56812 +8597,2.4710288,173.86728 +8598,1.6886699,78.28283 +8599,2.1472635,101.82922 +8600,1.8160813,91.328995 +8601,3.4241543,208.78023 +8602,2.2586846,101.16 +8603,3.0742717,213.39578 +8604,2.634927,161.68433 +8605,2.215048,122.20273 +8606,2.6738987,196.2854 +8607,2.3127158,137.1784 +8608,1.6332201,104.1966 +8609,2.2618618,163.77325 +8610,2.5247614,130.39893 +8611,3.285798,228.18806 +8612,2.096654,118.516754 +8613,1.9399034,114.30118 +8614,2.0261238,114.806984 +8615,2.6774545,164.57495 +8616,2.2362227,134.86163 +8617,3.3507104,228.42502 +8618,1.5735385,105.01701 +8619,2.0920463,136.92659 +8620,2.8301983,209.12273 +8621,2.7639089,150.78291 +8622,1.2562767,76.46854 +8623,2.8077493,169.70398 +8624,2.2442985,134.44583 +8625,3.0913749,204.40527 +8626,2.4199793,152.90402 +8627,1.3991079,85.89748 +8628,1.3063388,72.85132 +8629,2.5152822,188.08032 +8630,2.6197813,151.18648 +8631,2.4210372,131.59961 +8632,2.1462555,122.43358 +8633,2.618683,168.24695 +8634,2.2940297,137.38779 +8635,1.79713,110.95865 +8636,3.4902291,238.1096 +8637,4.116935,248.58746 +8638,3.5201435,221.57915 +8639,2.4740186,145.75946 +8640,3.81246,244.2372 +8641,2.542412,159.46213 +8642,1.7623575,92.383064 +8643,2.7926354,170.55688 +8644,1.7498811,100.75752 +8645,1.2803988,81.83052 +8646,2.089317,126.99248 +8647,1.7497973,130.04611 +8648,2.706983,159.6329 +8649,2.6514416,169.68286 +8650,2.671292,129.34283 +8651,1.6277212,88.8384 +8652,1.9202845,90.113396 +8653,2.3141456,134.68875 +8654,3.573749,242.80565 +8655,2.64769,165.23544 +8656,2.5897877,204.24695 +8657,2.0036864,95.584045 +8658,1.8817992,125.32381 +8659,3.8661838,246.86497 +8660,2.3836412,158.47134 +8661,1.937758,115.71268 +8662,3.9528039,243.92267 +8663,3.0561194,227.0129 +8664,4.4872246,252.5137 +8665,2.0687883,125.66559 +8666,1.8795736,158.5585 +8667,2.3964176,157.9794 +8668,2.2714453,143.37314 +8669,2.5807679,167.81891 +8670,2.0198827,123.275604 +8671,2.492835,142.53632 +8672,2.3954318,165.36494 +8673,1.9510841,104.15482 +8674,1.733671,82.787575 +8675,3.2269642,217.85715 +8676,2.7841609,160.74368 +8677,2.5955377,169.35896 +8678,1.6108687,97.558174 +8679,2.292884,124.57891 +8680,2.393702,164.76845 +8681,2.9451184,232.28345 +8682,2.0452697,132.44627 +8683,2.9844494,209.05493 +8684,3.423363,220.87947 +8685,2.6308289,146.01445 +8686,1.9859961,161.44409 +8687,2.1460426,110.17099 +8688,2.4015937,94.343155 +8689,1.7687765,89.02933 +8690,3.79473,245.43398 +8691,2.3561502,166.50284 +8692,2.0311077,117.648254 +8693,2.3987079,160.98535 +8694,1.9793923,120.210464 +8695,2.6494915,191.1907 +8696,3.2208712,192.65488 +8697,2.174308,134.1885 +8698,2.7440906,196.35983 +8699,2.8906577,210.66235 +8700,1.6401527,87.04883 +8701,2.9001203,186.04855 +8702,2.8139672,204.66214 +8703,2.16185,155.68668 +8704,2.5924344,198.74713 +8705,3.3448706,221.11432 +8706,1.9457785,145.88129 +8707,3.1507702,221.57307 +8708,2.4217124,136.62943 +8709,2.8589535,171.16559 +8710,3.3107975,215.94435 +8711,2.4472184,187.77191 +8712,2.615959,171.80847 +8713,2.2552142,154.7507 +8714,3.767091,239.0923 +8715,2.7544262,194.42328 +8716,1.9548198,91.6099 +8717,2.760503,205.39285 +8718,2.013741,105.21666 +8719,3.1731584,214.38795 +8720,2.8361971,227.45262 +8721,2.162005,126.26737 +8722,3.4978569,213.55557 +8723,2.870932,182.61404 +8724,2.1813323,127.94903 +8725,2.7128057,206.91571 +8726,2.0995402,117.706726 +8727,1.6041627,85.7445 +8728,2.1710994,151.03445 +8729,3.2834918,204.1983 +8730,2.728579,186.40451 +8731,2.546697,156.78989 +8732,2.102779,138.94467 +8733,1.6483457,88.610565 +8734,1.9456115,98.67619 +8735,2.5298784,210.05768 +8736,2.247595,128.49155 +8737,3.2317247,241.37839 +8738,2.5430727,169.67517 +8739,3.183336,212.42542 +8740,2.580584,136.61229 +8741,2.6916656,153.48975 +8742,2.0492387,115.84519 +8743,2.272864,105.26735 +8744,1.9982224,115.703735 +8745,2.8433018,174.39726 +8746,2.3734987,161.18137 +8747,2.0490065,114.63463 +8748,2.8612022,157.95366 +8749,2.3561711,159.85089 +8750,2.281427,115.08104 +8751,1.7284777,100.46164 +8752,2.337199,187.55469 +8753,2.465339,173.62698 +8754,2.196889,145.89172 +8755,2.2992835,157.86058 +8756,2.968414,218.1807 +8757,1.615693,89.113045 +8758,3.5943654,226.07347 +8759,2.174182,130.54205 +8760,1.780344,98.36943 +8761,1.9698514,99.30966 +8762,2.0148485,136.41992 +8763,2.811006,192.12857 +8764,2.538694,159.91234 +8765,2.8227515,180.26614 +8766,2.8754609,179.73178 +8767,2.5432172,174.49045 +8768,3.0340447,204.5671 +8769,2.7033849,170.90817 +8770,2.381433,195.56569 +8771,3.3516982,222.8169 +8772,2.0280807,122.0966 +8773,2.3408017,116.20714 +8774,1.5504445,84.427414 +8775,2.176728,92.57032 +8776,3.7389302,231.38657 +8777,3.535605,231.03183 +8778,2.440601,126.4547 +8779,2.827306,214.43225 +8780,3.4252055,236.71469 +8781,1.9462831,128.11081 +8782,2.7055893,186.02156 +8783,2.4197917,121.14394 +8784,2.172525,122.12294 +8785,3.2943597,220.90897 +8786,2.6588748,149.7175 +8787,1.7241886,107.25603 +8788,2.8660667,182.3231 +8789,2.4380105,163.75865 +8790,2.7315533,188.95213 +8791,1.489929,86.739235 +8792,3.7743073,217.408 +8793,2.3853648,169.26291 +8794,3.2036512,167.86966 +8795,1.5778599,127.31284 +8796,2.4398234,164.49481 +8797,1.6822399,98.85112 +8798,2.3940673,129.5571 +8799,2.833375,190.16586 +8800,1.7208331,99.42158 +8801,2.8695707,196.5849 +8802,2.6792905,197.4193 +8803,2.104807,113.75241 +8804,2.915455,208.8083 +8805,2.1472116,147.33029 +8806,2.2756047,113.93465 +8807,2.115616,124.55357 +8808,3.7520576,238.68767 +8809,2.1799986,121.58862 +8810,2.096356,112.50595 +8811,2.6766162,175.0544 +8812,2.0149198,111.6208 +8813,1.6508934,109.22792 +8814,2.9039736,199.40402 +8815,2.3244872,149.64142 +8816,2.874612,172.08487 +8817,1.6436626,99.60984 +8818,2.2972941,102.408005 +8819,1.8565431,139.99954 +8820,3.3830357,218.33673 +8821,1.9216107,128.10457 +8822,2.5016294,147.28745 +8823,2.6040595,206.60689 +8824,2.935612,207.84703 +8825,2.8209994,189.30847 +8826,1.7185276,92.94647 +8827,2.9277368,215.42596 +8828,2.6903064,142.02158 +8829,1.9169751,138.11523 +8830,2.4501333,156.72827 +8831,3.4412503,224.40063 +8832,1.8346531,121.18175 +8833,1.9995137,101.68002 +8834,3.2324657,219.49277 +8835,2.2008898,155.872 +8836,2.021082,110.74632 +8837,2.757282,191.01685 +8838,1.7524798,102.39039 +8839,3.5039446,238.42726 +8840,2.3527708,147.46379 +8841,1.5348624,101.44287 +8842,2.558577,204.39456 +8843,2.1502879,134.94772 +8844,2.319962,130.07501 +8845,1.7415296,114.79402 +8846,2.0296385,123.275734 +8847,2.6544325,179.4574 +8848,2.4392827,158.77155 +8849,1.6161197,120.14249 +8850,1.7301004,86.350685 +8851,2.1556,127.62419 +8852,5.037242,254.09361 +8853,3.0909894,198.33205 +8854,2.282782,157.45892 +8855,2.4512448,195.84584 +8856,2.8096445,159.16954 +8857,1.6725352,84.79698 +8858,3.2669263,213.9206 +8859,2.8791735,209.90396 +8860,2.2801785,131.60721 +8861,2.3812442,141.31122 +8862,1.8099025,93.78608 +8863,2.3955293,120.98567 +8864,2.4944587,115.743454 +8865,2.408043,156.45056 +8866,2.2423432,133.24484 +8867,3.1937578,201.99123 +8868,2.5066392,174.20926 +8869,3.18006,211.97531 +8870,2.77235,178.19464 +8871,1.5411152,80.10264 +8872,3.270537,205.00255 +8873,2.8060486,202.68428 +8874,1.751046,95.839005 +8875,2.4193661,113.814514 +8876,1.6851147,88.32184 +8877,3.6684663,236.59253 +8878,2.8771834,203.33163 +8879,1.707285,100.93419 +8880,3.8185525,248.94447 +8881,3.1382875,213.4725 +8882,2.776525,168.83456 +8883,2.627341,155.85974 +8884,4.205222,251.31517 +8885,2.8554657,125.561905 +8886,2.7384048,179.6141 +8887,2.0634298,110.28552 +8888,2.1697721,97.602646 +8889,2.1784017,117.397095 +8890,2.4985044,125.94191 +8891,3.0852578,186.67082 +8892,2.3198798,140.12656 +8893,1.4942389,95.29168 +8894,2.554773,164.65692 +8895,1.3664963,80.76572 +8896,2.3655374,164.26872 +8897,1.9729488,96.52811 +8898,1.6606148,87.839485 +8899,3.3593028,235.02782 +8900,2.071933,140.35077 +8901,3.7063534,232.28967 +8902,2.886188,198.65071 +8903,1.7579576,85.628334 +8904,1.955686,98.83803 +8905,2.795282,211.47424 +8906,2.735005,193.75012 +8907,2.3304124,111.57028 +8908,1.5069209,80.567604 +8909,2.8018787,203.87592 +8910,2.4322457,161.08676 +8911,2.139699,128.79199 +8912,2.1585202,142.53464 +8913,2.5571375,205.63655 +8914,2.1014202,125.87967 +8915,2.2697818,125.85769 +8916,1.9836496,122.00548 +8917,1.7007413,96.385216 +8918,2.741774,198.94228 +8919,2.617259,173.73477 +8920,3.0403697,218.63063 +8921,3.048069,230.15678 +8922,2.0070791,123.45038 +8923,2.5864046,154.92827 +8924,2.0219438,93.03176 +8925,2.7051494,199.71507 +8926,3.3504512,211.75963 +8927,1.4996316,103.7265 +8928,2.0962634,140.2064 +8929,3.5886235,240.67735 +8930,4.1391115,252.96487 +8931,2.8005376,202.0485 +8932,4.4847713,252.29477 +8933,2.042486,137.06735 +8934,2.9794364,214.42017 +8935,2.3292272,167.55862 +8936,1.8614242,135.29602 +8937,3.677322,231.33955 +8938,3.3267183,216.91037 +8939,2.0712638,117.919914 +8940,2.8966231,176.73367 +8941,1.647083,97.08769 +8942,2.1929226,145.60129 +8943,3.8802955,246.55054 +8944,2.2934012,134.86243 +8945,3.593428,245.23448 +8946,1.7020134,94.965 +8947,3.5142832,241.50114 +8948,2.299378,149.38663 +8949,3.9857917,251.10873 +8950,1.7457163,89.11493 +8951,2.2679417,134.9682 +8952,1.3861878,100.05168 +8953,2.4054658,120.4784 +8954,1.8378252,108.22333 +8955,2.6053443,177.54092 +8956,3.4434783,239.58653 +8957,2.6145272,161.64221 +8958,2.025928,89.33576 +8959,2.6355834,187.71744 +8960,2.2620206,147.10605 +8961,1.8356806,147.97798 +8962,2.119679,134.22012 +8963,1.7426517,121.635605 +8964,2.791459,183.31955 +8965,2.3781817,122.03648 +8966,2.5223417,175.45403 +8967,2.635718,146.70615 +8968,2.1765833,130.36882 +8969,1.7924459,111.50946 +8970,2.6389604,183.80457 +8971,2.774438,225.33391 +8972,2.903959,182.23627 +8973,2.531359,173.29861 +8974,2.019392,129.76273 +8975,2.2471108,135.13165 +8976,3.5467238,233.1692 +8977,1.7014247,82.88899 +8978,2.0432653,134.96283 +8979,2.2651386,131.5063 +8980,1.6239779,91.70689 +8981,3.3226666,226.69682 +8982,1.5686314,90.159935 +8983,3.2583482,217.10368 +8984,2.3265176,145.20923 +8985,1.7396356,79.11335 +8986,2.9205945,210.33421 +8987,2.721164,215.89642 +8988,1.5258464,86.057846 +8989,2.2586124,164.16533 +8990,2.2509217,130.04123 +8991,2.8233511,197.93115 +8992,1.5944483,102.65248 +8993,2.1409578,132.71875 +8994,1.9207796,104.645996 +8995,2.9428809,164.88402 +8996,1.7614473,128.867 +8997,2.5813842,170.63562 +8998,2.2508118,101.238144 +8999,2.5830352,182.18546 +9000,2.0685935,84.05788 +9001,2.3919413,126.181274 +9002,3.2464218,231.00992 +9003,3.1109626,223.89587 +9004,3.4293017,243.4254 +9005,2.3929207,150.67032 +9006,2.1133993,105.33611 +9007,2.5319269,204.55565 +9008,1.8499382,91.5833 +9009,2.260377,172.27237 +9010,1.9409168,98.66693 +9011,2.4912524,148.44409 +9012,2.21187,97.92146 +9013,1.3892963,78.09508 +9014,2.946571,161.66708 +9015,1.9977,124.479294 +9016,3.2663789,237.95721 +9017,2.936259,184.8126 +9018,2.6209729,102.50003 +9019,2.3055863,122.68524 +9020,2.149261,97.26297 +9021,2.091307,111.26663 +9022,3.9226546,250.72125 +9023,2.7777295,176.82849 +9024,2.610097,146.23848 +9025,3.82485,247.81012 +9026,2.5645726,176.08276 +9027,3.2070243,207.14868 +9028,2.329053,112.98867 +9029,2.0238132,97.90123 +9030,1.6424278,93.11483 +9031,2.0975657,120.45091 +9032,3.001165,221.89616 +9033,1.5777556,102.06498 +9034,2.2300828,158.4519 +9035,2.1292927,107.3457 +9036,2.4102826,144.98138 +9037,2.7523255,182.82149 +9038,3.095492,223.59813 +9039,2.4005303,111.42539 +9040,1.9949701,122.65855 +9041,2.5609956,158.56966 +9042,3.084621,220.93372 +9043,2.287435,171.19543 +9044,2.8522377,178.90352 +9045,2.6968222,173.93306 +9046,1.8082552,116.502754 +9047,3.0861866,227.49141 +9048,2.9630084,226.03464 +9049,2.5760949,146.26376 +9050,1.9041212,111.34371 +9051,2.2294095,146.54785 +9052,4.093682,248.04945 +9053,2.0988898,111.94193 +9054,2.412866,129.02463 +9055,3.1548944,211.22424 +9056,2.6963704,204.80127 +9057,3.1045797,222.31488 +9058,3.3751512,211.17729 +9059,2.2264051,149.81876 +9060,1.8496245,108.003296 +9061,3.0407555,209.79051 +9062,2.6513877,185.42331 +9063,2.765237,160.5208 +9064,3.4260936,225.14386 +9065,3.0063953,190.31552 +9066,2.7242215,151.26736 +9067,3.539228,234.74583 +9068,2.2448459,117.12869 +9069,2.870914,166.88441 +9070,1.5685313,85.618256 +9071,3.6766162,247.93896 +9072,2.280883,165.87698 +9073,1.8527055,95.83302 +9074,4.020829,247.75523 +9075,2.3599067,128.42561 +9076,2.0170803,115.78971 +9077,1.7051585,98.87095 +9078,4.3163805,251.90498 +9079,2.7227867,182.00679 +9080,2.5049903,139.29567 +9081,3.1412568,232.0303 +9082,1.4911501,83.81857 +9083,3.4942307,229.83633 +9084,2.669324,204.26562 +9085,3.9696603,244.18091 +9086,1.9223483,104.335075 +9087,2.883818,175.98232 +9088,3.1019254,180.09738 +9089,3.687942,235.85515 +9090,2.0968966,132.72223 +9091,4.160224,251.7224 +9092,2.7891934,169.04716 +9093,2.6473136,192.54597 +9094,1.8410016,109.73364 +9095,2.2703197,126.906784 +9096,1.9793737,142.1442 +9097,3.2399259,217.3616 +9098,3.4896436,235.1716 +9099,2.4731183,170.6352 +9100,3.1385748,219.42766 +9101,2.6140103,154.44235 +9102,2.4256759,133.00034 +9103,2.7608862,195.68825 +9104,2.0097141,122.43054 +9105,2.1337063,121.916565 +9106,2.3585877,195.93307 +9107,2.7767112,200.77301 +9108,3.4639888,224.03452 +9109,3.442336,219.98529 +9110,3.799424,236.9494 +9111,2.2538903,143.66985 +9112,2.209333,138.88303 +9113,1.8457975,104.14727 +9114,3.5581307,241.09143 +9115,3.2319348,238.63335 +9116,2.6044838,205.00627 +9117,3.714389,224.16632 +9118,2.8367295,191.48778 +9119,2.3990066,114.765656 +9120,1.8644882,91.98699 +9121,2.4754617,183.24252 +9122,2.7689385,196.22931 +9123,3.4243355,221.88153 +9124,2.2362661,182.966 +9125,3.3467517,233.3231 +9126,1.9463341,114.21829 +9127,2.179819,114.965965 +9128,1.698093,125.46045 +9129,1.8895932,90.79147 +9130,2.029833,129.47302 +9131,2.9072337,220.7083 +9132,1.6768209,104.81524 +9133,1.2879945,82.08888 +9134,2.2071378,123.63168 +9135,1.7154701,104.33313 +9136,1.8984942,107.18332 +9137,2.762671,160.62636 +9138,1.9359086,124.6288 +9139,2.288456,135.55914 +9140,2.0766468,138.04202 +9141,2.2165945,171.17497 +9142,2.3511486,165.24164 +9143,3.7464523,248.70561 +9144,2.3372326,161.10117 +9145,2.1013484,109.50545 +9146,2.2864225,193.71953 +9147,2.6087546,148.85123 +9148,2.7251263,185.48892 +9149,3.2897224,208.48439 +9150,2.9306672,226.20659 +9151,1.9741988,93.96802 +9152,2.3579812,151.46432 +9153,1.7542925,101.93921 +9154,1.887047,123.58132 +9155,2.9061704,212.59277 +9156,2.7373059,180.27449 +9157,2.540043,159.71646 +9158,3.1239095,213.81032 +9159,2.5583549,185.78946 +9160,1.8392608,109.51782 +9161,2.5648887,207.04964 +9162,2.284009,145.21964 +9163,1.6921899,101.00832 +9164,1.826039,155.28812 +9165,1.916626,142.94658 +9166,2.0892167,95.670685 +9167,2.3830276,187.98929 +9168,3.2095473,234.47566 +9169,1.8046368,111.18849 +9170,1.5919344,93.17882 +9171,2.714452,174.90341 +9172,2.3322072,161.65016 +9173,2.362357,143.31712 +9174,2.8576941,217.30464 +9175,3.001385,211.79497 +9176,3.0578074,223.7307 +9177,3.3082156,215.34482 +9178,3.0672412,208.70563 +9179,2.3800173,135.92575 +9180,1.8994323,107.5216 +9181,2.5504904,167.59865 +9182,3.2333496,218.50499 +9183,2.1910415,165.91766 +9184,2.5869083,197.73863 +9185,2.379519,141.6929 +9186,3.61562,224.77193 +9187,2.6218982,163.97437 +9188,2.9634795,216.87408 +9189,2.5758846,135.53317 +9190,3.5385847,240.89783 +9191,2.5333343,136.4609 +9192,1.5953226,107.56329 +9193,2.3179955,147.474 +9194,2.0480592,90.73415 +9195,3.253656,192.76837 +9196,2.755834,183.04102 +9197,2.4474206,158.74753 +9198,3.0451515,206.20786 +9199,2.3976533,133.29114 +9200,2.1496363,155.95724 +9201,3.5578089,238.90182 +9202,2.4364092,166.46178 +9203,2.272795,153.99991 +9204,2.4121966,142.90286 +9205,1.7672387,104.19517 +9206,1.9307669,157.55511 +9207,2.6268432,173.85266 +9208,2.8064075,169.5727 +9209,1.7212275,89.79961 +9210,1.6562418,80.174446 +9211,1.7624682,98.10314 +9212,2.4854474,173.88141 +9213,2.4783847,177.48312 +9214,2.6508794,223.38121 +9215,2.2669544,95.57666 +9216,2.4870355,166.73157 +9217,1.7207488,99.6649 +9218,4.766797,253.04568 +9219,1.785445,118.18483 +9220,1.8768846,98.582504 +9221,2.24386,126.65492 +9222,2.3147147,133.58994 +9223,2.4153833,136.58473 +9224,2.6154416,142.74805 +9225,2.0882277,88.356186 +9226,1.62722,118.90786 +9227,2.300773,136.37407 +9228,1.6832042,77.07304 +9229,2.7629645,162.69753 +9230,1.5321567,95.120224 +9231,3.1837335,220.66873 +9232,2.8074017,193.67847 +9233,2.130941,158.37885 +9234,2.492352,177.65915 +9235,2.1329205,166.64679 +9236,2.4671159,141.2978 +9237,2.9182336,145.85677 +9238,1.7865944,92.57793 +9239,2.7523592,180.56313 +9240,2.8914616,215.80086 +9241,2.0535467,119.52533 +9242,2.4229677,184.45378 +9243,2.2108092,185.48833 +9244,2.8804383,153.3804 +9245,1.8703806,108.21721 +9246,2.3895836,149.63716 +9247,1.7129422,112.165596 +9248,3.0686245,224.45415 +9249,2.5862806,160.74406 +9250,1.6355727,89.60316 +9251,2.1364157,151.56268 +9252,1.5239718,90.21017 +9253,2.439412,146.74112 +9254,1.9765928,100.71609 +9255,3.0544577,207.16136 +9256,2.5796697,145.44653 +9257,3.1099944,194.04242 +9258,3.070189,230.77498 +9259,1.9865043,94.76658 +9260,2.3277855,129.35535 +9261,3.3866153,173.04727 +9262,2.3870158,118.48613 +9263,1.6042984,88.12457 +9264,2.2417052,157.83604 +9265,2.810331,179.16013 +9266,2.9676843,178.21387 +9267,1.7589605,91.685074 +9268,2.4846718,150.95628 +9269,2.4602883,127.31059 +9270,1.6375034,94.55405 +9271,2.019366,108.5325 +9272,3.0334792,207.32657 +9273,1.5737872,93.2121 +9274,3.9156775,239.50822 +9275,3.1884623,221.61894 +9276,3.7868626,247.59366 +9277,2.2770379,168.09988 +9278,2.485356,167.82335 +9279,2.375577,167.24002 +9280,4.8383965,252.8363 +9281,2.415439,174.30276 +9282,3.0524926,218.2481 +9283,3.2885737,216.66026 +9284,1.7506552,92.08928 +9285,2.3873389,122.15525 +9286,2.071106,143.71843 +9287,3.1161785,229.36203 +9288,3.924118,246.57657 +9289,2.3831563,160.56308 +9290,2.080415,130.92828 +9291,2.816299,202.14694 +9292,3.0926535,198.5018 +9293,2.2857985,119.17633 +9294,3.7359357,224.58292 +9295,2.413837,132.36046 +9296,2.4863663,158.84811 +9297,2.2490375,152.9474 +9298,4.354893,249.2387 +9299,2.7271354,176.26389 +9300,2.6768715,181.03644 +9301,3.3866198,237.98607 +9302,3.1406045,194.1493 +9303,3.1422353,219.40079 +9304,2.3827069,106.848434 +9305,4.0002384,248.45279 +9306,2.1460016,94.60131 +9307,2.355441,180.04053 +9308,2.6864502,180.32193 +9309,2.4030194,173.8342 +9310,2.6388876,146.26555 +9311,2.3229861,137.31157 +9312,2.676679,155.3556 +9313,2.912812,184.946 +9314,2.2404912,126.928894 +9315,2.1286473,125.29267 +9316,1.9490907,83.057556 +9317,2.1591594,126.914444 +9318,1.6410288,80.66495 +9319,3.9802601,236.71655 +9320,2.562403,181.72493 +9321,2.3900695,161.43863 +9322,2.578017,215.03864 +9323,3.2234774,184.86887 +9324,2.57327,163.90152 +9325,1.9217091,102.28159 +9326,1.42612,80.19871 +9327,2.9178872,184.96695 +9328,2.8908687,208.18791 +9329,1.6973963,100.55989 +9330,1.3668047,78.11864 +9331,1.9734987,92.75113 +9332,2.4667861,131.57352 +9333,2.1284258,136.18542 +9334,2.4518254,124.29071 +9335,2.2885044,137.33533 +9336,2.3001084,181.61455 +9337,2.7171147,169.64973 +9338,2.6953046,203.80414 +9339,2.7131257,181.52539 +9340,3.6459057,239.80139 +9341,2.9039245,177.21268 +9342,3.2251372,216.66722 +9343,2.6081967,170.26129 +9344,3.315565,223.45256 +9345,3.2499473,219.69252 +9346,1.4834433,83.28723 +9347,2.864244,167.88452 +9348,2.2666612,147.3342 +9349,3.9609761,251.68076 +9350,2.0562882,108.83719 +9351,3.0414498,201.88362 +9352,2.4556224,204.85226 +9353,2.1780381,120.29852 +9354,2.5399609,177.42285 +9355,1.6890886,104.81677 +9356,2.3684669,165.29308 +9357,2.4891605,129.32782 +9358,1.3575242,87.08018 +9359,2.7062836,197.71141 +9360,1.8004698,113.62427 +9361,2.0013537,129.73859 +9362,2.2762492,157.31061 +9363,2.7133164,170.28067 +9364,3.0896544,191.89243 +9365,1.7863538,113.74277 +9366,2.7930799,183.616 +9367,1.9155085,132.24919 +9368,2.9895818,170.12027 +9369,2.1888616,133.2586 +9370,1.7615846,83.549446 +9371,2.3889868,161.20187 +9372,2.4598517,159.83832 +9373,2.2310176,177.72446 +9374,2.5683,144.69446 +9375,2.5583062,145.52924 +9376,2.4630172,183.51227 +9377,2.953726,197.48602 +9378,2.6396081,187.55765 +9379,1.4602935,88.871506 +9380,2.3099284,156.0946 +9381,3.2400963,226.0092 +9382,2.3998873,130.8594 +9383,2.8456666,193.88606 +9384,3.2234154,229.8663 +9385,1.9007756,110.44742 +9386,2.7709925,146.44305 +9387,3.5830908,245.25342 +9388,2.8921754,181.74046 +9389,2.8708649,191.57823 +9390,2.3935044,152.91212 +9391,2.0940475,132.15808 +9392,1.294424,74.90036 +9393,3.2481177,210.86427 +9394,2.09899,108.505585 +9395,1.4692054,92.30796 +9396,2.5776534,176.98538 +9397,2.2812452,128.8541 +9398,2.6297305,152.03954 +9399,2.1522288,108.47693 +9400,3.5977936,232.16188 +9401,2.793087,167.22069 +9402,2.589671,180.41962 +9403,3.6824136,249.43245 +9404,2.3262362,111.12402 +9405,2.4595327,157.72675 +9406,4.112202,251.27841 +9407,2.814467,169.06396 +9408,1.9884802,87.74616 +9409,2.272881,188.92804 +9410,3.5092824,246.945 +9411,2.0235512,106.70543 +9412,2.684204,161.69528 +9413,2.2061362,131.07713 +9414,2.5264924,155.51076 +9415,3.343545,217.84712 +9416,2.1323707,128.73624 +9417,2.810758,182.26538 +9418,2.0808496,128.65198 +9419,3.1801112,198.15352 +9420,2.2439609,132.59766 +9421,2.4304895,182.3071 +9422,2.5224862,182.14793 +9423,3.0201583,183.0683 +9424,2.1895266,153.74957 +9425,1.5987866,99.1417 +9426,2.1954446,130.09514 +9427,3.0713615,186.46777 +9428,2.5530617,171.1964 +9429,3.1906142,221.06642 +9430,2.8604674,192.77274 +9431,2.9226346,183.31937 +9432,2.2275794,127.41518 +9433,4.3003573,248.7441 +9434,2.6383734,194.09421 +9435,1.9388007,120.74773 +9436,1.5506837,85.406456 +9437,2.5121977,185.00604 +9438,4.6628785,251.4746 +9439,1.8067255,101.02399 +9440,3.5377054,225.0689 +9441,2.2375891,144.23965 +9442,3.6462388,231.64442 +9443,2.2265172,156.28621 +9444,2.6303906,167.78378 +9445,3.49522,225.84 +9446,3.0926511,200.7733 +9447,2.3843215,160.72937 +9448,1.3838178,75.04766 +9449,2.8326364,155.51846 +9450,3.0453532,203.57443 +9451,2.710507,158.43344 +9452,3.080853,214.68935 +9453,3.0443747,222.11964 +9454,1.3338405,74.27132 +9455,2.5992043,148.81331 +9456,2.3228881,164.6933 +9457,2.8822246,190.52908 +9458,2.2700403,115.659744 +9459,3.0409472,182.50142 +9460,3.3373709,225.92986 +9461,2.9520776,194.98746 +9462,2.5372171,137.30582 +9463,2.9643319,178.09035 +9464,2.4130597,188.669 +9465,2.5822453,155.07846 +9466,2.6193187,199.13719 +9467,3.092261,207.78802 +9468,2.7129483,177.19241 +9469,2.0621722,112.27258 +9470,1.7922782,94.64273 +9471,2.9578962,193.46404 +9472,3.5525775,233.78088 +9473,2.0419283,115.75276 +9474,3.1831925,226.90703 +9475,2.200418,117.44447 +9476,3.9426663,252.22781 +9477,1.342862,92.91147 +9478,2.333688,196.32893 +9479,2.1622148,127.48874 +9480,2.7348046,207.1532 +9481,2.7061386,228.78574 +9482,2.8991241,192.0975 +9483,2.5141215,182.62187 +9484,3.4762175,235.23575 +9485,2.0542307,106.34776 +9486,2.528113,136.87 +9487,3.8230119,247.25691 +9488,2.3716233,156.44022 +9489,2.232571,119.596924 +9490,2.0286002,119.99968 +9491,1.993531,107.17203 +9492,3.0346477,180.56918 +9493,1.5924765,78.335434 +9494,1.9974712,124.332985 +9495,4.1832023,247.48329 +9496,2.2922158,174.39775 +9497,1.975052,92.90816 +9498,2.6374636,151.6784 +9499,2.2911754,122.57248 +9500,1.8166239,106.17346 +9501,2.4174206,184.08289 +9502,2.8179393,142.65036 +9503,2.5683436,156.09756 +9504,1.2425008,68.69116 +9505,2.268492,120.01848 +9506,2.4670546,149.64949 +9507,2.0957162,106.92258 +9508,2.9336207,203.50229 +9509,2.9887455,224.73076 +9510,2.1199517,114.785446 +9511,2.8760428,190.73271 +9512,2.7797813,173.20323 +9513,3.060562,199.80544 +9514,3.5622678,238.39441 +9515,2.6254325,167.90285 +9516,3.3481467,229.4772 +9517,2.8664298,204.80875 +9518,2.4524808,177.26599 +9519,2.6320632,202.13148 +9520,1.5479547,92.80911 +9521,2.2479815,187.03593 +9522,3.111738,220.46655 +9523,2.3605566,141.8617 +9524,2.9978912,203.85919 +9525,1.5696114,71.82999 +9526,2.1431527,128.42203 +9527,3.517059,232.5235 +9528,2.76551,187.80199 +9529,2.5576894,164.43 +9530,2.1369162,146.64047 +9531,2.8499641,186.32574 +9532,2.0032809,119.283615 +9533,2.615821,183.51045 +9534,2.4785469,181.71297 +9535,2.17615,121.7848 +9536,2.7833571,218.89348 +9537,3.862191,237.31123 +9538,2.4785602,159.8913 +9539,2.4258406,156.70181 +9540,2.8528762,171.89603 +9541,3.3214004,205.93674 +9542,2.4500518,184.14288 +9543,1.8966191,110.733665 +9544,4.056875,245.29214 +9545,2.6262836,175.88591 +9546,1.8591348,113.06716 +9547,3.3356807,239.80331 +9548,2.1202989,162.99768 +9549,2.266953,143.65793 +9550,1.7146057,90.32958 +9551,1.7113401,100.87195 +9552,2.9446177,185.6899 +9553,2.817219,189.45248 +9554,2.3989758,160.63376 +9555,1.7092766,95.70998 +9556,3.1214063,201.84323 +9557,2.5681672,203.9118 +9558,2.5053165,143.05865 +9559,2.061394,120.67107 +9560,2.857483,198.76482 +9561,2.1364293,144.3935 +9562,2.4636905,133.4078 +9563,2.9471831,191.48389 +9564,2.5023146,129.9747 +9565,3.0320792,204.63339 +9566,2.778699,198.94194 +9567,1.9401726,116.4143 +9568,1.5192622,80.327774 +9569,1.9599624,111.29697 +9570,2.52396,111.209915 +9571,2.8600667,163.48932 +9572,1.8213855,109.123764 +9573,2.5387034,172.23312 +9574,2.2558131,108.25812 +9575,1.8311689,133.05151 +9576,3.329046,220.44534 +9577,1.6714956,103.54979 +9578,2.9827924,217.92447 +9579,2.1717322,135.33905 +9580,2.4575658,150.83975 +9581,2.2685504,113.68808 +9582,2.9397721,157.03937 +9583,2.8675175,209.09106 +9584,1.9576752,97.31532 +9585,2.405918,117.40587 +9586,3.713955,233.8979 +9587,3.0227284,215.08856 +9588,2.4122107,133.96858 +9589,2.0134401,150.80171 +9590,2.415054,134.40501 +9591,3.7199173,243.47858 +9592,3.1119456,205.56268 +9593,3.6351647,233.5141 +9594,1.6857421,79.73361 +9595,4.415448,250.32353 +9596,1.9772294,112.61226 +9597,2.8340807,179.86188 +9598,2.0148692,129.54622 +9599,2.3221815,127.83121 +9600,2.050906,110.44194 +9601,2.059452,114.98157 +9602,2.4153118,126.15909 +9603,3.3011818,211.14975 +9604,2.187389,125.04729 +9605,2.6891792,148.07068 +9606,2.0978398,92.945854 +9607,3.7598336,246.18683 +9608,2.3474572,122.05143 +9609,1.9117032,114.99695 +9610,1.9873023,130.5841 +9611,2.7302015,191.86444 +9612,3.4393225,214.98326 +9613,2.5456054,163.63446 +9614,2.7579522,181.07404 +9615,2.3691516,121.381195 +9616,2.8403482,222.55157 +9617,1.5567544,89.94149 +9618,1.5153258,88.80495 +9619,2.6123354,188.09482 +9620,2.7096076,143.23268 +9621,1.757543,97.6972 +9622,1.9207788,103.07535 +9623,2.305263,118.364685 +9624,2.0654705,157.57898 +9625,2.0442324,137.12323 +9626,2.4007783,149.06274 +9627,2.2889366,108.69909 +9628,1.8562837,119.475784 +9629,2.4691176,171.79593 +9630,1.7352307,105.496506 +9631,2.9160852,213.68382 +9632,1.9404323,113.419 +9633,2.5001206,166.94067 +9634,2.565189,169.88089 +9635,1.9770067,82.48624 +9636,2.5808623,205.30936 +9637,3.3805027,235.18318 +9638,3.6465373,244.57251 +9639,2.0105276,95.07776 +9640,1.9845554,115.07036 +9641,1.8068988,103.64107 +9642,2.4886036,170.11548 +9643,1.7079093,104.64662 +9644,2.398725,170.51909 +9645,2.540545,145.46921 +9646,2.4345136,149.33347 +9647,1.7134768,88.10128 +9648,2.8361359,186.97018 +9649,1.7799323,140.3689 +9650,1.8253003,123.36445 +9651,2.096138,165.41248 +9652,2.418663,142.66968 +9653,2.3412423,124.07766 +9654,2.108644,111.251205 +9655,2.1533232,124.33471 +9656,2.4828944,191.49597 +9657,3.004107,178.88348 +9658,2.6704664,196.59637 +9659,2.5954952,143.92378 +9660,3.4523778,235.45114 +9661,2.5441132,187.08044 +9662,2.3900297,181.3537 +9663,1.5929983,93.907455 +9664,2.7671375,145.11536 +9665,3.352242,206.61247 +9666,3.1395965,229.19212 +9667,2.5097551,167.89961 +9668,2.67168,125.10362 +9669,2.5495322,136.34966 +9670,2.2520633,109.51137 +9671,3.0550847,215.43376 +9672,1.7105,94.58833 +9673,2.9022393,208.77965 +9674,3.2947755,214.21556 +9675,1.6426715,77.20205 +9676,3.7160516,245.627 +9677,1.8488348,102.64941 +9678,1.8764986,89.16145 +9679,3.617453,230.66125 +9680,2.2425969,135.45804 +9681,2.2271924,137.7471 +9682,2.7933574,179.69955 +9683,2.7337637,161.01115 +9684,1.6940254,97.21628 +9685,4.798669,252.2505 +9686,1.787227,94.32941 +9687,2.5496223,162.48135 +9688,2.3974388,171.86076 +9689,1.8908044,100.64404 +9690,2.7751634,149.93744 +9691,1.8844906,102.21252 +9692,2.3878355,182.51257 +9693,2.7091804,162.48938 +9694,3.218431,193.1916 +9695,1.8097811,105.2265 +9696,1.8921897,99.7997 +9697,2.3188329,146.61261 +9698,2.964976,191.33005 +9699,1.4904746,81.84088 +9700,2.9130378,222.80913 +9701,3.5126386,240.03986 +9702,3.274918,234.78464 +9703,1.7701125,102.53323 +9704,2.5712154,153.62325 +9705,2.7346292,226.03853 +9706,2.6796403,180.7404 +9707,2.7674265,168.03513 +9708,1.8224728,111.22811 +9709,2.3201103,169.59714 +9710,1.7604373,109.31916 +9711,1.9648031,114.18231 +9712,2.5788467,227.84535 +9713,1.7395205,85.07202 +9714,2.2193878,165.44426 +9715,1.5785027,102.969894 +9716,2.2843473,163.02194 +9717,2.1652672,141.63776 +9718,1.7026117,83.61752 +9719,2.5003755,167.95055 +9720,2.4292426,157.5587 +9721,2.356016,151.41138 +9722,2.525176,162.53558 +9723,2.200666,111.5334 +9724,1.782767,112.34248 +9725,1.9601468,109.78974 +9726,3.9765263,240.10107 +9727,1.5208682,88.10468 +9728,2.304109,124.227554 +9729,2.9146183,193.23633 +9730,1.782523,117.45218 +9731,2.817347,189.7266 +9732,2.9674861,209.24448 +9733,2.1964867,120.99638 +9734,1.7104733,134.01366 +9735,2.0389764,93.06765 +9736,2.2893906,116.06955 +9737,3.8075461,248.62068 +9738,1.6883792,102.52107 +9739,1.8159405,95.317154 +9740,2.9033372,172.48376 +9741,2.492886,139.56715 +9742,2.0924177,132.79497 +9743,1.9658518,125.79372 +9744,2.445118,171.52338 +9745,2.4923198,135.52768 +9746,2.3268042,119.15377 +9747,1.3874104,84.29731 +9748,2.6320596,169.2762 +9749,1.8551908,125.17445 +9750,3.6322312,242.56656 +9751,3.0134828,215.67111 +9752,1.5538431,90.78954 +9753,2.2888591,110.47651 +9754,1.773142,117.30997 +9755,1.4801133,125.70332 +9756,1.8604457,106.88618 +9757,1.618505,93.13255 +9758,2.1338887,108.95561 +9759,2.0698578,163.4296 +9760,2.7759202,195.57553 +9761,2.0423832,125.61063 +9762,3.8567562,244.58064 +9763,2.685689,202.04556 +9764,1.7419511,124.90076 +9765,2.6378365,164.6277 +9766,2.6317062,142.69315 +9767,1.7331936,103.36067 +9768,1.9720796,117.63968 +9769,1.6485635,82.864105 +9770,3.5581884,240.33655 +9771,3.6787612,237.71587 +9772,1.9965377,110.5417 +9773,2.1803753,142.73593 +9774,2.343173,113.04182 +9775,2.6111176,190.25565 +9776,2.2645824,169.14882 +9777,1.3067443,76.857635 +9778,2.7265306,189.38455 +9779,2.3593736,129.42728 +9780,2.8373034,157.57474 +9781,2.5996642,185.6468 +9782,3.1467247,211.41998 +9783,3.1352468,234.72565 +9784,2.7958536,200.70085 +9785,2.4131777,124.36603 +9786,2.2453341,114.582306 +9787,2.730418,147.0808 +9788,2.890909,176.02692 +9789,3.095605,236.73982 +9790,1.5106614,86.961525 +9791,2.6985369,143.88031 +9792,1.7837697,91.376976 +9793,2.247959,145.80084 +9794,2.0149457,112.12744 +9795,3.5332043,238.47752 +9796,3.1161873,225.47148 +9797,2.8516908,189.46037 +9798,3.1814494,232.36075 +9799,1.8331531,100.19597 +9800,3.5430753,234.51723 +9801,3.809983,234.12181 +9802,1.4839199,83.886246 +9803,2.8172462,192.18791 +9804,3.0472572,214.76096 +9805,2.4838736,200.22351 +9806,2.5716953,179.63928 +9807,3.1396286,217.17009 +9808,2.1560507,126.27742 +9809,1.5729249,99.013 +9810,1.540551,101.89359 +9811,2.656631,155.97766 +9812,2.785455,161.01357 +9813,1.9202336,90.52673 +9814,2.7737622,187.60275 +9815,1.9966364,142.12784 +9816,1.3144963,77.55286 +9817,2.5568597,169.98387 +9818,3.3997786,230.22534 +9819,1.9563884,117.45671 +9820,1.9941909,115.30882 +9821,1.6810405,92.31529 +9822,3.351604,224.69328 +9823,2.651911,195.07878 +9824,3.7685425,231.08122 +9825,2.1199663,127.8591 +9826,2.0086355,106.208595 +9827,2.4852483,165.00421 +9828,2.0302458,134.67557 +9829,1.7443267,84.58979 +9830,2.685441,164.60812 +9831,2.3022702,126.65097 +9832,1.3053325,85.9603 +9833,3.0637398,207.97533 +9834,2.707211,182.76013 +9835,2.2574868,203.07704 +9836,1.1760466,73.91678 +9837,1.7161707,89.39584 +9838,1.8684548,126.603195 +9839,2.5199578,193.88564 +9840,3.7983196,250.91281 +9841,3.0056427,186.11902 +9842,2.323687,164.08475 +9843,2.9089425,218.94531 +9844,1.7160337,96.8694 +9845,2.1893296,109.47215 +9846,1.8574855,108.05156 +9847,1.9770582,98.79867 +9848,1.8823187,122.16077 +9849,2.9958403,219.69421 +9850,2.6000974,147.78777 +9851,1.3072377,78.15724 +9852,2.250809,138.37292 +9853,3.011742,185.06366 +9854,3.4921176,224.4426 +9855,2.4456959,156.03583 +9856,2.560884,203.90042 +9857,1.9457794,84.85619 +9858,1.913186,119.32606 +9859,2.047828,138.8331 +9860,1.5632343,81.27344 +9861,4.123537,251.1296 +9862,2.732096,177.37799 +9863,1.910869,96.350845 +9864,1.8939371,104.34721 +9865,2.3796926,144.09752 +9866,2.4130483,159.97748 +9867,2.8820891,232.71754 +9868,3.4376864,225.299 +9869,1.9440857,106.71019 +9870,3.1250365,210.5005 +9871,2.920998,214.84299 +9872,3.27998,227.02193 +9873,2.1188245,166.88324 +9874,2.5659757,176.09491 +9875,2.9054523,202.49832 +9876,1.4480962,82.416214 +9877,3.2179358,196.51602 +9878,3.1988306,223.98828 +9879,2.7561858,160.4399 +9880,2.3255286,124.61283 +9881,2.12967,123.20752 +9882,2.1030898,100.43706 +9883,2.237196,134.7229 +9884,3.1683345,226.9151 +9885,2.9261022,208.85995 +9886,2.702474,176.17102 +9887,2.156101,149.97449 +9888,2.4581013,167.98279 +9889,4.100222,244.3168 +9890,2.4399228,144.71613 +9891,1.9471077,142.98041 +9892,2.2501554,104.28529 +9893,2.9902442,218.78787 +9894,3.6838744,248.71603 +9895,2.3483014,153.78592 +9896,2.4822154,198.4133 +9897,3.5021012,243.0214 +9898,2.5214374,127.88225 +9899,2.760094,200.35 +9900,2.4877267,165.41571 +9901,2.428087,150.76761 +9902,2.6836867,187.77231 +9903,3.5707629,219.11699 +9904,1.9292516,122.45257 +9905,2.9722097,206.7896 +9906,1.4783832,78.217224 +9907,1.5125698,112.87792 +9908,2.3083158,155.3458 +9909,2.5045388,184.31448 +9910,3.3950753,229.61432 +9911,3.2816782,220.49211 +9912,1.7524407,90.41136 +9913,1.7313657,78.041695 +9914,1.9512084,129.00244 +9915,3.4510424,226.6655 +9916,2.1377633,124.988754 +9917,3.5274208,218.17484 +9918,2.3137689,149.38034 +9919,1.3271005,73.05043 +9920,2.2544818,150.63058 +9921,3.3683417,229.49391 +9922,1.8504144,103.294 +9923,2.4583013,142.46014 +9924,2.8004723,222.42162 +9925,2.5795608,139.20619 +9926,2.1097875,107.33444 +9927,1.7961174,90.07196 +9928,2.4098303,125.17475 +9929,1.6927149,122.304504 +9930,1.3268094,77.04863 +9931,1.6377523,88.46494 +9932,2.9827063,161.86885 +9933,2.7644448,174.2995 +9934,1.6653868,96.165436 +9935,1.7432604,108.79616 +9936,2.046463,142.50552 +9937,3.561954,246.1548 +9938,2.5617018,156.67282 +9939,3.0917838,230.50923 +9940,2.2871368,140.29875 +9941,3.6109157,235.19057 +9942,1.6906232,96.617935 +9943,2.7842922,186.09763 +9944,3.043639,206.23285 +9945,3.2105827,234.5632 +9946,2.8953822,171.78804 +9947,2.714919,143.51944 +9948,2.2146182,164.62003 +9949,2.0050278,105.91739 +9950,2.1700468,126.4272 +9951,2.183174,126.025246 +9952,1.1539967,77.63214 +9953,3.002003,187.98474 +9954,2.3261092,183.59476 +9955,2.2781792,151.19193 +9956,2.0554354,113.7018 +9957,2.518804,154.68863 +9958,2.4341016,133.75697 +9959,1.9571393,115.38597 +9960,2.8908796,177.66698 +9961,2.7003636,178.44936 +9962,2.4383857,163.07106 +9963,1.5407288,90.92381 +9964,2.529922,159.58762 +9965,2.5660036,144.23306 +9966,2.1528783,191.66199 +9967,2.6071277,149.58899 +9968,2.3012195,140.94061 +9969,3.0313275,175.47906 +9970,3.5684676,235.201 +9971,1.9763688,117.14014 +9972,2.7519827,143.55682 +9973,1.7146491,78.924774 +9974,2.8158596,146.02304 +9975,1.6485947,104.03119 +9976,2.6833315,166.47357 +9977,2.628936,151.89578 +9978,2.6328955,136.22342 +9979,2.4699528,129.09169 +9980,1.3800788,82.9642 +9981,1.6381365,106.603485 +9982,3.1373181,206.42216 +9983,2.4085698,130.55328 +9984,3.211033,211.54295 +9985,3.7537181,237.0594 +9986,2.6706133,157.20071 +9987,3.1488235,205.06801 +9988,2.8578506,223.30336 +9989,2.6481168,136.78711 +9990,2.6291409,156.56693 +9991,3.4337797,220.81163 +9992,1.426997,96.060295 +9993,1.6941047,107.15755 +9994,3.814156,244.08058 +9995,2.234477,142.52368 +9996,2.3884993,135.34244 +9997,3.371591,205.85284 +9998,3.5534806,233.04236 +9999,2.5519078,130.03291 diff --git a/data/ukbb_subset/test.csv b/data/ukbb_subset/test.csv new file mode 100644 index 0000000000000000000000000000000000000000..1598cbe2522c520eec69a2a50ab8026b0004baa6 --- /dev/null +++ b/data/ukbb_subset/test.csv @@ -0,0 +1,251 @@ +index,eid,sex,age,brain_volume,ventricle_volume,mri_seq +13255.0,3444227.0,0.0,64.0,1089130.0,32499.9,0.0 +10046.0,3225602.0,0.0,58.0,1169270.0,20194.5,0.0 +9330.0,1523213.0,0.0,60.0,1168890.0,26026.8,1.0 +9466.0,5628751.0,0.0,67.0,975229.0,23644.7,0.0 +11553.0,2078091.0,0.0,62.0,1204410.0,31612.5,0.0 +7726.0,2736992.0,0.0,63.0,1075190.0,19002.3,1.0 +6782.0,1147424.0,0.0,61.0,1257190.0,39016.2,0.0 +14398.0,4815937.0,0.0,72.0,963012.0,35591.7,1.0 +13570.0,5544144.0,0.0,53.0,1239490.0,33004.30000000001,0.0 +3503.0,2833097.0,0.0,52.0,1157240.0,14638.9,1.0 +8014.0,3159829.0,0.0,73.0,1063990.0,40036.1,0.0 +293.0,5202381.0,0.0,53.0,932847.0,30101.8,1.0 +8015.0,5194964.0,0.0,67.0,1047180.0,26437.2,1.0 +10946.0,1406085.0,0.0,51.0,1036030.0,22839.1,0.0 +5447.0,3813524.0,0.0,56.0,1291750.0,21283.9,1.0 +9501.0,4464199.0,0.0,58.0,1039560.0,18165.9,0.0 +461.0,3815607.0,0.0,56.0,1190070.0,42706.2,1.0 +11268.0,3076089.0,0.0,50.0,1095810.0,26504.0,0.0 +7130.0,5901109.0,0.0,67.0,977994.0,27450.0,0.0 +4620.0,1143615.0,0.0,71.0,1002980.0,25568.6,0.0 +4620.0,1143615.0,0.0,71.0,1002980.0,25568.6,1.0 +8344.0,3164775.0,0.0,52.0,1274300.0,32557.8,0.0 +10518.0,5711945.0,0.0,51.0,1138770.0,28578.5,1.0 +4484.0,2373943.0,0.0,57.0,1045700.0,25994.9,0.0 +6384.0,5272090.0,0.0,58.0,1065880.0,30520.1,1.0 +9430.0,3015999.0,0.0,63.0,1159370.0,22994.3,0.0 +14419.0,3526877.0,0.0,70.0,1005490.0,42726.80000000001,0.0 +4775.0,3580550.0,0.0,54.0,1108340.0,23994.8,1.0 +5996.0,4068499.0,0.0,64.0,1129440.0,24509.5,0.0 +7008.0,1092170.0,0.0,59.0,1172270.0,38399.9,0.0 +8256.0,1646843.0,0.0,61.0,1183920.0,49178.9,1.0 +4275.0,5576168.0,0.0,57.0,1145780.0,9507.76,0.0 +3739.0,4858245.0,0.0,56.0,1001250.0,16039.0,1.0 +11645.0,3897090.0,0.0,68.0,1133110.0,47017.1,1.0 +1202.0,1322934.0,0.0,69.0,1008410.0,19764.4,0.0 +9339.0,5836825.0,0.0,54.0,1077620.0,34550.4,1.0 +781.0,5191671.0,0.0,65.0,1221310.0,17177.9,0.0 +1377.0,1206058.0,0.0,57.0,1357010.0,19466.2,0.0 +11995.0,1383769.0,0.0,58.0,1092340.0,16554.0,1.0 +9203.0,1104540.0,0.0,65.0,1096250.0,33241.7,0.0 +9203.0,1104540.0,0.0,65.0,1096250.0,33241.7,1.0 +3828.0,2303777.0,0.0,50.0,1171840.0,22273.3,1.0 +9609.0,2101841.0,0.0,65.0,1186260.0,49774.2,0.0 +6398.0,2823056.0,0.0,73.0,1220930.0,47591.5,1.0 +4256.0,3651087.0,0.0,54.0,1128960.0,24543.9,0.0 +2371.0,4427161.0,0.0,70.0,1219990.0,76702.9,1.0 +11227.0,2078918.0,0.0,70.0,1237940.0,38836.6,1.0 +8412.0,1513685.0,0.0,56.0,1063680.0,13594.2,1.0 +6466.0,2420014.0,0.0,54.0,1160500.0,20429.5,0.0 +10526.0,2958972.0,0.0,73.0,1042850.0,56263.0,0.0 +11091.0,4617564.0,0.0,67.0,1014980.0,26718.9,0.0 +14331.0,1426774.0,0.0,63.0,1024540.0,18286.8,0.0 +12524.0,1860065.0,0.0,52.0,1094090.0,20513.0,0.0 +3350.0,1738473.0,0.0,63.0,1062530.0,22948.7,1.0 +14098.0,3672396.0,0.0,59.0,1112210.0,26884.3,0.0 +883.0,2774533.0,0.0,57.0,1173040.0,18890.0,0.0 +3508.0,5693883.0,0.0,54.0,1102280.0,19031.3,0.0 +2490.0,3178524.0,0.0,70.0,1061920.0,35946.5,0.0 +2581.0,3881330.0,0.0,49.0,1141630.0,15939.3,0.0 +11565.0,2143997.0,0.0,62.0,1137590.0,19041.8,1.0 +5295.0,3325879.0,0.0,64.0,1188370.0,21812.2,1.0 +9464.0,3849715.0,0.0,73.0,1141710.0,63496.3,0.0 +5873.0,4305915.0,0.0,73.0,1053870.0,47471.3,1.0 +2154.0,5023690.0,0.0,62.0,1056150.0,26231.3,0.0 +7723.0,1938755.0,0.0,60.0,1132210.0,27561.4,1.0 +10691.0,4870941.0,0.0,52.0,1166480.0,14002.8,0.0 +10691.0,4870941.0,0.0,52.0,1166480.0,14002.8,1.0 +4067.0,4363670.0,0.0,70.0,977390.0,48217.6,0.0 +4067.0,4363670.0,0.0,70.0,977390.0,48217.6,1.0 +10219.0,4314118.0,0.0,57.0,1176650.0,34057.7,1.0 +1399.0,3458621.0,0.0,57.0,1153300.0,24278.8,0.0 +6018.0,1295935.0,0.0,62.0,1053400.0,24328.2,0.0 +1262.0,2171414.0,0.0,66.0,1011310.0,29394.1,0.0 +5610.0,3089077.0,0.0,61.0,1109690.0,17606.7,1.0 +9057.0,4569804.0,0.0,67.0,1030490.0,26715.9,0.0 +6526.0,3797176.0,0.0,61.0,1018960.0,47146.0,0.0 +2848.0,5753677.0,0.0,70.0,1038190.0,26464.5,1.0 +11698.0,5607591.0,0.0,55.0,1121460.0,24078.8,0.0 +2890.0,5006359.0,0.0,68.0,1101260.0,31337.0,0.0 +10786.0,5135278.0,0.0,62.0,1119170.0,25841.2,1.0 +10082.0,4225833.0,0.0,70.0,1068240.0,30508.6,0.0 +5174.0,3276853.0,0.0,56.0,1025930.0,21943.1,0.0 +6355.0,2803766.0,0.0,68.0,1114560.0,32971.6,1.0 +7502.0,1304529.0,0.0,52.0,1096360.0,23908.5,1.0 +2622.0,1889036.0,0.0,62.0,1105240.0,20861.1,0.0 +7462.0,4025459.0,0.0,57.0,1088450.0,14489.6,1.0 +1518.0,1647678.0,0.0,50.0,1056410.0,39155.30000000001,0.0 +5056.0,2357688.0,0.0,64.0,982140.0,22416.2,1.0 +4970.0,4712491.0,0.0,67.0,1036000.0,27117.5,0.0 +4970.0,4712491.0,0.0,67.0,1036000.0,27117.5,1.0 +5389.0,2320854.0,0.0,73.0,1098400.0,41417.0,1.0 +12812.0,2810487.0,0.0,52.0,1097710.0,26413.3,0.0 +13756.0,1921762.0,0.0,67.0,1276830.0,43532.1,1.0 +10111.0,1723643.0,0.0,61.0,1010730.0,40116.6,1.0 +12272.0,3130060.0,0.0,70.0,1138530.0,19291.2,1.0 +12337.0,3789898.0,0.0,68.0,1079500.0,42969.80000000001,1.0 +12649.0,4974349.0,0.0,64.0,983005.0,17561.6,0.0 +8233.0,1365767.0,0.0,65.0,970182.0,22295.2,1.0 +10504.0,1248201.0,0.0,68.0,1286480.0,55346.1,1.0 +3882.0,4899521.0,0.0,62.0,1062430.0,16112.9,0.0 +12653.0,4447198.0,0.0,65.0,1113010.0,38330.7,1.0 +3928.0,4585002.0,0.0,72.0,1053020.0,35887.1,1.0 +10121.0,1137595.0,0.0,62.0,1088650.0,28361.4,1.0 +11523.0,2078260.0,0.0,68.0,1178720.0,32786.80000000001,0.0 +7354.0,4943364.0,0.0,71.0,1101940.0,34042.0,1.0 +10969.0,5106715.0,0.0,65.0,1123400.0,30499.2,0.0 +37.0,4537691.0,0.0,70.0,1128500.0,45476.6,1.0 +5145.0,3577748.0,0.0,55.0,1074420.0,18685.7,1.0 +12916.0,4187645.0,0.0,50.0,1175790.0,20664.1,1.0 +10418.0,1879289.0,0.0,68.0,1122830.0,26145.2,0.0 +12480.0,5226260.0,0.0,67.0,1227210.0,47329.1,1.0 +8554.0,3986717.0,0.0,50.0,1197810.0,16858.3,0.0 +6521.0,5200512.0,0.0,63.0,1289820.0,32765.4,1.0 +4252.0,5867775.0,0.0,65.0,1199990.0,15613.0,0.0 +7617.0,3456714.0,0.0,60.0,1153490.0,26489.1,0.0 +2271.0,2115625.0,0.0,65.0,963007.0,18291.5,1.0 +4772.0,4307513.0,0.0,61.0,1022730.0,23794.0,0.0 +8508.0,4323860.0,0.0,65.0,1142020.0,37603.1,1.0 +5477.0,4571076.0,0.0,72.0,1070060.0,30427.7,0.0 +7906.0,1479193.0,0.0,54.0,1228410.0,17909.9,0.0 +14110.0,2089169.0,0.0,64.0,1034080.0,36378.80000000001,0.0 +5027.0,4513134.0,0.0,65.0,1175340.0,57955.8,1.0 +3993.0,5953279.0,0.0,63.0,1093720.0,26027.9,1.0 +11430.0,3818977.0,0.0,59.0,1098000.0,19754.0,0.0 +8517.0,3241946.0,0.0,66.0,1029470.0,36909.6,1.0 +10832.0,4098700.0,0.0,54.0,1056630.0,22286.3,1.0 +11270.0,4066375.0,0.0,58.0,1099580.0,22011.2,1.0 +4213.0,4456155.0,0.0,56.0,1311980.0,21226.8,1.0 +14055.0,1062031.0,0.0,47.0,1232480.0,17157.8,1.0 +5811.0,1382023.0,0.0,61.0,1204040.0,22855.8,0.0 +5811.0,1382023.0,0.0,61.0,1204040.0,22855.8,1.0 +11944.0,5842847.0,0.0,58.0,1036730.0,32500.8,1.0 +5907.0,3291351.0,0.0,64.0,1209260.0,23081.7,1.0 +4535.0,2854927.0,0.0,59.0,1143880.0,23384.5,0.0 +8741.0,3381867.0,0.0,59.0,1084490.0,19780.9,0.0 +4510.0,3667235.0,0.0,69.0,1001920.0,57133.9,0.0 +6836.0,4139179.0,0.0,62.0,1019530.0,21109.5,1.0 +7409.0,2230752.0,0.0,65.0,911796.0,25741.5,1.0 +3202.0,5284624.0,0.0,51.0,1474930.0,13765.4,0.0 +6000.0,1252025.0,1.0,72.0,1182290.0,63783.4,0.0 +4359.0,2096520.0,1.0,60.0,1179710.0,55936.4,1.0 +10074.0,3332501.0,1.0,70.0,1118180.0,52298.3,1.0 +11997.0,5725542.0,1.0,72.0,1227510.0,37929.2,0.0 +2218.0,1240253.0,1.0,68.0,1375590.0,77302.3,0.0 +138.0,4699538.0,1.0,63.0,1092280.0,30889.6,0.0 +6381.0,3018814.0,1.0,70.0,1160090.0,52111.5,1.0 +1448.0,4643734.0,1.0,61.0,1420550.0,62498.1,0.0 +9915.0,2223957.0,1.0,65.0,1309040.0,29417.6,1.0 +12534.0,3075036.0,1.0,67.0,1226440.0,40170.1,1.0 +5903.0,5103953.0,1.0,67.0,1451790.0,73490.3,0.0 +2531.0,1121316.0,1.0,55.0,1161320.0,27499.9,1.0 +5814.0,5345532.0,1.0,71.0,1110870.0,41917.2,0.0 +6428.0,4101771.0,1.0,51.0,1220790.0,26201.6,1.0 +5045.0,4586183.0,1.0,64.0,1315630.0,14765.3,1.0 +1533.0,5739968.0,1.0,63.0,1181640.0,22097.1,0.0 +8486.0,1271931.0,1.0,66.0,1183320.0,25067.6,1.0 +2920.0,5548023.0,1.0,56.0,1224330.0,45352.5,0.0 +2800.0,4537543.0,1.0,49.0,1032960.0,14767.5,0.0 +987.0,3072756.0,1.0,64.0,1216450.0,31114.8,0.0 +6069.0,4705641.0,1.0,53.0,1368270.0,15385.7,1.0 +13015.0,1903811.0,1.0,60.0,1304680.0,44119.9,1.0 +12304.0,3265078.0,1.0,64.0,1232920.0,40854.6,0.0 +11967.0,3921204.0,1.0,65.0,1069710.0,48754.0,0.0 +2801.0,4598612.0,1.0,55.0,1162310.0,36874.30000000001,0.0 +436.0,5239391.0,1.0,71.0,1170010.0,27114.2,1.0 +8823.0,1839166.0,1.0,66.0,1277070.0,48177.3,1.0 +14293.0,3447905.0,1.0,61.0,1229240.0,34335.80000000001,0.0 +14315.0,4740914.0,1.0,57.0,1222430.0,29210.4,1.0 +6790.0,4400559.0,1.0,54.0,946592.0,22559.5,1.0 +2781.0,2333937.0,1.0,56.0,1320760.0,56365.7,1.0 +1227.0,2212278.0,1.0,48.0,1233870.0,43924.30000000001,0.0 +4581.0,3253319.0,1.0,62.0,1166220.0,26184.3,0.0 +4417.0,4378766.0,1.0,73.0,1203130.0,31852.7,0.0 +8702.0,2473189.0,1.0,61.0,1223790.0,28657.7,0.0 +12647.0,1339118.0,1.0,66.0,1303460.0,32381.3,0.0 +3003.0,4461429.0,1.0,64.0,1088780.0,28006.5,1.0 +9432.0,3019081.0,1.0,70.0,1006010.0,34291.80000000001,0.0 +11669.0,3304219.0,1.0,68.0,1259140.0,62994.7,0.0 +10118.0,2646334.0,1.0,65.0,1330260.0,42561.1,0.0 +13942.0,2936613.0,1.0,65.0,1162280.0,41039.80000000001,1.0 +12099.0,1210279.0,1.0,65.0,1237520.0,31426.7,1.0 +5070.0,5125860.0,1.0,66.0,1175020.0,81981.4,0.0 +6542.0,2131210.0,1.0,55.0,1231050.0,20361.0,0.0 +10564.0,4587619.0,1.0,68.0,1359120.0,40835.5,0.0 +4488.0,4055346.0,1.0,70.0,1180740.0,58770.1,1.0 +5200.0,1941914.0,1.0,62.0,1436160.0,58911.5,1.0 +4328.0,4109122.0,1.0,61.0,1276540.0,36636.80000000001,0.0 +13458.0,5209234.0,1.0,69.0,1319930.0,28143.6,0.0 +7749.0,4865855.0,1.0,54.0,1269790.0,21727.1,0.0 +2404.0,2732341.0,1.0,63.0,1246950.0,45313.2,0.0 +12035.0,3432789.0,1.0,62.0,1308880.0,66687.7,0.0 +7849.0,1124348.0,1.0,70.0,1129150.0,33154.9,1.0 +11536.0,3678179.0,1.0,54.0,1249170.0,30638.8,1.0 +8593.0,1746670.0,1.0,51.0,1189950.0,14588.1,0.0 +6848.0,2189848.0,1.0,61.0,1220230.0,25365.8,0.0 +14180.0,5179924.0,1.0,63.0,1237630.0,23665.2,1.0 +1863.0,5333759.0,1.0,62.0,1046360.0,59425.8,0.0 +13525.0,4599248.0,1.0,55.0,1189190.0,24375.6,1.0 +2511.0,4218724.0,1.0,61.0,1072700.0,20700.0,1.0 +9299.0,4973043.0,1.0,67.0,1369040.0,53871.5,0.0 +13403.0,3108269.0,1.0,56.0,1305520.0,30453.1,1.0 +13708.0,5057629.0,1.0,69.0,1158400.0,41936.6,0.0 +1470.0,3246283.0,1.0,69.0,1160600.0,54244.2,1.0 +5891.0,4679220.0,1.0,65.0,1454380.0,47130.2,1.0 +389.0,3779100.0,1.0,63.0,1153080.0,34764.4,1.0 +6361.0,2709551.0,1.0,70.0,1184640.0,51273.1,1.0 +3989.0,1306166.0,1.0,69.0,1214200.0,42274.4,1.0 +13742.0,4403530.0,1.0,67.0,1317360.0,27520.1,1.0 +3839.0,1077279.0,1.0,53.0,1118550.0,39087.7,0.0 +10524.0,4859976.0,1.0,71.0,1273450.0,32368.7,1.0 +2723.0,3014868.0,1.0,65.0,1117270.0,49709.8,1.0 +2088.0,4224706.0,1.0,59.0,1377500.0,26731.5,1.0 +14382.0,3457256.0,1.0,71.0,1186260.0,96852.2,0.0 +9124.0,4302075.0,1.0,71.0,1271210.0,50427.1,0.0 +12951.0,3799411.0,1.0,62.0,1167510.0,42355.80000000001,1.0 +109.0,2479251.0,1.0,58.0,1301170.0,27688.0,1.0 +11158.0,2805505.0,1.0,49.0,1280710.0,24822.0,0.0 +10296.0,2152305.0,1.0,68.0,1381080.0,66418.60000000002,0.0 +4395.0,5165230.0,1.0,56.0,1365700.0,15677.5,1.0 +8446.0,2073085.0,1.0,50.0,1169470.0,25715.0,1.0 +7924.0,1533611.0,1.0,57.0,1308480.0,40737.6,1.0 +11900.0,4166950.0,1.0,65.0,1219890.0,57511.7,1.0 +6325.0,5166702.0,1.0,67.0,1161970.0,64711.1,0.0 +9125.0,5034765.0,1.0,60.0,1310340.0,47888.8,0.0 +1787.0,4227962.0,1.0,61.0,1405120.0,66657.5,1.0 +10520.0,4614233.0,1.0,50.0,1129840.0,18843.2,0.0 +8297.0,1917674.0,1.0,58.0,1235680.0,26196.5,1.0 +13829.0,4375216.0,1.0,62.0,1343290.0,32312.7,0.0 +5190.0,1885884.0,1.0,64.0,1298760.0,44099.4,0.0 +1771.0,3442779.0,1.0,59.0,1249840.0,29483.7,0.0 +856.0,1900121.0,1.0,51.0,1267010.0,35581.80000000001,0.0 +4986.0,1625149.0,1.0,51.0,1437900.0,32099.0,0.0 +297.0,4605375.0,1.0,48.0,1238740.0,18582.8,0.0 +11318.0,4393912.0,1.0,60.0,1051680.0,24256.4,1.0 +6305.0,2402279.0,1.0,63.0,1188490.0,26822.4,1.0 +9252.0,5962209.0,1.0,71.0,1269860.0,63840.6,0.0 +9587.0,2289891.0,1.0,57.0,1136950.0,20029.6,1.0 +4367.0,1000596.0,1.0,63.0,1331850.0,46279.8,0.0 +2384.0,1526934.0,1.0,72.0,1135710.0,43195.9,1.0 +6816.0,1858494.0,1.0,52.0,1319610.0,20727.2,0.0 +12941.0,1590897.0,1.0,58.0,1239590.0,19547.3,0.0 +12941.0,1590897.0,1.0,58.0,1239590.0,19547.3,1.0 +1105.0,3818451.0,1.0,71.0,1024030.0,33474.80000000001,1.0 +5170.0,5786702.0,1.0,65.0,1335530.0,26325.5,1.0 +13397.0,1592945.0,1.0,68.0,929896.0,32630.5,0.0 +9238.0,1474610.0,1.0,59.0,1387860.0,49392.3,0.0 +13075.0,4239565.0,1.0,56.0,1308290.0,29344.3,0.0 +13326.0,5236658.0,1.0,68.0,1166570.0,54863.8,1.0 +6061.0,5639121.0,1.0,70.0,1218890.0,58259.1,0.0 +13564.0,1191203.0,1.0,67.0,1066260.0,35735.4,1.0 diff --git a/data/ukbb_subset/thumbs_192x192/1000596_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1000596_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..0836c1e614ecaae563c5cfa1e8d6b97e0282225a Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1000596_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1062031_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1062031_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..fa445e3f45f67279c60e005faa0a99e336866a62 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1062031_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1077279_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1077279_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..b2ee204b9afed06a864d26afe43d66bc377629fb Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1077279_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1092170_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1092170_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..d9c72fcbca8c24fb97d0a31d82b33d26a1c88ff4 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1092170_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1104540_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1104540_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..4b89f9e174b7e238fdf953679ba6cb44b564c009 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1104540_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1104540_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1104540_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..123ae1db4cebc85192d389953d09bb22d397d61f Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1104540_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1121316_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1121316_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..7699f2333f7f3501ea344ee7454f58f56fb05cfc Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1121316_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1124348_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1124348_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..6483ceb694828bceaa06a29482e76ef4851b068c Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1124348_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1137595_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1137595_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..273501a95f6a37baec183cd3ddb11e31d5559ba2 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1137595_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1143615_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1143615_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..511308e65cc208759ca34f6d7e18355f53d4465f Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1143615_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1143615_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1143615_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..a54468d367fca0ab6a5d97f66bbb4931c29bb04b Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1143615_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1147424_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1147424_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..6e8c90ee1e99a1aaaf5faca608741aa065f6b693 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1147424_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1191203_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1191203_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..fe5777c6f04a9a5f9dc1cebcd8dda4befaa9a96c Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1191203_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1206058_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1206058_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..4b7abbfaf92fa042af705f1b835a272c1b5619da Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1206058_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1210279_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1210279_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..b7cc60c3a87c234845d908356165f6d6c9e60f1d Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1210279_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1240253_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1240253_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..8ac10a7896ada8d4e6e166221fc189fc127c3e85 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1240253_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1248201_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1248201_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..7e37f0df44dd6e57b8e771f256a2628395f12efe Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1248201_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1252025_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1252025_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..f9e5d14931addfdc3c9ca0e9d192c2b9439839c2 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1252025_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1271931_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1271931_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..9c4f08f2045a7af3a8ad7b37f26991debc8e6a5c Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1271931_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1295935_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1295935_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..3a840ca1e63c47af49adaa63af7f7d3bc5f7c51e Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1295935_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1304529_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1304529_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..5c99e0ec726c94d5fb99f79bed9d9a3d6a35fac2 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1304529_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1306166_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1306166_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..f1b7cb366aa673804799ecfdf4f9d57f3b176b84 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1306166_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1322934_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1322934_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..59a668cf80f34cea999a969676a8576fb6859385 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1322934_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1339118_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1339118_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..7c9edc78f5314c6f397f752665374ac85f565713 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1339118_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1365767_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1365767_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..d5446493524ed9468c651e5ef3ab77cf353e238d Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1365767_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1382023_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1382023_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..11dceaee9011c6ec47eebc80827feed767d08872 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1382023_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1382023_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1382023_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..dad939c970561865d0c6ef77964aedcabcf23e1d Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1382023_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1383769_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1383769_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..0c05a91f740ba864243e021915989487fa151174 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1383769_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1406085_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1406085_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..36087144253f8365970713e6e9c7b97970f8bb5b Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1406085_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1426774_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1426774_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..9ce18524fe48b59a4f027e9e2b499cb1c423e6c3 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1426774_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1474610_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1474610_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..936304601a56e2e7ac05fc8cb1a4bdb44bd901e7 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1474610_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1479193_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1479193_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..5e2404dee2170d72e03da22c2f91ebf261339ba0 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1479193_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1513685_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1513685_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..4052437e633174bcd96f532bd4efa0758f739ba6 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1513685_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1523213_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1523213_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..142e2a7074f07818b69a89277eb3567c2a1d83c5 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1523213_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1526934_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1526934_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..fadde09d85d45a73d82578e5e0cdc98dc6ac24fb Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1526934_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1533611_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1533611_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..48aa13ba0b4e164322c3eb9fc67d90d11ef2c615 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1533611_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1590897_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1590897_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..79e12853a49838cc632af91bd0311295aa90d462 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1590897_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1590897_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1590897_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..fa5f89fd6ff02497a0ac08f58bd2a7fd3879260d Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1590897_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1592945_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1592945_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..d1d7bade8122a36deb1711e1cd17f4459378a990 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1592945_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1625149_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1625149_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..6819fb9699e34dc5c29ba51bf08dd4e3589a307d Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1625149_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1646843_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1646843_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..8d38fb6ccb01ebd8d63a9c1bba88f4214623ecc0 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1646843_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1647678_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1647678_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..1db2d79f7661519af584f58aedeba6de5f31e2c3 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1647678_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1723643_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1723643_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..2ade531ee59c3da9e976c92726902ba011a1aaff Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1723643_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1738473_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1738473_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..4ca5d671a1df2312372b927fe7089ce9437c6d10 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1738473_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1746670_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1746670_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..a216e7e53b2c64d8c54d9a54cb2b7f9e99beba06 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1746670_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1839166_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1839166_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..d5d0b021bff531069e2567c3792ad38e1296bb0c Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1839166_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1858494_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1858494_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..c5a5c6cbf1fae3dfe0f4485b89e818e6f9f2c4c5 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1858494_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1860065_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1860065_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..e385fd80fbeb0aaf33ff2e458ceb28f61216cbb4 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1860065_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1879289_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1879289_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..8fefbe53cf0b617c3bb4ffb00bfdbdec70c11593 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1879289_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1885884_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1885884_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..312f288b74ace9d05eeb700e4f61d8c7c3accdaf Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1885884_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1889036_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1889036_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..f14b62e0ac1616a7cac13d3109973f44f3365a62 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1889036_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1900121_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1900121_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..ce02b13dba3927d793cb7287571598283169e0ae Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1900121_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1903811_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1903811_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..db0490d8b1c8d8e4a00aa13248e68ad3c26d35e6 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1903811_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1917674_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1917674_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..10c0fb675dacd78136e17a161d4dadea0cdcf10a Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1917674_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1921762_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1921762_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..df6b3dffa9a37c502b3b175d5100965a2113dd53 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1921762_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1938755_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1938755_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..db4338a6ae2707ff809c97d3b265cc4353827592 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1938755_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/1941914_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/1941914_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..b95e02ef3a3ffefd91daeb9c2fc0ffcb46fcc068 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/1941914_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2073085_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2073085_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..0df4dcf461d4e76d7517fe24237455f6de93cca4 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2073085_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2078091_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2078091_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..118e052a13fd002b043f0cbce7f10b7bd971ee7b Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2078091_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2078260_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2078260_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..ac95e0b7393a6be5bcf3c471e443a681c7a701c5 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2078260_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2078918_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2078918_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..e6ec2aab5352ac8b8e55f933406148f4ab266337 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2078918_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2089169_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2089169_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..511be7d2de4d089adda2b2919797f547a9ffdb0f Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2089169_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2096520_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2096520_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..663689f838ebfee1c9222e33084e73027f48be70 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2096520_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2101841_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2101841_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..a3205654ab644274ec2784000e997c18bf3ac4c5 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2101841_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2115625_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2115625_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..4a19ce0444758bd4916129f2c6de70d9242a2d03 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2115625_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2131210_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2131210_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..114ab2f5f967dbe218947b759b4bd843e89f40fc Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2131210_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2143997_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2143997_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..e4f84e446b00943d6625dd207816b5b2570ae8e3 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2143997_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2152305_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2152305_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..aa1e2fa1bbcc65200539de95a31220604a97196e Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2152305_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2171414_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2171414_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..d2b3aad3a029e03ad63f2997bc6313e9696d4ee4 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2171414_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2189848_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2189848_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..b53aff1be25b4fbf32e71f9e1b4bfd390aeb3c88 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2189848_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2212278_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2212278_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..08bcea2ac7dda234f1773beb41727666bb9d7c1d Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2212278_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2223957_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2223957_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..e6f711f1c616c09a16924c459f1fcae722e057c0 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2223957_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2230752_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2230752_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..cd5b600da4210833dc7dc8cd4daa1b01e371612a Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2230752_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2289891_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2289891_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..415a6dba531867a03be7826a9fc6b6378d41884f Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2289891_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2303777_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2303777_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..9f36e4264fb08910fc5d83fc9a960dcccd89aa0e Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2303777_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2320854_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2320854_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..7e5b00c389fe62c90eba27807542603b098600a8 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2320854_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2333937_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2333937_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..31028dbfe2c6ad79f8abbc6c7f7bbe2470852815 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2333937_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2357688_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2357688_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..0c83b63a7a4fdb8f9430649da17d9a226b02d99a Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2357688_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2373943_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2373943_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..9add69e1317e4c86e0c093f898802252a1fe3bfa Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2373943_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2402279_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2402279_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..b2a6091d6b25024660473a7fd778cd514eebd6e4 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2402279_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2420014_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2420014_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..63b25eb6a9366fa15971e5a437c494bba39a8ceb Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2420014_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2473189_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2473189_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..96ba79a2d854fdf5ca7a18071c34eb071f070726 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2473189_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2479251_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2479251_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..fa2c1ae7914815c0297d139d4804bc3541102d24 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2479251_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2646334_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2646334_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..b59eedeef756473651dee5031baa51a47bbc4930 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2646334_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2709551_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2709551_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..218c007888a90bcd8fd76d7c99b02d0b16fb68ee Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2709551_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2732341_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2732341_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..581de8aaf4195c9e33d20589bd059066c8fcb1c2 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2732341_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2736992_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2736992_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..254b2a6d61563c82ef047fedda1e898308c97f40 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2736992_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2774533_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2774533_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..1a5b779aa6bfed784626fbf90feffbd416fe9ac2 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2774533_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2803766_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2803766_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..fe4c1a592ed3073210360490c217263167387cd3 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2803766_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2805505_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2805505_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..796d5b7cb0ac7db93b403e7b52d96f1c2374d491 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2805505_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2810487_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2810487_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..af9d5d76598a291fafa923a963a7e89299f4db1c Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2810487_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2823056_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2823056_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..ed34888b155d5bc136803986637f8723db7c15bc Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2823056_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2833097_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2833097_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..02ac27dc3e92dec5b1600bfbfd9d0d15552608cb Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2833097_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2854927_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2854927_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..02e51f81853d162b7385a5b2e9dc21a02c28742f Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2854927_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2936613_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2936613_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..cf9a7d606a079e96c9e43ed01062ee44bd745108 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2936613_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/2958972_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/2958972_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..6c76bfa374787b88ba506279d3a16b76348ca7a0 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/2958972_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/3014868_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/3014868_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..bfb05511104f6f28532d1d1b4a283d4b953acf91 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/3014868_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/3015999_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/3015999_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..0bc433359b9b717a282461d1b2713e8f9d782688 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/3015999_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/3018814_T2_FLAIR_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/3018814_T2_FLAIR_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..e9458b6be928a68a6e1058ab19ef59fa799fb8ac Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/3018814_T2_FLAIR_unbiased_brain_rigid_to_mni.png differ diff --git a/data/ukbb_subset/thumbs_192x192/3019081_T1_unbiased_brain_rigid_to_mni.png b/data/ukbb_subset/thumbs_192x192/3019081_T1_unbiased_brain_rigid_to_mni.png new file mode 100644 index 0000000000000000000000000000000000000000..213de45cc97c45483a0ff1c61df90c21948e4d74 Binary files /dev/null and b/data/ukbb_subset/thumbs_192x192/3019081_T1_unbiased_brain_rigid_to_mni.png differ diff --git a/datasets.py b/datasets.py new file mode 100644 index 0000000000000000000000000000000000000000..216f1c0bbf288b8684c8f164ed6e51229aa136f7 --- /dev/null +++ b/datasets.py @@ -0,0 +1,413 @@ +import os +import gzip +import struct +import numpy as np +import pandas as pd +import torch +import torchvision.transforms as TF +import torch.nn.functional as F +from tqdm import tqdm +from torch.utils.data import Dataset +from typing import Tuple +from PIL import Image +from skimage.io import imread + + +def log_standardize(x): + log_x = torch.log(x.clamp(min=1e-12)) + return (log_x - log_x.mean()) / log_x.std().clamp(min=1e-12) # mean=0, std=1 + + +def normalize(x, x_min=None, x_max=None, zero_one=False): + if x_min is None: + x_min = x.min() + if x_max is None: + x_max = x.max() + print(f"max: {x_max}, min: {x_min}") + x = (x - x_min) / (x_max - x_min) # [0,1] + return x if zero_one else 2 * x - 1 # else [-1,1] + + +class UKBBDataset(Dataset): + def __init__( + self, root, csv_file, transform=None, columns=None, norm=None, concat_pa=True + ): + super().__init__() + self.root = root + self.transform = transform + self.concat_pa = concat_pa # return concatenated parents + + print(f"\nLoading csv data: {csv_file}") + self.df = pd.read_csv(csv_file) + self.columns = columns + if self.columns is None: + # ['eid', 'sex', 'age', 'brain_volume', 'ventricle_volume', 'mri_seq'] + self.columns = list(self.df.columns) # return all + self.columns.pop(0) # remove redundant 'index' column + print(f"columns: {self.columns}") + self.samples = {i: torch.as_tensor(self.df[i]).float() for i in self.columns} + + for k in ["age", "brain_volume", "ventricle_volume"]: + print(f"{k} normalization: {norm}") + if k in self.columns: + if norm == "[-1,1]": + self.samples[k] = normalize(self.samples[k]) + elif norm == "[0,1]": + self.samples[k] = normalize(self.samples[k], zero_one=True) + elif norm == "log_standard": + self.samples[k] = log_standardize(self.samples[k]) + elif norm == None: + pass + else: + NotImplementedError(f"{norm} not implemented.") + print(f"#samples: {len(self.df)}") + self.return_x = True if "eid" in self.columns else False + + def __len__(self): + return len(self.df) + + def __getitem__(self, idx): + sample = {k: v[idx] for k, v in self.samples.items()} + + if self.return_x: + mri_seq = "T1" if sample["mri_seq"] == 0.0 else "T2_FLAIR" + # Load scan + filename = ( + f'{int(sample["eid"])}_' + mri_seq + "_unbiased_brain_rigid_to_mni.png" + ) + x = Image.open(os.path.join(self.root, "thumbs_192x192", filename)) + + if self.transform is not None: + sample["x"] = self.transform(x) + sample.pop("eid", None) + + if self.concat_pa: + sample["pa"] = torch.cat( + [torch.tensor([sample[k]]) for k in self.columns if k != "eid"], dim=0 + ) + + return sample + + +def get_attr_max_min(attr): + # some ukbb dataset (max, min) stats + if attr == "age": + return 73, 44 + elif attr == "brain_volume": + return 1629520, 841919 + elif attr == "ventricle_volume": + return 157075, 7613.27001953125 + else: + NotImplementedError + + +def ukbb(args): + csv_dir = args.data_dir + augmentation = { + "train": TF.Compose( + [ + TF.Resize((args.input_res, args.input_res), antialias=None), + TF.RandomCrop( + size=(args.input_res, args.input_res), + padding=[2 * args.pad, args.pad], + ), + TF.RandomHorizontalFlip(p=args.hflip), + TF.PILToTensor(), + ] + ), + "eval": TF.Compose( + [ + TF.Resize((args.input_res, args.input_res), antialias=None), + TF.PILToTensor(), + ] + ), + } + + datasets = {} + # for split in ['train', 'valid', 'test']: + for split in ["test"]: + datasets[split] = UKBBDataset( + root=args.data_dir, + csv_file=os.path.join(csv_dir, split + ".csv"), + transform=augmentation[("eval" if split != "train" else split)], + columns=(None if not args.parents_x else ["eid"] + args.parents_x), + norm=(None if not hasattr(args, "context_norm") else args.context_norm), + concat_pa=False, + ) + + return datasets + + +def _load_uint8(f): + idx_dtype, ndim = struct.unpack("BBBB", f.read(4))[2:] + shape = struct.unpack(">" + "I" * ndim, f.read(4 * ndim)) + buffer_length = int(np.prod(shape)) + data = np.frombuffer(f.read(buffer_length), dtype=np.uint8).reshape(shape) + return data + + +def load_idx(path: str) -> np.ndarray: + """Reads an array in IDX format from disk. + Parameters + ---------- + path : str + Path of the input file. Will uncompress with `gzip` if path ends in '.gz'. + Returns + ------- + np.ndarray + Output array of dtype ``uint8``. + References + ---------- + http://yann.lecun.com/exdb/mnist/ + """ + open_fcn = gzip.open if path.endswith(".gz") else open + with open_fcn(path, "rb") as f: + return _load_uint8(f) + + +def _get_paths(root_dir, train): + prefix = "train" if train else "t10k" + images_filename = prefix + "-images-idx3-ubyte.gz" + labels_filename = prefix + "-labels-idx1-ubyte.gz" + metrics_filename = prefix + "-morpho.csv" + images_path = os.path.join(root_dir, images_filename) + labels_path = os.path.join(root_dir, labels_filename) + metrics_path = os.path.join(root_dir, metrics_filename) + return images_path, labels_path, metrics_path + + +def load_morphomnist_like( + root_dir, train: bool = True, columns=None +) -> Tuple[np.ndarray, np.ndarray, pd.DataFrame]: + """ + Args: + root_dir: path to data directory + train: whether to load the training subset (``True``, ``'train-*'`` files) or the test + subset (``False``, ``'t10k-*'`` files) + columns: list of morphometrics to load; by default (``None``) loads the image index and + all available metrics: area, length, thickness, slant, width, and height + Returns: + images, labels, metrics + """ + images_path, labels_path, metrics_path = _get_paths(root_dir, train) + images = load_idx(images_path) + labels = load_idx(labels_path) + + if columns is not None and "index" not in columns: + usecols = ["index"] + list(columns) + else: + usecols = columns + metrics = pd.read_csv(metrics_path, usecols=usecols, index_col="index") + return images, labels, metrics + + +class MorphoMNIST(Dataset): + def __init__( + self, + root_dir, + train=True, + transform=None, + columns=None, + norm=None, + concat_pa=True, + ): + self.train = train + self.transform = transform + self.columns = columns + self.concat_pa = concat_pa + self.norm = norm + + cols_not_digit = [c for c in self.columns if c != "digit"] + images, labels, metrics_df = load_morphomnist_like( + root_dir, train, cols_not_digit + ) + self.images = torch.from_numpy(np.array(images)).unsqueeze(1) + self.labels = F.one_hot( + torch.from_numpy(np.array(labels)).long(), num_classes=10 + ) + + if self.columns is None: + self.columns = metrics_df.columns + self.samples = {k: torch.tensor(metrics_df[k]) for k in cols_not_digit} + + self.min_max = { + "thickness": [0.87598526, 6.255515], + "intensity": [66.601204, 254.90317], + } + + for k, v in self.samples.items(): # optional preprocessing + print(f"{k} normalization: {norm}") + if norm == "[-1,1]": + self.samples[k] = normalize( + v, x_min=self.min_max[k][0], x_max=self.min_max[k][1] + ) + elif norm == "[0,1]": + self.samples[k] = normalize( + v, x_min=self.min_max[k][0], x_max=self.min_max[k][1], zero_one=True + ) + elif norm == None: + pass + else: + NotImplementedError(f"{norm} not implemented.") + print(f"#samples: {len(metrics_df)}\n") + + self.samples.update({"digit": self.labels}) + + def __len__(self): + return len(self.images) + + def __getitem__(self, idx): + sample = {} + sample["x"] = self.images[idx] + + if self.transform is not None: + sample["x"] = self.transform(sample["x"]) + + if self.concat_pa: + sample["pa"] = torch.cat( + [ + v[idx] if k == "digit" else torch.tensor([v[idx]]) + for k, v in self.samples.items() + ], + dim=0, + ) + else: + sample.update({k: v[idx] for k, v in self.samples.items()}) + return sample + + +def morphomnist(args): + # Load data + augmentation = { + "train": TF.Compose( + [ + TF.RandomCrop((args.input_res, args.input_res), padding=args.pad), + ] + ), + "eval": TF.Compose( + [ + TF.Pad(padding=2), # (32, 32) + ] + ), + } + + datasets = {} + # for split in ['train', 'valid', 'test']: + for split in ["test"]: + datasets[split] = MorphoMNIST( + root_dir=args.data_dir, + train=(split == "train"), # test set is valid set + transform=augmentation[("eval" if split != "train" else split)], + columns=args.parents_x, + norm=args.context_norm, + concat_pa=False, + ) + return datasets + + +def preproc_mimic(batch): + for k, v in batch.items(): + if k == "x": + batch["x"] = (batch["x"].float() - 127.5) / 127.5 # [-1,1] + elif k in ["age"]: + batch[k] = batch[k].float().unsqueeze(-1) + batch[k] = batch[k] / 100.0 + batch[k] = batch[k] * 2 - 1 # [-1,1] + elif k in ["race"]: + batch[k] = F.one_hot(batch[k], num_classes=3).squeeze().float() + elif k in ["finding"]: + batch[k] = batch[k].unsqueeze(-1).float() + else: + batch[k] = batch[k].float().unsqueeze(-1) + return batch + + +class MIMICDataset(Dataset): + def __init__( + self, + root, + csv_file, + transform=None, + columns=None, + concat_pa=True, + only_pleural_eff=True, + ): + self.data = pd.read_csv(csv_file) + self.transform = transform + self.disease_labels = [ + "No Finding", + "Other", + "Pleural Effusion", + # "Lung Opacity", + ] + self.samples = { + "age": [], + "sex": [], + "finding": [], + "x": [], + "race": [], + # "lung_opacity": [], + # "pleural_effusion": [], + } + + for idx, _ in enumerate(tqdm(range(len(self.data)), desc="Loading MIMIC Data")): + if only_pleural_eff and self.data.loc[idx, "disease"] == "Other": + continue + img_path = os.path.join(root, self.data.loc[idx, "path_preproc"]) + + # lung_opacity = self.data.loc[idx, "Lung Opacity"] + # self.samples["lung_opacity"].append(lung_opacity) + + # pleural_effusion = self.data.loc[idx, "Pleural Effusion"] + # self.samples["pleural_effusion"].append(pleural_effusion) + + disease = self.data.loc[idx, "disease"] + finding = 0 if disease == "No Finding" else 1 + + self.samples["x"].append(img_path) + self.samples["finding"].append(finding) + self.samples["age"].append(self.data.loc[idx, "age"]) + self.samples["race"].append(self.data.loc[idx, "race_label"]) + self.samples["sex"].append(self.data.loc[idx, "sex_label"]) + + self.columns = columns + if self.columns is None: + # ['age', 'race', 'sex'] + self.columns = list(self.data.columns) # return all + self.columns.pop(0) # remove redundant 'index' column + self.concat_pa = concat_pa + + def __len__(self): + return len(self.samples["x"]) + + def __getitem__(self, idx): + sample = {k: v[idx] for k, v in self.samples.items()} + sample["x"] = imread(sample["x"]).astype(np.float32)[None, ...] + + for k, v in sample.items(): + sample[k] = torch.tensor(v) + + if self.transform: + sample["x"] = self.transform(sample["x"]) + + sample = preproc_mimic(sample) + if self.concat_pa: + sample["pa"] = torch.cat([sample[k] for k in self.columns], dim=0) + return sample + + +def mimic(args): + args.csv_dir = args.data_dir + datasets = {} + datasets["test"] = MIMICDataset( + root=args.data_dir, + csv_file=os.path.join(args.csv_dir, "mimic.sample.test.csv"), + columns=args.parents_x, + transform=TF.Compose( + [ + TF.Resize((args.input_res, args.input_res), antialias=None), + ] + ), + concat_pa=False, + ) + return datasets diff --git a/hammer.png b/hammer.png new file mode 100644 index 0000000000000000000000000000000000000000..aab09f6628275c15f71eecc1ecebe8fa079f5886 Binary files /dev/null and b/hammer.png differ diff --git a/packages.txt b/packages.txt new file mode 100644 index 0000000000000000000000000000000000000000..3c8d9819db262c32217436cc4a1b3c1ea74c805a --- /dev/null +++ b/packages.txt @@ -0,0 +1,4 @@ +dvipng +texlive-latex-extra +texlive-fonts-recommended +cm-super \ No newline at end of file diff --git a/pgm/__pycache__/flow_pgm.cpython-311.pyc b/pgm/__pycache__/flow_pgm.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..96e88075cb2f7dd7f8cd7ac71cb474c768d9dced Binary files /dev/null and b/pgm/__pycache__/flow_pgm.cpython-311.pyc differ diff --git a/pgm/__pycache__/layers.cpython-311.pyc b/pgm/__pycache__/layers.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6c0393021a86c7a67368130806d5e393ee8d3aae Binary files /dev/null and b/pgm/__pycache__/layers.cpython-311.pyc differ diff --git a/pgm/flow_pgm.py b/pgm/flow_pgm.py new file mode 100644 index 0000000000000000000000000000000000000000..14ba585d70080f2d4f46abbe2fdfe46ddcea3f51 --- /dev/null +++ b/pgm/flow_pgm.py @@ -0,0 +1,613 @@ +from typing import Dict + +import numpy as np +import torch +from torch import nn, Tensor +import torch.nn.functional as F + +import pyro +import pyro.distributions as dist +import pyro.distributions.transforms as T + +from pyro.nn import DenseNN +from pyro.infer.reparam.transform import TransformReparam +from pyro.distributions.conditional import ConditionalTransformedDistribution + +from .layers import ( + ConditionalTransformedDistributionGumbelMax, + ConditionalGumbelMax, + ConditionalAffineTransform, + MLP, + CNN, +) + + +class Hparams: + def update(self, dict): + for k, v in dict.items(): + setattr(self, k, v) + + +class BasePGM(nn.Module): + def __init__(self): + super().__init__() + + def scm(self, *args, **kwargs): + def config(msg): + if isinstance(msg["fn"], dist.TransformedDistribution): + return TransformReparam() + else: + return None + + return pyro.poutine.reparam(self.model, config=config)(*args, **kwargs) + + def sample_scm(self, n_samples: int = 1): + with pyro.plate("obs", n_samples): + samples = self.scm() + return samples + + def sample(self, n_samples: int = 1): + with pyro.plate("obs", n_samples): + samples = self.model() # NOTE: not ideal as model is defined in child class + return samples + + def infer_exogeneous(self, obs: Dict[str, Tensor]) -> Dict[str, Tensor]: + batch_size = list(obs.values())[0].shape[0] + # assuming that we use transformed distributions for everything: + cond_model = pyro.condition(self.sample, data=obs) + cond_trace = pyro.poutine.trace(cond_model).get_trace(batch_size) + + output = {} + for name, node in cond_trace.nodes.items(): + if "z" in name or "fn" not in node.keys(): + continue + fn = node["fn"] + if isinstance(fn, dist.Independent): + fn = fn.base_dist + if isinstance(fn, dist.TransformedDistribution): + # compute exogenous base dist (created with TransformReparam) at all sites + output[name + "_base"] = T.ComposeTransform(fn.transforms).inv( + node["value"] + ) + return output + + def counterfactual( + self, + obs: Dict[str, Tensor], + intervention: Dict[str, Tensor], + num_particles: int = 1, + detach: bool = True, + ) -> Dict[str, Tensor]: + # NOTE: not ideal as "variables" is defined in child class + dag_variables = self.variables.keys() + assert set(obs.keys()) == set(dag_variables) + avg_cfs = {k: torch.zeros_like(obs[k]) for k in obs.keys()} + batch_size = list(obs.values())[0].shape[0] + + for _ in range(num_particles): + # Abduction + exo_noise = self.infer_exogeneous(obs) + exo_noise = {k: v.detach() if detach else v for k, v in exo_noise.items()} + # condition on root node variables (no exogeneous noise available) + for k in dag_variables: + if k not in intervention.keys(): + if k not in [i.split("_base")[0] for i in exo_noise.keys()]: + exo_noise[k] = obs[k] + # Abducted SCM + abducted_scm = pyro.poutine.condition(self.sample_scm, data=exo_noise) + # Action + counterfactual_scm = pyro.poutine.do(abducted_scm, data=intervention) + # Prediction + counterfactuals = counterfactual_scm(batch_size) + + if hasattr(self, "discrete_variables"): # hack for MIMIC + # Check if we should change "finding", i.e. if its parents and/or + # itself are not intervened on, then we use its observed value. + # This is used due to stochastic abduction of discrete variables + if ( + "age" not in intervention.keys() + and "finding" not in intervention.keys() + ): + counterfactuals["finding"] = obs["finding"] + + for k, v in counterfactuals.items(): + avg_cfs[k] += v / num_particles + return avg_cfs + + +class FlowPGM(BasePGM): + def __init__(self, args: Hparams): + super().__init__() + self.variables = { + "sex": "binary", + "mri_seq": "binary", + "age": "continuous", + "brain_volume": "continuous", + "ventricle_volume": "continuous", + } + # priors: s, m, a, b and v + self.s_logit = nn.Parameter(torch.zeros(1)) + self.m_logit = nn.Parameter(torch.zeros(1)) + for k in ["a", "b", "v"]: + self.register_buffer(f"{k}_base_loc", torch.zeros(1)) + self.register_buffer(f"{k}_base_scale", torch.ones(1)) + + # constraint, assumes data is [-1,1] normalized + # normalize_transform = T.ComposeTransform([ + # T.AffineTransform(loc=0, scale=2), T.SigmoidTransform(), T.AffineTransform(loc=-1, scale=2)]) + # normalize_transform = T.ComposeTransform([T.TanhTransform(cache_size=1)]) + # normalize_transform = T.ComposeTransform([T.AffineTransform(loc=0, scale=1)]) + + # age flow + self.age_module = T.ComposeTransformModule( + [T.Spline(1, count_bins=4, order="linear")] + ) + self.age_flow = T.ComposeTransform([self.age_module]) + # self.age_module, normalize_transform]) + + # brain volume (conditional) flow: (sex, age) -> brain_vol + bvol_net = DenseNN(2, args.widths, [1, 1], nonlinearity=nn.LeakyReLU(0.1)) + self.bvol_flow = ConditionalAffineTransform(context_nn=bvol_net, event_dim=0) + # self.bvol_flow = [self.bvol_flow, normalize_transform] + + # ventricle volume (conditional) flow: (brain_vol, age) -> ventricle_vol + vvol_net = DenseNN(2, args.widths, [1, 1], nonlinearity=nn.LeakyReLU(0.1)) + self.vvol_flow = ConditionalAffineTransform(context_nn=vvol_net, event_dim=0) + # self.vvol_flow = [self.vvol_transf, normalize_transform] + + # if args.setup != 'sup_pgm': + # anticausal predictors + input_shape = (args.input_channels, args.input_res, args.input_res) + # q(s | x, b) = Bernoulli(f(x,b)) + self.encoder_s = CNN(input_shape, num_outputs=1, context_dim=1) + # q(m | x) = Bernoulli(f(x)) + self.encoder_m = CNN(input_shape, num_outputs=1) + # q(a | b, v) = Normal(mu(b, v), sigma(b, v)) + self.encoder_a = MLP(num_inputs=2, num_outputs=2) + # q(b | x, v) = Normal(mu(x, v), sigma(x, v)) + self.encoder_b = CNN(input_shape, num_outputs=2, context_dim=1) + # q(v | x) = Normal(mu(x), sigma(x)) + self.encoder_v = CNN(input_shape, num_outputs=2) + self.f = ( + lambda x: args.std_fixed * torch.ones_like(x) + if args.std_fixed > 0 + else F.softplus(x) + ) + + def model(self) -> Dict[str, Tensor]: + # p(s), sex dist + ps = dist.Bernoulli(logits=self.s_logit).to_event(1) + sex = pyro.sample("sex", ps) + + # p(m), mri_seq dist + pm = dist.Bernoulli(logits=self.m_logit).to_event(1) + mri_seq = pyro.sample("mri_seq", pm) + + # p(a), age flow + pa_base = dist.Normal(self.a_base_loc, self.a_base_scale).to_event(1) + pa = dist.TransformedDistribution(pa_base, self.age_flow) + age = pyro.sample("age", pa) + + # p(b | s, a), brain volume flow + pb_sa_base = dist.Normal(self.b_base_loc, self.b_base_scale).to_event(1) + pb_sa = ConditionalTransformedDistribution( + pb_sa_base, [self.bvol_flow] + ).condition(torch.cat([sex, age], dim=1)) + bvol = pyro.sample("brain_volume", pb_sa) + # _ = self.bvol_transf # register with pyro + + # p(v | b, a), ventricle volume flow + pv_ba_base = dist.Normal(self.v_base_loc, self.v_base_scale).to_event(1) + pv_ba = ConditionalTransformedDistribution( + pv_ba_base, [self.vvol_flow] + ).condition(torch.cat([bvol, age], dim=1)) + vvol = pyro.sample("ventricle_volume", pv_ba) + # _ = self.vvol_transf # register with pyro + + return { + "sex": sex, + "mri_seq": mri_seq, + "age": age, + "brain_volume": bvol, + "ventricle_volume": vvol, + } + + def guide(self, **obs) -> None: + # guide for (optional) semi-supervised learning + pyro.module("FlowPGM", self) + with pyro.plate("observations", obs["x"].shape[0]): + # q(m | x) + if obs["mri_seq"] is None: + m_prob = torch.sigmoid(self.encoder_m(obs["x"])) + m = pyro.sample("mri_seq", dist.Bernoulli(probs=m_prob).to_event(1)) + + # q(v | x) + if obs["ventricle_volume"] is None: + v_loc, v_logscale = self.encoder_v(obs["x"]).chunk(2, dim=-1) + qv_x = dist.Normal(v_loc, self.f(v_logscale)).to_event(1) + obs["ventricle_volume"] = pyro.sample("ventricle_volume", qv_x) + + # q(b | x, v) + if obs["brain_volume"] is None: + b_loc, b_logscale = self.encoder_b( + obs["x"], y=obs["ventricle_volume"] + ).chunk(2, dim=-1) + qb_xv = dist.Normal(b_loc, self.f(b_logscale)).to_event(1) + obs["brain_volume"] = pyro.sample("brain_volume", qb_xv) + + # q(s | x, b) + if obs["sex"] is None: + s_prob = torch.sigmoid( + self.encoder_s(obs["x"], y=obs["brain_volume"]) + ) # .squeeze() + pyro.sample("sex", dist.Bernoulli(probs=s_prob).to_event(1)) + + # q(a | b, v) + if obs["age"] is None: + ctx = torch.cat([obs["brain_volume"], obs["ventricle_volume"]], dim=-1) + a_loc, a_logscale = self.encoder_a(ctx).chunk(2, dim=-1) + pyro.sample("age", dist.Normal(a_loc, self.f(a_logscale)).to_event(1)) + + def model_anticausal(self, **obs) -> None: + # assumes all variables are observed + pyro.module("FlowPGM", self) + with pyro.plate("observations", obs["x"].shape[0]): + # q(v | x) + v_loc, v_logscale = self.encoder_v(obs["x"]).chunk(2, dim=-1) + qv_x = dist.Normal(v_loc, self.f(v_logscale)).to_event(1) + pyro.sample("ventricle_volume_aux", qv_x, obs=obs["ventricle_volume"]) + + # q(b | x, v) + b_loc, b_logscale = self.encoder_b( + obs["x"], y=obs["ventricle_volume"] + ).chunk(2, dim=-1) + qb_xv = dist.Normal(b_loc, self.f(b_logscale)).to_event(1) + pyro.sample("brain_volume_aux", qb_xv, obs=obs["brain_volume"]) + + # q(a | b, v) + ctx = torch.cat([obs["brain_volume"], obs["ventricle_volume"]], dim=-1) + a_loc, a_logscale = self.encoder_a(ctx).chunk(2, dim=-1) + pyro.sample( + "age_aux", + dist.Normal(a_loc, self.f(a_logscale)).to_event(1), + obs=obs["age"], + ) + + # q(s | x, b) + s_prob = torch.sigmoid(self.encoder_s(obs["x"], y=obs["brain_volume"])) + qs_xb = dist.Bernoulli(probs=s_prob).to_event(1) + pyro.sample("sex_aux", qs_xb, obs=obs["sex"]) + + # q(m | x) + m_prob = torch.sigmoid(self.encoder_m(obs["x"])) + qm_x = dist.Bernoulli(probs=m_prob).to_event(1) + pyro.sample("mri_seq_aux", qm_x, obs=obs["mri_seq"]) + + def predict(self, **obs) -> Dict[str, Tensor]: + # q(v | x) + v_loc, v_logscale = self.encoder_v(obs["x"]).chunk(2, dim=-1) + # v_loc = torch.tanh(v_loc) + # q(b | x, v) + b_loc, b_logscale = self.encoder_b(obs["x"], y=obs["ventricle_volume"]).chunk( + 2, dim=-1 + ) + # b_loc = torch.tanh(b_loc) + # q(a | b, v) + ctx = torch.cat([obs["brain_volume"], obs["ventricle_volume"]], dim=-1) + a_loc, a_logscale = self.encoder_a(ctx).chunk(2, dim=-1) + # a_loc = torch.tanh(b_loc) + # q(s | x, b) + s_prob = torch.sigmoid(self.encoder_s(obs["x"], y=obs["brain_volume"])) + # q(m | x) + m_prob = torch.sigmoid(self.encoder_m(obs["x"])) + + return { + "sex": s_prob, + "mri_seq": m_prob, + "age": a_loc, + "brain_volume": b_loc, + "ventricle_volume": v_loc, + } + + def svi_model(self, **obs) -> None: + with pyro.plate("observations", obs["x"].shape[0]): + pyro.condition(self.model, data=obs)() + + def guide_pass(self, **obs) -> None: + pass + + +class MorphoMNISTPGM(BasePGM): + def __init__(self, args): + super().__init__() + self.variables = { + "thickness": "continuous", + "intensity": "continuous", + "digit": "categorical", + } + # priors + self.digit_logits = nn.Parameter(torch.zeros(1, 10)) # uniform prior + for k in ["t", "i"]: # thickness, intensity, standard Gaussian + self.register_buffer(f"{k}_base_loc", torch.zeros(1)) + self.register_buffer(f"{k}_base_scale", torch.ones(1)) + + # constraint, assumes data is [-1,1] normalized + normalize_transform = T.ComposeTransform( + [T.SigmoidTransform(), T.AffineTransform(loc=-1, scale=2)] + ) + + # thickness flow + self.thickness_module = T.ComposeTransformModule( + [T.Spline(1, count_bins=4, order="linear")] + ) + self.thickness_flow = T.ComposeTransform( + [self.thickness_module, normalize_transform] + ) + + # intensity (conditional) flow: thickness -> intensity + intensity_net = DenseNN(1, args.widths, [1, 1], nonlinearity=nn.GELU()) + self.context_nn = ConditionalAffineTransform( + context_nn=intensity_net, event_dim=0 + ) + self.intensity_flow = [self.context_nn, normalize_transform] + + if args.setup != "sup_pgm": + # anticausal predictors + input_shape = (args.input_channels, args.input_res, args.input_res) + # q(t | x, i) = Normal(mu(x, i), sigma(x, i)), 2 outputs: loc & scale + self.encoder_t = CNN(input_shape, num_outputs=2, context_dim=1, width=8) + # q(i | x) = Normal(mu(x), sigma(x)) + self.encoder_i = CNN(input_shape, num_outputs=2, width=8) + # q(y | x) = Categorical(pi(x)) + self.encoder_y = CNN(input_shape, num_outputs=10, width=8) + self.f = ( + lambda x: args.std_fixed * torch.ones_like(x) + if args.std_fixed > 0 + else F.softplus(x) + ) + + def model(self) -> Dict[str, Tensor]: + pyro.module("MorphoMNISTPGM", self) + # p(y), digit label prior dist + py = dist.OneHotCategorical( + probs=F.softmax(self.digit_logits, dim=-1) + ) # .to_event(1) + # with pyro.poutine.scale(scale=0.05): + digit = pyro.sample("digit", py) + + # p(t), thickness flow + pt_base = dist.Normal(self.t_base_loc, self.t_base_scale).to_event(1) + pt = dist.TransformedDistribution(pt_base, self.thickness_flow) + thickness = pyro.sample("thickness", pt) + + # p(i | t), intensity conditional flow + pi_t_base = dist.Normal(self.i_base_loc, self.i_base_scale).to_event(1) + pi_t = ConditionalTransformedDistribution( + pi_t_base, self.intensity_flow + ).condition(thickness) + intensity = pyro.sample("intensity", pi_t) + _ = self.context_nn + + return {"thickness": thickness, "intensity": intensity, "digit": digit} + + def guide(self, **obs) -> None: + # guide for (optional) semi-supervised learning + with pyro.plate("observations", obs["x"].shape[0]): + # q(i | x) + if obs["intensity"] is None: + i_loc, i_logscale = self.encoder_i(obs["x"]).chunk(2, dim=-1) + qi_t = dist.Normal(torch.tanh(i_loc), self.f(i_logscale)).to_event(1) + obs["intensity"] = pyro.sample("intensity", qi_t) + + # q(t | x, i) + if obs["thickness"] is None: + t_loc, t_logscale = self.encoder_t(obs["x"], y=obs["intensity"]).chunk( + 2, dim=-1 + ) + qt_x = dist.Normal(torch.tanh(t_loc), self.f(t_logscale)).to_event(1) + obs["thickness"] = pyro.sample("thickness", qt_x) + + # q(y | x) + if obs["digit"] is None: + y_prob = F.softmax(self.encoder_y(obs["x"]), dim=-1) + qy_x = dist.OneHotCategorical(probs=y_prob) # .to_event(1) + pyro.sample("digit", qy_x) + + def model_anticausal(self, **obs) -> None: + # assumes all variables are observed & continuous ones are in [-1,1] + pyro.module("MorphoMNISTPGM", self) + with pyro.plate("observations", obs["x"].shape[0]): + # q(t | x, i) + t_loc, t_logscale = self.encoder_t(obs["x"], y=obs["intensity"]).chunk( + 2, dim=-1 + ) + qt_x = dist.Normal(torch.tanh(t_loc), self.f(t_logscale)).to_event(1) + pyro.sample("thickness_aux", qt_x, obs=obs["thickness"]) + + # q(i | x) + i_loc, i_logscale = self.encoder_i(obs["x"]).chunk(2, dim=-1) + qi_t = dist.Normal(torch.tanh(i_loc), self.f(i_logscale)).to_event(1) + pyro.sample("intensity_aux", qi_t, obs=obs["intensity"]) + + # q(y | x) + y_prob = F.softmax(self.encoder_y(obs["x"]), dim=-1) + qy_x = dist.OneHotCategorical(probs=y_prob) # .to_event(1) + pyro.sample("digit_aux", qy_x, obs=obs["digit"]) + + def predict(self, **obs) -> Dict[str, Tensor]: + # q(t | x, i) + t_loc, t_logscale = self.encoder_t(obs["x"], y=obs["intensity"]).chunk( + 2, dim=-1 + ) + t_loc = torch.tanh(t_loc) + # q(i | x) + i_loc, i_logscale = self.encoder_i(obs["x"]).chunk(2, dim=-1) + i_loc = torch.tanh(i_loc) + # q(y | x) + y_prob = F.softmax(self.encoder_y(obs["x"]), dim=-1) + return {"thickness": t_loc, "intensity": i_loc, "digit": y_prob} + + def svi_model(self, **obs) -> None: + with pyro.plate("observations", obs["x"].shape[0]): + pyro.condition(self.model, data=obs)() + + def guide_pass(self, **obs) -> None: + pass + + +class ChestPGM(BasePGM): + def __init__(self, args: Hparams): + super().__init__() + self.variables = { + "race": "categorical", + "sex": "binary", + "finding": "binary", + "age": "continuous", + } + # Discrete variables that are not root nodes + self.discrete_variables = {"finding": "binary"} + # define base distributions + for k in ["a"]: # , "f"]: + self.register_buffer(f"{k}_base_loc", torch.zeros(1)) + self.register_buffer(f"{k}_base_scale", torch.ones(1)) + # age spline flow + self.age_flow_components = T.ComposeTransformModule([T.Spline(1)]) + # self.age_constraints = T.ComposeTransform([ + # T.AffineTransform(loc=4.09541458484, scale=0.32548387126), + # T.ExpTransform()]) + self.age_flow = T.ComposeTransform( + [ + self.age_flow_components, + # self.age_constraints, + ] + ) + # Finding (conditional) via MLP, a -> f + finding_net = DenseNN(1, [8, 16], param_dims=[2], nonlinearity=nn.Sigmoid()) + self.finding_transform_GumbelMax = ConditionalGumbelMax( + context_nn=finding_net, event_dim=0 + ) + # log space for sex and race + self.sex_logit = nn.Parameter(np.log(1 / 2) * torch.ones(1)) + self.race_logits = nn.Parameter(np.log(1 / 3) * torch.ones(1, 3)) + + input_shape = (args.input_channels, args.input_res, args.input_res) + + if args.enc_net == "cnn": + # q(s | x) ~ Bernoulli(f(x)) + self.encoder_s = CNN(input_shape, num_outputs=1) + # q(r | x) ~ OneHotCategorical(logits=f(x)) + self.encoder_r = CNN(input_shape, num_outputs=3) + # q(f | x) ~ Bernoulli(f(x)) + self.encoder_f = CNN(input_shape, num_outputs=1) + # q(a | x, f) ~ Normal(mu(x), sigma(x)) + self.encoder_a = CNN(input_shape, num_outputs=1, context_dim=1) + + def model(self) -> Dict[str, Tensor]: + pyro.module("ChestPGM", self) + # p(s), sex dist + ps = dist.Bernoulli(logits=self.sex_logit).to_event(1) + sex = pyro.sample("sex", ps) + + # p(a), age flow + pa_base = dist.Normal(self.a_base_loc, self.a_base_scale).to_event(1) + pa = dist.TransformedDistribution(pa_base, self.age_flow) + age = pyro.sample("age", pa) + # age_ = self.age_constraints.inv(age) + _ = self.age_flow_components # register with pyro + + # p(r), race dist + pr = dist.OneHotCategorical(logits=self.race_logits) # .to_event(1) + race = pyro.sample("race", pr) + + # p(f | a), finding as OneHotCategorical conditioned on age + # finding_dist_base = dist.Gumbel(self.f_base_loc, self.f_base_scale).to_event(1) + finding_dist_base = dist.Gumbel(torch.zeros(1), torch.ones(1)).to_event(1) + + finding_dist = ConditionalTransformedDistributionGumbelMax( + finding_dist_base, [self.finding_transform_GumbelMax] + ).condition(age) + finding = pyro.sample("finding", finding_dist) + + return { + "sex": sex, + "race": race, + "age": age, + "finding": finding, + } + + def guide(self, **obs) -> None: + with pyro.plate("observations", obs["x"].shape[0]): + # q(s | x) + if obs["sex"] is None: + s_prob = torch.sigmoid(self.encoder_s(obs["x"])) + pyro.sample("sex", dist.Bernoulli(probs=s_prob).to_event(1)) + # q(r | x) + if obs["race"] is None: + r_probs = F.softmax(self.encoder_r(obs["x"]), dim=-1) + qr_x = dist.OneHotCategorical(probs=r_probs) # .to_event(1) + pyro.sample("race", qr_x) + # q(f | x) + if obs["finding"] is None: + f_prob = torch.sigmoid(self.encoder_f(obs["x"])) + qf_x = dist.Bernoulli(probs=f_prob).to_event(1) + obs["finding"] = pyro.sample("finding", qf_x) + # q(a | x, f) + if obs["age"] is None: + a_loc, a_logscale = self.encoder_a(obs["x"], y=obs["finding"]).chunk( + 2, dim=-1 + ) + qa_xf = dist.Normal(a_loc, self.f(a_logscale)).to_event(1) + pyro.sample("age_aux", qa_xf) + + def model_anticausal(self, **obs) -> None: + # assumes all variables are observed, train classfiers + pyro.module("ChestPGM", self) + with pyro.plate("observations", obs["x"].shape[0]): + # q(s | x) + s_prob = torch.sigmoid(self.encoder_s(obs["x"])) + qs_x = dist.Bernoulli(probs=s_prob).to_event(1) + # with pyro.poutine.scale(scale=0.8): + pyro.sample("sex_aux", qs_x, obs=obs["sex"]) + + # q(r | x) + r_probs = F.softmax(self.encoder_r(obs["x"]), dim=-1) + qr_x = dist.OneHotCategorical(probs=r_probs) # .to_event(1) + # with pyro.poutine.scale(scale=0.5): + pyro.sample("race_aux", qr_x, obs=obs["race"]) + + # q(f | x) + f_prob = torch.sigmoid(self.encoder_f(obs["x"])) + qf_x = dist.Bernoulli(probs=f_prob).to_event(1) + pyro.sample("finding_aux", qf_x, obs=obs["finding"]) + + # q(a | x, f) + a_loc, a_logscale = self.encoder_a(obs["x"], y=obs["finding"]).chunk( + 2, dim=-1 + ) + qa_xf = dist.Normal(a_loc, self.f(a_logscale)).to_event(1) + # with pyro.poutine.scale(scale=2): + pyro.sample("age_aux", qa_xf, obs=obs["age"]) + + def predict(self, **obs) -> Dict[str, Tensor]: + # q(s | x) + s_prob = torch.sigmoid(self.encoder_s(obs["x"])) + # q(r | x) + r_probs = F.softmax(self.encoder_r(obs["x"]), dim=-1) + # q(f | x) + f_prob = torch.sigmoid(self.encoder_f(obs["x"])) + # q(a | x, f) + a_loc, _ = self.encoder_a(obs["x"], y=obs["finding"]).chunk(2, dim=-1) + + return { + "sex": s_prob, + "race": r_probs, + "finding": f_prob, + "age": a_loc, + } + + def svi_model(self, **obs) -> None: + with pyro.plate("observations", obs["x"].shape[0]): + pyro.condition(self.model, data=obs)() + + def guide_pass(self, **obs) -> None: + pass diff --git a/pgm/layers.py b/pgm/layers.py new file mode 100644 index 0000000000000000000000000000000000000000..86df63db746b39ce9faa1ab09017100282dfe253 --- /dev/null +++ b/pgm/layers.py @@ -0,0 +1,260 @@ +import pyro +import torch +import torch.nn as nn +import torch.nn.functional as F + +from typing import Dict +from pyro.distributions.conditional import ( + ConditionalTransformModule, + ConditionalTransformedDistribution, + TransformedDistribution, +) +from pyro.distributions.torch_distribution import TorchDistributionMixin + +from torch.distributions import constraints +from torch.distributions.utils import _sum_rightmost +from torch.distributions.transforms import Transform + + +class ConditionalAffineTransform(ConditionalTransformModule): + def __init__(self, context_nn, event_dim=0, **kwargs): + super().__init__(**kwargs) + self.event_dim = event_dim + self.context_nn = context_nn + + def condition(self, context): + loc, log_scale = self.context_nn(context) + return torch.distributions.transforms.AffineTransform( + loc, log_scale.exp(), event_dim=self.event_dim + ) + + +class MLP(nn.Module): + def __init__(self, num_inputs=1, width=32, num_outputs=1): + super().__init__() + activation = nn.LeakyReLU() + self.mlp = nn.Sequential( + nn.Linear(num_inputs, width, bias=False), + nn.BatchNorm1d(width), + activation, + nn.Linear(width, width, bias=False), + nn.BatchNorm1d(width), + activation, + nn.Linear(width, num_outputs), + ) + + def forward(self, x): + return self.mlp(x) + + +class CNN(nn.Module): + def __init__(self, in_shape=(1, 192, 192), width=16, num_outputs=1, context_dim=0): + super().__init__() + in_channels = in_shape[0] + res = in_shape[1] + s = 2 if res > 64 else 1 + activation = nn.LeakyReLU() + self.cnn = nn.Sequential( + nn.Conv2d(in_channels, width, 7, s, 3, bias=False), + nn.BatchNorm2d(width), + activation, + (nn.MaxPool2d(2, 2) if res > 32 else nn.Identity()), + nn.Conv2d(width, 2 * width, 3, 2, 1, bias=False), + nn.BatchNorm2d(2 * width), + activation, + nn.Conv2d(2 * width, 2 * width, 3, 1, 1, bias=False), + nn.BatchNorm2d(2 * width), + activation, + nn.Conv2d(2 * width, 4 * width, 3, 2, 1, bias=False), + nn.BatchNorm2d(4 * width), + activation, + nn.Conv2d(4 * width, 4 * width, 3, 1, 1, bias=False), + nn.BatchNorm2d(4 * width), + activation, + nn.Conv2d(4 * width, 8 * width, 3, 2, 1, bias=False), + nn.BatchNorm2d(8 * width), + activation, + ) + self.fc = nn.Sequential( + nn.Linear(8 * width + context_dim, 8 * width, bias=False), + nn.BatchNorm1d(8 * width), + activation, + nn.Linear(8 * width, num_outputs), + ) + + def forward(self, x, y=None): + x = self.cnn(x) + x = x.mean(dim=(-2, -1)) # avg pool + if y is not None: + x = torch.cat([x, y], dim=-1) + return self.fc(x) + + +class ArgMaxGumbelMax(Transform): + r"""ArgMax as Transform, but inv conditioned on logits""" + + def __init__(self, logits, event_dim=0, cache_size=0): + super(ArgMaxGumbelMax, self).__init__(cache_size=cache_size) + self.logits = logits + self._event_dim = event_dim + self._categorical = pyro.distributions.torch.Categorical( + logits=self.logits + ).to_event(0) + + @property + def event_dim(self): + return self._event_dim + + def __call__(self, gumbels): + """ + Computes the forward transform + """ + assert self.logits != None, "Logits not defined." + + if self._cache_size == 0: + return self._call(gumbels) + + y = self._call(gumbels) + return y + + def _call(self, gumbels): + """ + Abstract method to compute forward transformation. + """ + assert self.logits != None, "Logits not defined." + y = gumbels + self.logits + # print(f'y: {y}') + # print(f'logits: {self.logits}') + return y.argmax(-1, keepdim=True) + + @property + def domain(self): + """ " + Domain of input(gumbel variables), Real + """ + if self.event_dim == 0: + return constraints.real + return constraints.independent(constraints.real, self.event_dim) + + @property + def codomain(self): + """ " + Domain of output(categorical variables), should be natural numbers, but set to Real for now + """ + if self.event_dim == 0: + return constraints.real + return constraints.independent(constraints.real, self.event_dim) + + def inv(self, k): + """Infer the gumbels noises given k and logits.""" + assert self.logits != None, "Logits not defined." + + uniforms = torch.rand( + self.logits.shape, dtype=self.logits.dtype, device=self.logits.device + ) + gumbels = -((-(uniforms.log())).log()) + # print(f'gumbels: {gumbels.size()}, {gumbels.dtype}') + # (batch_size, num_classes) mask to select kth class + # print(f'k : {k.size()}') + mask = F.one_hot( + k.squeeze(-1).to(torch.int64), num_classes=self.logits.shape[-1] + ) + # print(f'mask: {mask.size()}, {mask.dtype}') + # (batch_size, 1) select topgumbel for truncation of other classes + topgumbel = (mask * gumbels).sum(dim=-1, keepdim=True) - ( + mask * self.logits + ).sum(dim=-1, keepdim=True) + mask = 1 - mask # invert mask to select other != k classes + g = gumbels + self.logits + # (batch_size, num_classes) + epsilons = -torch.log(mask * torch.exp(-g) + torch.exp(-topgumbel)) - ( + mask * self.logits + ) + return epsilons + + def log_abs_det_jacobian(self, x, y): + """We use the log_abs_det_jacobian to account for the categorical prob + x: Gumbels; y: argmax(x+logits) + P(y) = softmax + """ + # print(f"logits: {torch.log(F.softmax(self.logits, dim=-1)).size()}") + # print(f'y: {y.size()} ') + # print(f"log_abs_det_jacobian: {self._categorical.log_prob(y.squeeze(-1)).unsqueeze(-1).size()}") + return -self._categorical.log_prob(y.squeeze(-1)).unsqueeze(-1) + + +class ConditionalGumbelMax(ConditionalTransformModule): + r"""Given gumbels+logits, output the OneHot Categorical""" + + def __init__(self, context_nn, event_dim=0, **kwargs): + # The logits_nn which predict the logits given ages: + super().__init__(**kwargs) + self.context_nn = context_nn + self.event_dim = event_dim + + def condition(self, context): + """Given context (age), output the Categorical results""" + logits = self.context_nn( + context + ) # The logits for calculating argmax(Gumbel + logits) + return ArgMaxGumbelMax(logits) + + def _logits(self, context): + """Return logits given context""" + return self.context_nn(context) + + @property + def domain(self): + """ " + Domain of input(gumbel variables), Real + """ + if self.event_dim == 0: + return constraints.real + return constraints.independent(constraints.real, self.event_dim) + + @property + def codomain(self): + """ " + Domain of output(categorical variables), should be natural numbers, but set to Real for now + """ + if self.event_dim == 0: + return constraints.real + return constraints.independent(constraints.real, self.event_dim) + + +class TransformedDistributionGumbelMax(TransformedDistribution, TorchDistributionMixin): + r"""Define a TransformedDistribution class for Gumbel max""" + arg_constraints: Dict[str, constraints.Constraint] = {} + + def log_prob(self, value): + """ + We do not use the log_prob() of the base Gumbel distribution, because the likelihood for + each class for Gumbel Max sampling is determined by the logits. + """ + # print("This happens") + if self._validate_args: + self._validate_sample(value) + event_dim = len(self.event_shape) + log_prob = 0.0 + y = value + for transform in reversed(self.transforms): + x = transform.inv(y) + event_dim += transform.domain.event_dim - transform.codomain.event_dim + log_prob = log_prob - _sum_rightmost( + transform.log_abs_det_jacobian(x, y), + event_dim - transform.domain.event_dim, + ) + y = x + # print(f"log_prob: {log_prob.size()}") + return log_prob + + +class ConditionalTransformedDistributionGumbelMax(ConditionalTransformedDistribution): + def condition(self, context): + base_dist = self.base_dist.condition(context) + transforms = [t.condition(context) for t in self.transforms] + # return TransformedDistribution(base_dist, transforms) + return TransformedDistributionGumbelMax(base_dist, transforms) + + def clear_cache(self): + pass diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000000000000000000000000000000000000..54a7c152434c36252381181eb5760009d522d7cd --- /dev/null +++ b/requirements.txt @@ -0,0 +1,10 @@ +gradio==3.27.0 +matplotlib==3.7.1 +networkx==2.8.4 +numpy==1.24.3 +pandas==1.5.3 +Pillow==9.3.0 +pyro_ppl==1.8.4 +scikit_image==0.20.0 +tqdm==4.65.0 +torchvision diff --git a/vae.py b/vae.py new file mode 100644 index 0000000000000000000000000000000000000000..d8c4ed2836b3ee3c4305217a68b14dea92e92d0f --- /dev/null +++ b/vae.py @@ -0,0 +1,517 @@ +import numpy as np +import torch +import torch.nn as nn +import torch.nn.functional as F +import torch.distributions as dist + +EPS = -9 # minimum logscale + + +@torch.jit.script +def gaussian_kl(q_loc, q_logscale, p_loc, p_logscale): + return ( + -0.5 + + p_logscale + - q_logscale + + 0.5 + * (q_logscale.exp().pow(2) + (q_loc - p_loc).pow(2)) + / p_logscale.exp().pow(2) + ) + + +@torch.jit.script +def sample_gaussian(loc, logscale): + return loc + logscale.exp() * torch.randn_like(loc) + + +class Block(nn.Module): + def __init__( + self, + in_width, + bottleneck, + out_width, + kernel_size=3, + residual=True, + down_rate=None, + version=None, + ): + super().__init__() + self.d = down_rate + self.residual = residual + padding = 0 if kernel_size == 1 else 1 + + if version == "light": # for ukbb + activation = nn.ReLU() + self.conv = nn.Sequential( + activation, + nn.Conv2d(in_width, bottleneck, kernel_size, 1, padding), + activation, + nn.Conv2d(bottleneck, out_width, kernel_size, 1, padding), + ) + else: # for morphomnist + activation = nn.GELU() + self.conv = nn.Sequential( + activation, + nn.Conv2d(in_width, bottleneck, 1, 1), + activation, + nn.Conv2d(bottleneck, bottleneck, kernel_size, 1, padding), + activation, + nn.Conv2d(bottleneck, bottleneck, kernel_size, 1, padding), + activation, + nn.Conv2d(bottleneck, out_width, 1, 1), + ) + + if self.residual and (self.d or in_width > out_width): + self.width_proj = nn.Conv2d(in_width, out_width, 1, 1) + + def forward(self, x): + out = self.conv(x) + if self.residual: + if x.shape[1] != out.shape[1]: + x = self.width_proj(x) + out = x + out + if self.d: + if isinstance(self.d, float): + out = F.adaptive_avg_pool2d(out, int(out.shape[-1] / self.d)) + else: + out = F.avg_pool2d(out, kernel_size=self.d, stride=self.d) + return out + + +class Encoder(nn.Module): + def __init__(self, args): + super().__init__() + # parse architecture + stages = [] + for i, stage in enumerate(args.enc_arch.split(",")): + start = stage.index("b") + 1 + end = stage.index("d") if "d" in stage else None + n_blocks = int(stage[start:end]) + + if i == 0: # define network stem + if n_blocks == 0 and "d" not in stage: + print("Using stride=2 conv encoder stem.") + self.stem = nn.Conv2d( + args.input_channels, + args.widths[1], + kernel_size=7, + stride=2, + padding=3, + ) + continue + else: + self.stem = nn.Conv2d( + args.input_channels, + args.widths[0], + kernel_size=7, + stride=1, + padding=3, + ) + + stages += [(args.widths[i], None) for _ in range(n_blocks)] + if "d" in stage: # downsampling block + stages += [(args.widths[i + 1], int(stage[stage.index("d") + 1]))] + blocks = [] + for i, (width, d) in enumerate(stages): + prev_width = stages[max(0, i - 1)][0] + bottleneck = int(prev_width / args.bottleneck) + blocks.append( + Block(prev_width, bottleneck, width, down_rate=d, version=args.vr) + ) + # scale weights of last conv layer in each block + for b in blocks: + b.conv[-1].weight.data *= np.sqrt(1 / len(blocks)) + self.blocks = nn.ModuleList(blocks) + + def forward(self, x): + x = self.stem(x) + acts = {} + for block in self.blocks: + x = block(x) + res = x.shape[2] + if res % 2 and res > 1: # pad if odd resolution + x = F.pad(x, [0, 1, 0, 1]) + acts[x.size(-1)] = x + return acts + + +class DecoderBlock(nn.Module): + def __init__(self, args, in_width, out_width, resolution): + super().__init__() + bottleneck = int(in_width / args.bottleneck) + self.res = resolution + self.stochastic = self.res <= args.z_max_res + self.z_dim = args.z_dim + self.cond_prior = args.cond_prior + k = 3 if self.res > 2 else 1 + + if self.cond_prior: # conditional prior + p_in_width = in_width + args.context_dim + else: # exogenous prior + p_in_width = in_width + # self.z_feat_proj = nn.Conv2d(self.z_dim + in_width, out_width, 1) + self.z_feat_proj = nn.Conv2d(self.z_dim + in_width, out_width, 1) + + self.prior = Block( + p_in_width, + bottleneck, + 2 * self.z_dim + in_width, + kernel_size=k, + residual=False, + version=args.vr, + ) + if self.stochastic: + self.posterior = Block( + 2 * in_width + args.context_dim, + bottleneck, + 2 * self.z_dim, + kernel_size=k, + residual=False, + version=args.vr, + ) + self.z_proj = nn.Conv2d(self.z_dim + args.context_dim, in_width, 1) + self.conv = Block( + in_width, bottleneck, out_width, kernel_size=k, version=args.vr + ) + + def forward_prior(self, z, pa=None, t=None): + if self.cond_prior: + z = torch.cat([z, pa], dim=1) + z = self.prior(z) + p_loc = z[:, : self.z_dim, ...] + p_logscale = z[:, self.z_dim : 2 * self.z_dim, ...] + p_features = z[:, 2 * self.z_dim :, ...] + if t is not None: + p_logscale = p_logscale + torch.tensor(t).to(z.device).log() + return p_loc, p_logscale, p_features + + def forward_posterior(self, z, pa, x, t=None): + h = torch.cat([z, pa, x], dim=1) + q_loc, q_logscale = self.posterior(h).chunk(2, dim=1) + if t is not None: + q_logscale = q_logscale + torch.tensor(t).to(z.device).log() + return q_loc, q_logscale + + +class Decoder(nn.Module): + def __init__(self, args): + super().__init__() + # parse architecture + stages = [] + for i, stage in enumerate(args.dec_arch.split(",")): + res = int(stage.split("b")[0]) + n_blocks = int(stage[stage.index("b") + 1 :]) + stages += [(res, args.widths[::-1][i]) for _ in range(n_blocks)] + self.blocks = [] + for i, (res, width) in enumerate(stages): + next_width = stages[min(len(stages) - 1, i + 1)][1] + self.blocks.append(DecoderBlock(args, width, next_width, res)) + self._scale_weights() + self.blocks = nn.ModuleList(self.blocks) + # bias params + self.all_res = list(np.unique([stages[i][0] for i in range(len(stages))])) + bias = [] + for i, res in enumerate(self.all_res): + if res <= args.bias_max_res: + bias.append( + nn.Parameter(torch.zeros(1, args.widths[::-1][i], res, res)) + ) + self.bias = nn.ParameterList(bias) + self.cond_prior = args.cond_prior + self.is_drop_cond = True if "mnist" in args.hps else False # hacky + + def _scale_weights(self): + scale = np.sqrt(1 / len(self.blocks)) + for b in self.blocks: + b.z_proj.weight.data *= scale + b.conv.conv[-1].weight.data *= scale + b.prior.conv[-1].weight.data *= 0.0 + + def forward(self, parents, x=None, t=None, abduct=False, latents=[]): + # learnt params for each resolution r + bias = {r.shape[2]: r for r in self.bias} + h = bias[1].repeat(parents.shape[0], 1, 1, 1) # h_init + z = h # for exogenous prior + # for conditioning dropout, stochastic path (p1), deterministic path (p2) + p1, p2 = self.drop_cond() if (self.training and self.cond_prior) else (1, 1) + + stats = [] + for i, block in enumerate(self.blocks): + res = block.res # current block resolution, e.g. 64x64 + pa = parents[..., :res, :res].clone() # select parents @ res + + if ( + self.is_drop_cond + ): # for morphomnist w/ conditioning dropout. Hacky, clean up later + pa_drop1 = pa.clone() + pa_drop1[:, 2:, ...] = pa_drop1[:, 2:, ...] * p1 + pa_drop2 = pa.clone() + pa_drop2[:, 2:, ...] = pa_drop2[:, 2:, ...] * p2 + else: # for ukbb + pa_drop1 = pa_drop2 = pa + + if h.size(-1) < res: # upsample previous layer output + b = bias[res] if res in bias.keys() else 0 # broadcasting + h = b + F.interpolate(h, scale_factor=res / h.shape[-1]) + + if block.cond_prior: # conditional prior: p(z_i | z_ 0: # if std_init=0, random init weights for diag cov + nn.init.zeros_(self.x_logscale.weight) + nn.init.constant_(self.x_logscale.bias, np.log(args.std_init)) + + covariance = args.x_like.split("_")[0] + if covariance == "fixed": + self.x_logscale.weight.requires_grad = False + self.x_logscale.bias.requires_grad = False + elif covariance == "shared": + self.x_logscale.weight.requires_grad = False + self.x_logscale.bias.requires_grad = True + elif covariance == "diag": + self.x_logscale.weight.requires_grad = True + self.x_logscale.bias.requires_grad = True + else: + NotImplementedError(f"{args.x_like} not implemented.") + + def forward(self, h, x=None, t=None): + loc, logscale = self.x_loc(h), self.x_logscale(h).clamp(min=EPS) + + # for RGB inputs + # if hasattr(self, 'channel_coeffs'): + # coeff = torch.tanh(self.channel_coeffs(h)) + # if x is None: # inference + # # loc = loc + logscale.exp() * torch.randn_like(loc) # random sampling + # f = lambda x: torch.clamp(x, min=-1, max=1) + # loc_red = f(loc[:,0,...]) + # loc_green = f(loc[:,1,...] + coeff[:,0,...] * loc_red) + # loc_blue = f(loc[:,2,...] + coeff[:,1,...] * loc_red + coeff[:,2,...] * loc_green) + # else: # training + # loc_red = loc[:,0,...] + # loc_green = loc[:,1,...] + coeff[:,0,...] * x[:,0,...] + # loc_blue = loc[:,2,...] + coeff[:,1,...] * x[:,0,...] + coeff[:,2,...] * x[:,1,...] + + # loc = torch.cat([loc_red.unsqueeze(1), + # loc_green.unsqueeze(1), loc_blue.unsqueeze(1)], dim=1) + + if t is not None: + logscale = logscale + torch.tensor(t).to(h.device).log() + return loc, logscale + + def approx_cdf(self, x): + return 0.5 * ( + 1.0 + torch.tanh(np.sqrt(2.0 / np.pi) * (x + 0.044715 * torch.pow(x, 3))) + ) + + def nll(self, h, x): + loc, logscale = self.forward(h, x) + centered_x = x - loc + inv_stdv = torch.exp(-logscale) + plus_in = inv_stdv * (centered_x + 1.0 / 255.0) + cdf_plus = self.approx_cdf(plus_in) + min_in = inv_stdv * (centered_x - 1.0 / 255.0) + cdf_min = self.approx_cdf(min_in) + log_cdf_plus = torch.log(cdf_plus.clamp(min=1e-12)) + log_one_minus_cdf_min = torch.log((1.0 - cdf_min).clamp(min=1e-12)) + cdf_delta = cdf_plus - cdf_min + log_probs = torch.where( + x < -0.999, + log_cdf_plus, + torch.where( + x > 0.999, log_one_minus_cdf_min, torch.log(cdf_delta.clamp(min=1e-12)) + ), + ) + return -1.0 * log_probs.mean(dim=(1, 2, 3)) + + def sample(self, h, return_loc=True, t=None): + if return_loc: + x, logscale = self.forward(h) + else: + loc, logscale = self.forward(h, t) + x = loc + torch.exp(logscale) * torch.randn_like(loc) + x = torch.clamp(x, min=-1.0, max=1.0) + return x, logscale.exp() + + +class HVAE(nn.Module): + def __init__(self, args): + super().__init__() + args.vr = "light" if "ukbb" in args.hps else None # hacky + self.encoder = Encoder(args) + self.decoder = Decoder(args) + if args.x_like.split("_")[1] == "dgauss": + self.likelihood = DGaussNet(args) + else: + NotImplementedError(f"{args.x_like} not implemented.") + self.cond_prior = args.cond_prior + self.free_bits = args.kl_free_bits + + def forward(self, x, parents, beta=1): + acts = self.encoder(x) + h, stats = self.decoder(parents=parents, x=acts) + nll_pp = self.likelihood.nll(h, x) + if self.free_bits > 0: + free_bits = torch.tensor(self.free_bits).type_as(nll_pp) + kl_pp = 0.0 + for stat in stats: + kl_pp += torch.maximum( + free_bits, stat["kl"].sum(dim=(2, 3)).mean(dim=0) + ).sum() + else: + kl_pp = torch.zeros_like(nll_pp) + for i, stat in enumerate(stats): + kl_pp += stat["kl"].sum(dim=(1, 2, 3)) + kl_pp = kl_pp / np.prod(x.shape[1:]) # per pixel + elbo = nll_pp.mean() + beta * kl_pp.mean() # negative elbo (free energy) + return dict(elbo=elbo, nll=nll_pp.mean(), kl=kl_pp.mean()) + + def sample(self, parents, return_loc=True, t=None): + h, _ = self.decoder(parents=parents, t=t) + return self.likelihood.sample(h, return_loc, t=t) + + def abduct(self, x, parents, cf_parents=None, alpha=0.5, t=None): + acts = self.encoder(x) + _, q_stats = self.decoder( + x=acts, parents=parents, abduct=True, t=t + ) # q(z|x,pa) + q_stats = [s["z"] for s in q_stats] + + if self.cond_prior and cf_parents is not None: + _, p_stats = self.decoder(parents=cf_parents, abduct=True, t=t) # p(z|pa*) + p_stats = [s["z"] for s in p_stats] + + cf_zs = [] + t = torch.tensor(t).to(x.device) # z* sampling temperature + + for i in range(len(q_stats)): + # from z_i ~ q(z_i | z_{